Porównanie wydajności strategii szeregowania żądań wejścia-wyjścia

Andrzej Findeisen

Wstęp

Strategie szeregowania żądań wejścia-wyjścia stosuje się przy dostępie do urządzeń blokowych, w szczególności twardych dysków. Wynika to głównie z długiego czasu przeszukiwania, a więc czasu potrzebnego głowicy do przesunięcia się nad właściwą ścieżkę. Gdyby więc nie było żadnej strategii szeregowania żądań, głowica mogłaby wykonywać dużo ruchów na które traciłaby dużo czasu. Tak więc do zadań modułu szeregującego (I/O scheduler) należą:

Strategie

Porównam następujące strategie:

Porównanie wydajności

Oracle

Porównanie chciałbym zacząć od przyjrzenia się zachowaniu poszczególnych strategii przy obciążeniu bazą danych Oracle. Zostały wykonane 2 zestawy testów, jeden dla OLTP (Online Transaction Processing) - odczytów było mniej więcej tyle samo co zapisów; drugi dla DSS (Decision Support System). Maszyna posiadała 8 dysków połączonych w zestaw RAID. Wydajność została zmierzona w transakcjach na minutę (OLTP) oraz w liczbie zapytań bazy w ciągu godziny (DSS).
Jako bazową wydajność przyjęto tę przy użyciu strategii CFQ, gdyż (zdaniem autorów RedHat) jest to strategia najlepsza dla znacznej części zastosowań.
Jak widać, do zastosowań bazodanowych najgorsza jest strategia AS. Sprawdza się ona za to dobrze w komputerach stacjonarnych, z pojedynczym, ewentualnie dwoma dyskami. Zasadniczo używa się jej tam, gdzie czas oczekiwania jest ważniejszy niż całościowa przepustowość.

MySQL

Warto porównać wyniki dla bazy Oracle z wynikami dla MySQL. Tutaj również wydajność została zmierzona za pomocą liczby transakcji w ciągu minuty, jednak wyniki są zupełnie inne. Okazuje się, że chętnie używany CFQ zupełnie się nie sprawdza przy MySQL. Za to dobre wyniki są osiągane przy użyciu algorytmu Noop.

SSD

Interesujące są też wyniki porównania strategii dla dysków SSD (Solid State Disk) - opartych o flash. W tych dyskach mamy swobodny dostęp do danych, zatem trud zmniejszenia czasu przeszukiwania jest niepotrzebny.

Oto porównanie czterech strategii szeregowania na tradycyjnym dysku.
Na dysku SSD zależności są w przybliżeniu odwrotne. Dzieje się tak dlatego, że większość pracy włożonej szeregowanie zadań ma na celu zmniejszenie liczby ruchów głowicą. Z tego wynika, że procesor jest zajęty obliczeniami strategii, natomast zysku z tych obliczeń nie ma. Między innymi dlatego w niektórych zastosowaniach korzysta się z algorytmu Noop. Jest to algorytm, który się sprawdza przy swobodnym dostępie do urządzenia, a także w sytuacjach gdy kontroler dysku sam się dostatecznie dobrze zajmuje szeregowaniem.

Badania własne

Wykonany test wydajności polegał na mierzeniu czasu potrzebnego na skopiowanie dużego pliku (700MB).

root@ajfin:~/studia/ZSO/prezentacja$ cat /sys/block/sda/queue/scheduler
noop anticipatory deadline [cfq]

root@ajfin:~/studia/ZSO/prezentacja$ time cp bigfile bigfile2
    
real    0m33.003s
user    0m0.008s
sys     0m4.000s

root@ajfin:~/studia/ZSO/prezentacja$ echo noop > /sys/block/sda/queue/scheduler
root@ajfin:~/studia/ZSO/prezentacja$ rm bigfile2
root@ajfin:~/studia/ZSO/prezentacja$ time cp bigfile bigfile2

real    0m32.028s
user    0m0.036s
sys     0m4.108s
Jak widać zmiana schedulera nie miała dużego wpływu na wydajność. Dlatego za drugim razem puściłem też równolegle takie samo kopiowanie w drugiej konsoli (do innego pliku). Efekt:
root@ajfin:~/studia/ZSO/prezentacja$ time cp bigfile bigfile2

real    1m14.346s
user    0m0.040s
sys     0m3.716s

root@ajfin:~/studia/ZSO/prezentacja$ echo cfq > /sys/block/sda/queue/scheduler
root@ajfin:~/studia/ZSO/prezentacja$ rm bigfile2
root@ajfin:~/studia/ZSO/prezentacja$ time cp bigfile bigfile2

real    1m0.297s
user    0m0.036s
sys     0m3.616s

root@ajfin:~/studia/ZSO/prezentacja$ echo anticipatory > /sys/block/sda/queue/scheduler
root@ajfin:~/studia/ZSO/prezentacja$ rm bigfile2
root@ajfin:~/studia/ZSO/prezentacja$ time cp bigfile bigfile2

real    0m49.175s
user    0m0.008s
sys     0m3.588s
Widać wyraźną różnicę.

Podsumowanie

Z powyższego zestawienia wynika, że o żadnej ze strategii szeregowania wejścia-wyjścia nie można powiedzieć, że jest najlepsza. Nawet tak prosta strategia jak Noop okazuje się najlepsza w niektórych przypadkach. Jeśli więc komuś naprawdę zależy na wydajności operacji dyskowych, to powinien sam zrobić testy z typowym dla danego przypadku obciążeniem.

Bibliografia

  1. http://en.wikipedia.org/wiki/I/O_scheduling
  2. http://students.mimuw.edu.pl/ZSO/Wyklady/13_urzadzenia-blk/13_urzadzenia-blk.html
  3. http://www.redhat.com/magazine/008jun05/features/schedulers/
  4. http://dropzone.tamu.edu/techpubs/2009/TAMU-ECE-2009-02.pdf
  5. http://www.mysqlperformanceblog.com/2009/01/30/linux-schedulers-in-tpcc-like-benchmark/