PowerEdge: RHEL에서 NVMe PCIe SSD 기반 dm-cache를 통해 블록 디바이스 성능 향상
Summary: dm-cache(Device Mapper cache)는 데이터를 더 빠른 디바이스로 동적으로 마이그레이션하여 블록 디바이스의 성능을 개선하는 데 사용할 수 있습니다.
Instructions
NVMe 기반 PCIe SSD는 사용자 공간 툴 세트 LVM(Logical Volume Manager) 툴을 사용하여 dm-cache의 캐시 디바이스 역할을 할 수 있습니다.
dm-cache에 의해 생성된 가상 캐시는 3개의 물리적 디바이스로 구성됩니다. (그림 1 참조) 원본 디바이스는 속도가 느린 대상 스토리지 디바이스(HDD)입니다. 캐시 디바이스는 사용자 데이터를 저장하는 데 사용되며 메타 캐시는 블록 배치, 더티 플래그 및 기타 내부 데이터와 같은 메타데이터를 저장합니다.
이 경우 데이터 블록과 메타데이터 모두에 동일한 디바이스[캐시 디바이스]를 사용합니다.
그림 1: LVM 툴을 사용하여 dm-cache를 설정하고 구성하는 단계
하드웨어 설정:
원본 디바이스[HDD]: /dev/sda1
캐시 디바이스[NVMe 기반 PCIe SSD](블록/메타): /dev/nvme0n1p1
소프트웨어 설정:
운영 체제: RHEL 7
툴: dm-cache 구성을 위한 LVM2 사용자 공간 툴
구성 단계:
다음은 LVM을 사용하여 가상 디바이스 dm-cache를 구성하는 단계입니다.
각 단계 출력은 그림 1에 언급된 번호로 블록에 매핑됩니다.
- 하드 디스크[원본 디바이스]에 100GB 파티션 생성
parted -a optimal /dev/sda mkpart primary 1 100G
참고: 이렇게 하면 /dev/sda1이 생성됩니다. - NVMe PCIe SSD 디스크[캐시 디바이스]에 10GB 파티션 생성
parted -a optimal /dev/nvme0n1 mkpart primary 1 10G
- 원본 및 캐시 디바이스를 사용하여 볼륨 그룹(캐시) 생성
vgcreate cache /dev/sda1 /dev/nvme0n1p1
- "cache" 볼륨 그룹 확인 명령 사용:
vgdisplay[root@localhost ~]# vgdisplay --- Volume group --- VG Name cache System ID Format lvm2 Metadata Areas 2 Metadata Sequence No 7 VG Access read/write VG Status resizable MAX LV 0 Cur LV 2 Open LV 0 Max PV 0 Cur PV 2 Act PV 2 VG Size 103.36 GiB PE Size 4.00 MiB Total PE 26461 Alloc PE / Size 25399 / 99.21 GiB Free PE / Size 1062 / 4.15 GiB VG UUID Zd8dNe-6Kdt-7qgY-dmSN-8WHe-4wqQ-euM3Ql
- "cache" 볼륨 그룹 확인 명령 사용:
- 원본 디바이스 논리적 볼륨 생성(
origin_device)lvcreate -l 90%FREE -n origin_device cache /dev/sda1
- 캐시 메타 데이터 논리적 볼륨 생성(
cache_meta)lvcreate -l 5%FREE -n cache_meta cache /dev/nvme0n1p1
- 캐시 블록 데이터 논리적 볼륨 생성(
cache_block)lvcreate -l 80%FREE -n cache_block cache /dev/nvme0n1p1
- 캐시 블록 및 캐시 메타 데이터 논리적 볼륨을 결합하여 캐시 풀 논리적 볼륨 생성(5단계 및 6단계 결합)
lvconvert --type cache-pool --poolmetadata cache/cache_meta cache/cache_block
참고: 생성된 캐시 풀의 이름은 "cache_block"이며 6단계에서 생성한 캐시 블록 데이터 논리적 볼륨 이름과 동일합니다.-
이는 툴의 동작 방식입니다. "cache" 볼륨 그룹 확인 명령 사용:
lvdisplayroot@localhost ~]# lvdisplay --- Logical volume --- LV Path /dev/cache/cache_block LV Name cache_block VG Name cache LV UUID kWYQxP-Jdlr-JdxE-aleB-JJpj-3rmw-Q0cojx LV Write Access read/write LV Creation host, time localhost.localdomain, 2014-06-28 09:05:32 -0400 LV Status available # open 0 LV Size 5.07 GiB Current LE 1297 Segments 1 Allocation inherit Read ahead sectors auto - currently set to 256 Block device 253:2
-
-
캐시 풀(7단계) 논리적 볼륨 및
origin_device논리적 볼륨(4단계)을 연결하여 캐시 논리적 볼륨을 생성합니다.lvconvert --type cache --cachepool cache/cache_block cache/origin_device
- 이렇게 하면 가상 캐시 디바이스(dm-cache)
orign_device가 아래 그림처럼dm4로 생성됩니다.[root@localhost ~]# ls -l /dev/cache/origin_device lrwxrwxrwx. 1 root root 7 Jun 28 09:13 /dev/cache/origin_device -> ../dm-4
- 이렇게 하면 가상 캐시 디바이스(dm-cache)
-
가상 캐시 디바이스를 파일 시스템으로 포맷하고 사용합니다.
mkfs.ext4 /dev/cache/origin_device
성능 데이터:
FIO 툴을 사용하여 수행한 성능 테스트 결과에 따르면 읽기, 쓰기 및 읽기-쓰기 혼합 작업의 성능이 크게 향상되었습니다.
표 1은 일반 드라이브(회전식 드라이브) 대비 dmcache 가 있을 때의 성능 차이와 개선 비율을 나타내는 FIO 툴 분석 결과입니다. 그림 2는 이에 해당하는 그래프 플롯을 보여줍니다.
1M 블록 크기를 사용하여 랜덤 읽기, 랜덤 쓰기, 랜덤 읽기-쓰기 혼합(50%) 작업을 dmcache 가 구성된 원본 하드 드라이브(sda) 및 구성이 있는 드라이브에서 테스트한 것입니다.
| BS에서 FIO = 1M | IOPS | ||
|---|---|---|---|
| 디바이스 | 읽기 | 쓰기 | 읽기-쓰기 |
드라이브 dm-cache |
197 | 798 | 159 |
| sda[원본 드라이브] | 124 | 118 | 58 |
| 개선도(%) | 58.87% | 576.20% | 174.13% |
표 1: 성능 개선 dm-cache
그림 2: 성능 개선 dm-cache.