Portál AbcLinuxu, 5. května 2025 10:37
Teoreticky to může to být i obráceně: systém původně potřeboval něco odswapovat, ale potom se paměť uvolnila. Systém nezačne sám od sebe načítat stránky ze swapu, dokud je nepotřebuje.
Pro tazatele: není vůbec důležité "kolik je toho ve swapu" nebo "kolik mám volné paměti" (ve smyslu hodnoty free). Spíš je důležité, kolik paměti je "k dispozici", to je ta orientační hodnota available na novějších systémech, do které se počítá i např. reclaimable page cache. A také to, jestli se příliš často nestává, že potřebuje-li systém alokovat paměť, musí kvůli tomu čekat na zápis na disk (ať už kvůli uvolnění page cache nebo kvůli odswapování nepoužívaných stránek), případně jestli nemusí příliš často načítat stránky zpátky ze swapu. V tom prvním ohledu může právě "zbytečné" odswapování nepoužívaných stránek pomoci.
Swap se může použít i dřív, než dojde RAM, jak už tu někteří psali.
Ale ještě bych rád upozornil na další možný scénář, při kterém popsaná situace vzniká. Ano, swap se (obecně a zjednodušeně řešeno) začne používat, když systém usoudí, že má nedostatek volných fyzických stránek. Důležitějším faktem ale je, že se swap (obecně) nepřestane používat poté, co se fyzická RAM uvolní. Jediný způsob, jak dostat odswapované stránky zpět do fyzické paměti, je přístup k nim, tedy zápis/čtení na virtuálních adresách, které jsou v té době namapované do swapu. To vyvolá výjimku (protože záznamy o těchto stránkách má pouze kernel ve svých datových strukturách, ale v TLB nebo (v případě Intelu) ve stránkovacích tabulkách o nich záznam není, pochopitelně, protože neexistuje v té chvíli fyzická stránka, na kterou by ukazoval) a přinutí kernel přesunout příslušné stránky zpět do RAM a aktualizovat TLB nebo stránkovací tabulky (aniž by si toho příslušný proces všiml). To se ovšem obecně nebude dít příliš často, protože ve swapu skončí (přednostně, na základě různých hardwarem podporovaných heuristik) málo používané stránky.
Sečteno a podtrženo, je možné, že systém měl v minulosti (během téhož uptime) nedostatek paměti, začal swapovat, ale pak se paměť znovu uvolnila. Data, která skončila ve swapu, ale žádný proces (ani kernel) k nim nepotřeboval znova přistupovat, zůstávají dál ve swapu. (A v podstatě to ničemu nevadí, dlužno dodat.)
Pro Linux existovalo několik generací patch setů pro „unswap“, které by po uvolnění fyzické paměti začaly automaticky (a relativně pomalu) přesouvat + mapovat odswapované stránky zpět do fyzické paměti, aniž by takové stránky musely být nutně potřebné. Ale pokud vím, žádný z těch patch setů se nakonec nedostal do hlavní řady kernelu a většinou debata skončila závěrem typu „než řešit tohle, raději víc RAM“.
Unswap pomáhá, když je dočasný nedostatek paměti ojedinělá a vzácná událost. Unswap naopak škodí, když se dočasný nedostatek paměti dostavuje častěji nebo periodicky. Vše tedy závisí a účelu a způsobu použití příslušného systému a neexistuje žádné one size fits all řešení. Zatím je tedy „řešením“ nedělat nic a docela to funguje.
Tak proto se může stát, že se používá swap, i když (už) v danou chvíli není potřebný.
Nijak.
Pozorností jsem nikdy příliš neoplýval.
swapoff -a && swapon -a
zram
. Je to rýchlejšie ako SSD, ale aj drahšie.
vm.swappiness
na 100.
Samozrejme, aj tu platí pravidlo "Všetko s mierou!" a admin musí byť príčetný.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.