Překvapivě pomalé LVM

Nečekal bych, že se budu ještě po 9 letech věnovat LVM, ale tohle si zápisek a varování zaslouží.

Dobré použití LVM

LVM používám už jen jako blokovou vrstvu pro KVM plnou virtualizaci. Hodí se mít disk VMka jako LV, je to nejrychlejší řešení (krom přímého použití fyzického zařízení).

Tohle řešení se hodí pro konzistentní zálohu celého blokového zařízení:

lvcreate -s -n vm_backup -L 40G VGData/vm

Tímto vznikne snapshot, který může růst až do velikosti 40GB (a při překročení této velikosti je automaticky smazán).

Potom můžeme udělat zálohu:

cat /dev/mapper/VGData/vm_backup > /mnt/backup/zaloha

a snapshot dropnout:

lvremove VGData/mx_backup

Všechny tyto operace jsou rychlé, všechno je hned (pochopitelně až na kopírování blokového zařízení, ale to jde sekvenční rychlostí disků).

Potíž s merge

Problém ovšem nastane v situaci, kdy potřebujeme snapshot vrátit zpět. (Revert, ve slovníku LVM se tomu říká merge). K tomu slouží příkaz:

 lvconvert --merge /dev/VGData/vm_backup

Až tento příkaz proběhne, tak je původní LV ve stavu pořízení snapshotu. Problém je v tom, že to trvá překvapivě dlouho. Neúměrně dlouho.

Na tomto vmku jsem měl 40GB snapshot a cca 5% změn, což dělá nějaké 2GB změn. Merge těchto 2GB trval (na LVM nad běžným 7200rpm diskem) přes hodinu!!! Rychlost merge odpovídá 500kB/s (modří už vědí).

Disky v daném LVM mají rychlost kolem 150MB/s (sekvenční), takže kdybych udělal kopii LVčka, tak by to bylo hotové za necelých 5 minut.

Rychlost merge 500kB/s ve skutečnosti odpovídá rychlosti náhodného přístupu k disku (7200rpm / 60 = 120 sektorů za sekundu * 4kB = 480kB/s).

LVM při merge tedy jede sektor po sektoru a provádí změny v původním LVčku.

Nepředpokládám, že změny v LV byly (po nevydařeném update z Debian 8 na Debian 9) zcela náhodně rozesety po celém blokovém zařízení, ve skutečnosti se mění celé souvislé soubory s daty, takže lze očekávat spíše souvislé změny bloků dat).

Závěr

Otázkou je, co jiného použít pro bloková zařízení. LVM má tu nespornou výhodu, že do něj z jedné strany bloková zařízení vstupují (PV) a z druhé strany vystupují (LV). Ano, na linuxu můžeme jako blokové zařízení použít jakýkoliv soubor na libovolném FS, ale je tam vždy jedna vrstva navíc. Moderní BTRFS bohužel exportovat bloková zařízení neumí, tam si musíme vystačit se soubory. ZFS umí exportovat ZVOL, ale tam je to zase morální otázka ohledně licencování ZFS na linuxu.

Příspěvek byl publikován v rubrice Linux, LVM. Můžete si uložit jeho odkaz mezi své oblíbené záložky.