Portál AbcLinuxu, 18. říjen 2017 15:23

Jaderné noviny – 27. 4. 2017: Dva nové plánovače blokového I/O pro vydání 4.12

14.5. | Redakce
Články - Jaderné noviny – 27. 4. 2017: Dva nové plánovače blokového I/O pro vydání 4.12  

Stav vydání jádra. Dva nové plánovače blokového I/O pro vydání 4.12.

Stav vydání jádra

Současné vývojové jádro je 4.11-rc8; finální verze 4.11 nebyla vydána 23. dubna, jak se očekávalo. Linus se raději rozhodl vydat ještě jeden prepatch. „Původně jsem zamýšlel 4.11 vydat dnes, ale přestože minulý týden nedošlo k *mnoha* změnám, pár jich bylo dost otravných, takže místo toho tu máme ještě jedno rc vydání. Dostal jsem opravy problémů, které se objevily, takže jsem mohl 4.11 vydat v tomto stavu, ale nebylo by to v pořádku.“

Seznam regresí z 21. dubna ukazuje deset známých problémů v jádře 4.11.

Stabilní aktualizace: 4.10.12, 4.9.24 a 4.4.63 byly vydány 21. dubna. O den později následovala 3.18.50.

Stabilní verze 4.10.13, 4.9.25 a 4.4.64 byly v době psaní tohoto článku v procesu revidování, vydány byly 27. dubna.

Dva nové plánovače blokového I/O pro vydání 4.12

Subsystém vícefrontové blokové vrstvy, který byl představen v roce 2013, byl nezbytným krokem k tomu, aby jádro škálovalo s nejrychlejšími paměťovými zařízeními na velkých systémech. Implementace v současných jádrech je ale neúplná, postrádá totiž plánovač I/O navržený tak, aby pracoval s vícefrontovými zařízeními. Mezera by měla být vyplněna ve vývojovém cyklu 4.12, v němž jádro dostane ne jeden, ale hned dva vícefrontové plánovače I/O.

Absence plánovače I/O může v kódu pro více front vypadat jako zásadní vada, ale pravdou je, že potřeba plánovače nebyla od počátku jasně patrná. High-end disky jsou většinou SSD, jež netrpí problémy se zpožděním kvůli rotaci, takže nejsou tak citlivé na pořadí operací. Ovšem ukazuje se, že plánování I/O má smysl i v případě těch nejrychlejších zařízení – plánovač může spojovat sousedící požadavky, a tak snížit celkový počet operací, a upřednostňovat některé operace před jinými. Takže zájem o přidání plánování I/O vícefrontových zařízení je tu už nějaký čas, ale dosud chyběl kód.

Řešení se přiblížilo se začleňovacím oknem 4.11, kdy bloková vrstva získala podporu plánování I/O vícefrontových zařízení. Plánovač I/O deadline přešel na tento mechanismus jako důkaz proveditelnosti, ale nikdo jej nevnímal jako skutečné řešení do budoucna.

Po přidání plánování I/O byl prvním zamýšleným využitím plánovač BFQ (Budget Fair Queuing), na němž se pracuje už roky. Každému procesu přiděluje rozpočet I/O, což v kombinaci s několika heuristikami vede k údajně mnohem lepší odezvě I/O, zvláště na pomalejších zařízeních. Uživatelé s rotačními úložišti mají z BFQ prospěch, existují však výhody i při použití pomalejších SSD zařízení. V důsledku je tu značný zájem o použití BFQ například v mobilních zařízeních.

Myšlenka, že BFQ je lepší než plánovač CFQ, který se nachází v hlavních jádrech, není nijak zvlášť kontroverzní, ale začlenit BFQ byl i tak dlouhý proces. Jednou z posledních překážek bylo, že šlo o tradiční plánovač I/O spíše než vícefrontový plánovač. Vývojáři subsystému blokové vrstvy mají dlouhodobý cíl přejít u všech ovladačů na vícefrontový model a začlenění obyčejného (tedy ne vícefrontového) plánovače I/O se nejevilo jako krok tímto směrem.

Vývojář BFQ Paolo Valente v posledních několika měsících pracoval na převedení kódu do vícefrontového rozhraní. Známé problémy s jeho prací byly vyřešeny a správce blokového subsystému, Jens Axboe, souhlasil se začleněním do vydání 4.12. Pokud všechno půjde podle plánu, bude dlouhé čekání na plánovač BFQ u konce.

Zajímavé je, že BFQ nebude jediným plánovačem vícefrontového I/O, který se v cyklu 4.12 dostane do upstreamu. Ten druhý, vyvinutý v mnohem kratším čase, by totiž měl být také začleněn. Člověk by se mohl divit, k čemu je potřeba druhý plánovač, obzvláště když vývojáři kladou důraz na obecná řešení, která mohou pokrýt širokou škálu použití. Ovšem zdá se, že vskutku existuje rozumný důvod pro začlenění druhého vícefrontového plánovače.

BFQ je složitý plánovač navržený tak, aby poskytoval dobrou interaktivní odezvu, zvláště na pomalejších systémech. Má relativně vysokou režii pro dílčí operace, což je opodstatněné, když I/O operace samotné jsou pomalé a drahé. Tato složitost ale nemusí dávat smysl v situacích, kdy jsou I/O operace levné a hlavním problémem je propustnost. Při pracovní zátěži serveru používajícího SSD může být lepší používat jednodušší plánovač, který umožňuje slučování požadavků a možná i jednoduchá pravidla, většinu času se však neplete do cesty.

Plánovač I/O Kyber, kterým přispěl Omar Sandoval, by mohl být přesně tím potřebným plánovačem. Je určen pro rychlá vícefrontová zařízení a postrádá většinu složitosti plánovače BFQ. Nemá ani tisíc řádek kódu. Jeho pravidla, i když jednoduchá, se jeví jako zajímavá ozvěna práce na bufferbloatu, kterou se povedlo udělat v části jádra, která má na starosti síťování.

I/O požadavky procházející skrze Kyber jsou rozděleny do dvou primárních front, jedné pro synchronní a druhé pro asynchronní požadavky – jinými slovy, jedné pro čtení a druhé pro zápisy. Proces, který žádá o čtení, obvykle není schopen pokračovat, dokud není příslušnému požadavku vyhověno a data nejsou k dispozici, tudíž tyto požadavky jsou vnímány jako synchronní. Naopak operace zápisu může být dokončena někdy později, přičemž žádající proces většinou nezajímá, kdy k zápisu skutečně dojde. Takže je běžné upřednostňovat čtení před zápisy, nikoliv však do té míry, že by došlo k vyhladovění zápisů.

Klíčem k algoritmu Kyber je to, že počet operací (čtení i zápisu) odeslaných do odbavovacích front (které směřují operace přímo zařízení) je striktně omezen tak, že udržuje tyto fronty relativně krátké. Pokud jsou odbavovací fronty krátké, pak je množství času, který uplyne během čekání požadavku ve frontě (latence dílčího požadavku), poměrně malé. To zajišťuje rychlé dokončení požadavků s vyšší prioritou.

Plánovač reguluje skutečný počet požadavků vpuštěných do odbavovacích front podle měření doby nutné ke splnění jednotlivých požadavků a úpravou limitů k dosažení požadovaných latencí. K dosažení cílových latencí slouží správci systému dva atributy s výchozími hodnotami 2 ms pro čtení a 10 ms pro zápis. Jako vždy bude při nastavování těchto hodnot docházet ke kompromisům. Příliš nízké hodnoty zajistí nízké latence, ovšem za cenu méně příležitostí ke sloučení požadavků, což zhorší propustnost.

Také Kyber byl přijat do začleňovacího okna 4.12. Takže pokud půjde vše podle plánu, bude mít jádro 4.12 dvě nové možnosti plánování I/O ve vícefrontových zařízeních. Uživatelé, kteří se zabývají interaktivní odezvou a možná pracují s pomalejšími zařízeními, se pravděpodobně přikloní k BFQ, zatímco servery, na kterých poběží úlohy citlivé na propustnost, budou pravděpodobněji používat Kyber. Každopádně se podařilo zaplnit významnou mezeru v subsystému vícefrontového blokového I/O, čímž se otevírá cesta k případnému přechodu všech jaderných blokových ovladačů na vícefrontové API.

Odkazy a zdroje

Linux Weekly News: Kernel release status
Two new block I/O schedulers for 4.12

Další články z této rubriky

Jaderné noviny – 28. 9. 2017: Poznámky z mikrokonference o trasování na LPC
Jaderné noviny – 21. 9. 2017: Zbytek začleňovacího okna 4.14
Jaderné noviny – 14. 9. 2017: První polovina začleňovacího okna 4.14
Jaderné noviny – 8. 9. 2017
Jaderné noviny – 31. 8. 2017: Statistiky vývojového cyklu 4.13

Diskuse k tomuto článku

14.5. 10:47 lertimir | skóre: 60 | blog: Par_slov
Rozbalit Rozbalit vše Re: Jaderné noviny – 27. 4. 2017: Dva nové plánovače blokového I/O pro vydání 4.12
Odpovědět | Sbalit | Link | Blokovat | Admin
Chybí mi ještě plánovač pro desktop. Protože podle mne desktop řeší jinou optimalizační úlohu než servery. Server řeší optimální rozložení výkonu HW na procesy. Pro desktop je důležitá odezva používaného programu, která vytváří pocit pro uživatele na reakcích systému. A odezva by měla být pro okno (proces) který má fokus. A na to je potřeba komunikace mezi desktop prostředím a jádrem s plánovačem, který proces má fokus a řízení priorit.
14.5. 12:18 hlasovani | skóre: 1 | blog: zapamatovat
Rozbalit Rozbalit vše Re: Jaderné noviny – 27. 4. 2017: Dva nové plánovače blokového I/O pro vydání 4.12
co takhle patchset Cona Kolivase? http://lkml.iu.edu/hypermail/linux/kernel/1705.1/03109.html
16.5. 20:30 knizmi | skóre: 27 | blog: Blog | Kosmonosy
Rozbalit Rozbalit vše Re: Jaderné noviny – 27. 4. 2017: Dva nové plánovače blokového I/O pro vydání 4.12
Ja myslel, ze CK to zabalil nekdy v dobe, kdy byla aktualni jadra 2.6.x. A ted koukam, ze patche pro desktop dela dal :) Diky za odkaz!
17.5. 12:21 Michal Kubeček | skóre: 71 | Luštěnice
Rozbalit Rozbalit vše Re: Jaderné noviny – 27. 4. 2017: Dva nové plánovače blokového I/O pro vydání 4.12
Spíš bych to formuloval tak, že nedávno zase začal.
14.5. 23:12 pc2005 | skóre: 34 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Jaderné noviny – 27. 4. 2017: Dva nové plánovače blokového I/O pro vydání 4.12
Plánovač I/O != plánovač procesů
Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房
23.5. 14:28 Bill Gates
Rozbalit Rozbalit vše Re: Jaderné noviny – 27. 4. 2017: Dva nové plánovače blokového I/O pro vydání 4.12
To neni pravda ze okno ktere ma focus je pro uzivatele to podstatne. Treba ted pri psani prispevku sice pisu prispevek v prohlizeci, ale na vedlejsim monitoru mam KATE, ktery focus nema ale po prejeti mysi nad to okno zascrolluju s kodem pomoci kolecka mysi a focus pritom nemenim. Klavesnice tedy operuje stale s prohlizecem, kdezto kolecko mysi s tim oknem, ktere je pod nim. Neni to tak trivialni autodekovat co uzivatel ocekava, ze by se melo "pruzne" chovat a mit dobre odezvy. Pak vyvijime nastroj, ktery se snazi "pomahat a chranit" ale koncime u toho, ze ve vysledku akorat prekazi a plete se do prace tam kde nema. Klasika. Pro cloveka obchodujiciho treba na burze to muze byt okynko nekde zasite kdesi v rohu monitoru, celou dobu denniho zivotniho cyklu desktopu prakticky netknute, z pohledu z-indexu uplne dole, ale pritom neuveritelne dulezite, protoze obsahuje neustale aktualizovany graf s aktualnimi daty a to navic treba i kdyz je castecne prekryto.
24.5. 02:48 pc2005 | skóre: 34 | blog: GardenOfEdenConfiguration | liberec
Rozbalit Rozbalit vše Re: Jaderné noviny – 27. 4. 2017: Dva nové plánovače blokového I/O pro vydání 4.12
Jj a nebo člověk píše něco v editoru (<1 promile CPU) a na pozadí se mu kompiluje kernel (tak 99% CPU) nebo přehrává film (realtime).
Chuck Norris řekl babičce, že si dá jen 3 knedlíky. A dostal 3 knedlíky. | 帮帮我,我被锁在中国房

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.