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

Romano Gushchin (softverski inĹľenjer na Facebooku) je objavio set zakrpa za aplikaciju za alokaciju memorije slab drajvera (memorijski kontroler) na mailing listi za razvoj Linux kernela.

Novi drajver je značajan po premještanju računovodstva slabova sa nivoa memorijskih stranica na nivo kernel objekata, omogućavajući dijeljenje slab stranica između različitih c-grupa, umjesto dodjeljivanja odvojenih slab keš memorija 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 današnjih grupa.

„Pravi razlog zbog kojeg postojeći dizajn dovodi do slabe upotrebe ploča 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 je vrlo 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ćava povećanu efikasnost korištenja slaba, smanjuje veličinu memorije koja se koristi za slab za 30-45% i značajno smanjuje ukupnu potrošnju memorije jezgra.

Nadalje, implementirane zakrpe su pokazale da Facebook već koristi kod u produkciji na svojim serverima i da je , između ostalih pogodnosti, uštedio ~650-700MB+ za front-end web servere , keširanje baze podataka i DNS servere.

Smanjenje broja nepokretnih ploča također pozitivno utiče na fragmentaciju memorije. Novi kontroler memorije značajno pojednostavljuje kod za obračun ploča i eliminiše potrebu za složenim algoritmima za dinamičko kreiranje i brisanje keš memorija 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 vijek trajanja 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 aktivnim Facebook serverima koji obrađuju različite vrste opterećenja, i do sada nisu uočene značajne regresije.

Zakrpa sadrži nekoliko polunezavisnih dijelova, koji također mogu pronaći svoju upotrebu izvan memorijskog kontrolera ploče:

  • API uÄŤitavanja podstranica, koji se u budućnosti moĹľe koristiti za brojanje drugih objekata koji nisu veliÄŤine stranice, na primjer percpu alokacije
  • API mem_cgroup_ptr, gdje se pokazivaÄŤi broje do memcg, moĹľe se ponovo koristiti za efikasno ponovno slanje drugih objekata, na primjer predmemorija stranica.

Istovremeno, dolazi do značajnog smanjenja potrošnje memorije : na nekim hostovima je bilo moguće uštedjeti do 1 GB memorije, ali ovaj pokazatelj uveliko zavisi od prirode opterećenja, ukupne veličine RAM-a, količine CPU-a i karakteristika rada s memorijom.

Umjesto stvaranja zasebnog skupa kmem_cacheva za svaku memorijsku cgroup, koriste se dva globalna skupa: korijenski set za nebrojene i korijenski skup cgroup dodjela, a drugi skup za sve ostale dodjele. To omogućava pojednostavljivanje upravljanja životnim vijekom pojedinačnih kmem_cacheva.

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


Dodaj kao preferirani izvor na Googleu