LVM cache, je poměrně čerstvá funcionalita, která je při své činnosti závislá na jaderném modulu dm-cache. Ten umožňuje při IO operacích využívat rychlé SSD disky jako cache pro pomalejší rotační disky. Součástí linuxového jádra je tento modul od verze 3.9 která vyšla v dubnu 2013.
Princip LVM cache je jednoduchý - oba typy disku se začlení do VG skupiny, pak se nad každým z nich vytvoří logický oddíl a z nich se pak sestaví cache-pool. Logické oddíly, vytvořené v rámci tohoto poolu pak během IO operací používají SSD disk jako rychlou cache.
Replikace SSD
I když by z funkčního hlediska jako LVM cache postačoval jeden SSD disk, je doporučeno nasadit raději SSD disky dva sestavené do raid1. SSD disky totiž - na rozdíl od klasických HDD disků - před totálním selháním nevykazují žádné varovné příznaky a pokud by LVM cache byla postavena pouze nad jedním SSD diskem, tak by tím byla ohrožena data celého poolu.
OriginLV |
velký logický oddíl vytvořený na velkém, ale pomalém fyzickém HDD
|
CacheDataLV |
logický oddíl určený pro data kešovaná v poolu, umístěný na menším SSD, ovšem s větší rychlostí čtení a zápisu
|
CacheMetaLV |
relativně malý logický oddíl pro uložení metadat extentů kešovaných v poolu, rovněž umístěný na rychlém SSD
|
CachePoolLV |
kešovací pool ( CacheDataLV + CacheMetaLV )
|
CacheLV |
kešovaný logický oddíl (OriginLV + CachePoolLV)
|
Základní logický oddíl OriginLV, který bude tvořit základní úložný prostor LVM skupiny testovaci_skupina
, bude umístěn na klasickém HDD zařízení /dev/sda1
. Pro kešování jsou připraveny dva rychlé SSD disky, v systému viditelné jako /dev/sdb
a /dev/sdc
.
Příprava LVM skupiny..
|
stroj:~# cat /proc/partitions
major minor #blocks name
8 0 1953514584 sda
8 1 1953513560 sda1
stroj:~# pvcreate /dev/sda1
Physical volume "/dev/sda1" successfully created
stroj:~# vgcreate -d -v testovaci_skupina /dev/sda1
DEGRADED MODE. Incomplete RAID LVs will be processed.
Wiping cache of LVM-capable devices
Adding physical volume '/dev/sda1' to volume group 'testovaci_skupina'
Archiving volume group "testovaci_skupina" metadata (seqno 0).
Creating volume group backup "/etc/lvm/backup/testovaci_skupina" (seqno 1).
Volume group "testovaci_skupina" successfully created
|
1, Vytvoření výchozího logického disku OriginLV o velikosti 100GB
|
stroj:~# lvcreate -L 100G -n OriginLV testovaci_skupina
Logical volume "OriginLV" created
|
2, Zapojení SSD disků do skupiny
|
stroj:~# vgextend testovaci_skupina /dev/sdb /dev/sdc
Physical volume "/dev/sdb" successfully created
Physical volume "/dev/sdc" successfully created
Volume group "testovaci_skupina" successfully extended
|
3, Vytvoření logického oddílu CacheDataLV
|
stroj:~# lvcreate --type raid1 -m 1 -L 1G -n CacheDataLV testovaci_skupina /dev/sdb /dev/sdc
Logical volume "CacheDataLV" created
|
4, Vytvoření logického oddílu CacheMetaLV
|
stroj:~# lvcreate --type raid1 -m 1 -L 8M -n CacheMetaLV testovaci_skupina /dev/sdb /dev/sdc
Logical volume "CacheMetaLV" created
|
|
stroj:~# lvs -o +seg_pe_ranges testovaci_skupina
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert PE Ranges
CacheDataLV testovaci_skupina rwi-a-r--- 1.00g 100.00 CacheDataLV_rimage_0:0-255 CacheDataLV_rimage_1:0-255
CacheMetaLV testovaci_skupina rwi-a-r--- 8.00m 100.00 CacheMetaLV_rimage_0:0-1 CacheMetaLV_rimage_1:0-1
OriginLV testovaci_skupina -wi-a----- 100.00g /dev/sdc:0-25599
|
|
Pokud bychom chtěli použít pouze jeden SSD disk...
stroj:~# lvcreate -L 1G -n CacheDataLV testovaci_skupina /dev/sdb
...
stroj:~# lvcreate -L 8M -n CacheMetaLV testovaci_skupina /dev/sdb
...
|
5, Vytvoření kešovacího poolu CachePoolLV
|
stroj:~# lvconvert --type cache-pool --poolmetadata testovaci_skupina/CacheMetaLV testovaci_skupina/CacheDataLV
WARNING: Converting logical volume testovaci_skupina/CacheDataLV and testovaci_skupina/CacheMetaLV to pool's data and metadata volumes.
THIS WILL DESTROY CONTENT OF LOGICAL VOLUME (filesystem etc.)
Do you really want to convert testovaci_skupina/CacheDataLV and testovaci_skupina/CacheMetaLV? [y/n]: y
Logical volume "lvol0" created
Converted testovaci_skupina/CacheDataLV to cache pool.
|
|
stroj:~# lvs -o +seg_pe_ranges testovaci_skupina
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
CacheDataLV testovaci_skupina Cwi---C--- 1.00g
OriginLV testovaci_skupina -wi-a----- 100.00g
stroj:~# lvs -a -o +seg_pe_ranges testovaci_skupina
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert PE Ranges
CacheDataLV testovaci_skupina Cwi---C--- 1.00g CacheDataLV_cdata:0-255
[CacheDataLV_cdata] testovaci_skupina Cwi---r--- 1.00g CacheDataLV_cdata_rimage_0:0-255 CacheDataLV_cdata_rimage_1:0-255
[CacheDataLV_cdata_rimage_0] testovaci_skupina Iwi---r--- 1.00g /dev/sdb:1-256
[CacheDataLV_cdata_rimage_1] testovaci_skupina Iwi---r--- 1.00g /dev/sdc:1-256
[CacheDataLV_cdata_rmeta_0] testovaci_skupina ewi---r--- 4.00m /dev/sdb:0-0
[CacheDataLV_cdata_rmeta_1] testovaci_skupina ewi---r--- 4.00m /dev/sdc:0-0
[CacheDataLV_cmeta] testovaci_skupina ewi---r--- 8.00m CacheDataLV_cmeta_rimage_0:0-1 CacheDataLV_cmeta_rimage_1:0-1
[CacheDataLV_cmeta_rimage_0] testovaci_skupina Iwi---r--- 8.00m /dev/sdb:258-259
[CacheDataLV_cmeta_rimage_1] testovaci_skupina Iwi---r--- 8.00m /dev/sdc:258-259
[CacheDataLV_cmeta_rmeta_0] testovaci_skupina ewi---r--- 4.00m /dev/sdb:257-257
[CacheDataLV_cmeta_rmeta_1] testovaci_skupina ewi---r--- 4.00m /dev/sdc:257-257
OriginLV testovaci_skupina -wi-a----- 100.00g /dev/sda1:0-25599
[lvol0_pmspare] testovaci_skupina ewi------- 8.00m /dev/sda1:25600-25601
|
6, Svázání logického oddílu OriginLV s kešovanacím logickým oddílem CacheDataLV
|
stroj:~# lvconvert --type cache --cachepool testovaci_skupina/CacheDataLV testovaci_skupina/OriginLV
Logical volume testovaci_skupina/OriginLV is now cached.
stroj:~# lvs testovaci_skupina
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
CacheDataLV testovaci_skupina Cwi---C--- 1.00g
OriginLV testovaci_skupina Cwi-a-C--- 100.00g CacheDataLV [OriginLV_corig]
|
|
Podrobný výpis obsazených extentů:
stroj:~# lvs -a -o +seg_pe_ranges testovaci_skupina
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert PE Ranges
CacheDataLV testovaci_skupina Cwi---C--- 1.00g CacheDataLV_cdata:0-255
[CacheDataLV_cdata] testovaci_skupina Cwi-aor--- 1.00g 100.00 CacheDataLV_cdata_rimage_0:0-255 CacheDataLV_cdata_rimage_1:0-255
[CacheDataLV_cdata_rimage_0] testovaci_skupina iwi-aor--- 1.00g /dev/sdb:1-256
[CacheDataLV_cdata_rimage_1] testovaci_skupina iwi-aor--- 1.00g /dev/sdc:1-256
[CacheDataLV_cdata_rmeta_0] testovaci_skupina ewi-aor--- 4.00m /dev/sdb:0-0
[CacheDataLV_cdata_rmeta_1] testovaci_skupina ewi-aor--- 4.00m /dev/sdc:0-0
[CacheDataLV_cmeta] testovaci_skupina ewi-aor--- 8.00m 100.00 CacheDataLV_cmeta_rimage_0:0-1 CacheDataLV_cmeta_rimage_1:0-1
[CacheDataLV_cmeta_rimage_0] testovaci_skupina iwi-aor--- 8.00m /dev/sdb:258-259
[CacheDataLV_cmeta_rimage_1] testovaci_skupina iwi-aor--- 8.00m /dev/sdc:258-259
[CacheDataLV_cmeta_rmeta_0] testovaci_skupina ewi-aor--- 4.00m /dev/sdb:257-257
[CacheDataLV_cmeta_rmeta_1] testovaci_skupina ewi-aor--- 4.00m /dev/sdc:257-257
OriginLV testovaci_skupina Cwi-a-C--- 100.00g CacheDataLV [OriginLV_corig] OriginLV_corig:0-25599
[OriginLV_corig] testovaci_skupina owi-aoC--- 100.00g /dev/sda1:0-25599
[lvol0_pmspare] testovaci_skupina ewi------- 8.00m /dev/sda1:25600-25601
|
7, Vytvoření a připojení kešovaného souborového systému CacheLV
|
stroj:~# mkfs.btrfs -L CacheLV /dev/testovaci_skupina/OriginLV
Btrfs v3.18.1
See http://btrfs.wiki.kernel.org for more information.
Performing full device TRIM (100.00GiB) ...
Turning ON incompat feature 'extref': increased hardlink limit per file to 65536
Turning ON incompat feature 'skinny-metadata': reduced-size metadata extent refs
fs created label CacheLV on /dev/testovaci_skupina/OriginLV
nodesize 16384 leafsize 16384 sectorsize 4096 size 100.00GiB
stroj:~# mkdir /tmp/point
stroj:~# mount LABEL=CacheLV /mnt/point
|
Výkon při použití LVM cache
Při práci s daty v rámci kešovaného LVM logického oddílu záleží na tom, zda jde o data nová, nebo již v keši uložená.
- V případě primárního uložení velkého množství malých souborů se kešované LVM jevilo mírně pomalejší.
- Při praktickém testu, kdy již byly soubory nakešovány jsem zaznamenal rychlosti kolem 150MB/sec (kešovací SSD disky byly v raid1). Jinak se rychlosti pohybovaly zhruba na poloviční rychlosti (50-60MB/sec).
|
Efekt LVM cache se neprojeví hned, ale až při běžném použití. Při sekvenčním zápisu či čtení dat a prvním zápisu dat o větším objemu než je velikost SSD cache se kešování nepoužívá!
|