Een van de leden van het ontwikkelteam van het sociale netwerk Facebook, Roman Gushchin, stelde in de nieuwsbrief van ontwikkelaars een set voor van patches voor de Linux-kernel, gericht op het verbeteren van het geheugengebruik door de implementatie van een nieuwe geheugencollector — slab (slab memory controller).
Slab-distributie –– is een geheugentechniek die is ontworpen voor efficiënter geheugengebruik en het verminderen van belangrijke fragmentatie. De basis van dit algoritme is het bewaren van toegewezen geheugen, waarin een object van een bepaald type zich bevindt, en het hergebruiken van dit geheugen bij de volgende toewijzing voor een object van hetzelfde type. Deze methode werd voor het eerst geïntroduceerd in SunOS door Jeff Bonwick en wordt momenteel op grote schaal gebruikt in de kernen van veel Unix-besturingssystemen, waaronder FreeBSD en Linux.
De nieuwe controller is gebaseerd op het verplaatsen van de slab-verantwoording van het paginaniveau naar het niveau van kernelobjecten, waardoor het mogelijk is om één slab-pagina gezamenlijk te gebruiken in verschillende cgroups, in plaats van voor elke cgroup een aparte cache toe te wijzen.
Op basis van de testresultaten blijkt dat de voorgestelde geheugentechniek het effectief gebruik van slab verhoogt tot 45%, terwijl het ook de totale geheugengebruik van de OS-kernel vermindert. Daarnaast vermindert het ook de fragmentatie van het geheugen in het algemeen door het aantal toegewezen slab-pagina's te verminderen, wat onvermijdelijk invloed heeft op de prestaties van het systeem.
De nieuwe controller wordt al enkele maanden getest op de productie-servers van Facebook, en vooralsnog kan deze test als succesvol worden beschouwd: bij afwezigheid van prestatieverlies en een toenemend aantal fouten werd een duidelijke vermindering van het geheugengebruik opgemerkt — op sommige servers tot wel 1 GB. Dit cijfer is redelijk subjectief, eerdere tests toonden bijvoorbeeld iets lagere resultaten:
- 650-700 MB op de webfrontend
- 750-800 MB op de databasecacheserver
- 700 MB op de DNS-server
>>> Resultaten van eerdere tests
Bron: linux.org.ru
