LVM (cache)

From DCEwiki
Jump to: navigation, search

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[edit]

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..

Poznámka
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

Poznámka
stroj:~# lvcreate -L 100G -n OriginLV testovaci_skupina
  Logical volume "OriginLV" created

2, Zapojení SSD disků do skupiny

Poznámka
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

Poznámka
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

Poznámka
stroj:~# lvcreate --type raid1 -m 1 -L 8M -n CacheMetaLV testovaci_skupina /dev/sdb /dev/sdc
  Logical volume "CacheMetaLV" created
Poznámka
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
Poznámka 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

Poznámka
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.
Poznámka
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

Poznámka
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]
Poznámka 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

Poznámka
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[edit]

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).
Upozornění 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á!