Hlavní navigace

MGLRU: lepší správa paměti od Google

10. 1. 2022

Sdílet

SDR DDR1 DDR2 DDR3 DIMM paměti Autor: David Ježek, podle licence: CC BY-SA 4.0

V linuxovém jádře často nastane situace, že je potřeba uvolnit stránku paměti. V současnosti se o to stará algoritmus LRU (Least Recently Used). Google ale již nějako dobu pracuje na multigenerational LRU (MGLRU). Podle Google současný LRU spotřebuje mnoho CPU a často se rozhodne pro uvolnění nesprávné stránky. Nové MGLRU je přímočaré, výkonné a univerzální. Hodí se jak pro mobilní zařízení, tak pro výkonné servery.

Minulý týden v úterý Google poslal již 6. verzi záplat s MGLRU. V současnosti můžete MGLRU vyzkoušet buď vlastní aplikací záplaty, nebo pokud se přeložíte třeba jádro Arch Linux ZEN. V něm je MGLRU již od verze 5.12.

Google také experimentálně zapnulo MGLRU asi miliónu uživatelů Androidu a desítkám miliónů uživatelů Chrome OS. MGLRU se projevilo snížením zátěže kswapd o 40 % a 85 % snížením výskytu OOM killeru. Doufejme, že se MGLRU v linuxovém jádře dočkáme ještě letos.

(zdroj: phoronix)  

Našli jste v článku chybu?
  • Aktualita je stará, nové názory již nelze přidávat.
  • 10. 1. 2022 19:24

    RDa

    Muze nekdo vysvetlit, jak muze vyber stranky k odswapovani zmenit cetnost OOM killeru? Pokud nemam pamet, tak neni co vyhazovat. Pokud je v pameti nepotrebnej cache buffer, tak taky ne.

    Pokud nemate pamet ani swap, tak vas OOM nemine pri potreba naalokovat dalsi bloky, takze je zcela jedno kdo bude zastrelen, ve jmenu obecneho dobra (tedy dokud to neni init, ovsem).

  • 10. 1. 2022 20:57

    Fík

    No zas tak jednoduché to není. OOM se aktivuje i když ještě swap je, protože LRU třeba už neví, co zahodit, kdežto MGLRU ještě umí víc věcí vyhodit. Každopádně OOM na tom MGLRU hodně závisí.

    Z Documentation/vm/mul­tigen_lru.rst:

    Recipes
    =======
    Personal computers


    :Thrashing prevention: Write ``N`` to
    ``/sys/kernel/mm/lru_g­en/min_ttl_ms`` to prevent the working set of
    ``N`` milliseconds from getting evicted. The OOM killer is invoked if
    this working set can't be kept in memory. Based on the average human
    detectable lag (~100ms), ``N=1000`` usually eliminates intolerable
    lags due to thrashing. Larger values like ``N=3000`` make lags less
    noticeable at the cost of more OOM kills.