Romano Gushchin (Facebookin ohjelmistoinsinööri) kirjasi joukon korjauspäivityksiä slab-ajurin muistinvaraussovellukseen (muistin ohjaimeen) Linux-ytimen kehityspostituslistalla.
Uusi ajuri on merkittävä siinä, että se siirtää slab-laskennan muistisivujen tasolta ydinobjektien tasolle, mikä mahdollistaa slab-sivujen jakamisen eri c-ryhmien kesken sen sijaan, että jokaiselle c-ryhmälle allokoitaisiin erilliset slab-välimuistit.
Roman löysi nykyisessä levymuistisäätimessä sen, mitä hän kutsuu "erittäin vakavaksi virheeksi", mikä johtaa nykyään vähäiseen käyttöasteeseen ryhmien kanssa.
”Todellinen syy, miksi nykyinen muotoilu johtaa vähäiseen levynkäyttöön, on yksinkertainen: levysivuja käyttää yksinomaan muistialue.
Jos ryhmässä on vain muutama tietyn kokoinen allokointi tai jos ryhmän poistamisen jälkeen on jäljellä joitain aktiivisia objekteja, tai ryhmässä on yksi langoitettu sovellus, joka tuskin kohdistaa ytimen objekteja, mutta joka kerta uusi CPU: Kaikissa näissä tapauksissa seurauksena oleva levyn käyttöaste on hyvin alhainen.
Jos kmem-kirjanpito on poistettu käytöstä, ydin voi käyttää levysivuilla olevaa vapaata tilaa muihin allokointeihin. «
Romano Gushchinin viime vuonna ehdottama Slab-muistiohjain oli varsin lupaava, sillä se mahdollistaa Slab-muistinkäytön tehostamisen, vähentää Slabin käyttämän muistin kokoa 30–45 % ja vähentää merkittävästi ytimen kokonaismuistinkulutusta.
Lisäksi toteutetut korjaukset ovat osoittaneet , että Facebook käyttää koodia jo tuotannossa palvelimillaan ja säästää muiden hyötyjen ohella noin 650–700 megatavua+ käyttöliittymäpalvelimien, tietokannan välimuistin ja DNS-palvelimien osalta .
Kiinteiden levyjen määrän vähentäminen vaikuttaa myös positiivisesti muistin pirstoutumiseen. Uusi muistiohjain yksinkertaistaa merkittävästi levyjen huomioimista koskevaa koodia ja poistaa tarpeen käyttää monimutkaisia algoritmeja levyvälimuistejen dynaamiseen luomiseen ja poistamiseen kullekin c-ryhmälle.
Uuden toteutuksen kaikki muistin c-ryhmät käyttävät yhteistä levyvälimuistia, eikä levyjen välimuistien käyttöikä ole enää sidottu cgroupin kautta asetettujen muistirajoitusten elinaikaan.
Uuden levyohjaimen tarkemman resurssilaskennan pitäisi teoriassa ladata CPU: ta enemmän, mutta käytännössä erot osoittautuivat merkityksettömiksi.
Erityisesti uutta laattaohjainta on käytetty useiden kuukausien ajan Facebookin live-palvelimilla, jotka käsittelevät erityyppisiä kuormia, eikä toistaiseksi ole havaittu merkittäviä regressioita.
Laastari sisältää pari puoliksi itsenäistä osaa, jotka löytävät niiden käytön myös laatan muistin ohjaimen ulkopuolella:
- Alisivun lataussovellusliittymä, jota voidaan käyttää jatkossa laskemaan muita objekteja, jotka eivät ole sivun kokoa, esimerkiksi percpu-allokaatiot
- Mem_cgroup_ptr -sovellusliittymää, jossa osoitteet lasketaan muistiin, voidaan käyttää uudelleen muiden objektien, esimerkiksi pagecache, tehokkaaseen korjaamiseen.
Samaan aikaan muistin kulutus on laskenut merkittävästi : joillakin isännillä oli mahdollista säästää jopa 1 Gt muistia, mutta tämä luku riippuu pitkälti kuormituksen luonteesta, RAM-muistin kokonaismäärästä, suorittimen määrästä ja muistin käsittelyominaisuuksista.
Sen sijaan, että luodaan erillinen kmem_cache-joukko kullekin muistiryhmälle, käytetään kahta globaalia joukkoa: pääjoukko laskemattomille ja juuriryhmän ryhmäryhmille ja toinen joukko kaikille muille tehtäville. Tämä mahdollistaa yksittäisten kmem_cache-laitteiden käyttöiän hallinnan yksinkertaistamisen.
Lopuksi, jos olet kiinnostunut kuulemaan uusista 19 korjauspäivityksen joukosta, löydät ne kernel- postituslistalta.