lvm-cache/dm-cache gyenge teljesítmény

Fórumok

Kedves Fórumozók!

Az egyik új gépemen LVM cache-et szeretnék használni, amelyhez az alapvetésként elolvastam ezt a leírást:
http://blog-vpodzime.rhcloud.com/?p=45

A egy Mac Mini, i7-es procival, 16 GB memóriával, és egy 256 GB-os Samsung SSD-vel, valamint egy 1 TB-os WD Black HDD-vel.
A gépre LVM-re telepítettem Linux-ot.
Az SSD került a /dev/sdb helyre, a HDD pedig a /dev/sda eszköznéven érhető el.

Fizikai (GUID) partíciók:

SSD:
/dev/sdb1 EFI System
/dev/sdb2 (korábban /dev/sda3) Linux LVM

HDD:
/dev/sda1 Linux LVM

Az LVM-ben, az SSD-n hoztam létre a root fájlrendszert, míg a home-ot és a swap-et a HDD-n.
A home-ot szerettem volna az SSD segítségével cached logikai kötetté (LV) alakítani.

A múvelet sikeres volt, az alábbi parancsokat használtam:

root@mac-mini:~# lvcreate --type cache -L 60G -n home-lv-cache /dev/mac-mini/home-lv /dev/sdb3
root@mac-mini:~# lvconvert --cachemode writeback /dev/mac-mini/home-lv

A problémám az, hogy bár az LVM cache már létrejött, meglehetősen lassú annak ellenére, hogy writeback-módra állítottam a cache-elési üzemmódot:

root@mac-mini:~# dd if=/dev/zero of=/root/zerofile bs=1M count=4096
4096+0 beolvasott rekord
4096+0 kiírt rekord
4294967296 bájt (4,3 GB, 4,0 GiB) másolva, 8,38914 s, 512 MB/s
root@mac-mini:~# dd if=/dev/zero of=/home/janos/zerofile bs=1M count=4096
4096+0 beolvasott rekord
4096+0 kiírt rekord
4294967296 bájt (4,3 GB, 4,0 GiB) másolva, 39,6725 s, 108 MB/s
root@mac-mini:~# 

Mi lehet a gond? Hol ronthattam el?

Hozzászólások

A jelek szerint pedig jól létrejött a cache, és az SSD-n van:

root@mac-mini:~# pvdisplay -m
  --- Physical volume ---
  PV Name               /dev/sdb3
  VG Name               mac-mini
  PV Size               225,00 GiB / not usable 4,00 MiB
  Allocatable           yes 
  PE Size               4,00 MiB
  Total PE              57599
  Free PE               37095
  Allocated PE          20504
  PV UUID               akmrEP-LJDv-JjEJ-xAsP-jeN1-BQy4-T5As1U
   
  --- Physical Segments ---
  Physical extent 0 to 5119:
    Logical volume      /dev/mac-mini/root-lv
    Logical extents     0 to 5119
  Physical extent 5120 to 5131:
    Logical volume      /dev/mac-mini/lvol0_pmspare
    Logical extents     0 to 11
  Physical extent 5132 to 5143:
    Logical volume      /dev/mac-mini/home-lv-cache_cmeta
    Logical extents     0 to 11
  Physical extent 5144 to 20503:
    Logical volume      /dev/mac-mini/home-lv-cache_cdata
    Logical extents     0 to 15359
  Physical extent 20504 to 57598:
    FREE
   
  --- Physical volume ---
  PV Name               /dev/sda1
  VG Name               mac-mini
  PV Size               931,51 GiB / not usable 4,69 MiB
  Allocatable           yes 
  PE Size               4,00 MiB
  Total PE              238466
  Free PE               172418
  Allocated PE          66048
  PV UUID               HMFLJI-FZe3-5YZn-ez0H-NlIk-yoGy-BsjD6s
   
  --- Physical Segments ---
  Physical extent 0 to 2047:
    Logical volume      /dev/mac-mini/swap-lv
    Logical extents     0 to 2047
  Physical extent 2048 to 66047:
    Logical volume      /dev/mac-mini/home-lv_corig
    Logical extents     0 to 63999
  Physical extent 66048 to 238465:
    FREE

Nyilván értem, hogy a cache elsősorban olvasásra való, de azt hittem, hogy esetleg az írási műveleteket is tudja gyorsítani.

Olvasásra nézve a következő adatokat kapom:

root@mac-mini:~# dd if=/root/zerofile of=/dev/null 
8388608+0 beolvasott rekord
8388608+0 kiírt rekord
4294967296 bájt (4,3 GB, 4,0 GiB) másolva, 4,96975 s, 864 MB/s
root@mac-mini:~# dd if=/home/janos/zerofile of=/dev/null 
8388608+0 beolvasott rekord
8388608+0 kiírt rekord
4294967296 bájt (4,3 GB, 4,0 GiB) másolva, 5,2344 s, 821 MB/s
root@mac-mini:~# 

Mondjuk valóban, így már nem néz ki a dolog olyan rosszul, de lehet, hogy nem nullás fájlokkal kellene próbálkoznom...
Illetve lehet, hogy a különböző in-memory cache-ek is beleszólnak ebbe az eredménybe.

-------------------------------------------------------------------------------
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 14.2 | 4.4.37-janos

Véletlenszerű adatokkal:

root@mac-mini:~# dd if=/dev/urandom of=/home/janos/testfile bs=1M count=4096 
4096+0 beolvasott rekord
4096+0 kiírt rekord
4294967296 bájt (4,3 GB, 4,0 GiB) másolva, 226,788 s, 18,9 MB/s
root@mac-mini:~# dd if=/dev/urandom of=/root/testfile bs=1M count=4096
4096+0 beolvasott rekord
4096+0 kiírt rekord
4294967296 bájt (4,3 GB, 4,0 GiB) másolva, 224,24 s, 19,2 MB/s

A visszaolvasás:

root@mac-mini:~# dd if=/home/janos/testfile of=/dev/null 
8388608+0 beolvasott rekord
8388608+0 kiírt rekord
4294967296 bájt (4,3 GB, 4,0 GiB) másolva, 5,1045 s, 841 MB/s
root@mac-mini:~# dd if=/root/testfile of=/dev/null 
8388608+0 beolvasott rekord
8388608+0 kiírt rekord
4294967296 bájt (4,3 GB, 4,0 GiB) másolva, 6,18024 s, 695 MB/s

Ugyanez a memória cache-ek kiürítése után:

root@mac-mini:~# echo 3 > /proc/sys/vm/drop_caches
root@mac-mini:~# dd if=/root/testfile of=/dev/null 
8388608+0 beolvasott rekord
8388608+0 kiírt rekord
4294967296 bájt (4,3 GB, 4,0 GiB) másolva, 7,95331 s, 540 MB/s
root@mac-mini:~# dd if=/home/janos/testfile of=/dev/null 
8388608+0 beolvasott rekord
8388608+0 kiírt rekord
4294967296 bájt (4,3 GB, 4,0 GiB) másolva, 10,1051 s, 425 MB/s
root@mac-mini:~#

Összességében tehát a cache előnye íráskor nem jelenik meg, ellenben olvasáskor elég rendesen.

-------------------------------------------------------------------------------
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 14.2 | 4.4.37-janos


Véletlenszerű adatokkal:

root@mac-mini:~# dd if=/dev/urandom of=/home/janos/testfile bs=1M count=4096
4096+0 beolvasott rekord
4096+0 kiírt rekord
4294967296 bájt (4,3 GB, 4,0 GiB) másolva, 226,788 s, 18,9 MB/s
root@mac-mini:~# dd if=/dev/urandom of=/root/testfile bs=1M count=4096
4096+0 beolvasott rekord
4096+0 kiírt rekord
4294967296 bájt (4,3 GB, 4,0 GiB) másolva, 224,24 s, 19,2 MB/s

Ennek mi értelme van?
Azt ugye tudod, hogy vvel nem random-io-t tesztelsz, hanem a randomgenerátorod sebességét?!

Szia Gyu!

Most komolyan... :P
Nyilván tisztában vagyok vele, hogy ez nem random IO, hanem szekvenciális.
Az volt az értelme, hogy még véletlenül sem zavarhasson be az, hogy 4 GB-nyi nulla bájtot írok ide-oda.
Továbbá itt nyilván nem a kiírás sebessége volt az érdekes, hanem az általam végrehajtott lépések visszaellenőrzése/reprodukálása végett hagytam bent a hozzászólásomban.

Üdv:
János
-------------------------------------------------------------------------------
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 14.2 | 4.4.37-janos

Szia!

Az uramdom-os kiírással nem az LVM cache sebességét akartam mérni. Egyszerűen azért van ott, mert szemléltetni akartam, hogy mit és hogyan használtam, és olvastatok vissza később.
Az írási sebesség pedig a topicnyitóban van benne: akkor 108 MB/s-ot mértem szekvenciális írásra.
-------------------------------------------------------------------------------
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 14.2 | 4.4.37-janos

Igen kellene, de valamiért az lvconvert-es megoldás nem működik nekem, a cache nem lesz writeback-es: http://hup.hu/node/152068?comments_per_page=9999#comment-2066897
-------------------------------------------------------------------------------
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 14.2 | 4.4.37-janos

Kicsit érdekes mondjuk, hogy miért nem működik a cache mód beállítása:

root@mac-mini:~# lvs -o+cache_mode,cache_settings /dev/mac-mini/home-lv 
  LV      VG       Attr       LSize   Pool            Origin Data%  Meta%  Move Log Cpy%Sync Convert CacheMode    CacheSettings
  home-lv mac-mini Cwi-aoC--- 250,00g [home-lv-cache]        45,35  15,89           0,00             writethrough              
root@mac-mini:~# lvconvert --cachemode writeback /dev/mac-mini/home-lv
root@mac-mini:~# lvs -o+cache_mode,cache_settings /dev/mac-mini/home-lv 
  LV      VG       Attr       LSize   Pool            Origin Data%  Meta%  Move Log Cpy%Sync Convert CacheMode    CacheSettings
  home-lv mac-mini Cwi-aoC--- 250,00g [home-lv-cache]        45,35  15,89           0,00             writethrough

-------------------------------------------------------------------------------
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 14.2 | 4.4.37-janos

Végül sikerült megoldani a problémát.
Az lvm2 csomaggal volt a probléma, mert a Slackware 14.2-ben levő lvm2-2.02.154 csomaggal ez nem megy.
Egyes helyeken olvastam, hogy lvm2-2.02.155+ verzión már jól működik a művelet.
Végül a slackware-currentből töltöttem le a frissebb lvm2-2.02.168-as verzió build scriptjét, majd készítettem belőle csomagot.
A frissítés után a művelet sikeresen zárult:

root@mac-mini:~# lvchange --cachemode writeback mac-mini/home-lv
root@mac-mini:~# lvs -o+cache_mode mac-mini/home-lv
  LV      VG       Attr       LSize   Pool            Origin          Data%  Meta%  Move Log Cpy%Sync Convert CacheMode
  home-lv mac-mini Cwi-aoC--- 250,00g [home-lv-cache] [home-lv_corig] 49,78  23,83           95,97            writeback
root@mac-mini:~#

-------------------------------------------------------------------------------
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 14.2 | 4.4.37-janos

Kis extra infó:
Slackware 14.2 és current alatt, a frissen létrehozott cache LV csak a következő rebootig marad élve, utána az LV aktiválása már nem sikerül, mivel hiányzik az /usr/sbin/cache_check bináris a rendszerről, és egyik gyári csomag sem tartalmazza.
Amennyiben az ember nem a root fájlrendszerét alakította cache-elté, akkor szerencséje van, mert elég csak letöltenie, lefordítania és telepítenie a thin-provisioning-tools csomagot, amelynek telepítése után már rendben sikerül aktiválni a cache LV-t.
Részletek itt: http://www.linuxquestions.org/questions/slackware-14/usr-sbin-cache_che…

Amennyiben a root van cache-elve, akkor az lvm2 csomagot meg kell patch-cselni, telepíteni kell az thin-provisioning-tools, az mkinitrd scriptet pedig úgyszintén patch-cselni, majd végül initrd-t újragenerálni, és élesíteni.
Részletek itt: http://majek.mamy.to/en/dm-cache-in-slackware/
-------------------------------------------------------------------------------
Az életben csak egy dolog a szép, de az épp nem jut eszembe.

Slackware Linux 14.2 | 4.4.37-janos