Facebook vydal opravy, které vylepšují řadič paměti Slab v Linuxu

Romano Gushchin (softwarový inženýr z Facebooku) zaregistroval sadu záplat do aplikace pro alokaci paměti ovladače slab (paměťový řadič) na mailing listu pro vývoj linuxového jádra.

Nový ovladač je pozoruhodný tím, že přesouvá účetnictví slabů z úrovně paměťových stránek na úroveň objektů jádra, což umožňuje sdílet slabové stránky mezi různými c-skupinami, namísto alokace samostatných slabových mezipamětí pro každou c-skupinu.

Roman našel to, co nazývá „velmi vážnou chybou“ ve stávajícím řadiči pamětí desky, což dnes vede k nízkému využití cgroups.

"Skutečný důvod, proč stávající design vede k nízkému využití desky, je jednoduchý: stránky desky jsou používány výhradně fondem paměti."

Pokud existuje pouze několik alokací určité velikosti provedených cgroup, nebo pokud po odebrání cgroup zbývají nějaké aktivní objekty, nebo cgroup obsahuje jednu aplikaci se závitem, která stěží přiděluje jakékoli objekty jádra, ale pokaždé na novém CPU: ve všech těchto případech je výsledné využití desky velmi nízké.

Pokud je zakázáno účtování kmem, může jádro použít volné místo na stránkách slab pro další alokace. «

Paměťový řadič Slab, který loni navrhl Romano Gushchin, byl docela slibný, protože umožňuje zvýšit efektivitu využití slabů, snižuje velikost paměti používané pro slaby o 30–45 % a výrazně snižuje celkovou spotřebu paměti jádrem.

Implementované záplaty dále naznačily , že Facebook již používá kód v produkčním prostředí na svých serverech a ušetřil tak přibližně 650–700 MB+ pro front-endové webové servery , ukládání databáze do mezipaměti a DNS servery, mimo jiné výhody.

Snížení počtu nepohyblivých slabů má také pozitivní vliv na fragmentaci paměti. Nový řadič paměti výrazně zjednodušuje kód pro zohlednění slabů a eliminuje potřebu složitých algoritmů pro dynamické vytváření a mazání mezipamětí slabů pro každou c-skupinu.

Všechny cgroups pro paměť v nové implementaci používají společnou sadu mezipamětí desek a životnost mezipamětí desek již není vázána na životnost omezení paměti nastavených prostřednictvím cgroup.

Přesnější účtování zdrojů implementované v novém řadiči desky by mělo teoreticky načíst CPU více, ale v praxi se rozdíly ukázaly jako zanedbatelné.

Zejména nový slab controller se již několik měsíců používá na živých serverech Facebooku, které zpracovávají různé typy zátěží, a dosud nebyly zjištěny žádné významné regrese.

Patch obsahuje několik polonezávislých částí, které lze najít i mimo řadič paměti desky:

  • Subpage Load API, které lze v budoucnu použít k počítání dalších objektů, které nemají velikost stránky, například přidělení percpu
  • Rozhraní mem_cgroup_ptr API, kde se ukazatele počítají do memcg, lze znovu použít k efektivnímu opětovnému vytvořeníparentu dalších objektů, například pagecache.

Zároveň dochází k výraznému snížení spotřeby paměti : na některých hostitelích bylo možné ušetřit až 1 GB paměti, ale tento ukazatel do značné míry závisí na povaze zátěže, celkové velikosti RAM, množství CPU a charakteristikách práce s pamětí.

Místo vytváření samostatné sady kmem_caches pro každou paměťovou cgroup se používají dvě globální sady: kořenová sada pro nepočítané a kořenová přiřazení cgroup a druhá sada pro všechna ostatní přiřazení. To umožňuje zjednodušit celoživotní správu jednotlivých kmem_caches.

A konečně, pokud máte zájem dozvědět se více o nové sadě 19 patchů, najdete ji na mailing listu kernelu.


Přidat jako preferovaný zdroj v Googlu