Mohlo by pomoci zvýšit /proc/sys/vm/page-cluster
(výchozí:3).
Z dokumentace jádra (sysctl/vm.txt
):
shluk stránek
page-cluster řídí počet stránek, do kterých jsou po sobě jdoucí stránky načteny ze swapu na jeden pokus. Toto je swapový protějšek k předčítání mezipaměti stránky. Zmíněná posloupnost se netýká virtuálních/fyzických adres, ale po sobě jdoucích na swapspace – to znamená, že byly vyměněny společně.
Jedná se o logaritmickou hodnotu – nastavení na nulu znamená „1 stránka“, nastavení na 1 znamená „2 stránky“, nastavení na 2 znamená „4 stránky“ atd. Vynulování zcela přepne napřed.
Výchozí hodnota jsou tři (osm stránek najednou). Pokud je vaše pracovní zátěž náročná na výměnu, může to mít určité výhody, pokud ji vyladíte na jinou hodnotu.
Nižší hodnoty znamenají nižší latence pro počáteční chyby, ale zároveň další chyby a I/O zpoždění pro následující chyby, pokud by byly součástí následného čtení stránek, které by přineslo.
Dokumentace nezmiňuje limit, takže je možné, že to nastavíte absurdně vysoko, aby se všechny swapy opravdu brzy načetly zpět. A samozřejmě to poté vrátit zpět na rozumnou hodnotu.
Zdá se mi, že nemůžete magicky "přimět systém, aby znovu reagoval". Pokutu nebo čtení stránek zpět z odkládacího prostoru do paměti utrpíte buď nyní, nebo vám ji utrpíte později, ale tak či onak vám to bude způsobeno. Opravdu, pokud uděláte něco jako swapoff -a && swapon -a
pak se můžete cítit více spíše bolest než méně, protože vynutíte zkopírování některých stránek zpět do paměti, které by jinak již nikdy nebyly potřeba, a nakonec by zapadly, aniž by byly přečteny (přemýšlejte:ukončíte aplikaci, zatímco je velká část její hromady zaměněna; tyto stránky mohou být zcela vyřazeny, aniž by byly kdy načteny zpět do paměti).
ale to vymaže stránky ze swapu, takže je třeba je zapsat znovu při příštím spuštění skriptu.
V podstatě každá stránka, která se zkopíruje zpět ze swapu do hlavní paměti, se stejně chystá upravit, takže pokud by někdy v budoucnu bylo potřeba ji přesunout zpět, aby se znovu odložila, stejně by musela být zapsána znovu ve swapu. Mějte na paměti, že swap je hlavně haldová paměť, nikoli stránky pouze pro čtení (které jsou obvykle zálohovány soubory).
Myslím, že vaše swapoff -a && swapon -a
trik je stejně dobrý jako cokoliv, na co jste přišli.
Můžete zkusit přidat programy, na kterých vám nejvíce záleží, do cgroup a vyladit swapování tak, aby při příštím spuštění aplikace bylo méně pravděpodobné, že přidané programy budou kandidáty na výměnu.
Některé z jejich stránek budou pravděpodobně stále vyměněny, ale může to vyřešit vaše problémy s výkonem. Velká část toho je pravděpodobně jen chování "zastav a spusť", když je mnoho stránek programu ve swapu a program se musí neustále pozastavovat, aby mohl své stránky vyměnit do RAM, ale pouze ve 4k krocích.
Alternativně můžete přidat spuštěnou aplikaci do cgroup a vyladit swappiness tak, aby aplikace měla tendenci používat odkládací soubor nejvíce. Zpomalí to aplikaci, ale ušetří to zbytek systému.