Portál AbcLinuxu, 6. května 2025 21:31
Aktuální verze jádra: 3.2-rc2. Citáty týdne: Andrew Morton, Matthew Garrett. Velké stránky, pomalé disky a velké prodlevy.
Aktuální vývojová verze jádra je 3.2-rc2 vydaná 15. listopadu. A na to, že je to -rc2 vydání po dost velkém začleňovacím okně, to má docela rozumnou velikost. Faktem je, že ačkoliv toto byl největší linux-next ve vydání za celou historii linux-next (myslím), rc2 má úplně stejné množství commitů, jako jsme měli během vydání 3.1. Obsahuje mnoho oprav a pár vylepšení v ktest.
Stabilní aktualizace: stabilní jádra 3.0.9 a 3.1.1 vyšla 11. listopadu. Obě obsahují velmi dlouhou řadu důležitých oprav.
A co v rámci memcg znamená pgfault/pgmajfault? Mám strach se zeptat – vzhledem k situaci s pgpgin/pgpgout mají tyto pravděpodobně souvislost s viskozitou mého šamponu nebo tak něco.
Je těžké s jistotou vědět, co je správně – k interakci mezi těmito všemi komponenty neexistuje žádná veřejně dostupná dokumentace. Ale dostatečné množství výrobců povoluje ASPM na platformách a pak nastaví tento bit, takže je pravděpodobné, že očekávají od OS, že do toho nebude sahat.
Podle měření to uspoří kolem 5 W na nečinném Thinkpadu X220.
-- Matthew Garrett možná opravuje závažný problém se spotřebou
Není to časté, ale není to sranda, když se to přihodí. Zapojte pomalé úložiště – například USB disk nebo hudební přehrávač – a spusťte něco jako rsync pro přesun velkého množství dat na tento disk. Tato operace chvíli potrvá, což nepřekvapí, ale více překvapí to, když se náhodné procesy začnou zasekávat. V nejhorších případech se desktop může zaseknout na celé minuty; netřeba říkat, že tohle není ten typ odezvy, co by si uživatelé přáli. Problém se může objevit na zdánlivě náhodných místech; zasekne se webový prohlížeč, ale síťový stream se zvukem se přehrává bez zaseknutí. Nakonec se všechno odblokuje, ale tou dobou už si uživatel dává třetí pivo a rozmýšlí o přednostech proprietárních systémů. Není hanbou si pak myslet, že by systém měl fungovat o něco lépe.
Tento typ chování hlásí v poslední době mnoho lidí; váš redaktor to také zaznamenal. Ale je obtížné to zreprodukovat, což znamená, že je těžké to vysledovat. Je taky docela dobře možné, že toto chování způsobuje více než jedna chyba. Tak či tak by mělo být o jednu takovou chybu méně, pokud patch od Mela Gormana bude fungovat. Několik vývojářů nicméně přemýšlí, jestli není lék v některých případech horší než samotná choroba.
Problém, který Mel našel, se chová asi takhle. Proces (třeba ten webový prohlížeč) dělá svou práci a najednou vyvolá výpadek stránky. To je normální; někdy se zdá, že jediným smyslem současných prohlížečů je „stress test“ systémů pro správu virtuální paměti. Jádro na to odpoví tím, že vezme volnou stránku pro adresní prostor procesu. Ale pokud je do jádra vestavěna podpora transparentních velkých stránek (a většina distributorů tuto funkci povoluje), ošetřování výpadků stránek se pokusí alokovat velkou stránku. S trochou štěstí bude zrovna na tuto příležitost čekat jedna velká stránka, ale ne vždycky tomu tak je; zejména, pokud je tu proces, který znečišťuje spoustu paměti, nemusí žádné velké stránky zbývat. V ten moment to začne jít z kopce.
Je nutné předpokládat, že jednou za čas, kdy systém už nějakou dobu běží, velké souvislé kusy paměti přestanou být k mání. Správa virtuální paměti má tendenci takové kusy rychle fragmentovat. Takže není dobré předpokládat, že velké stránky budou někde jen tak vysedávat; jádro se musí extra přičinit o to, aby takové stránky vznikly. Říká se tomu kompakce [compaction]: přesouvání stránek tak, aby se volné místo defragmentovalo a opět se zrodily velké stránky. Bez kompakce by funkce jako velké transparentní stránky byly neúčinné.
Mnoho kompakce se provádí na pozadí. Ale současná jádra dělají i „synchronní kompakci“, pokud by alokace velké stránky měla selhat kvůli nedostupnosti. Proces, který se o takovou alokaci snaží, skončí u migrování stránek ve snaze o vytvoření velké stránky, o kterou žádá. Tato operace v nejlepším případě není jen tak zadarmo, ale nemělo by docházet k několikasekundovým (nebo minutovým) prodlevám. Zde přichází na řadu USB disk.
Pokud se mnoho dat zapisuje na pomalé úložiště, paměť bude rychle zaplněna špinavými stránkami čekajícími na zápis. To samo o sobě může být problém, proto se nedávno začleněný kód pro brzdění takových operací hodně snaží, aby stránky pro jediné zařízení nezabraly příliš mnoho paměti. Ale zpětný zápis na pomalé zařízení nefunguje s kompakcí moc dobře; kód pro správu paměti nemůže migrovat stránku určenou pro zápis, dokud se I/O nedokončí. Když synchronní kompakce narazí na takovou stránku, bude čekat na dokončení I/O. Pokud stránka míří na pomalé zařízení a je v zadní části fronty plné spousty takových stránek, čekání může trvat dlouho.
Nesmíme zapomenout, že vytvoření jedné velké stránky může znamenat migraci stovek obyčejných stránek. Takže jakmile skončí čekání, práce není ještě zdaleka hotová; proces provádějící kompakci se může do dokončení práce dostat na konec fronty pro zápis ještě několikrát, než bude konečně výpadek stránky vyřešen. Jedině tehdy bude moci v práci pokračovat kód, který chtěl uživatel spustit – než dojde k dalšímu výpadku stránky a celé šílenství začne nanovo.
Melova oprava je jednořádková: pokud se proces snaží alokovat velkou transparentní stránku, synchronní kompakce nebude provedena. Mel došel k závěru, že v této situaci je lepší dát procesu obyčejnou stránku a nechat jej běžet dál. Zajímavé je to, že ne všichni s ním souhlasí.
Andrew Morton měl námitky jako první, řka: „Někteří lidé asi dají přednost tomu, aby pro svou výpočetní úlohu o 1000 hodinách dostali spousty velkých stránek a trocha čekání na tyto stránky je přijatelná.“ David Rientjes, pravděpodobně mysleje na úlohy v Google orientované na propustnost, řekl, že někdy je latence naprosto přijatelná a někdy úlohy při výpadku stránky opravdu chtějí dostat velké stránky. Melova změna způsobuje to, že je méně pravděpodobné, že při výpadku budou velké stránky alokovány; David to zjevně nevnímá jako dobrou věc.
Někdo by mohl odpovědět (a Mel odpověděl), že mechanismus transparentních velkých stránek nefunguje jen při výpadku stránky. Jádro se bude snažit nahradit malé stránky na pozadí, zatímco proces běží; tento mechanismus by mohl přinést více velkých stránek – alespoň pro déle běžící procesy – i když nejsou v době výpadku dostupné. V případech, kdy to nestačí, se mluvilo o přidání nového čudlíku, který by umožnil administrátorovi nastavit, že se má používat synchronní kompakce. Sémantika takového čudlíku není jasná; dalo by se argumentovat, že když jsou alokace velkých stránek tak moc důležitější než latence, systém by měl také agresivněji získávat zpět stránky.
Andrea Arcangeli to okomentoval slovy, že se mu nelíbí, jakým způsobem Melova změna vede k nepoužívání velkých stránek při výpadcích; podle něj by bylo lepší najít způsob, jak zabránit synchronní kompakci v tom, aby zůstávala viset. Objevilo se několik nápadů, jak to udělat, ale v době psaní tohoto textu nebylo nalezeno žádné řešení.
Tyto drobnosti půjde jistě časem vyřešit. Pokud se mezitím ukáže, že je Melův patch nejlepším řešením, rozhodnutí jej začlenit by mělo být jisté. Když jde o to vybrat si mezi 1) systémem, který reaguje i během intenzivního I/O u pomalých zařízení a 2) náhodnými, dlouhými záseky v těchto situacích, můžeme hádat, že většina uživatelů si vybere to první. Pokud se nevyskytnou komplikace, můžeme tento patch očekávat v hlavní řadě docela brzo a ve stabilním stromě snad nedlouho poté.
Několik vývojářů nicméně přemýšlí, jestli není lék v některých případech lepší než samotná choroba.
Nemělo tam být "horší"?
muze mi nekdo prosim vysvetlit co je to velka stranka? stranka (page) na 4kB, takze velkou strankou se mysli vetsi mnozstvi stranek, tj. nejaky souvisly blok?To jsou prostě velké stránky. Konkrétní velikosti závisí na architektuře. V dobách systémů s paměti v řádu MB byly stránky velké 4 KB tak akorát, u pamětí v GB už je to příliš malá velikost, která generuje spoustu zbytečné režie. Proto se používají i velké stránky.
nejaky terminus technicus nebo anglicky ekvivalent by nebyl?Huge page
Vývojáři ale mají potíže s tím, že na velké stránky je potřeba rootaJo, tohle je problém. Úplně stejná situace nastává, když chce člověk při použítí nějaký kryptografie zamknout kus paměti (typicky klíč) v RAM proti odswapování (
mlock()
), na to je taky potřeba root, takže v praxi to je v podstatě nepoužitelný :-/
Chtělo by to mít možnost tyhle věci nastavit per-process i pro neprivilegovaný procesy, s nějakými omezeními samozřejmě...
česky taky velké stránky?Já bych jim říkal „obrovské stránky“
huráá konečně to I/O začal někdo řešit..a co teprv když se zplní ram a dojde ke swapu..to je pak na restart :( i seberychlejší PC je pak zabity
to mi nějak uniklo..a už je to ve stable větvi? Protože v Archu s aktuálním kernelem stále stejnej problém a projevuje se stejně jak na 5 let starým notesu s intel c2d tak i na PC s i5
ale teď přemýšlím, že to nebylo tak úplně kopírování, ale sežrání RAM procesem při zpracování dat z HDD.. každopádně i tohle by nemělo zalagovat celej OS..třeba jen doba přihlášení do tty je pak na vypití kafe více než dostatečná
swappiness mám na 10 a na to druhé když bude čas tak mrknu
na 100? to se mi zdá hodně přehnané..možná zkusím vrátit na původních 60 nebo kolik to bylo, ale spíš jsem myslel, že u desktopu se výplatí snížit
protože nikdo nepředpokládá, že tam bude nějaká aplikace, která při práci zabere veškerou paměť a bude to vadit, není tam takový nárok na latenceTo je myšleno vážně?
s/pgpgpin/pgpgin/
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.