Virtueller Speicher ist eines der wichtigsten Elemente eines Betriebssystems (OS). Der virtuelle Speicher unter Linux funktioniert anders als bei anderen Betriebssystemen.
Der virtuelle Speicher unter Linux nutzt verschiedene Techniken wie Copy-on-Write, Demand Paging und Page Aging, um die Leistung zu verbessern, indem redundante oder unnötige Prozesse von der Festplatte ausgelagert werden.
Dieser Artikel erklärt, wie der virtuelle Speicher unter Linux funktioniert, und bietet eine kurze Anleitung dazu, wie Sie virtuellen Speicher auf Ihrer eigenen Linux-Maschine einrichten können.
So funktioniert virtueller Speicher unter Linux
Virtueller Speicher wird im Allgemeinen lediglich als Möglichkeit betrachtet, den physischen Arbeitsspeicher eines Systems zu erweitern. Die Techniken und Komponenten des virtuellen Speichers unter Linux übernehmen jedoch wesentlich anspruchsvollere Aufgaben.
Der virtuelle Speicher unter Linux ermöglicht jedem Prozess einen eigenen privaten Adressraum, auch wenn möglicherweise nicht genügend physischer Speicher vorhanden ist, um alle Adressen aller Prozesse gleichzeitig abzubilden.
Dies wird mithilfe einer Technik erreicht, die als „Paging“ bezeichnet wird. Beim Paging werden Speicherbereiche abhängig davon, wie häufig sie verwendet werden, aus dem physischen Speicher in den Festplattenspeicher und zurück ausgelagert.
Paging weist jedem Prozess außerdem genau die benötigte Speichermenge zu. Wird beispielsweise ein neuer Prozess erstellt, legt das Betriebssystem einen virtuellen Adressraum an. Da dieser Adressraum jedoch „größer“ ist als der Prozess selbst, ermittelt das Betriebssystem die Speicherseiten, die der Prozess benötigt. Alle Seiten, die der Prozess nicht benötigt, werden anschließend in einer Swap-Datei oder einer Swap-Partition auf der Festplatte gespeichert.
Techniken des virtuellen Speichers unter Linux
Mithilfe der Techniken des virtuellen Speichers unter Linux können Benutzer mehr Prozesse ausführen, als normalerweise möglich wäre, Prozesse gleichzeitig ausführen oder den gesamten verfügbaren physischen Speicher nutzen.
Zu den Techniken des virtuellen Speichers unter Linux gehören Copy-on-Write, Demand Paging und Page Aging.
- Copy-on-Write: Beim Erstellen neuer Speicherseiten weist Linux einer Seite keinen neuen physischen Speicher zu, sondern erstellt eine virtuelle Adresse für die Seite und markiert sie als „gemeinsam genutzt“. Wenn der Prozess versucht, in die Seite zu schreiben, schreibt das Betriebssystem nur dann in den physischen Speicher, wenn die Seite nicht bereits von einem anderen Prozess verwendet wird. Dadurch kann viel physischer Speicher eingespart werden, insbesondere wenn mehrere Prozesse dieselben Daten verwenden.
- Demand Paging: Die einzigen Speicherseiten, die Linux in den physischen Speicher lädt, sind diejenigen, die ein Prozess anfordert oder auf die er zuzugreifen versucht. Zu den Vorteilen dieser Technik gehört eine höhere Leistung, da Seiten, die nicht häufig benötigt werden, nicht geladen werden.
- Page Aging: Der virtuelle Speicher unter Linux verfolgt jede verwendete Speicherseite. Inaktive oder seltener aufgerufene Seiten werden wahrscheinlich auf die Festplatte ausgelagert, während die am häufigsten verwendeten Seiten im physischen Speicher verbleiben.
Der Buddy- und der Slab-Allocator
Der Linux-Kernel verfügt über zwei wichtige Speicherzuweiser: den Buddy-Allocator und den Slab-Allocator.
Der Buddy-Allocator
Der Buddy-Allocator interagiert direkt mit der Memory Management Unit (MMU) und stellt gültige Seiten bereit, wenn der Kernel sie anfordert. Außerdem verwaltet er Seitenlisten und verfolgt verschiedene Kategorien von Speicheradressen.
Der Buddy-Allocator ist ein universell einsetzbarer Speicherzuweiser und kann Speicher beliebiger Größe zuweisen. Dazu teilt er den Speicher in einen binären Baum aus Blöcken auf. Fordert ein Prozess Speicher an, sucht er den kleinsten Block, der groß genug ist, um die Anforderungen der Anfrage zu erfüllen, und weist diesen Block dem Prozess zu.
Der Slab-Allocator
Der Slab-Allocator ist eine Schicht des Buddy-Allocators und ermöglicht das Erstellen eines Objekt-Caches im Speicher. Er wird zur Zuweisung von Speicher für kleine Objekte verwendet.
Der Slab-Allocator gruppiert Objekte gleicher Größe in einem Slab. Fordert ein Prozess ein Objekt an, prüft der Slab-Allocator den Cache, um festzustellen, ob sich das Objekt bereits im Speicher befindet.
Befindet sich das Objekt im Speicher, gibt der Slab-Allocator es an den Prozess zurück. Befindet sich das Objekt nicht im Speicher, weist der Slab-Allocator dem Cache ein neues Objekt zu und gibt es an den Prozess zurück.
Speicherseiten unter Linux
Linux klassifiziert verschiedene Arten von Seiten im virtuellen Speicher wie folgt:
- Freie Seiten: Speicherseiten, die zu diesem Zeitpunkt von keinem Prozess verwendet werden und einem Prozess zugewiesen werden können, der sie benötigt.
- Aktive Seiten: Speicherseiten, die von einem oder mehreren Prozessen verwendet werden. Sie stehen anderen Prozessen erst zur Verfügung, wenn sie nicht mehr verwendet werden.
- Inaktive Seiten: Speicherseiten, die von keinem Prozess verwendet und seit ihrem letzten Einlesen von der Festplatte nicht verändert wurden. Diese Seiten können auf die Festplatte ausgelagert werden, um physischen Speicher freizugeben.
- Dirty Pages: Damit sind Seiten gemeint, die von einem oder mehreren Prozessen verwendet und kürzlich verändert wurden. Vor dem Auslagern müssen diese Seiten geschrieben werden.
Aufgaben des Linux-Kernels
Linux verfügt außerdem über eine Reihe von Kernel-Aufgaben für bestimmte Aspekte der Verwaltung des virtuellen Speichers.
Beispielsweise wird der Page-Fault-Handler, der für die Verwaltung von Seitenfehlern zuständig ist, aktiviert, wenn ein Prozess versucht, auf eine Speicherseite zuzugreifen, die sich nicht im physischen Speicher befindet. Der Page-Fault-Handler lädt die Seite von der Festplatte in den physischen Speicher und setzt die Ausführung des Prozesses fort.
Der Memory-Pager ist für das Auslagern von Speicherseiten auf die Festplatte zuständig. Das Betriebssystem verwendet ihn, wenn es physischen Speicher freigeben muss. Der Memory-Pager wählt die auszulagernden Speicherseiten aus, indem er ermittelt, welche nicht häufig verwendet werden.
Ähnlich bringt der Page-Reclaimer Speicherseiten, die auf die Festplatte ausgelagert wurden, zurück in den physischen Speicher. Er wird aktiviert, wenn ein Prozess Zugriff auf diese Seiten anfordert.
Virtuellen Speicher unter Linux mit anpassbaren Parametern einrichten
Anpassbare Parameter sind Kernel-Einstellungen, die zur Verbesserung der Systemleistung angepasst werden können. Sie lassen sich in Echtzeit mithilfe dessysctl Befehls oder in der /etc/sysctl.conf Datei anpassen.
Beachten Sie, dass Änderungen an den Parametern negative Auswirkungen auf Ihr System haben und die Leistung beeinträchtigen können.
Sehen wir uns die wichtigsten anpassbaren Parameter für den virtuellen Speicher an.
Vm.Swappiness
vm.swappiness ist ein Parameter, der steuert, wie aggressiv der Kernel Speicherseiten auf die Festplatte auslagert.
Wenn der Wert auf 0 gesetzt ist, lagert der Kernel niemals Speicherseiten aus. Ist er auf 100 gesetzt, lagert der Kernel Speicherseiten so bald und so schnell wie möglich aus, sobald sie nicht mehr verwendet werden. Der Standardwert ist 60.
Um vm.swappiness auf 10 zu setzen, verwenden Sie beispielsweise folgenden Befehl:
sysctl -w vm.swappiness=10VM.Dirty_Ratio
Mit diesem Parameter können Benutzer steuern, wie voll der Writeback-Cache des Kernels werden darf, bevor er damit beginnt, Dirty Pages auf die Festplatte zu schreiben.
Ist vm.dirty_ratio auf 0 gesetzt, schreibt der Kernel erneut niemals Dirty Pages auf die Festplatte. Bei 100 schreibt er Dirty Pages auf die Festplatte, sobald sie als „dirty“ markiert sind. Der Systemstandardwert ist 20.
Um diesen Parameter in Echtzeit und mit sofortiger Wirkung auf 80 zu ändern, verwenden Sie folgenden Befehl:
sysctl -w vm.dirty_ratio=80Vm.Dirty_Background_Ratio
vm.dirty_background_ratio legt fest, wie voll der Writeback-Cache des Kernels werden darf, bevor er im Hintergrund damit beginnt, Dirty Pages auf die Festplatte zu schreiben.
Bei 0 werden keine Dirty Pages im Hintergrund geschrieben. Bei 100 schreibt der Kernel Dirty Pages im Hintergrund auf die Festplatte, sobald sie als „dirty“ markiert sind. Der Standardwert ist 10.
Der Code zum Setzen des Parameters auf 25 lautet:
sysctl -w vm.dirty_background_ratio=25Dadurch wird der Parameter sofort auf 25 gesetzt. In diesem Beispiel beginnt der Kernel erst dann, Dirty Pages im Hintergrund auf die Festplatte zu schreiben, wenn der Writeback-Cache zu 25 % gefüllt ist. So wird verhindert, dass Dirty Pages zu spät auf die Festplatte geschrieben werden.
Ist der Writeback-Cache zu voll, muss der Kernel möglicherweise damit beginnen, Dirty Pages im Vordergrund auf die Festplatte zu schreiben, was zu spürbaren Verlangsamungen führt.
Was sind die besten Methoden zur Speicherverwaltung unter Linux?
Bei der Verwaltung des virtuellen Speichers auf Linux-Systemen gibt es mehrere Techniken und bewährte Vorgehensweisen.
Sie können eine Swap-Datei oder eine Partition – also einen Teil Ihrer Festplatte – verwenden, um Speicherseiten zu speichern, die von keinem Prozess verwendet werden. Dadurch wird physischer Speicher freigegeben und die Leistung verbessert.
Sie können außerdem die Menge des physischen Speichers auf Ihrem System überprüfen (free -h), den benötigten Swap-Speicher bestimmen (free -h | grep -i swap) und den Status Ihres virtuellen Speichers überprüfen (free -h | grep -i swap).
Auch andere bewährte Vorgehensweisen, etwa den Computer in gutem Zustand zu halten, nicht verwendete Anwendungen zu schließen und unnötige Dateien zu löschen, können die Verwaltung des virtuellen Speichers verbessern.
Es ist entscheidend, dass Sie Ihr Linux-Betriebssystem stets aktuell halten, da der Linux-Kernel kontinuierlich neue Funktionen und Fehlerbehebungen erhält.
Fazit: Mit virtuellem Speicher unter Linux die Leistung verbessern
Der virtuelle Speicher unter Linux ist eine hervorragende Funktion. Um seine Leistung zu verbessern, ist es jedoch entscheidend zu verstehen, wie er funktioniert.
Mit den Informationen aus diesem Artikel – von der Funktionsweise über die Definition und Klassifizierung von Seiten und die eingesetzten Techniken bis hin zu den am häufigsten verwendeten Parametern für eine bessere Systemkonfiguration – sollten Sie in der Lage sein, mit der Implementierung dieser wertvollen Funktion zu beginnen.
Denken Sie stets daran, dass das Zurücksetzen von Parametern Ihr System beeinträchtigen kann und Tests erfordert. Wenn Sie jedoch vorsichtig vorgehen und die richtigen Schritte unternehmen, können Sie die Leistung deutlich steigern.
Wir haben die beste Software für Netzwerkvirtualisierung analysiert, ausgewählt und getestet, um die Serverleistung weiter zu steigern.