Meningkatkan Kinerja Disk dengan LVM Cache

LVM cache merupakan mekanisme caching dengan meenggunakan disk SSD/NVMe ukuran kecil yang ditambahkan sebagai logical volumes (LVs) dalam volume group (VG) yang sama.

LVM cache menggunakan driver kernel dm-cache yang mendukung mode cache write-through (default) dan write-back untuk meningkatkan kinerja LV dari disk lambat (HDD) dengan memigrasikan beberapa datanya secara dinamis ke LV dari disk cepat (SSD/NVMe) dan lebih kecil.

Prequites

Siapkan PC server atau VM Linux dengan 1 disk SSD/NVMe dan 1 disk HDD. Misalnya pada panduan ini menggunakan VM Linux dengan spesifikasi:

  • Disk 1 (vdb) menggunakan SSD untuk cache LV
  • Disk 2 (vdc) menggunakan HDD untuk origin LV

Configuring lvmcache

Daftarkan vdb dan vdc sebagai physical volume (PV) untuk digunakan oleh LVM.

pvcreate /dev/vdb
pvcreate /dev/vdc

Lalu tambahkan kedua perangkat ke dalam volume group.

vgcreate vg_data /dev/vdb /dev/vdc

Selanjutnya buat origin LV dengan nama root menggunakan keseluruhan disk lambat vdc

lvcreate -l +100%FREE -n root vg_data /dev/vdc

Buat cache LV dengan nama lv_cache lalu untuk ukurannya dapat Anda sesuaikan atau sisakan sedikit untuk membuat metadata cache.

lvcreate -L 2G -n lv_cache vg_data /dev/vdb

Buat metadata cache dengan nama lv_cache_meta untuk menyimpan metadata dari cache pool. Ukuran LV metadata cache harus 1000 kali lebih kecil dari lv_cache dengan ukuran minimum 8MiB.

lvcreate -L 12M -n lv_cache_meta vg_data /dev/vdb

List LV yang telah dibuat.

# lvs vg_data
  LV            VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert
  lv_cache      vg_data -wi-a-----  2.00g
  lv_cache_meta vg_data -wi-a----- 12.00m
  root          vg_data -wi-a----- <4.00g

Buat cache pool dengan menggabungkan lv_cache dan lv_cache_meta. Disini Anda bisa mengatur mode cache yang ingin digunakan.

lvconvert --type cache-pool --cachemode writethrough --poolmetadata vg_data/lv_cache_meta vg_data/lv_cache

List LV setelah lv_cache dan lv_cache_meta digabung.

# lvs -a -o +devices vg_data
  LV               VG      Attr       LSize  Pool Origin Data%  Meta%  Move Log Cpy%Sync Convert Devices
  lv_cache         vg_data Cwi---C---  2.00g                                                     lv_cache_cdata(0)
  [lv_cache_cdata] vg_data Cwi-------  2.00g                                                     /dev/vdb(0)
  [lv_cache_cmeta] vg_data ewi------- 12.00m                                                     /dev/vdb(512)
  [lvol0_pmspare]  vg_data ewi------- 12.00m                                                     /dev/vdb(515)
  root             vg_data -wi-a----- <4.00g                                                     /dev/vdc(0)

Selanjutnya gabungkan origin LV ke cache pool.

lvconvert --type cache --cachepool vg_data/lv_cache vg_data/root

Jika berhasil akan muncul pesan.

Logical volume vg_data/root is now cached.

List LV setelah origin LV di cache.

# lvs -a -o +devices vg_data
  LV                     VG      Attr       LSize  Pool             Origin       Data%  Meta%  Move Log Cpy%Sync Convert Devices
  [lv_cache_cpool]       vg_data Cwi---C---  2.00g                               0.04   2.51            0.00             lv_cache_cpool_cdata(0)
  [lv_cache_cpool_cdata] vg_data Cwi-ao----  2.00g                                                                       /dev/vdb(0)
  [lv_cache_cpool_cmeta] vg_data ewi-ao---- 12.00m                                                                       /dev/vdb(512)
  [lvol0_pmspare]        vg_data ewi------- 12.00m                                                                       /dev/vdb(515)
  root                   vg_data Cwi-a-C--- <4.00g [lv_cache_cpool] [root_corig] 0.04   2.51            0.00             root_corig(0)
  [root_corig]           vg_data owi-aoC--- <4.00g                                                                       /dev/vdc(0)

Removing Cache Pool

Untuk melepas origin LV dari cache LV.

lvconvert --splitcache vg_data/root

Untuk menghapus cache LV.

lvremove vg/cache_data_lv