- Łukasz Stelmach – Java JBoss Linux - http://blog.stelmisoft.pl -

Jakiego zarządcę operacji dyskowych wybrać dla maszyn wirtualnych

Dostępni zarządcy kolejkowania operacji I/O

W Linuksie (przynajmniej w RHEL 5) mam do wybory czterech różnych zarządców procesów (będzie po angielsku):

Można to sprawdzić wydając poleceni:

# cat /sys/block/URZADZENIE/queue/scheduler
noop anticipatory deadline [cfq]

Aktualnie wybrany zarządca jest podany w nawiasach kwadratowych.

Zarządca kolejki I/O dla komputera hosta

W większości przypadków najlepsze efekty osiągnie się korzystając z aglgorytmu cfq. Pracuje on równie dobrze przy praktycznie wszelkich obciążeniach. Jeżeli natomiast jest ważniejsze zminimalizowanie opóźnień I/O kosztem ogólnej przepustowości, być może warto rozszerzyć algorytm deadline.

Zarządca kolejki I/O dla gościa

W przypadku systemów wirtualizowanych sytuacja nie jest już taka prosta. W dużej części przypadków opłacalne może być ustawienie zarządcy kolejki I/O jako noop. Jest to spowodowane tym, że nie ma potrzeby kolejkowania zapisów w dwóch warstwach, raz na systemie gościa a drugi raz na systemie gospodarza. Lepiej jest, gdy to gospodarz decyduje kiedy i jak zapisać czy odczytać dane z dysków. To system hosta ma informacje o wszystkich operacjach dyskowych ze wszystkich maszyn oraz posiada informacje o fizycznej charakterystyce dysków twardych.

Istnieją wyjątki od tej zasady wtedy, gdy system gości uzyskują dostęp do dysków poprzez protokół iSCSI lub też mają podłączone bezpośrednio urządzenie fizyczne. Wtedy powinny samodzielnie zarządzać kolejką I/O.

Konfiguracja domyślnego algorytmu kolejkowania

Zmiana algorytmu kolejkowania I/O w trakcie pracy systemu

Zmianę dokonujemy przy użyciu polecenia echo:

# cat /sys/block/URZADZENIE/queue/scheduler
noop anticipatory deadline [cfq]
# echo 'noop' > /sys/block/URZADZENIE/queue/scheduler
# cat /sys/block/URZADZENIE/queue/scheduler
[noop] anticipatory deadline cfq

Nowy algorytm będzie używany od razu, zmiana ta nie przetrwa restartu maszyny. Natomiast umożliwia wprowadzenie innego sposobu kolejkowania dla różnych urządzeń.

Aby zapewnić wprowadzenie tych zmian po restarcie maszyny, można dodać odpowiedni wpis do pliku /etc/rc.local

# echo "echo 'noop' > /sys/block/URZADZENIE/queue/scheduler" >> /etc/rc.local

Zmiana domyślnego algorytmu kolejkowania I/O

Zmiana domyślnego algorytmu kolejkowania I/O dla systemu Linuks polega na przekazania odpowiedniego parametru do jądra. Przypisujemy wartośc parametrowi elevator nazwę domyślnego algorytmu kolejkowania: noop, anticipatory, deadline oraz cfq.

Przykładowy wpis z pliku /boot/grub/grub.conf:

34
35
36
37
title Red Hat Enterprise Linux Server (2.6.18-8.el5)
root     (hd0,0)
kernel  /vmlinuz-2.6.18-8.el5 ro root=/dev/vg0/lv0 elevator=noop
initrd   /initrd-2.6.18-8.el5.img

Opis, w jaki sposób można modyfikować konfigurację GRUBa zarówno w dystrybucji RedHat jak i Debian można znaleźć we wpisie Konfiguracja dostępu do maszyny wirtualnej przy użyciu polecenia virsh lub xm [3].

Źródła