CCoW: Optimieren von Copy-on-Write unter Berücksichtigung der räumlichen Lokalität in Workloads Teil 1
Apr 02, 2024
Abstrakt:
Copy-on-Write (CoW) ist eine wesentliche Speicherverwaltungstechnik, die eine effiziente Seitenfreigabe zwischen Prozessen ermöglicht. Insbesondere durch die Kombination von CoW mit dem Fork-Systemaufruf können Anwendungen, selbst mit großem Speicherbedarf, mit geringem Overhead einen Snapshot der aktuellen In-Memory-Daten erstellen.
Speicherdaten beziehen sich auf Daten, die im Computerspeicher gespeichert sind. Obwohl es sich vom menschlichen Gedächtnis unterscheidet, besteht eine gewisse Verbindung zwischen beiden.
Erstens können Gedächtnisdaten die Entwicklung des menschlichen Gedächtnisses fördern. Beispielsweise können wir die Aufzeichnungs-, Speicher- und Abruffunktionen von Computern nutzen, um uns beim Lernen, Erinnern und Verstehen von Wissen zu helfen. Moderne Technologie bietet uns effizientere Möglichkeiten des Erinnerns und Lernens und sorgt so dafür, dass wir uns Wissen und Fähigkeiten besser aneignen können.
Zweitens können Gedächtnisdaten Menschen auch dabei helfen, ihre Erinnerungen besser zu verwalten. Durch die übersichtliche Organisation und Klassifizierung von Daten können wir die benötigten Informationen schneller finden und abrufen, was für unser Leben, unsere Arbeit und unser Studium sehr wichtig ist.
Am wichtigsten ist, dass In-Memory-Daten den Verlust des menschlichen Gedächtnisses verhindern. Das menschliche Gedächtnis wird mit der Zeit allmählich schwächer, ein Vorgang, der „Vergessen“ genannt wird. Durch die Speicherung von Daten auf der Festplatte eines Computers können wir jedoch sicherstellen, dass die von uns benötigten Informationen und Erinnerungen jederzeit gespeichert und abgerufen werden können.
Daher kann man sagen, dass die Beziehung zwischen Gedächtnisdaten und menschlichem Gedächtnis positiv ist. Obwohl wir uns nicht zu sehr auf die Technologie verlassen sollten, kann die sinnvolle Nutzung von Gedächtnisdaten unsere Arbeitseffizienz und Lernergebnisse verbessern, uns helfen, unser Gedächtnis besser zu verwalten und Vergessen zu verhindern. 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.

Klicken Sie auf 10 Möglichkeiten zur Verbesserung des Gedächtnisses
Da der CoW jedoch pro Seite im Seitenfehler-Handler stattfindet, sollte jedes Mal, wenn der Seitenfehler auftritt, das Betriebssystem eingreifen. Dies führt zu erheblichen Leistungseinbußen bei schreibintensiven Arbeitslasten.
In diesem Artikel wird Coverage-based Copy-on-Write (CCoW) vorgeschlagen, ein optimiertes CoW-Schema, das die Lokalität bei Speicherzugriffen berücksichtigt, um das CoW-Problem zu mildern. CCoW misst die räumliche Lokalität in Prozessadressräumen mit dem Konzept der Abdeckung.
Während der Verarbeitung von CoW kopiert CCoW mehrere Seiten im Voraus für Speicherregionen mit hoher Lokalität, wodurch die Einbeziehung des Betriebssystems für schreibintensive Arbeitslasten minimiert wird. Wir erläutern die Herausforderungen bei der Vermessung der Lokalität und liefern die Optimierung zur Umsetzung des Konzepts.
Die Auswertung anhand eines Prototyps zeigt, dass dieser Ansatz die Gesamtleistung von Anwendungen bei geringem Speicheraufwand um bis zu 10 % verbessern kann.
Schlüsselwörter: Copy-on-Write; virtuelles Speichersystem; Gabel; Redis; Seitenfehler.
1. Einleitung
Die Hauptaufgabe eines Betriebssystems (OS) besteht darin, wertvolle Systemressourcen zu verwalten, und Copy-on-Write (CoW) ist eine der grundlegendsten Speicherverwaltungstechniken, die von den meisten modernen Betriebssystemen übernommen wird.
Wenn zwei oder mehr Prozesse dieselben Daten benötigen, ermöglicht das CoW-Schema den Prozessen, dieselben Seiten zu teilen, anstatt die Seiten sofort zu duplizieren. Die freigegebenen Seiten werden bei Bedarf nur dann dupliziert, wenn einer der Prozesse auf die freigegebenen Seiten schreibt.
Virtuelle Speichersysteme können den Datenaustausch zwischen Prozessen effektiv ermöglichen, und verschiedene Funktionen des virtuellen Speichers, wie z. B. das Duplizieren des Adressraums während Prozessverzweigungen, das Deduplizieren derselben Seiten und das Zero-Page-Sharing, werden basierend auf Copy-on-Write implementiert [1–3]. Dank dieser Funktionen können Anwendungen mit geringem Speicherplatzaufwand eine Kopie von sich selbst erstellen und den Klon entsprechend verwenden.
Beispielsweise verwendet Redis, eines der beliebten In-Memory-Schlüsselwertspeichersysteme [4], Copy-on-Write in Verbindung mit dem Fork-System, um persistente In-Memory-Daten im Speicher aufzurufen. Während er eingehende Anfragen bedient, erzeugt der Redis-Hauptprozess regelmäßig einen untergeordneten Prozess mit der Verzweigung. Der untergeordnete Prozess beginnt mit einem Speicher-Snapshot, der mit dem Hauptprozess identisch ist, um die In-Memory-Daten im Speicher zu speichern.

Da der Snapshot vom Adressraum des Hauptprozesses isoliert ist, aber durch Copy-on-Write verwaltet wird, benötigen der Haupt- und der untergeordnete Prozess keinen komplizierten Mechanismus, um die Konsistenz zwischen den aktuellen Daten und dem Snapshot aufrechtzuerhalten.
Daher können wir davon ausgehen, dass Copy-on-Write im virtuellen Speichersystem von wesentlicher Bedeutung ist. Allerdings ist das aktuelle Copy-on-Write in speicherintensiven Anwendungen mit schreibintensiven Arbeitslasten problematisch. Insbesondere erfolgt die Datenduplizierung normalerweise im Pagefault-Handler des Betriebssystems. Da die Datenduplizierung pro Seite mit mehreren Schreibvorgängen verarbeitet wird, kann der Prozess zu einer beträchtlichen Anzahl von Seitenfehlern führen.
Das Betriebssystem ist an jedem Seitenfehler beteiligt, was zu häufigen Wechseln des Benutzer-Kernel-Modus führt. Angesichts des enormen Speicherbedarfs speicherintensiver Anwendungen ist die Anzahl der Modusschalter groß.
Darüber hinaus wird die Seitentabelle während der Duplizierung geändert, was dazu führt, dass der Übersetzungs-Lookaside-Puffer (TLB) alle Kerne im System zerstört. All dies verursacht einen nicht zu vernachlässigenden Mehraufwand und verschlechtert die Leistung der Anwendungen.
In diesem Artikel wird Coverage-based Copy-on-Write (CCoW) vorgeschlagen, ein neuartiges Copy-on-Write-Optimierungsschema. Wenn auf eine Seite zum Schreiben zugegriffen wird, ist es aufgrund der räumlichen Lokalität bei Speicherzugriffen wahrscheinlich, dass bald auch auf die benachbarten Seiten zum Schreiben zugegriffen wird. CCoW nutzt die räumliche Lokalität, um die Anzahl der Seitenfehler beim Kopieren beim Schreiben zu reduzieren. Insbesondere verarbeitet CCoW das Copy-on-Write in einer großen Granularität (Region genannt).
Durch das Kopieren mehrerer Seiten im Seitenfehler-Handler kann CCoW eine beträchtliche Anzahl von Seitenfehlern für Copy-on-Writes und den damit verbundenen Overhead reduzieren. Allerdings schwankt der Grad der räumlichen Lokalität stark, abhängig von der Position im Prozessadressraum, und das Duplizieren der Teile des Speichers mit geringer Lokalität verursacht nur den zeitlichen und räumlichen Overhead.
Um dieses Manko zu überwinden, schlagen wir einen präzisen Mechanismus mit geringem Overhead vor, um die räumliche Lokalität im Prozessadressraum zu bewerten. CCoW zählt die Anzahl der Copy-on-Writes und Schreibvorgänge in jeder Region.
Indem wir die Lokalitätsinformationen über Forks übertragen, können wir den Grad der räumlichen Lokalität abschätzen, und CCoW führt die Vorkopie effektiv nur für Regionen mit hoher Lokalität durch. Wir haben das vorgeschlagene CCoW-Schema im Linux-Kernel implementiert.
Durch die Integration in das virtuelle Speichersystem des Betriebssystems können Anwendungen ohne Modifikation von CCoW profitieren. Wir haben die Leistungsmerkmale mit einem Mikrobenchmark analysiert und die Bewertung anhand des Benchmarks mit realistischen Arbeitslasten zeigt, dass CCoW die Anwendungsleistung bei einem angemessenen Speicheraufwand um bis zu 10 % verbessern kann.

Der Rest dieses Papiers ist wie folgt gegliedert. In Abschnitt 2 geben wir einen Überblick über den Hintergrund und die damit verbundene Arbeit des Artikels, einschließlich des virtuellen Speichers und des Forks. Die Einzelheiten des CCoW-Designs und seiner Implementierung erläutern wir in Abschnitt 3. Abschnitt 4 stellt die Bewertungsergebnisse des CCoW vor. Abschließend schließen wir dieses Papier in Abschnitt 5 ab.
2. Hintergrund und verwandte Arbeiten
2.1. Paging und virtueller Speicher
Fast alle modernen Computer und Betriebssysteme verwenden Paging und virtuellen Speicher als primäres Speicherverwaltungsschema [5]. Der Hauptspeicher ist in Seiten gleicher Größe unterteilt, und Betriebssysteme weisen Benutzerprozessen in der Seiteneinheit Speicher zu oder geben diese frei.
Die Betriebssysteme verwalten auch die Zuordnungen der Adressräume von Prozessen zum physischen Standort im System. Jede logische Seite im Prozessadressraum wird ihrem physischen Standort zugeordnet und diese Zuordnung wird in Form einer Seitentabelle gespeichert.
Um Speicherreferenzen für einen Prozess zu verwalten, übersetzt eine Speicherverwaltungseinheit (MMU), eine Hardwarekomponente im Prozessor, die angeforderte Adresse in ihre physische Adresse, indem sie auf die Seitentabelle verweist. Die Seitentabelle umfasst Seitentabelleneinträge (PTEs). Jeder PTE enthält die Zuordnungsinformationen und kann über zusätzliche Felder zur Beschreibung des Status der entsprechenden Seite und Zuordnung verfügen.
Obwohl die Seitengröße architekturspezifisch ist, beträgt sie in den meisten Architekturen normalerweise 4 KB. Dies bedeutet, dass alle 4 KB im Prozessadressraum einen PTE haben sollten. Angesichts der enormen Größe des Prozessadressraums kann die Größe der Seitentabelle selbst für einen einzelnen Prozess enorm sein.
Beispielsweise wäre die Seitentabelle für einen Prozess in der 64--Bit-Architektur mit 4 KB-Seiten und 8- Byte PTE 32 PB (264/212 × 8=255 Bytes) groß. Allerdings ist der Adressraum normalerweise dünn besetzt und der größte Teil des Adressraums wird nicht benötigt.
Dies erleichtert die hierarchische Organisation der Seitentabelle. Die gesamte Seitentabelle ist in Seitentabellenteile unterteilt, die auf eine Seite passen. Die Seitentabellenteile werden nicht zugewiesenen Adressbereichen zugewiesen.

Die gefüllten Seitentabellenteile können als Seitentabellenteile höherer Ebene zusammengefasst werden. Diese Indirektion wird wiederholt, bis nur noch Teile auf einer Seite vorhanden sind, wodurch eine kompakte Form von Seitentabellen ermöglicht wird.
For more information:1950477648nn@gmail.com






