Romano Gushchin (softvérový inžinier na Facebooku) pridal sadu záplat do aplikácie na alokáciu pamäte ovládača slab (ovládač pamäte) na mailing liste pre vývoj linuxového jadra.
Nový ovládač je pozoruhodný tým, že presunul účtovanie slabov z úrovne pamäťových stránok na úroveň objektov jadra, čo umožňuje zdieľať slabové stránky medzi rôznymi c-skupinami namiesto alokácie samostatných slabových vyrovnávacích pamätí pre každú c-skupinu.
Roman našiel to, čo nazýva „veľmi vážnou chybou“ v existujúcom radiči pamätí dosky, čo vedie v dnešnej dobe k nízkemu využitiu pomocou skupín.
„Skutočný dôvod, prečo súčasný dizajn vedie k nízkemu využitiu dosky, je jednoduchý: stránky dosky sú používané výhradne v oblasti pamäte.
Ak cgroup urobí iba niekoľko alokácií určitej veľkosti, alebo ak po odstránení cgroup zostanú nejaké aktívne objekty, alebo cgroup obsahuje jednu aplikáciu so závitom, ktorá ťažko alokuje žiadne základné objekty, ale vždy na novom CPU: vo všetkých týchto prípadoch je výsledné využitie dosky veľmi nízke.
Ak je účtovníctvo kmem zakázané, jadro môže na ďalšie rozdelenie využiť voľné miesto na stránkach slab. «
Pamäťový radič Slab, ktorý minulý rok navrhol Romano Gushchin, bol dosť sľubný, pretože umožňuje zvýšiť efektivitu využívania slabov, znižuje veľkosť pamäte používanej pre slaby o 30 – 45 % a výrazne znižuje celkovú spotrebu pamäte jadrom.
Okrem toho implementované záplaty naznačili , že Facebook už používa kód v produkčnom prostredí na svojich serveroch a ušetril približne 650 – 700 MB+ pre front-endové webové servery , ukladanie databázy do vyrovnávacej pamäte a DNS servery, okrem iných výhod.
Zníženie počtu nepremiestniteľných slabov má tiež pozitívny vplyv na fragmentáciu pamäte. Nový pamäťový radič výrazne zjednodušuje kód pre zohľadňovanie slabov a eliminuje potrebu zložitých algoritmov na dynamické vytváranie a mazanie vyrovnávacích pamätí slabov pre každú c-skupinu.
Všetky skupiny pre pamäť v novej implementácii používajú spoločnú sadu dosiek cache a životnosť dosiek cache už nie je viazaná na životnosť pamäťových obmedzení nastavených prostredníctvom cgroup.
Presnejšie účtovanie zdrojov implementované v novom kontroléri slab by malo teoreticky zaťažiť CPU viac, ale v praxi sa rozdiely ukázali ako zanedbateľné.
Nový ovládač slabov sa používa už niekoľko mesiacov na živých serveroch Facebooku, ktoré spracovávajú rôzne typy záťaží, a doteraz neboli zistené žiadne významné regresie.
Patch obsahuje niekoľko polonezávislých častí, ktoré nájdu svoje využitie aj mimo radiča pamäte dosky:
- Rozhranie Subpage Load API, ktoré sa v budúcnosti bude dať použiť na počítanie ďalších objektov, ktoré nemajú veľkosť stránky, napríklad pridelenia percpu
- Rozhranie mem_cgroup_ptr API, kde sa ukazovatele počítajú do memcg, je možné znovu použiť na efektívne opätovné rodičovské spojenie iných objektov, napríklad pagecache.
Zároveň dochádza k výraznému poklesu spotreby pamäte : na niektorých hostiteľoch bolo možné ušetriť až 1 GB pamäte, ale tento ukazovateľ závisí do značnej miery od povahy záťaže, celkovej veľkosti pamäte RAM, množstva procesora a charakteristík práce s pamäťou.
Namiesto vytvorenia samostatnej sady kmem_caches pre každú pamäťovú cgroup sa používajú dve globálne sady: koreňová sada pre nepočítané a priradenie koreňovej skupiny cgroup a druhá sada pre všetky ostatné priradenia. To umožňuje zjednodušenie celoživotnej správy jednotlivých kmem_caches.
Nakoniec, ak máte záujem dozvedieť sa viac o novej sade 19 záplat, nájdete ju na mailing liste jadra.