Ein Mitglied des Entwicklungsteams des sozialen Netzwerks Facebook, Roman Guschin, schlug in der Entwickler-Mail eine Sammlung von Patches für den Linux-Kernel, die darauf abzielen, die Speicherverwaltung zu verbessern, durch die Implementierung eines neuen Speichermanagementcontrollers — slab (slab memory controller).
Slab-Verteilung –– ist ein Speicherverwaltungssystem, das für eine effizientere Verteilung von Speicher und zur Beseitigung erheblicher Fragmentierung entwickelt wurde. Das Grundprinzip dieses Algorithmus besteht darin, dass der reservierte Speicher, der ein Objekt eines bestimmten Typs enthält, erhalten bleibt und dieser Speicher bei der nächsten Reservierung für ein Objekt desselben Typs wiederverwendet wird. Diese Methode wurde erstmals von Jeff Bonwick in SunOS eingeführt und wird derzeit in den Kernen vieler Unix-Betriebssysteme, einschließlich FreeBSD und Linux, weit verbreitet.
Die Grundlage des neuen Controllers ist der Transfer der slab-Verwaltung von der Seite des Speichers zur Ebene der Kernelobjekte, was die gemeinsame Nutzung einer slab-Seite in verschiedenen cgroups ermöglicht, anstatt einen separaten Cache für jede cgroup bereitzustellen.
Die Testergebnisse zeigen, dass die vorgeschlagene Methode zur Speicherverwaltung die Effizienz der slab-Nutzung um bis zu 45%, sowie den Gesamtverbrauch des Betriebssystems Kernspeichers reduziert. Zudem führt die Verringerung der Anzahl an für slab reservierten Seiten zu einer allgemeinen Reduzierung der Speicherfragmentierung, was sich positiv auf die Systemgeschwindigkeit auswirkt.
Der neue Controller wird seit mehreren Monaten auf den Produktionsservern von Facebook getestet, und bisher kann man das Testen als erfolgreich bezeichnen: Bei gleichbleibender Geschwindigkeit und ohne Erhöhung der Fehleranzahl wurde eine deutliche Einsparung des Speicherverbrauchs festgestellt — auf einigen Servern bis zu 1 GB. Diese Zahl ist eher subjektiv, so zeigten frühere Tests etwas geringere Ergebnisse:
- 650-700 MB im Web-Frontend
- 750-800 MB auf dem Datenbank-Cache-Server
- 700 MB auf dem DNS-Server
>>> Seite des Autors auf GitHub
Quelle: linux.org.ru
