Ein Teammitglied der Entwickler der sozialen Netzwerke Facebook, Roman Gushchin, schlug in einem Entwickler-Newsletter ein Set von Patches fĂŒr den Linux-Kernel, die darauf abzielen, die Speicherverwaltung durch die Implementierung eines neuen Controllers zu verbessern â slab (slab memory controller).
Slab-Zuteilung ââ ist ein Speicherverwaltungssystem, das entwickelt wurde, um die Speichernutzung effizienter zu gestalten und erhebliche Fragmentierung zu beseitigen. Die Grundlage dieses Algorithmus liegt in der Beibehaltung des zugewiesenen Speichers, der ein Objekt eines bestimmten Typs enthĂ€lt, und der Wiederverwendung dieses Speichers bei der nĂ€chsten Zuweisung fĂŒr ein Objekt desselben Typs. Diese Methode wurde erstmals von Jeff Bonwick in SunOS eingefĂŒhrt und wird heute in den Kernen vieler Unix-Betriebssysteme, einschlieĂlich FreeBSD und Linux, weitreichend verwendet.
Die Grundlage des neuen Controllers besteht darin, die Verwaltung der Slabs von der Seitenebene auf die Objektstufe des Kernels zu verlagern, wodurch die Möglichkeit geschaffen wird, eine Slab-Seite in verschiedenen cgroups gemeinsam zu nutzen, anstatt fĂŒr jede cgroup einen separaten Cache zuzuweisen.
Die Ergebnisse der Tests zeigen, dass die vorgeschlagene Methode zur Speicherverwaltung die Effizienz der Nutzung von slabs erhöhen kann. bis zu 45%, und senkt auch den Gesamtverbrauch des Arbeitsspeichers des Betriebssystems. Auch durch die Reduzierung der Anzahl der fĂŒr Slab reservierten Seiten wird die Fragmentierung des Speichers insgesamt verringert, was sich positiv auf die Systemleistung auswirkt.
Der neue Controller wird seit mehreren Monaten auf den Produktionsservern von Facebook getestet, und bisher kann man sagen, dass dieses Testing erfolgreich ist: Bei gleichbleibender Leistung und ohne Zunahme von Fehlern wurde eine deutliche Reduzierung des Speicherverbrauchs festgestellt â auf einigen Servern bis zu 1 GB. Diese Zahl ist ziemlich subjektiv, da frĂŒhere Tests etwas geringere Ergebnisse zeigten:
- 650-700 MB auf dem Web-Frontend
- 750-800 MB auf dem Server mit Datenbank-Cache
- 700 MB auf dem DNS-Server
>>> Ergebnisse frĂŒherer Tests
Quelle: linux.org.ru
