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):
- Completely Fair Queuing (CFQ)
CFQ maintains a scalable per-process I/O queue and attempts to distribute the available I/O bandwidth equally among all I/O requests. CFQ is well suited for mid-to-large multi-processor systems and for systems which require balanced I/O performance over multiple LUNs and I/O controllers.
- Noop
The NOOP scheduler is a simple FIFO queue and uses the minimal amount of CPU/instructions per I/O to accomplish the basic merging and sorting functionality to complete the I/O. It assumes performance of the I/O has been or will be optimized at the block device (memory-disk) or with an intelligent HBA or externally attached controller.
- Deadline
The Deadline elevator uses a deadline algorithm to minimize I/O latency for a given I/O request. The scheduler provides near real-time behavior and uses a round robin policy to attempt to be fair among multiple I/O requests and to avoid process starvation. Using five I/O queues, this scheduler will aggressively re-order requests to improve I/O performance.
- Anticipatory
The Anticipatory elevator introduces a controlled delay before dispatching the I/O to attempt to aggregate and/or re-order requests improving locality and reducing disk seek operations. This algorithm is intended to optimize systems with small or slow disk subsystems. One artifact of using the AS scheduler can be higher I/O latency.
Agorytm zarządcy dyskowegoanticipatory
został usunięty w nowych wersjach jądra Linuksa. Ciągle jednak jest (i będzie dostępny) w wersji RHEL 5, która zawiera jądro w wersji 2.6.18.
Można to sprawdzić wydając poleceni:
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
:
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.
Źródła
- Choosing an I/O Scheduler for Red Hat® Enterprise Linux® 4 and the 2.6 Kernel
- Dokumentacja jądra Linuksa, katalog
block
- What is the suggested I/O scheduler to improve disk performance when using Red Hat Enterprise Linux with virtualization?
- I/O scheduling
- Can I change the I/O scheduler for a particular disk without the system rebooting?
- What is the suggested I/O scheduler for a Video on Demand (VOD) server using Red Hat Enterprise Linux?