Facebook heeft een nieuw slab-geheugenbeheermechanisme voor de Linux-kernel voorgesteld

Romeinse Gushchin (Roman Gushchin) van Facebook gepubliceerd op de mailinglijst van Linux-kernelontwikkelaars een reeks patches met de implementatie van een nieuwe geheugentoewijzingscontroller plaat (plaatgeheugencontroller). De nieuwe controller valt op door het verplaatsen van slab-accounting van het geheugenpaginaniveau naar het kernelobjectniveau, wat het mogelijk maakt om slab-pagina's in verschillende cgroups te delen, in plaats van afzonderlijke slab-caches voor elke cgroup toe te wijzen.

De voorgestelde aanpak maakt het mogelijk om de efficiëntie van het gebruik van slab te vergroten, de grootte van het geheugen dat voor slab wordt gebruikt met 30-45% te verminderen en het totale geheugenverbruik van de kernel aanzienlijk te verminderen. Door het aantal niet-verplaatsbare platen te verminderen, is er ook een positief effect op het verminderen van geheugenfragmentatie. De nieuwe geheugencontroller vereenvoudigt de code voor het verwerken van slabs aanzienlijk en vereist niet het gebruik van ingewikkelde algoritmen voor het dynamisch creëren en verwijderen van slab-caches voor elke cgroup. Alle geheugen-cgroups in de nieuwe implementatie gebruiken een gemeenschappelijke set slab-caches, en de levensduur van slab-caches is niet langer gebonden aan de levensduur van de caches die via de cgroup zijn geïnstalleerd beperkingen over geheugengebruik.

De nauwkeurigere resource accounting die in de nieuwe slab-controller is geïmplementeerd, zou de CPU theoretisch meer moeten belasten, maar in de praktijk bleken de verschillen onbeduidend. In het bijzonder wordt de nieuwe slab-controller al enkele maanden gebruikt op productie-Facebook-servers die verschillende soorten werklast verwerken, en er zijn nog geen merkbare achteruitgangen vastgesteld. Tegelijkertijd is er een aanzienlijke vermindering van het geheugengebruik - op sommige hosts was het mogelijk om tot 1 GB geheugen te besparen, maar deze indicator hangt sterk af van de aard van de belasting, de totale grootte van RAM, het aantal CPU's en de kenmerken van het werken met geheugen. Vorige tests toonde vermindering van het geheugenverbruik met 650-700 MB (42% van het slab-geheugen) op de webfront-end, 750-800 MB (35%) op de server met een DBMS-cache en 700 MB (36%) op de DNS-server.

Bron: opennet.ru

Voeg een reactie