Hlavní navigace

Nový plánovač jádra nabízí rychlejší reakce

24. 4. 2007
Doba čtení: 5 minut

Sdílet

Scheduler (česky plánovač) je jednou z nejdůležitějších částí jádra operačního systému. Na něm závisí výkon celého systému a hladký běh všech aplikací i při extrémní zátěži. Vývojáři zvažují výměnu plánovače, který je aktuálně používán v Linuxu. Proč by mělo k výměně dojít? Co nový plánovač přinese?

Lehký úvod do plánování

Plánovač má v systému velmi důležitou úlohu. Protože na běžných jednojádrových procesorech může vždy v konkrétní chvíli běžet jen jeden proces, je potřeba zařídit jejich přepínání, které (pokud je dostatečně rychlé) zajišťuje onu iluzi běhu více aplikací zároveň. Ke zmíněnému přepínání dochází velmi často – v jádrech řady 2.6 až 1000× za sekundu.

Cílem vývojářů je tedy zajistit dostatečně kvalitní přepínání, které samo spotřebuje co možná nejméně času procesoru. Zároveň je potřeba vymyslet takový systém, který rozdělí procesorový čas mezi procesy dostatečně spravedlivě. Některé procesy jsou náročné a vyžadují více času, jiné naopak potřebují rychlé přepnutí v případě potřeby. Aby toho nebylo málo, plánovače mají často tu nepříjemnou vlastnost, že čím více procesů spravují, tím déle jim přepnutí trvá.

Aktuální jaderný plánovač je často označován jako O(1) scheduler. To znamená, že posledním jmenovaným neduhem netrpí, jeho rychlost není proměnlivá a nezávisí na tom, kolik procesů má na starosti.

Completely Fair Scheduler – naprosto spravedlivý plánovač

Ingo Molnar se rozhodl, že je na čase vytvořit zcela nový plánovač, který by splňoval aktuální požadavky. „Mým cílem je reagovat na některé požadované funkce a opravit nedostatky, které byly objeveny během uplynulých let, a to jak pro desktopová, tak i serverová nasazení,” píše v oznámení nového projektu Ingo Molnar.

Jednou z nejzajímavějších vlastností nově napsaného plánovače je systém modulů. Ty zahrnují především informace o nastavení samotného plánovacího jádra a dovolují tak měnit „režimy práce” bez zásahu do samotného plánovače. Ingo se totiž snaží zohlednit zcela jiné požadavky, které na systém klade desktopové a serverové nasazení. Zatímco server vyžaduje především výkon a robustnost při práci tisíců uživatelů, desktop dnes potřebuje především plynulou a rychlou odezvu na akce jednoho uživatele.

Co je nového?

I z toho důvodu byl kompletně změněn také návrh celého plánovače. Zatímco klasická konstrukce staví na frontě čekajících procesů, nový CFS používá naprosto jinou techniku plánování. „Design je velmi radikální: nepoužívá frontu, ale rbtree pro vytvoření časové osy běhu procesů,” vysvětlil novinky Ingo. Díky novému přístupu odpadají některé potíže ostatních plánovačů.

Naprostou novinkou je také rozdělení času procesoru na jiné jednotky než Hz. Zatím byl vždy čas procesoru rozdělen na stejné úseky, které byly přidělovány jednotlivým procesům. Nový CFS ovšem používá pro označení časových úseků přímo nanosekundy. Není tedy závislý na žádném přesně stanoveném časovém údaji nebo heuristice.

CFS nabízí jeden centrální bod změny nastavení, který se nachází v /proc/sys/kernel/sched_granularity_ns. Ten může být nastaven na hodnotu „desktop” nebo „server”. V prvním případě bude plánovač zajišťovat co možná nejnižší latenci, kdežto u serveru bude co nejlépe rozkládat zátěž.

Další zajímavá novinka se skrývá v logice, která zajišťuje automatické přidělování vyšší priority (nice) konkrétním procesům. Výsledkem by mělo být nadržování důležitým procesům. Konkrétně se jedná o privilegované úlohy, které přímo přistupují k hardware – čili například Xorg. Nutno ovšem říct, že se tato funkce rozhodně nelíbí všem a někteří vývojáři tvrdí, že je nesmysl implementovat toto nastavení v jádře, když by bylo možné jej bez problémů napsat do konfiguračních skriptů v uživatelském prostoru.

Plánovač by měl díky novým funkcím a zcela novému přístupu k řešení úkolu nabídnout lepší chování systému. V případě desktopu bychom se mohli dočkat rychlejších reakcí a plynulejšího běhu. Ingo také poznamenal, že CFS znamená i lepší bezpečnost. „Vzhledem k designu není CFS náchylný ke známým útokům na heuristiku,” řekl.

Vývoj celého kódu prý trval 62 hodin a výsledkem je 100 KB patch. Zatím ovšem není celá věc pořádně otestovaná a rozhodně proto není vhodná pro nasazení v produkčním systému. Vývojáři se budou samozřejmě novým plánovačem zabývat a už teď běží v mailing listu bouřlivá debata.

Jak si stojí?

Willy Tarreau se rozhodl otestovat nový CFS a porovnat výsledky s jiným software téhož druhu – Staircase Deadline CPU scheduler, jehož autorem je Con Kolivas. Ten je také aktuálním kandidátem na nový jaderný plánovač. Willy použil zátěžový test, při kterém spustil 64 procesů, které vždy čtvrt sekundy zatěžovaly systém a tři čtvrtě sekundy čekaly.

Willy se nejprve vyjádřil k plánovači Staircase Deadline:

Chová se dobře, ale začne být trhavý při středně vysoké zátěži. Systém stále odpovídal, ale pod X se trhal kurzor a psaní v xtermu bylo také trhané. Procesor nebyl využit naplno a zatížení velmi kolísala. Přesto bylo zatížení pravidelně rozděleno mezi všechny procesy a nevybočilo ani po 4000 opakování. X používal méně než 1 % procesoru.

Pak následovalo otestování Molnarova CFS:

root_podpora

Chová se mnohem lépe, pohyb myši je naprosto plynulý i při velmi vysoké zátěži. Všiml jsem si, že plánovač změnil nice X na –19. Nedíval jsem se do kódu, ale vypadá to dost podezřele. Změnil jsem to na 0 a chování se nezměnilo. Zatížení procesoru je rozloženo velmi plynule a není vidět žádná prodleva (idle). X používal méně než 1 % procesoru.

Willy Tarreau k výsledkům testů připojil i vlastní dojmy z testování. Nová koncepce je podle něj velmi zajímavá, ale zatím není dostatečně vyzkoušená. „Myslím, že CFS je založen na slibnějším konceptu, ale je zatím méně vyspělý.„ Druhý testovaný se naopak choval hůře, ale je zřejmě robustnější. „Staircase Deadline vykazoval místy podivné chování, nepoužíval všechny procesory a místy se systém trhal. Zřejmě se však bude jednat o méně riskantní řešení pro nasazení v Linuxu. Bude to ale asi poslední O(1) plánovač, který bude časem nahrazen CFS (nebo jiným), a ten nabídne plynulost CFS a robustnost SD.”

Závěrem

Zdá se, že cesta byla objevena a zbývá po ní „jen” dojít k cíli. Nový CFS vypadá velmi slibně, bohužel se jedná o velmi čerstvý a nevyzkoušený kus kódu. Logické by proto bylo dát přednost jeho konkurentovi. Na druhou stranu by jeho začlenění mohlo prospět nejen linuxovému desktopu. Rozhodně se jedná o velmi důležitou změnu a vývojáři se jí budou jistě nadále zabývat.

Zvýšení priority X serveru je

Byl pro vás článek přínosný?

Autor článku

Petr Krčmář pracuje jako šéfredaktor serveru Root.cz. Studoval počítače a média, takže je rozpolcen mezi dva obory. Snaží se dělat obojí, jak nejlépe umí.