Facebook je objavio zakrpe koje poboljšavaju Slab kontroler memorije u Linuxu

Romano Gushchin (softverski inĹľenjer na Facebooku) objavio je skup zakrpa za aplikaciju za alokaciju memorije slab upravljaÄŤkog programa (memorijski kontroler) na mailing listi za razvoj Linux kernela.

Novi upravljački program je značajan po premještanju računovodstva slabova s ​​razine memorijskih stranica na razinu kernel objekata, što omogućuje dijeljenje slab stranica između različitih c-grupa, umjesto dodjeljivanja zasebnih slab predmemorija za svaku c-grupu.

Roman je pronašao ono što on naziva "vrlo ozbiljnom greškom" u postojećem memorijskom kontroleru ploče što dovodi do slabe iskorištenosti ovih dana s cgroups.

„Pravi razlog zbog kojeg postojeći dizajn dovodi do slabe iskorištenosti ploče je jednostavan: stranice ploča koristi isključivo memorijski bazen.

Ako cgroup izvrši samo nekoliko dodjela određene veličine ili ako je nakon uklanjanja cgroupa ostalo nekoliko aktivnih objekata ili cgroup sadrži jednu navojnu aplikaciju koja jedva dodjeljuje bilo koji objekt jezgre, ali svaki put na novom CPU: u svim tim slučajevima rezultirajuća iskorištenost ploče vrlo je mala.

Ako je onemogućeno računovodstvo kmem, kernel može koristiti slobodan prostor na stranicama ploče za druga izdvajanja. «

Memorijski kontroler za Slab koji je prošle godine predložio Romano Gushchin bio je prilično obećavajući jer omogućuje povećanu učinkovitost korištenja slaba, smanjuje veličinu memorije koja se koristi za slab za 30-45% i značajno smanjuje ukupnu potrošnju memorije jezgre.

Nadalje, implementirane zakrpe su pokazale da Facebook već koristi kod u produkciji na svojim poslužiteljima i štedio je ~650-700MB+ za front-end web poslužitelje , predmemoriranje baze podataka i DNS poslužitelje, među ostalim pogodnostima.

Smanjenje broja nepomičnih ploča također pozitivno utječe na fragmentaciju memorije. Novi memorijski kontroler značajno pojednostavljuje kod za obračun ploča i eliminira potrebu za složenim algoritmima za dinamičko stvaranje i brisanje predmemorija ploča za svaku c-grupu.

Sve cgroups za memoriju u novoj implementaciji koriste zajednički skup predmemorija ploča, a životni vijek predmemorija ploča više nije vezan za životni vijek memorijskih ograničenja postavljenih kroz cgroup.

Preciznije računovodstvo resursa implementirano u novom kontroleru ploče trebalo bi teoretski više opteretiti CPU, ali u praksi se pokazalo da su razlike zanemarive.

Konkretno, novi slab kontroler se koristi već nekoliko mjeseci na Facebook serverima uživo koji obrađuju različite vrste opterećenja, i do sada nisu uočene značajne regresije.

Flaster sadrži nekoliko polusamostalnih dijelova, koji se također mogu koristiti izvan memorijskog kontrolera ploče:

  • API za uÄŤitavanje podstranica, koji se u budućnosti moĹľe koristiti za brojanje drugih objekata koji nisu veliÄŤine stranice, na primjer alokacija percpu
  • API mem_cgroup_ptr, gdje se pokazivaÄŤi broje do memcg, moĹľe se ponovno upotrijebiti za uÄŤinkovito preusmjeravanje drugih objekata, npr. Predmemorije stranica.

Istovremeno, dolazi do značajnog smanjenja potrošnje memorije : na nekim hostovima bilo je moguće uštedjeti do 1 GB memorije, ali ovaj pokazatelj uvelike ovisi o prirodi opterećenja, ukupnoj veličini RAM-a, količini CPU-a i karakteristikama rada s memorijom.

Umjesto stvaranja zasebnog skupa kmem_cacheva za svaku memorijsku cgroup, koriste se dva globalna skupa: korijenski skup za neevidentirane i korijenske grupe cgroup zadataka i drugi skup za sve ostale dodjele. To omogućuje pojednostavljivanje upravljanja životnim vijekom pojedinačnih kmem_cacheva.

Konačno, ako ste zainteresirani za učenje o novom setu od 19 zakrpa, možete ga pronaći na mailing listi kernela.


Dodaj kao preferirani izvor na Googleu