Facebook heeft patches uitgebracht die de Slab-geheugencontroller in Linux verbeteren

Roman Gushchin (een Facebook-software-engineer) register in de Linux-kernelontwikkelingslijst, een set patches voor de geheugentoewijzingstoepassing van de slabcontroller (een geheugencontroller).

De nieuwe controller is opmerkelijk door plaatboekhouding te verplaatsen van het geheugenpaginaniveau naar het kernelobjectniveau, waardoor het mogelijk wordt plaatpagina's te delen over verschillende groepen c, in plaats van afzonderlijke plaatcaches toe te wijzen aan elke groep c.

Roman ontdekte wat hij noemt een "zeer ernstige fout" in de bestaande slab-geheugencontroller die tegenwoordig leidt tot een lage bezettingsgraad bij cgroups.

“De echte reden waarom de bestaande lay-out tot een laag plaatgebruik leidt, is simpel: plaatpagina's worden uitsluitend gebruikt door een geheugenpool.

Als er slechts een paar toewijzingen van een bepaalde grootte zijn gemaakt door een cgroup, of als er enkele actieve objecten over zijn nadat de cgroup is verwijderd, of de cgroup een enkele threaded applicatie bevat die amper kernelobjecten toewijst, maar elke keer een nieuwe CPU: in al deze gevallen is het resulterende plaatgebruik erg laag.

Als kmem-accounting is uitgeschakeld, kan de kernel vrije ruimte op slab-pagina's gebruiken voor andere toewijzingen. «

De voorgestelde Slab-geheugencontroller door Romano Gushchin in het afgelopen jaar was best veelbelovend verhoogt de efficiëntie van het gebruik van de plaat, verminder de grootte van het gebruikte geheugen voor slab met 30-45% en vermindert het totale geheugengebruik van de kernel aanzienlijk.

Bovendien, de geïmplementeerde patches hebben aangegeven dat Facebook de code al in productie op hun servers gebruikt en was besparing van ~ 650-700 MB + voor front-end webservers, databasecaching en DNS-servers, naast andere onderscheidingen.

Door het aantal niet-mobiele platen te verminderen, wordt ook een positief effect waargenomen op het gebied van het verminderen van geheugenfragmentatie. Nieuwe geheugencontroller vereenvoudigt aanzienlijk de code voor boekhoudplaat en vereist geen ingewikkelde algoritmen voor het dynamisch aanmaken en verwijderen van plaatcaches voor elke groep c.

Alle cgroups voor geheugen in de nieuwe implementatie gebruiken een gemeenschappelijke set slabcaches, en de levensduur van slabcaches is niet langer gebonden aan de levensduur van geheugenbeperkingen die zijn ingesteld via cgroup.

De nauwkeurigere resource accounting geïmplementeerd in de nieuwe plaatcontroller zou theoretisch de CPU meer moeten belasten, maar in de praktijk bleken de verschillen te verwaarlozen.

En in het bijzonder, de nieuwe plaat-driver wordt al enkele maanden gebruikt op Facebook-servers in bedrijf die verschillende soorten belastingen verwerken, en tot nu toe zijn er geen significante regressies gedetecteerd.

De patch bevat een aantal semi-onafhankelijke onderdelen, die ook buiten de geheugencontroller van de plaat kunnen worden gebruikt:

  • De Subpage Load API, die in de toekomst kan worden gebruikt om andere objecten te tellen die niet zo groot zijn als een pagina, bijvoorbeeld percpu-toewijzingen
  • De mem_cgroup_ptr API, waar pointers worden geteld tot een memcg, kan worden hergebruikt voor efficiënte reparenting van andere objecten, bijvoorbeeld pagecache.

Al mismo tiempo, er is een aanzienlijke afname van het geheugengebruik- Op sommige hosts was het mogelijk om tot 1 GB geheugen te besparen, maar deze indicator hangt grotendeels af van de aard van de lading, de totale grootte van RAM, de hoeveelheid CPU en de kenmerken van het werken met geheugen.

In plaats van een aparte set kmem_caches te maken voor elke geheugen cgroup, worden twee globale sets gebruikt: de root set voor niet-geregistreerde en de root group cgroup-toewijzingen en de tweede set voor alle andere toewijzingen. Dit maakt het mogelijk het levenslange beheer van individuele kmem_caches te vereenvoudigen.

Ten slotte, als u geïnteresseerd bent in het kennen van de nieuwe set van 19 patches, kunt u deze in de lijst vinden kernel mail.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: Miguel Ángel Gatón
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.