Romano Gushchin (Facebooki tarkvarainsener) logis Linuxi kerneli arenduse meililistis oleva plaadidraiveri mälu eraldamise rakendusse (mälukontroller) komplekti parandusi.
Uus draiver on tähelepanuväärne selle poolest, et see liigutab slab-arvestuse mälulehtede tasemelt kerneli objektide tasemele, võimaldades jagada slab-lehti erinevate c-rühmade vahel, selle asemel, et eraldada iga c-rühma jaoks eraldi slab-vahemälu.
Roman leidis olemasolevas plaadimälukontrolleris selle, mida ta nimetab "väga tõsiseks veaks", mis viib tänapäeval grupirühmade vähese kasutamiseni.
„Tegelik põhjus, miks olemasolev disain vähese plaatide kasutamiseni viib, on lihtne: plaadilehti kasutab eranditult mälupulk.
Kui grupis on ainult mõned kindla suurusega eraldised või kui pärast grupi eemaldamist on mõni aktiivne objekt jäänud või sisaldab grupp ühte keermestatud rakendust, mis eraldab vaevu kerneli objekte, kuid iga kord uuel protsessoril: kõigil neil juhtudel on sellest tulenev plaatide kasutamine väga madal.
Kui kmemi arvestus on keelatud, saab kern muude eraldiste jaoks kasutada tahvlilehtedel vaba ruumi. «
Romano Gushchini poolt eelmisel aastal välja pakutud Slab mälukontroller oli üsna paljutõotav, kuna see võimaldab suurendada Slabi kasutamise efektiivsust, vähendab Slabi jaoks kasutatava mälu mahtu 30–45% ja vähendab oluliselt tuuma kogumälu tarbimist.
Lisaks on rakendatud parandused näidanud , et Facebook kasutab koodi juba oma serverites tootmises ja säästis muude eeliste hulgas ~650–700 MB+ esiotsa veebiserverite, andmebaasi vahemällu salvestamise ja DNS-serverite jaoks .
Liikumatud plaatide arvu vähendamine mõjutab positiivselt ka mälu fragmenteerumist. Uus mälukontroller lihtsustab oluliselt plaatide arvestamise koodi ja välistab vajaduse keerukate algoritmide järele, mis dünaamiliselt looksid ja kustutaksid iga c-rühma plaatide vahemälu.
Uue rakenduse kõik mälu cgrupid kasutavad ühist plaatide vahemälude komplekti ja plaatide vahemälude eluiga ei ole enam seotud cgroupi kaudu seatud mälupiirangute elueaga.
Uues plaadikontrolleris rakendatud täpsem ressursside arvestus peaks teoreetiliselt protsessorit rohkem koormama, kuid praktikas osutusid erinevused tühiseks.
Eelkõige on uut plaadikontrollerit mitu kuud kasutatud Facebooki reaalajas serverites, mis käsitlevad erinevat tüüpi koormusi, ja seni pole olulisi regressioone tuvastatud.
Plaaster sisaldab paari poolisõltumatut osa, mida saab kasutada ka väljaspool tahvli mälukontrollerit:
- Alamlehe laadimise API, mida saab tulevikus kasutada muude objektide jaoks, mis pole lehe suurused, näiteks percpu jaotused
- API mem_cgroup_ptr, kus kursorid loendatakse memcg-ni, saab uuesti kasutada teiste objektide, näiteks pagecache'i tõhusaks taastootmiseks.
Samal ajal on mälukasutus märkimisväärselt vähenenud : mõnel hostil oli võimalik salvestada kuni 1 GB mälu, kuid see näitaja sõltub suuresti koormuse iseloomust, RAM-i kogumahust, protsessori mahust ja mäluga töötamise omadustest.
Selle asemel, et luua iga mälugrupi jaoks eraldi kmem_cache komplekt, kasutatakse kahte globaalset komplekti: loendamata juurkomplekt ja juurrühma cgroupi määrangud ning teist komplekti kõigi muude määrangute jaoks. See võimaldab lihtsustada üksikute kmem_ vahemälude haldamist kogu elu vältel.
Lõpuks, kui olete huvitatud uue 19 paranduse komplekti kohta lisateabe saamisest, leiate selle kerneli meililistist.