I/O plánovače
Kapitoly článků
Takzvaný I/O sheduler v linuxovém jádře má na starosti správu I/O operací nad blokovým zařízením, diskem. Od linuxového jádra verze 2.6.18 je výchozím plánovačem CFQ, který zjednodušeně řečeno pracuje tak, že si požadavky na diskové operace rozdělí do front dle jednotlivých procesů a pak jim vyhrazuje určitý čas pro práci s diskem v závislosti na prioritě daného procesu. Asynchronní požadavky jsou pak zahrnuty do jedné společné fronty.
Alternativou k němu je plánovač Deadline, který každému procesu přidělí předem definovaný čas (standardně 500ms pro čtení a 5s pro zápis). To v praxi znamená, že každý požadavek se nakonec dostane ke slovu, i ten s nižší prioritou. Jako třetí volbu je možné použít plánovač Noop, který v podstatě znamená, že jakékoliv složité plánování je vypnuto a kdo dřív přijde, ten dřív mele.
V našem modelu práce s diskovým polem nastává problém v tom, že I/O plánovače vstupují do hry na třech různých místech najednou. Zaprvé na samotném systému s diskovým polem, tedy nad fyzickými disky v RAIDu. Podruhé se dostává ke slovu na fyzickém serveru, který si připojil úložný prostor v roli iSCSI klienta (a pracuje tedy s diskem stejným způsobem jako by ho měl fyzicky připojen k řadiči). A potřetí probíhá plánování v samotném virtuálním serveru, kterému přístup na disk zprostředkovává KVM.
Ve výchozím stavu jsou všechny tři plánovače nastaveny na CFQ a dalo by se tak říci, že každý přístup k disku je tak trochu přeplánovaný. Pomocí několika testů jsme zjistili, že v našem případě nejvýhodnější nastavení plánovačů je noop-noop-deadline (virtualni server-fyzicky server-diskove pole). Jak velký vliv na výkon může nastavení plánovačů mít, shrnujeme v grafu pro tři různé případy.