Portál AbcLinuxu, 15. května 2025 08:12
Jak jsem už psal v původním vlákně, pozorní čtenáři toho LKML threadu mohli na Lennartovo řešení natrefit už tehdy. Jak se tam ale také upozorňuje (a jak jsem psal i já) - na běžném desktopu neběží aplikace běžně přes TTY. Ano, pro kompilaci kernelu to funguje, pro aplikace puštěné z konzole s vlastním terminálem to taky funguje, ale to je tak všechno. Pokud aplikaci pustíte třeba z KDE/Gnome panelu, spadnou do stejné skupiny.
V té diskuzi padl i nápad zdokonalení podpory cgroups v systemd, který by tak mohl házet alespoň daemony do skupin zvlášť, nicméně i tak by zbývalo vyřešit ještě ostatní aplikace. Jak už naznačili ostatní - prosté přidání pár příkazů před spuštěním binárky nestačí, něco musí sledovat skončení dané aplikace a odstranit group. A mít pro každou větší aplikaci vlastní wrapper? Ne, díky.
Kernelovské řešení není v současnosti o moc lepší, ale jsou tam snahy o další možnosti heuristiky a detekce. A také větší potenciál.
Mě ososbně se líbí Linusova vize - cgroups jako subsystém s kernel config možností automatického přidělování procesů do skupin na základě použití různých (rozšířitelných, vylepšitelných) metod heuristiky. Nezávisle na userspace wrapperech. Nezávisle na distribuci. Transparentní odebrání skupiny po skončení procesu/procesů.
Tím chci naznačit, že ani ten kousek .bashrc skriptu, ani současný 200line kernel patch nedělá prakticky NIC pro běžného Ubuntu usera. Ten by musel všechny větší aplikace pouštět přes wrappery nebo z terminálu.
Ono je to tím, že cgroups nejsou všelékem. Plánovač sám o sobě není špatný, CFS jako "fair" scheduler opravdu dělá svoji práci, pokud se jedná o jednoduché schéma několika procesů. Pokud pustíte třeba firefox a thunderbird a v obou se vám povede "vytížit CPU na 100%", pak (na uniprocessor systému) dostane každý proces přibližně 50%, na střídačku.
Problém je, že věci jako make
spawnují pro každý zdrojový soubor novou instanci GCC. Myslel jsem, že by se o to měl postarat nějaký kód, který by teoreticky mohl počítat cputime potomků do celkového cputime rodiče, ale asi to tak nefunguje a plánovač bere každé nové spuštění gcc jako samostatný proces, který má plný nárok na processor.
Není to však hezké řešení, takže patch by se měl do jádra dostat tak či tak.Vcelku důležitá oprava: Linus si myslí, že... Bohužel jak Lennart podle mě vcelku trefně podotknul (a jak se píše i v #5), většina uživatelů nepoužívá počítač stejně jako Linus a pár dalších vývojářů jádra, takže u nich patch nebude fungovat. Článek o tom bude v JN; když jsem ho překládal, tak se mi zdálo, že Linusovi už asi trošičku hráblo...
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.