SSD Caching (dm-cache) Setting

SSD 캐싱 (dm-cache) 적용

약 73T 정도 되는 스토리지의 Read I/O 에 부하가 많이 발생하여 성능을 높이기 위해 dm-cache 를 이용하여 SSD cache 를 적용 해 보았습니다.


작업 환경

OS : CentOS 7
SSD : 1T m2 nvme x2 (/dev/nvme0n1, /dev/nvme1n1)
HDD : 73T Raid 6 (/dev/sda)

의존성 패키지 설치

[root@localhost ~]# yum install lvm2

lvm.conf 파일 편집
: vi /etc/lvm/lvm.conf

issue_discards=1

구성 저장 및 리부팅

[root@localhost ~]# dracut -f
[root@localhost ~]# sync
[root@localhost ~]# reboot

LVM PV 생성

[root@localhost ~]# pvcreate /dev/sda
[root@localhost ~]# pvcreate /dev/nvme0n1
[root@localhost ~]# pvcreate /dev/nvme1n1

만약 PV 생성시에 Device /dev/sda(nvme0n1 or nvme1n1) excluded by a filter 문제가 발생할 경우 dd if=/dev/zero of=/dev/sda bs=512 count=1 명령어를 이용하여 초기화 해 주면 됩니다. 4K sector 로 구성할 경우에는 bs=4096 으로 합니다.

LVM VG 생성

[root@localhost ~]# vgcreate vg_data1 /dev/sda /dev/nvme0n1 /dev/nvme1n1

LVM PVdisplay 확인

PV 정보를 확인하는 이유는 LV 생성시 필요한 Free PE 정보를 확인하기 위해서 입니다.

[root@localhost ~]# pvdisplay 
  --- Physical volume ---
  PV Name               /dev/sda
  VG Name               vg_data1
  PV Size               <72.77 TiB / not usable 4.00 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              19075919
  Free PE               19075919
  Allocated PE          0
  PV UUID               
   
  --- Physical volume ---
  PV Name               /dev/nvme0n1
  VG Name               vg_data1
  PV Size               <953.87 GiB / not usable <2.34 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              244190
  Free PE               244190
  Allocated PE          0
  PV UUID               
   
  --- Physical volume ---
  PV Name               /dev/nvme1n1
  VG Name               vg_data1
  PV Size               <953.87 GiB / not usable <2.34 MiB
  Allocatable           yes (but full)
  PE Size               4.00 MiB
  Total PE              244190
  Free PE               244190
  Allocated PE          0
  PV UUID

LVM LV 생성

[root@localhost ~]# lvcreate -l 19071823 -n lv_data1 vg_data1 /dev/sda
[root@localhost ~]# lvcreate -i2 -L 16G -n lv_cache_meta1 vg_data1 /dev/nvme0n1 /dev/nvme1n1
[root@localhost ~]# lvcreate -i2 -I2048 -l 100%FREE -n lv_cache1 vg_data1 /dev/nvme0n1 /dev/nvme1n1

위에서 확인한 PE 정보에서 cache가 적용될 때 필요한 값을 제외한 나머지 정보를 맨 윗줄 처럼 -l 다음에 입력 합니다. 위의 값은 Free PE 에서 4096 값을 제외한 값입니다.

아래는 lvcreate 명령어에서 사용한 옵션에 대한 설명입니다.

-L : LV 사이즈를 지정하는 옵션으로 MB, GB, TB 등 단위로 붙여 지정 가능하다.
-l : LV 사이즈를 지정하는 옵션으로 PE의 개수로 용량을 지정한다.
-n : LV 이름일 지정한다.
-i : LV를 stripe로 구성하며 stripe의 수를 지정한다.
-I : LV stripe에서 저장되는 크기이다.

LVM Cache 설정

[root@localhost ~]# lvconvert --type cache-pool /dev/vg_data1/lv_cache1 --poolmetadata /dev/vg_data1/lv_cache_meta1 --chunksize 2048
[root@localhost ~]# lvconvert --type cache /dev/vg_data1/lv_data1 --cachepool /dev/vg_data1/lv_cache1

LV cache 여부 확인

[root@localhost ~]# dmsetup status
vg_data1-lv_cache1_cdata: 0 3967254528 striped 2 259:1 259:0 1 AA
vg_data1-lv_cache1_cmeta: 0 33554432 striped 2 259:1 259:0 1 AA
vg_data1-lv_data1_corig: 0 156236374016 linear 
vg_data1-lv_data1: 0 156236374016 cache 8 3170/4161600 4096 968567/968568 748559967 437094376 162609995 381970069 99305550 100272168 0 2 metadata2 writethrough 2 migration_threshold 2048 smq 0 rw -

fdisk 로 생성된 LV 확인

[root@localhost ~]# fdisk -l
Disk /dev/mapper/vg_data1-lv_data1: 79993.0 GB, 79993023496192 bytes, 156236374016 sectors
Units = sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 4096 bytes
I/O size (minimum/optimal): 2097152 bytes / 4194304 bytes

생성된 LV xfs 로 포맷

[root@localhost ~]# mkfs.xfs -f /dev/mapper/vg_data1-lv_data1
[root@localhost ~]# blkid
/dev/mapper/vg_data1-lv_data1: UUID="TTTT" TYPE="xfs" 
[root@localhost ~]# mount -t xfs UUID="TTTT" /data1

SSD cache Hits와 Misses 확인

[root@localhost ~]# lvs -o name,cache_read_hits,cache_read_misses vg_data1/lv_data1
  LV       CacheReadHits    CacheReadMisses 
  lv_data1        750733685        437267271

SSD cache 상태 확인

[root@localhost ~]# lvs vg_data1/lv_data1
  LV       VG       Attr       LSize  Pool        Origin           Data%  Meta%  Move Log Cpy%Sync Convert
  lv_data1 vg_data1 Cwi-aoC--- 72.75t [lv_cache1] [lv_data1_corig] 99.99  0.08            0.00

내부적으로 사용 시 Read I/O가 약 3배 정도 향상 되었습니다. 파일 크기나 갯수 등에 따라 성능 향상 정도가 달라지므로 내부적으로 테스트 진행을 해 보는 것이 좋습니다.

You may also like...

Subscribe
Notify of
guest

이 사이트는 스팸을 줄이는 아키스밋을 사용합니다. 댓글이 어떻게 처리되는지 알아보십시오.

0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x