Portál AbcLinuxu, 6. května 2025 09:17
Stav vývoje jádra. Citáty týdne: James Bottomley a Daniel Vetter. Jaderný podcast. Aktualizace plánovače deadline.
Současné vývojové jádro je 4.11-rc2, vydané 12. března. Linus k tomu řekl: „Myslím, že na tuto fázi jsme na tom s vývojovým jádrem dobře. Nemělo by být nijak zvlášť děsivé říct: ‚Budu trochu podnikavější a vyzkouším rc2 jádra.' Ano, je to stále ještě jeden z prvních kandidátů na vydání, ale nebojte se pomoct nám ujistit se, že nám to jde dobře.“
Seznam regresí v cyklu 4.11 ze 14. března obsahuje devět známých problémů.
Stabilní aktualizace: 4.10.2, 4.9.14 a 4.4.53 byly vydány 12. března. Následovaly je 4.10.3, 4.9.15 a 4.4.54 dne 15. března.
Když je špatně cizí e-mailová adresa, může to být jenom chyba při kopírování. Když je špatně vaše vlastní e-mailová adresa, může jít o raný příznak krize identity.
To je přesně ten důvod, proč _musíte_ všechno, co děláte, nejprve prodiskutovat v upstreamu. Vaše vnitřní týmy prostě nemají autoritu něco navrhovat.
—Daniel Vetter (dostupné také v podobě trička)
Jaderný podcast ze 13. března Jona Masterse je venku. „V jaderném podcastu z tohoto týdne: Linus Torvalds oznamuje vydání 4.11-rc2 (včetně předběžného zprovoznění pětiúrovňového stránkování Intelu), readahead odkládacího prostoru založený na VMA a probíhající vývoj v dalším cyklu.“
CPU plánovač deadline za sebou má dlouhou cestu, řekl na Linaro Connest 2017 Juri Lelli, ale stále zbývá hodně práce, kterou je třeba udělat. Ačkoliv byl tento plánovač původně určen pro realtime nasazení, máme důvod věřit, že se hodí i do jiných podmínek, včetně embedded a mobilních zařízení. Ve své přednášce Lelli shrnul, co všechno plánovač deadline aktuálně umí a co za změny se plánuje do blízké (a ne až tak blízké) budoucnosti.
Plánovač deadline byl začleněn ve vývojovém cyklu 3.14. Přidává možnosti plánování v reálném čase, které jsou v mnoha ohledech mocnější než tradiční prioritní plánování. Umožňuje specifikaci explicitních omezení latencí a umí se z principu vyhnout hladovění procesů. Má také lepší informace o omezeních při aktuálním vytížení, a tak může činit lepší rozhodnutí.
Plánovač jádra je postaven na algoritmu earliest deadline first (EDF), podle kterého dojde ke spuštění toho procesu, jehož deadline („mezní termín splnění“) nastane nejdříve. EDF je vylepšený o algoritmus constant bandwidth server (CBS, blíže popsaný v tomto článku), který brání procesu, který nemůže běžet po většinu svého času, aby překážel ostatním procesům. CBS v podstatě říká procesům, že musí svůj procesorový čas využít v době, kdy je tak naplánováno, a nikoli otálet a očekávat jeho přidělení v plném rozsahu těsně před deadline. Výsledkem je plánovač, který poskytuje silnou časovou izolaci úloh, při kterých nemůže jeden proces zabránit dalšímu ve splnění jeho deadline.
V současné době komunita, která vyvíjí mobilní a embedded systémy, vkládá mnoho úsilí do plánování, při němž se zohledňují energetické nároky. Tato práce má cenný cíl – plánovat tak, aby spotřeba energie systému byla co nejmenší – ovšem ukázalo se, že je těžké dostat ji do upstreamu, i když byla začleněna do běžného jádra Androidu. V mnoha případech může nakonec být plánovač deadline vhodnější, když je potřeba šetřit energií, řekl Lelli.
Novinkou ve vývoji je funkce zpětného získání šířky pásma (bandwidth reclaiming). Jedním z hlavních rysů plánování deadline je, že v okamžiku, když proces překročí svůj rezervovaný procesorový čas (svou „šířku pásma“ procesoru), plánovač ho prostě přiškrtí až do dalšího úseku plánování. Toto přiškrcení je nezbytné k tomu, aby probíhající proces nemohl kolidovat s ostatními procesy v systému, ale může představovat problém ve chvíli, kdy je požadavek procesu na víc času, než mu bylo přiděleno, legitimní. Funkce zpětného získání šířky pásma tedy udělá, co se nabízí: dá procesu k dispozici více času, pokud ho nepotřebuje žádný jiný proces v systému.
Co je možná méně zřejmé, je určení množství procesorového času, který není doopravdy zapotřebí. To se provádí pomocí algoritmu GRUB („greedy utilization of unused bandwidth“), který je popsaný v tomto článku (PDF). Stručně řečeno, GRUB sleduje, kolik dostupného procesorového času běžící úlohy s deadline skutečně využívají, a na základě toho odhadne objem procesorového času, který nebude využit. Díky tomuto odhadu je uvolnění času navíc pro účely procesu, který ho potřebuje, relativně přímočaré.
Škálování frekvence procesoru je důležitým nástrojem v portfoliu řízení spotřeby, ale tradičně moc nespolupracuje s algoritmy pro plánování v reálném čase, včetně deadline. V současných jádrech se předpokládá, že úlohy v reálném čase potřebují plný výkon CPU, tudíž jejich přítomnost způsobí, že CPU poběží naplno. To může vést k plýtvání v případě, že běžící procesy [deadline] tolik procesorového času nepotřebují.
Řešení tohoto problému vyžaduje celou řadu změn – počínajíc skutečností, že samotný plánovač deadline počítá s tím, že procesor poběží naplno. Plánovač je nutné opravit, aby bylo možné škálovat rezervace časů tak, aby se rovnaly aktuální rychlosti procesoru. Dále je potřeba tuto změnu rozšířit na heterogenní víceprocesorové systémy (např. big.LITTLE, kde nejsou všechny procesory systému stejně rychlé).
Jakmile to bude hotové, hodilo by se mít možnost řídit výběr frekvence procesoru přímo z plánovače deadline. Plánovač CFS, který se používá pro běžné úlohy, používá k výběru frekvence mechanismus sledování zátěže dílčích entit, ale plánovač deadline v současné době pouze tlačí frekvenci procesoru na maximum. Jakmile bude kód pro získávání šířky pásma začleněn, bude možné měřit skutečnou zátěž, kterou přidají úlohy s deadline. Pak bude možné zvolit takovou frekvenci procesoru, která zvládne všechny požadované úlohy efektivně.
Samozřejmě bude vždy potřeba se vypořádat se spoustou maličkostí. Například na systémech ARM se frekvence procesoru mění v samostatném pracovním vlákně. Aby byla možná spolupráce škálování procesoru a plánování deadline, bude třeba umožnit preempci úloh s deadline (u nichž preempce obvykle není možná) v tomto vlákně.
Plánovač deadline v současné době pracuje na úrovni samostatných procesů, nefunguje s řídícími skupinami. Nastávají ale situace, kdy je rozumné dát rezervaci deadline skupině procesů. Lelli uvedl vlákna virtuálních strojů a vykreslovací řetězce jako příklady zátěží, které by skupinové plánování deadline využily. Představa implementace spočívá v podstatě v dvouúrovňové hybridní hierarchii. Na nejvyšší úrovni by algoritmus EDF vybral další skupinu k vykonání, ale uvnitř této skupiny by se použilo běžné realtime plánování (FIFO nebo round-robin). Jakmile bude tato funkce fungovat, mohla by vytlačit stávající realtime škrtící mechanismus.
V ještě vzdálenější budoucnosti je podle Lelliho plán na rozšíření mechanismu pro opětovné využití šířky pásma, aby bylo možné snižovat prioritu. Když by proces překročil svůj rezervovaný čas, běžel by i nadále, ale pouze jako obyčejný proces bez realtime priority. Priorita by mu byla navrácena v dalším plánovacím období. Je také velký zájem o plánování orientovaném na šetření energie v rámci plánovače deadline.
Další kýžená vlastnost spočívá v podpoře afinity procesu k procesoru. Mechanismus dědění priority by také snesl nějaká vylepšení. Aktuálně je to tak, že úloha, která blokuje úlohu s deadline, tuto deadline podědí. Bylo by žádoucí přejít na algoritmus, jako je multiprocesor bandwidth inheritance protocol (PDF). Existuje také poptávka po mechanismu dynamické zpětné vazby, který by mohl upravovat rezervace procesu na základě pozorovaných potřeb. Zatím ale na těchto záležitostech nikdo nepracuje.
Video z přednášky je dostupné zde.
plánovače deadlinety už raději nechlastej - a nepřekládej!
15.3.
nemyslim si
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.