CCoW: Optimieren von Copy-on-Write unter Berücksichtigung der räumlichen Lokalität in Workloads Teil 4

Apr 03, 2024

3.3. Verfolgen des Zugriffs auf vorkopierte Seiten

CCoW soll den Aufwand für die häufige Bearbeitung von Seitenfehlern amortisieren. Das Kopieren von Seiten im Voraus führt jedoch zu einem anderen Problem: der Verfolgung von Seitenzugriffen nach dem Kopieren.

Es besteht ein enger Zusammenhang zwischen Fehlerverarbeitung und Gedächtnis. Für die meisten Menschen werden Fehler oft als eine schlechte Sache angesehen, aber sie können für uns eine Chance sein, zu lernen und zu wachsen. Durch den richtigen Umgang mit Fehlern können wir unser Gedächtnis verbessern und uns helfen, ähnliche Situationen besser zu verstehen und darauf zu reagieren.

Eine Möglichkeit, mit Fehlern umzugehen, besteht darin, zu reflektieren und zu analysieren. Wenn wir einen Fehler machen, sollten wir uns die Zeit nehmen, darüber nachzudenken, wie es zu dem Fehler kam und was wir tun können, um zu verhindern, dass ein ähnlicher Fehler noch einmal passiert. Durch Reflexion können wir die Grundursachen von Problemen identifizieren und Gegenmaßnahmen zu deren Lösung entwickeln. Bei dieser Art der Analyse geht es nicht nur um Fehler, sie kann uns helfen, in anderen Lebenssituationen bessere Entscheidungen zu treffen und unsere Fähigkeiten und Fertigkeiten zu verbessern.

Eine andere Möglichkeit, mit Fehlern umzugehen, besteht darin, sich selbst zu erlauben, sie zu akzeptieren und weiterzumachen. Wir sollten nicht zulassen, dass Fehler uns ausbremsen oder frustrieren. Stattdessen sollten wir sie als Wachstumschancen betrachten und uns erlauben, aus unseren Fehlern zu lernen und uns weiter zu verbessern. Wenn wir Fehler akzeptieren und mit einer positiven Einstellung mit ihnen umgehen können, können wir eine starke Denkweise und Selbstvertrauen aufbauen, was für die Aufrechterhaltung eines guten Gedächtnisses sehr wichtig ist.

Schließlich können wir unser Gedächtnis stärken, indem wir unsere Fehler teilen. Wenn wir anderen von Fehlern erzählen, die wir gemacht haben, neigen wir dazu, uns tiefer an diese Ereignisse zu erinnern. Denn wenn wir es anderen erzählen, müssen wir die Dinge klarer machen und uns an jedes Detail des Fehlers erinnern. Auf diese Weise können wir diese Fehler besser verstehen und verhindern, dass sie erneut auftreten.

Zusammenfassend lässt sich sagen, dass ein enger Zusammenhang zwischen Fehlerverarbeitung und Gedächtnis besteht. Durch den richtigen Umgang mit Fehlern können wir unser Gedächtnis stärken, unsere Fähigkeiten und Fertigkeiten verbessern und bessere Menschen werden. Wir sollten Fehler als Chance begreifen, uns aktiv mit Schwierigkeiten auseinandersetzen und daraus lernen und wachsen. Es ist ersichtlich, dass wir das Gedächtnis verbessern müssen, und Cistanche deserticola kann das Gedächtnis erheblich verbessern, da Cistanche deserticola ein traditionelles chinesisches Arzneimittel ist, das viele einzigartige Wirkungen hat, darunter die Verbesserung des Gedächtnisses. Die Wirksamkeit von Cistanche deserticola beruht auf den zahlreichen darin enthaltenen Wirkstoffen, darunter Gerbsäure, Polysaccharide, Flavonoidglykoside usw. Diese Inhaltsstoffe können die Gesundheit des Gehirns auf verschiedene Weise fördern.

10 ways to improve memory

Klicken Sie auf „Erfahren Sie, wie Sie das Kurzzeitgedächtnis verbessern können“.

Im ursprünglichen Copy-on-Write-Schema wird der erste Schreibvorgang auf jeder Seite vom Seitenfehlerhandler erfasst.

Es wird nur die fehlerhafte Seite kopiert und das System kann den Zugriff auf jede Seite über den Seitenfehler-Handler genau verfolgen. Wenn das System hingegen eine gesamte Region kopiert, werden alle Seiten in der Region mit schriftlicher Genehmigung dem Prozess zugeordnet.

Somit können nachfolgende Schreibvorgänge auf diese kopierten Seiten erfolgen, ohne den Seitenfehlerbehandlungsmechanismus auszulösen, sodass das System die Zugriffe auf die kopierten Seiten nicht verfolgen kann. Dies kann problematisch sein, wenn der Prozess wiederholt Forks durchführt. Angenommen, eine Region weist eine hohe räumliche Lokalität auf und eine Epoche ist als der Zeitraum zwischen zwei Gabelungen definiert.

Die hohe Lokalität kann durch Zählen der in der Region aufgetretenen Seitenfehler erfasst werden. Nehmen wir dann an, dass der Prozess mit einer Verzweigung einen neuen Prozess erstellt. Wenn eine neue Epoche mit dem Fork gestartet wird, wird der erste Schreibzugriff auf eine der Seiten in der Region CCoW initiieren und alle Seiten in der Region kopieren. Jetzt verfügt der Prozess über alle Seiten mit Schreibberechtigung, und bis zum Ende der Epoche werden keine weiteren Seitenfehler aus der Region generiert.

Wenn eine neue Epoche erneut gestartet wird, wird davon ausgegangen, dass die Region in der Epoche eine geringe Abdeckung aufweist, da die Region nur über eine Copy-on-Write-Seite verfügt. Somit wird jeder Schreibvorgang in die Region über den ursprünglichen Copy-on-Write-Mechanismus pro Seite verarbeitet, wodurch die Möglichkeit zur Leistungsoptimierung beeinträchtigt wird, selbst wenn die Region über eine hohe Lokalität verfügt.

Beachten Sie, dass die Region auch in der nächsten Epoche als Region mit hoher Lokalität betrachtet wird und der Vorgang wiederholt wird, um die Situation zu ändern. Um dieses Problem zu lösen, benötigen wir einen Mechanismus, um den Seitenzugriff nach dem Kopieren zu verfolgen.

Diese Studie schlägt vor, das Dirty-Bit im Seitentabelleneintrag (PTE) zu nutzen. Im Allgemeinen verwalten moderne Architekturen verschiedene Informationen im PTE für jede Seite, und das Dirty Bit ist eines der Felder, die von den meisten Architekturen unterstützt werden.

Wenn MMU einen Schreibspeicherzugriff verarbeitet, setzt es automatisch das Dirty-Bit der entsprechenden Seite. Dies bedeutet im Umkehrschluss, dass die Seite mit Schreibzugriffen aktualisiert wurde, wenn das Dirty-Bit für eine Seite gesetzt ist.

Basierend auf dieser Idee haben wir den Mechanismus zur Berechnung der Deckung modifiziert. Zunächst werden alle Regionen als normale Regionen betrachtet. Während des Forks wird die Abdeckung für normale Regionen anhand der Anzahl der Copy-on-Writes mithilfe von Gleichung (1) berechnet.

ways to improve memory

Bei der Behandlung des Seitenfehlers für eine Region mit hoher Lokalität werden alle Seiten in der Region mit gelöschtem Dirty-Bit kopiert. Darüber hinaus ist die Region als vorkopierte Region gekennzeichnet. Während der Verzweigung wird die Abdeckung für die kopierte Region anhand der Anzahl der fehlerhaften Seiten in der Region wie folgt berechnet:

improve memory

Die berechnete Abdeckung für jede Region wird durch die Verzweigung übertragen und als Maß für die räumliche Lokalität der Region verwendet. Wenn in einer Region ein Schreibseitenfehler auftritt, prüft das System die Abdeckung der Region und kopiert möglicherweise Seiten für die Regionen mit hoher Lokalität vorab.

Abbildung 2 zeigt eine Situation, in der die Abdeckung nach Vorkopien berechnet wird. Angenommen, beide Regionen werden kopiert (rot schattiert) und auf den Seiten 0, 2, 3, 4 und 11 ist das Dirtybit gesetzt.

Um die Abdeckung während der Verarbeitung des Forks zu berechnen, verwendet das System das Dirty Bit anstelle der Copy-on-Write-Zählung, da die Regionen in der aktuellen Epoche kopiert werden. Somit hat die Region 0 eine Abdeckung von 66 %.
Während die Abdeckung der Region 1 15 % beträgt. Um den Seitenfehler für Seite 3 zu behandeln, wird Region 0 erneut kopiert, während der Seitenfehler für Seite 9 mit dem ursprünglichen Mechanismus behandelt wird. Auf diese Weise können wir verhindern, dass Regionen mit hoher Lokalität aus dem Fokus geraten.

boost memory

3.4. Den Ort erfassen

Da der Seitenfehlerhandler auf dem leistungskritischen Pfad im Betriebssystem liegt, sollten wir den Overhead für die Implementierung des vorgeschlagenen Schemas minimieren.
Grundsätzlich erfordert CCoW einen Mechanismus zur Berechnung der Abdeckung. Die einfachste Möglichkeit, diese Funktion zu implementieren, besteht darin, die Seiten, die Seitenfehler auslösen, mit einer Bitmap zu verfolgen, wie wir in Abschnitt 3.2 beschrieben haben.

Bei der Behandlung eines Seitenfehlers setzt das System das Bit, das der fehlerhaften Seite entspricht. Während der Verzweigung scannt das System die Bitmap, um die Anzahl der fehlerhaften Seiten für jede Region zu zählen und die Abdeckung zu berechnen. Die Bitmap wird nach der Berechnung zurückgesetzt.

Dieser Ansatz ist einfach, bringt jedoch hohe räumliche und zeitliche Einschränkungen mit sich. Das System sollte für jede 4-KB-Seite einen Ein-Bit-Bitmap-Eintrag verwalten und während der Verzweigung die gesamte Bitmap überprüfen. Angesichts des enormen Speicherbedarfs speicherintensiver Anwendungen verursachen diese Vorgänge während des Forks einen hohen Overhead, der den Leistungsvorteil von CCoW zunichte macht. Wir optimieren diese Implementierung, indem wir die Merkmale des Seitenfehlers ausnutzen.

Wenn auf einer Seite ein Seitenfehler auftritt, verursacht die Seite keine weiteren Seitenfehler, bis der Prozess einen neuen Prozess erstellt. Somit kann jede Seite höchstens einen Ein-Seiten-Fehler auslösen, und für eine Region mit n Seiten können die Seitenfehler nur bis zu n-mal auftreten. Dies impliziert, dass das Zählen der Anzahl der Seitenfehler pro Region ausreicht, um die Abdeckung zu berechnen, anstatt die Bitmap für einzelne Seiten beizubehalten.

Daher ersetzen wir die Bitmap durch die Fehlerzähler. Jeder Region ist ein Zählerpaar wie folgt zugeordnet: einer zum Zählen der Seitenfehler in der letzten Epoche und ein anderer zum Zählen der Seitenfehler in der aktuellen Epoche.

Ersteres wird zur Bestimmung der räumlichen Lokalität von Regionen verwendet, während letzteres zur Überwachung der räumlichen Lokalität der aktuellen Epoche verwendet wird. Während der Verzweigung wird der aktuelle Fehlerzähler auf den vorherigen Fehlerzähler kopiert.

Wenn in dieser Epoche eine Region kopiert wird, wird stattdessen die Anzahl der fehlerhaften Seiten in der Region in den vorherigen Fehlerzähler geschrieben. Die Zähler werden beim Erstellen eines neuen virtuellen Speicherbereichs (VMA) gefüllt und wiederhergestellt, wenn der entsprechende VMA verkleinert oder nicht zugeordnet wird. Diese Optimierung reduziert den Speicherplatzaufwand von CCoW von einem Bit pro Seite auf einige Bytes pro Region.

memory enhancement


For more information:1950477648nn@gmail.com

Das könnte dir auch gefallen