Więc, często tak sobie benchmarkujesz?
Do tematu wspomagania wolnego dysku mechanicznego szybkim SSD wracam
trzy
lata później. Celem jest sprawdzenie jak sobie radzi i ile daje dostępne
w jądrze linuksa dm-cache
.
Co potrzeba?
- dysk wolny — udział bierze dysk 5400 RPM 160GB
- dysk na cache, czyli partycja 5GiB na Samsung SSD 830
- dysk na metadane — partycja 32MiB na powyższym SSD
kernel
oraz fedup
— oraz usunięcie trzeciego preupgrade
. Po aktualizacji cofnięcie
tranzakcji. Pomiar wykonany
5 krotnie, skrajne wyniki odrzucone, pozostałe uśrednione. Następnie włączenie
cachu na SSD i powtórzenie procedury.
Środowisko:
host: Fedora 18 Spherical Cow z jądrem 3.9.0-0.rc6.git0.1.fc19.x86_64gość: Fedora 20 Rawhide
Instalacja:
fedup noarch 0.7.3-2.fc20 rawhide 67 k replacing preupgrade.noarch 1.1.11-3.fc19 kernel x86_64 3.9.0-0.rc6.git0.1.fc20 rawhide 27 M
Pomiar:
% time yum history redo 558 -y % time yum history undo 558 -y
Decyzje i konfiguracja
Rozdzielenie urządzenia dla metadanych i właściwego cache ma na celu zwiększenie elastyczności rozwiązania. O ile dobór wielkości cache jest prosty (im więcej tym lepiej), to jak z nośnikiem metadanych? Do tego służy następująca reguła:
4MiB + (16bytes * nr_blocks)A wielkość bloku? To już zależy od charakterystyki obciążenia. Ja przyjąłem “na oko” blok wielkości 64KiB. Przy urządzeniu cache wielkości 5GiB, otrzymujemy porywające zapotrzebowanie 5,25 MiB.
Mamy więc już prawie wszystko: urządzenie do przyspieszenia (sdb), partycję na cache (sda5), partycję na metadane (sda6) i wielkość bloku (64KiB czyli 128 sektorów po 512 bajtów). Potrzebujemy tylko wielkości urządzenia sdb w sektorach:
Możemy więc utworzyć, zamountować cache i przejść do pomiarów:% blockdev --getsz /dev/sdb 312581808
% dmsetup create fusiondrive --table '0 312581808 cache /dev/sda6 /dev/sda5 /dev/sdb 128 1 writeback default 0' % mount /dev/mapper/fusiondrive /var/lib/libvirt/images -o subvol=var_lib_libvirt_images
Wyniki i intepretacja
Zero. Żadnej zauważalnej różnicy. O ile jeszcze procent trafień przy zapisie oscylował w okolicach 4%, to przy odczycie średnia wyszła 0,12%. Czasy sys i user zbliżone - okolice 40s i 50s dla instalacji, w granicach 2,5s dla deinstalacji. Czas real - duży rozrzut, do 83s do ponad 330s. Całkowicie bezużytecznie, nawet nie ma co wykresów robić.
Winny 1 - time yum
Instalacja jądra wydawała się dobrym pomysłem do momentu spojrzenia na wykresy
zajętości zasobów przez maszynę wirtualną. Gros czasu obciążenie 100% CPU przy
minimalnym użyciu dysku. Powodem było tworzenie obrazu initramfs
,
a użycie CPU wynika z tworzeni i kompresji pliku cpio. Przydatność do testowania wejścia/wyjścia — żadna. Dodatkowo, yum większość czasu spędzał śpiąc i czekając na procesy potomne wykonujące prawdziwą pracę, w tym czasie nie był mu naliczany czas.
Winny 2 - system plików btrfs
Zarówno dysk sdb
, na którym znajduje się obraz maszyny wirtualnej,
jak i sama maszyna skonfigurowane są z btrfs
. Jest to
system plików typu copy-on-write, co oznacza, że dane nigdy nie są nadpisywane.
Zapis polega na odczycie danych, zapisaniu zmodyfikowanej kopii gdzieś indziej
i uaktualnieniu wskaźników na dysku. Odniesienia do oryginalnej kopii danych
znikają (o ile nie ma snapshotów).
Cache działający na poziomie bloków danych nie ma pojęcia, że wrzuca
do pamięci podręcznej bloki, do których system plików już nie będzie wracał. Taka
już jego uroda, ma ten problem dm-cache
, ma go bcache
,
będzie miał każdy inny. btrfs
nie nadaje sie do akceleracji w
ten sposób. Dopiero wbudowanie mechanizmów cache SSD w sam btrfs
da jakieś sensowne wyniki. Może nawet porównywalne z osiągami ZFS.
W skrócie: benchmarkować to trzeba umieć, panoczku.
Archived comments:
DeHa 2013-04-15 15:19:11
Czyli eksperyment dowiódł, że btrfs jest faktycznie CoW. ;)
zdz 2013-04-15 15:29:57
Mooooo!
LCF 2013-04-15 16:00:35
Huh,
A nie prościej wszystko przemigrować na SSD, zamiast jakieś wynalazki z cachami ?
zdz 2013-04-15 17:00:45
Oczywiście, że łatwiej i za parę lat ekonomicznie to będzie uzasadnione. Na dzień dzisiejszy rozwiązania pamięci hierarchicznej sprzedają się dobrze.
tap 2013-11-25 14:43:31
Zrobiłem teścik bcache - taki organoleptyczny.
Bcache na 2x 120GB SSD (samsung pro i kingston jakiś szybki) w raid1 na linuxowym md + 4x 1TB Segate w raidz1 i na tym zfs.
Bez ssd-ków trzy chodzące równolegle tary powodowały zawał systemu. Load szedł w kosmos, próba zrobienia zfs list kosztowała czasem nawet kilkanaście sekund.
Z bcache 10 chodzących równolegle tarów, load na poziomie 2-3 (8 fizycznych rdzeni HT, więc znikomy), system reponsywny, nadal możliwe było dowalenie jakiejś jeszcze operacji dyskowej. Co ciekawe, 10 tarów wykonało się szybciej (182s) niż 3 tary (270s).
bcache fkoz jako write-back - dlatego na MD, dlatego na dwóch różnych SSD.
zdz 2013-12-18 13:35:31
Przecież ZFS ma natywną obsługę cache na SSD, dlaczego przez bcache?
Comments
Comments powered by Disqus