-
Gebiet der Erfindung
-
Die vorliegende Erfindung betrifft allgemein Speichersysteme. Genauer betrifft diese Erfindung einen komprimierten und/oder verdichteten Speicher für virtuelle Speichersysteme.
-
Hintergrund
-
Virtualisierungstechniken wurden entwickelt, um die Speicherverwaltung für Speicherplatz mit einer Größe, welche die tatsächliche physische Kapazität einer Speichervorrichtung überschreitet, zu verbessern. Typischerweise kann Speichervirtualisierung auf Speicherein- und -auslagern unter Verwendung einer mit der Speichervorrichtung gekoppelten Datenspeichervorrichtung beruhen. Da Speicherobjekt- und/oder E/A(Eingabe/Ausgabe)-Größen nicht deterministisch sind, können unterschiedliche Größen oder Seiten von Speicher, die unkomprimiert sind, zwischen den Datenspeicher- und Speichervorrichtungen ein/ausgelagert werden. Infolgedessen können der E/A-Durchsatz und/oder die Latenzzeiten zum Übertragen gespeicherter Speicherdaten für den Auslagerungsspeicher die Leistung des virtuellen Speichersystems negativ beeinflussen.
-
Ferner kann die Leistung bestimmter Datenspeichervorrichtungen, wie rotationsgestützter Festplatten, eine starke Abhängigkeit von der Datenlokalität für den Speicherzugriff besitzen, um langwierige Plattenrotationen zu verringern. Die Datenlokalität kann jedoch während der Laufzeit unter Umständen nicht gewährleistet werden, da Clustercharakteristika für den Speicherzugriff bei unterschiedlichen Datenverarbeitungsaufgaben variieren. Somit kann das Speicher-Ein/Auslagern durch Paging-in/out zwischen der Speichervorrichtung und der Datenspeichervorrichtung zum Unterstützen generischer Datenverarbeitungsaufgaben die wahrgenommene Leistung des Speichersystems weiter herabsetzen.
-
Obwohl der Trend zum Übernehmen von immer größeren Größen tatsächlichen physischen Speichers dazu neigt, Leistungskosten beim Speicher-Ein/Auslagern zwischen Vorrichtungen abzuschwächen, können bestimmte Funktionsverbesserungen bei Datenverarbeitungssystemen ohne Änderung von Speichergrößen bereitgestellt werden. Zum Beispiel kann auf vorhandenen Geräten eine Unterstützung für höhere Bildschirmauflösung auf der Grundlage von im Wesentlichen derselben Speichergröße eingeführt werden. Eine lediglich zweifach höhere Bildschirmauflösung kann jedoch einer vierfachen Erhöhung bei Fensterpuffergrößen entsprechen. Infolgedessen kann ohne eine ausgleichende Erhöhung bei der physischen Speichergröße die Systemleistung für eine höhere Bildschirmauflösung herabgesetzt und sichtbar langsamer werden.
-
Daher sind herkömmliche Implementierungen virtueller Speichersysteme nicht in der Lage, Leistungsanforderungen zu unterstützen, die durch eingeschränkte physische Speichergrößen beschränkt sind.
-
Kurzdarstellung der Beschreibung
-
Ein dynamisch in einer Speichervorrichtung gepflegter komprimierter Speicherpool kann eine zusätzliche Unterstützungsschicht für einen virtuellen Speicher auf der Grundlage der mit einer Massendatenspeichervorrichtung gekoppelten Speichervorrichtung bereitstellen. Virtuelle Speicheradressen können in einen unkomprimierten Abschnitt der Speichervorrichtung, den komprimierten Speicherpool und/oder die Datenspeichervorrichtung gepaged oder zugeordnet werden. Der komprimierte Speicherpool kann innerhalb der Speichervorrichtung ohne eine Größenbeschränkung für den virtuellen Speicher wachsen und schrumpfen.
-
In einer Ausführungsform kann eine Speicherseite (z. B. eine Einheit eines Bereichs unkomprimierten Speichers) in eine komprimierte Speichereinheit (oder eine komprimierte Seite) im komprimierten Speicher komprimiert werden. Mehrere komprimierte Speichereinheiten können als ein Segment mit fester Größe im komprimierten Speicher zusammen verdichtet werden. Das Segment kann für eine effiziente Datenübertragung zwischen der Speichervorrichtung und der Massendatenspeichervorrichtung zum Ein/Auslagern von Segmenten komprimierter Speichereinheiten dimensioniert sein, um einen virtuellen Speicher-Pager zu unterstützen.
-
In einer weiteren Ausführungsform kann eine Speichervorrichtung einen dynamisch aktualisierten Abschnitt komprimierten Speichers für einen virtuellen Speicher einschließen. Die Speichervorrichtung kann einen unkomprimierten Speicherabschnitt separat vom komprimierten Speicherabschnitt einschließen. Der virtuelle Speicher kann in der Lage sein, dem komprimierten Speicherabschnitt eine Speicheradresse zuzuordnen. Eine im unkomprimierten Speicherabschnitt allozierte Speicherregion kann in den komprimierten Speicherabschnitt komprimiert werden. Infolgedessen kann die Speicherregion (z. B. nachdem sie komprimiert wurde) für eine zukünftige in der Speichervorrichtung angeforderte Allozierung verfügbar werden. Der komprimierte Speicherabschnitt kann aktualisiert werden, um die komprimierte Speicherregion zu speichern. Die komprimierte Speicherregion kann als Reaktion auf eine Anfrage, auf Daten in der komprimierten Speicherregion zuzugreifen, in den unkomprimierten Abschnitt in der Speichervorrichtung zurück dekomprimiert werden.
-
In einer weiteren Ausführungsform wird ein virtueller Speicher auf der Grundlage einer Speichervorrichtung bereitgestellt. Die Speichervorrichtung kann dynamisch in einen unkomprimierten Speicherabschnitt und einen komprimierten Speicherabschnitt, wie DRAM (flüchtiger Speicher), partitioniert werden. Im unkomprimierten Speicherabschnitt können Arbeitsdaten gespeichert werden, die über einen mit der Speichervorrichtung gekoppelten Prozessor verarbeitet werden. Eine oder mehrere Seiten des unkomprimierten Speicherabschnitts können in einen oder mehrere komprimierte Speichereinheiten variierender Größe im komprimierten Speicherabschnitt komprimiert werden. Die Komprimierung kann einen verfügbaren Speicherplatz im unkomprimierten Speicherabschnitt erhöhen. Die komprimierten Speichereinheiten können vom komprimierten Speicherabschnitt in den unkomprimierten Speicherabschnitt zurück dekomprimiert werden, zum Beispiel als Reaktion auf einen Seitenfehler für eine Zugriffsanfrage auf Daten in einer der komprimierten Speichereinheiten. Mindestens eine der komprimierten Speichereinheiten variierender Größe kann aus dem komprimierten Speicherabschnitt zur Massendatenspeichervorrichtung ausgelagert werden, um den verfügbaren Speicherplatz im unkomprimierten Speicherabschnitt zu erhöhen.
-
In einer weiteren Ausführungsform können eine oder mehrere Speicherseiten eines unkomprimierten Abschnitts einer Speichervorrichtung in eine oder mehrere komprimierte Speichereinheiten variierender Größe in einem komprimierten Abschnitt der Speichervorrichtung komprimiert werden. Eine Massendatenspeichervorrichtung (wie eine magnetische Festplatte (HDD) oder eine Verbunddatenspeichervorrichtung, die aus Sicht eines Dateisystems als ein einziger logischer Datenträger behandelt wird, der einen HDD und Flash-Speicher einschließt) kann mit der Speichervorrichtung gekoppelt sein. Die komprimierten Speichereinheiten variierender Größe können in ein Segment im komprimierten Abschnitt der Speichervorrichtung verdichtet werden. Die eine komprimierte Speichereinheit kann als Reaktion auf eine Zugriffsanfrage auf eine der komprimierten Speichereinheiten vom komprimierten Abschnitt in den unkomprimierten Abschnitt der Speichervorrichtung dekomprimiert werden. Das Segment der komprimierten Speichereinheiten kann zur Massendatenspeichervorrichtung ausgelagert werden, um einen verfügbaren Speicherplatz in der Speichervorrichtung zu erhöhen.
-
Weitere Merkmale der vorliegenden Erfindung werden anhand der begleitenden Zeichnungen und anhand der detaillierten Beschreibung ersichtlich, die folgt.
-
Kurze Beschreibung der Zeichnungen
-
Die vorliegende Erfindung wird in beispielhafter und nicht einschränkender Weise in den Figuren der begleitenden Zeichnungen veranschaulicht, in denen gleiche Bezüge gleiche Elemente angeben, und in denen:
-
1 ein Blockdiagramm zeigt, das eine Ausführungsform eines virtuellen Speichersystems auf der Grundlage eines komprimierten und/oder verdichteten Speichers veranschaulicht;
-
2 ein Ablaufdiagramm zeigt, das eine Ausführungsform des Komprimierens und Dekomprimierens von Speicher für einen virtuellen Speicher veranschaulicht;
-
3 ein Ablaufdiagramm zeigt, das eine Ausführungsform eines Prozesses zum Ein- und Auslagern komprimierter Speicherseiten für einen virtuellen Speicher veranschaulicht;
-
4 ein Ablaufdiagramm zeigt, das eine Ausführungsform eines Prozesses zum Ein- und Auslagern eines verdichteten Segments komprimierten Speichers für einen virtuellen Speicher veranschaulicht;
-
5 ein Beispiel eines Datenverarbeitungssystems, wie ein Computersystem, veranschaulicht, das in Verbindung mit den hierin beschriebenen Ausführungsformen verwendet werden kann.
-
Detaillierte Beschreibung
-
Verfahren und Einrichtungen für komprimierten und verdichteten virtuellen Speicher werden hierin beschrieben. In der folgenden Beschreibung werden zahlreiche spezifische Details dargelegt, um eine sorgfältige Erklärung von Ausführungsformen der vorliegenden Erfindung bereitzustellen. Es wird jedoch für den Fachmann ersichtlich sein, dass Ausführungsformen der vorliegenden Erfindung ohne diese spezifischen Details ausgeführt werden können. In anderen Fällen wurden allgemein bekannte Komponenten, Strukturen und Techniken nicht im Detail gezeigt, um das Verständnis dieser Beschreibung nicht zu erschweren.
-
Eine Bezugnahme auf „eine Ausführungsform” in dieser Beschreibung bedeutet, dass ein bestimmtes Merkmal, eine bestimmte Struktur oder ein bestimmtes Charakteristikum, das oder die in Verbindung mit der Ausführungsform beschrieben ist, in mindestens einer Ausführungsform der Erfindung eingeschlossen sein kann. Das Auftreten der Redewendung „in einer Ausführungsform” an verschiedenen Stellen in der Beschreibung bezieht sich nicht notwendigerweise immer auf dieselbe Ausführungsform.
-
Die in den Figuren, die folgen, abgebildeten Prozesse werden durch eine Verarbeitungslogik durchgeführt, die Hardware (z. B. Schaltlogik, dedizierte Logik usw.), Software (wie sie auf einem universellen Computersystem oder einer dedizierten Maschine ausgeführt wird) oder eine Kombination von beidem umfasst. Obwohl die Prozesse nachstehend hinsichtlich mancher sequenzieller Operationen beschrieben sind, sollte ersichtlich sein, dass manche der beschriebenen Operationen in anderer Reihenfolge durchgeführt werden können. Darüber hinaus können manche Operationen parallel anstatt sequenziell durchgeführt werden.
-
In einer Ausführungsform kann ein Komprimierungspool (oder Pool komprimierter Speichereinheiten) in einer Speichervorrichtung unter Verwendung protokollbasierter Datenstrukturen (oder Protokollstrukturen) dynamisch verwaltet werden. Daten können in einer gepackten und/oder komprimierten Weise in den Komprimierungspool gegeben werden, um den erforderlichen Speicherplatz zum Speichern der Daten zu schrumpfen. Wann gespeicherte Daten zwischen dem Komprimierungspool und einer Massendatenspeichervorrichtung (oder nichtflüchtigen Datenspeichervorrichtung) aus- und einzulagern sind, kann in einem selbständigen Verwaltungssystem für komprimierten Speicher automatisch ermittelt werden, um zum Beispiel ein virtuelles Speichersystem oder anderes anwendbares Speichernutzungsmodul vom zugrundeliegenden Komprimierungspool zu isolieren.
-
Speicherdaten können komprimiert werden, um die Auslagerungsdateigröße zum Beispiel für die Datenübertragungseffizienz zwischen einer Speichervorrichtung und einer Auslagerungsvorrichtung wie einer Massendatenspeichereinheit zu verringern. Zusätzlich können Speicherdaten auf der Grundlage effizienter Speicherkomprimierungsschemata mit Komprimierungs-/Dekomprimierungskosten (z. B. in mehreren Mikrosekunden), die erheblich (z. B. mehrere Größenordnungen) geringer sind als eine herkömmliche Plattenauslagerungsgeschwindigkeit bei einer Auslagerungsvorrichtung, in einen Komprimierungspool komprimiert werden. Der Komprimierungspool kann innerhalb der Speichervorrichtung an Größe zunehmen, wenn dies zum Verringern erforderlicher Auslagerungsoperationen bei der Auslagerungsvorrichtung erforderlich ist.
-
Zum Beispiel kann der Komprimierungspool bis hin zur Größe des verfügbaren physischen Speicherplatzes wachsen und arbeiten, solange genügend Speicherplatz übrig ist (z. B. eine kleine Anzahl von Speicherseiten), um Speicherkomprimierungs-/dekomprimierungsoperationen durchzuführen, um Daten in den Komprimierungspool oder aus diesem heraus zu verschieben. Ein Arbeitssatz kann so gepflegt werden, dass er in den unkomprimierten Speicherabschnitt mit variierenden Größen passt, wenn der Komprimierungspool wächst/schrumpft. Wenn der Arbeitssatz (z. B. für einen Satz von Live-Aufgaben für Datenoperationen eines Prozessors allozierter Speicher) in den Komprimierungspool (oder komprimierten Speicherabschnitt) läuft, können Speicherseiten (z. B. auf der Grundlage einer bestimmten zuvor festgelegten Rate) aus dem komprimierten Abschnitt gezogen werden, um als Ersatz zwischen dem komprmierten und unkomprimierten Speicherabschnitten (oder -schichten) zu dienen, um den Arbeitssatz zu unterstützen. Anfragen oder Anforderungen nach zusätzlichem zu allozierendem Speicherplatz, können erfasst werden, um anzugeben, dass der vorhandene Arbeitssatz übergelaufen ist. Der Arbeitssatz kann über eine LRU(least recently used – am längsten nicht verwendet)-Ordnungsstrategie erweitert werden, um auszuwählen, welche Speicherseiten in den Komprimierungspool zu komprimieren sind.
-
In einer Ausführungsform können während der Laufzeit mehrere Komprimierungs/Dekomprimierungsschemata oder -mechanismen dynamisch ausgewählt werden. Jedes Schema kann auf einem oder mehreren Komprimierungs/Dekomprimierungs-Algorithmen beruhen. Die Auswahl kann auf der Grundlage eines Hinweises oder einer Heuristik erfolgen, die durch den Ersteller (z. B. eine Anwendung oder ein Prozess, der eine Allozierung initiiert oder anfragt) des Speichers bereitgestellt wird, oder sie könnte ermittelt werden, indem in jeder Speicherseite, die dabei ist, komprimiert zu werden, nach einem bestimmten Datenmuster gesucht wird. In einer Ausführungsform kann eines der Komprimierungs/Dekomprimierungsschemata als Standard bezeichnet werden, der auf eine Mehrheit allozierter Speicher anwendbar ist (z. B. ohne einen durch entsprechende Speicherersteller bereitgestellten Hinweis). Dieses Schema würde auch als Standardschema verwendet, wenn ein Musterabgleichmechanismus im Spiel wäre und kein Treffer erfolgte. Ein Kandidat, der von einem spezialisierten Komprimierungs/Dekomprimierungsschema profitieren könnte (z. B. eine effizientere Komprimierung erfahren würde) ist der Speicher, der zur Nutzung durch Grafikoperationen (z. B. über eine GPU) erstellt wurde.
-
In manchen Ausführungsformen können Verdichtungsoperationen im Komprimierungspool durchgeführt werden, um Protokollstrukturen in den komprimierten Speichersegmenten zu pflegen. Zum Beispiel können komprimierte Dateneinheiten innerhalb eines Komprimierungsspeichersegments (z. B. für geringere Verdichtung) und/oder über mehrere Komprimierungsspeichersegmente hinweg (z. B. für eine größere Verdichtung) zusammengepackt werden. Verdichtungsoperationen können auf Anfragen hin und/oder automatisch initiiert werden, wenn komprimierte Daten aus dem komprimierten Speicher entfernt oder darin gespeichert werden. Protokollstrukturen können effiziente Eingabe/Ausgabe-Operationen (z. B. Lese/Schreib-Operationen) auf dem Komprimierungspool innerhalb einer Speichervorrichtung und/oder zwischen Kopplungsdatenspeichereinheiten ermöglichen.
-
Gemäß einer Ausführungsform können im Falle, dass komprimierte Daten aus dem Komprimierungspool gezogen werden, Löcher (d. h. leerer Speicherplatz, der zuvor durch die komprimierten Daten belegt war) erzeugt werden. Infolgedessen kann die Nutzung des Komprimierungspools immer weniger effizient werden, wenn diese Löcher nicht entfernt werden. Kleinere Verdichtungsoperationen können durchgeführt werden, um komprimierte Daten innerhalb eines Speichersegments (z. B. einer Protokollstruktur) im Komprimierungspool zu verschieben, um die Anzahl von Löchern im Speichersegment zu verringern. In einer Ausführungsform können kleinere Verdichtungsoperationen durchgeführt werden, um eine zusätzliche Allozierung von Speicherseiten in der Speichervorrichtung zu ermöglichen. Kleinere Verdichtungsoperationen können kostenunerhebliche Verarbeitungsressourcen darstellen, um eine merkliche Verbesserung bei den Datenverarbeitungs-Latenzzeiten zu verursachen.
-
In einer Ausführungsform können zusätzlich zu kleineren Verdichtungsoperationen größere Verdichtungsoperationen durchgeführt werden, um komprimierte Daten zwischen unterschiedlichen Speichersegmenten des Komprimierungspools zu verschieben, wenn zum Beispiel eine Notwendigkeit besteht, komprimierte Daten auf eine Auslagerungsvorrichtung auszulagern. Die Anzahl von im Komprimierungspool benötigten Speichersegmenten kann infolge der größeren Verdichtungsoperationen verringert werden. Nicht benutzter Speicherplatz in Speichersegmenten des Komprimierungspools können gestrafft (oder verringert) werden, um zum Beispiel ein Ausschreiben großer Blöcke komprimierter Speicherseiten auf eine Auslagerungsvorrichtung zu ermöglichen. Infolgedessen kann die verfügbare E/A-Bandbreite (z. B. zwischen der Speichervorrichtung und der Auslagerungsvorrichtung) maximiert werden. Ferner kann der Umfang der Abnutzung gegenüber der Auslagerungsvorrichtung (wie einer SSD-Vorrichtung) minimiert werden.
-
In einer Ausführungsform werden Verdichtungsoperationen auf der Grundlage eines Verdichtungsmodells durchgeführt, das ermittelt, wann kleinere Verdichtungsoperationen, größere Verdichtungsoperationen oder andere anwendbare Datenverschiebungsoperationen durchzuführen sind, um eine effiziente Datenspeichernutzung im Komprimierungspool aufrechtzuerhalten. Kleinere Verdichtungsoperationen können durchgeführt werden, um komprimierte Daten innerhalb eines einzelnen Speichersegments zu mischen, um den verfügbaren Speicherplatz zu erhöhen oder freizugeben. Größere Verdichtungsoperationen können durchgeführt werden, um komprimierte Daten zwischen mehreren Speichersegmenten zu verschieben, um zum Beispiel eine Bereitschaft zum Auslagern von Speichersegmenten in voller Größe vom Komprimierungspool zu einer Auslagerungsvorrichtung sicherzustellen. Ein Speichersegment kann in voller Größe sein, wenn es im Wesentlichen frei von Löchern ist oder eine Speichernutzungsrate größer als zum Beispiel ein zuvor festgelegter Schwellenwert (z. B. 99%) besitzt.
-
Somit können protokollstrukturierte Daten (oder ein protokollstrukturiertes Modell) gepflegt werden, wenn E/A-Operationen, die aus dem Komprimierungspool auf Auslagerungsdateien (z. B. in einer Auslagerungsvorrichtung) schreiben, zum Beispiel auf der Grundlage eines Datenblocks (z. B. ein Komprimierungssegment) derselben Größe wie 256 KB, 512 KB, 1024 KB oder einer anderen geeigneten Größe, durchgeführt werden. In einer Ausführungsform kann der Datenblock, der während der E/A-Operation zum Speicherauslagern übertragen wird, einer Sammlung von Komprimierungsspeicherseiten gemäß der E/A-Schnittstelle bei der Auslagerungsvorrichtung (z. B. zu einer E/A-Bus-Puffergröße passend) entsprechen, um die E/A-Leistung zu verbessern. Folglich können die Effizienz oder der Durchsatz in E/A-Operationen zwischen dem Komprimierungspool und der Auslagerungsvorrichtung auf der Grundlage der Komprimierung der übertragenen Daten und der passenden Übertragungsdaten-Blockgröße für die Auslagerungsvorrichtung verbessert werden.
-
In einer Ausführungsform können protokollstrukturierte Daten im Komprimierungspool eine geordnete Liste von Speichersegmenten einschließen. Neu komprimierte Daten können im Kopfsegment (oder Speicherkopf) der geordneten Segmentliste festgehalten werden. Eine Arbeitssatzanalyse für ein virtuelles Speichersystem kann durchgeführt werden, um zu ermitteln, welcher Abschnitt des Komprimierungspools auf der Grundlage der geordneten Segmentliste im Komprimierungspool auszulagern ist. Je weiter zum Beispiel ein Segment in der geordneten Liste vom Kopfsegment entfernt ist, desto wahrscheinlicher sind unter Umständen in dem Segment gespeicherte Daten nicht mehr von Interesse (oder unmittelbarem Bedarf) für den Arbeitssatz. Infolgedessen kann das Endsegment (oder vom Speicherkopf ferne Ende) zum Auslagern auf eine Auslagerungsvorrichtung ausgewählt werden. Komprimierte Daten können auf der Grundlage verdichteter Speichersegmente vom Komprimierungspool von der/zur Auslagerungsvorrichtung hinein/heraus gebracht werden.
-
Eine Notwendigkeit, Speicherauslagerungsoperationen durchzuführen, kann zum Beispiel identifiziert werden, um der Größe des Komprimierungspools eine Obergrenze zu setzen. Die Größe (oder Form) des Komprimierungspools kann sich auf der Grundlage von Laufzeit-Speicherzugriffsmustern dynamisch ändern. In einer Ausführungsform können die Verarbeitungskosten von Verdichtungs/Komprimierungs/Dekomprimierungsoperationen gegenüber Speicherauslagerungsoperationen auf der Grundlage eines Kostenmodells (z. B. von Energieverbrauchskosten) dynamisch überwacht (oder abgeschätzt) werden, um zu ermitteln, wann Auslagerungsoperationen durchzuführen sind.
-
Zum Beispiel kann die Rate von Komprimierungs/Dekompromierungs- und/oder Verdichtungsoperationen der Energie (oder dem Verarbeitungsressourcenverbrauch) entsprechen, um den Funktionszustand des Komprimierungspools (oder der Komprimierungsschicht, dem Komprimierungsabschnitt) in der Speichervorrichtung anzugeben. Wenn diese Rate einen bestimmten Schwellenwert überschreitet, können Auslagerungsoperationen durchgeführt oder ausgelöst werden, um komprimierte Daten aus dem Komprimierungspool zu einer Auslagerungsvorrichtung zu pagen. In einer Ausführungsform können Komprimierungs/Dekomprimierungs- und/oder Verdichtungsoperationen, verglichen mit Daten-E/A-Operationen bei Auslagerungs-Operationen, einen Bruchteil der Verarbeitungskosten mit sich bringen. Energiekostenfunktionen können bewertet werten, um es dem Komprimierungspool zu ermöglichen, zu wachsen bevor eine Notwendigkeit zum Paging-Out komprimierter Daten zur Auslagerungsvorrichtung entsteht. Die Kostenfunktion kann zum Beispiel von der Form des Komprimierungspools, einer konfigurierten Toleranz bei durch Verdichtungs/Komprimierungs/Dekompromierungsoperationen verursachten Verarbeitungslatenzzeiten oder anderen anwendbaren Faktoren abhängen, um den Arbeitssatz in der Speichervorrichtung zu pflegen.
-
Der Komprimierungspool in einer Speichervorrichtung kann Energieeinsparungen durch Verringern der erforderlichen Anzahl von Daten-Paging-Vorgängen (z. B. Auslagerungsoperationen) zu/von einer Auslagerungsvorrichtung ermöglichen. Zum Beispiel ist eine geringere Anzahl von Daten-Paging- oder Datei-Paging-Vorgängen erforderlich, wenn Daten komprimiert werden. Ferner kann die Effizienz oder Effektivität bei jeder Daten-Paging- oder Auslagerungsoperation verbessert werden, wenn verdichtete Segmente die komprimierten Daten über protokollbasierte Strukturen tragen.
-
In manchen Ausführungsformen können Listen von protokollstrukturgestützten Speichersegmenten im Komprimierungspool entsprechend einem Alter der in jedem Segment gespeicherten komprimierten Daten geordnet werden. Das Alter der komprimierten Daten kann angeben, wie früh die Daten vom Arbeitssatz komprimiert wurden oder für den Arbeitssatz auf sie zugegriffen wurde. Auslagerungsoperationen können Speichersegmente aus dem Arbeitssatz ausschreiben, die überaltert sind (z. B. die Endabschnitte der geordneten Segmentliste). Infolgedessen können komprimierte Daten, die zum Auslagern aus dem Komprimierungspool zu einer Auslagerungsvorrichtung (z. B. eine Platte) ausgewählt wurden, in einem verdichteten Speichersegment gespeichert werden, das schon eine Weile nicht mehr verwendet wurde. Auslagerungsoperationen können zum Beispiel durchgeführt werden, um Platz für ein Wachstum des Arbeitssatzes zu schaffen oder dieses aufnehmen. Zwischenzeitlich können periodische Datenschreibvorgänge zur Auslagerungsvorrichtung oder Plattenvorrichtung zu Wartungszwecken (z. B. Datei- oder Datensicherung/Synchronisierung) mit erheblichen Energieeinsparungen vermieden oder verringert werden.
-
Der Komprimierungspool kann Mechanismen für schnelle Operationen für ein Eintreten in einen Systemruhezustand oder ein Aufwachen bereitstellen. Zum Beispiel können der komprimierte Abschnitt und der unkomprimierte Abschnitt der Speichervorrichtung für ein System separat in einer nichtflüchtigen Datenspeichervorrichtung (z. B. einer Platte) gesichert (oder gespeichert) werden. Der komprimierte Abschnitt (oder Komprimierungspool) kann über verdichtete Speichersegmente auf die nichtflüchtige Datenspeichervorrichtung übertragen (oder gepusht) werden. Der unkomprimierte Speicherabschnitt (der z. B. einen aktuellen Arbeitssatz einschließt) kann zusammen mit speziellen Kennzeichnungen in den Komprimierungspool komprimiert werden, um als verdichtete Speichersegmente in die nichtflüchtige Datenspeichervorrichtung übertragen zu werden. Zum Beispiel können Anwendungen als komprimierte/verdichtete Speichersegmente in den Komprimierungspool ausgesetzt werden.
-
Während des Aufwachens des Systems können die speziell gekennzeichneten komprimierten Speichersegmente, die dem unkomprimierten Abschnitt der Speichervorrichtung entsprechen, von der nichtflüchtigen Datenspeichervorrichtung abgerufen (oder zurückgezogen) werden, um die Speichervorrichtung mit dem vorherigen Arbeitssatz (oder dem „heißen” Arbeitssatz) zu bestücken. Zum Beispiel können ausgesetzte Anwendungen wieder aktiviert oder im unkomprimierten Abschnitt der Speichervorrichtung aus den speziell gekennzeichneten komprimierten Speichersegmenten wiederhergestellt werden. Anstatt beliebige (z. B. zuvor in entweder dem komprimierten oder unkomprimierten Speicherabschnitt gespeicherte) Speicherseiten abzurufen, die der wiederherzustellenden Anwendung zugeordnet sind, kann das System mit wertvollen Informationen „vorgeheizt” (oder für ein beschleunigtes Aufwachen „vorgewärmt”) werden, die zuvor im unkomprimierten Speicherabschnitt für die Anwendung gespeichert waren, bevor diejenigen Speicherseiten abgerufen werden, die zuvor im komprimierten Pool gespeichert waren.
-
1 zeigt ein Blockdiagramm, das eine Ausführungsform eines virtuellen Speichersystems auf der Grundlage eines komprimierten und/oder verdichteten Speichers veranschaulicht. Zum Beispiel kann das System 100 eine Betriebsumgebung 101 einschließen, die in einer Speichervorrichtung einer Datenverarbeitungsvorrichtung, wie einer Mobilvorrichtung, einem Desktop-Computer oder einem Server usw., beherbergt ist. Die Speichervorrichtung kann zum Beispiel einen Speicher mit wahlfreiem Zugriff (random access memory (RAM)) zum Unterstützen von Datenverarbeitung mindestens eines Prozessors in der Verarbeitungsvorrichtung umfassen. Ein komprimierter Speicher (oder Komprimierungspool) 117 kann innerhalb der Speichervorrichtung dynamisch partitioniert (oder gepflegt) werden. Infolgedessen kann der verfügbare Speicherplatz in der Speichervorrichtung zum Unterstützen von Operationen der Betriebsumgebung 101, die auf dem unkomprimierten Abschnitt der Speichervorrichtung beruhen kann, geringer sein als der durch die Speichervorrichtung bereitgestellte Gesamtspeicherplatz. In bestimmten Ausführungsformen können mehrere Prozessoren, wie CPUs, GPUs oder andere anwendbare Verarbeitungseinheiten, parallel auf den komprimierten Speicher 117 zugreifen.
-
In einer Ausführungsform kann ein Verwaltungsmodul für virtuellen Speicher 103 vielfältige Formen von Computerdatenspeicher wie RAM und Massendatenspeichervorrichtungen 121 virtualisieren, um es einem Programm oder Prozess, wie einer Anwendung 123, das oder der in der Betriebsumgebung 101 ausgeführt wird, zu ermöglichen, auf Speicheradressen (oder virtuelle Speicheradressen) so zuzugreifen, als ob es nur eine einzige Art von Speicher gibt, namentlich virtuellen Speicher, der sich wie Lese/Schreib-Speicher in RAM verhalten kann, auf den direkt zugegriffen werden kann. Zum Beispiel kann das Verwaltungsmodul für virtuellen Speicher 103 eine Zuordnung zwischen virtuellen Speicheradressen (oder einer virtuellen Speicheradresse) und tatsächlichen physischen Datenspeicherorten, wie physischen Speicherseiten innerhalb des RAM (oder der Speichervorrichtung), und Datenspeicherreferenzen in den Massenspeichervorrichtungen 121 pflegen.
-
Das Verwaltungsmodul für virtuellen Speicher 103 kann Daten in die Speichervorrichtung (z. B. RAM) über ein Pager-Schicht-Modul 105 hinein und aus ihr heraus verschieben. Zum Beispiel können Daten (z. B. anonyme Daten oder schmutzige Daten, die nicht durch eine Plattendatei in den Massenspeichervorrichtungen 121 gesichert sind) von physischen Speicherseiten in der Speichervorrichtung ausgelagert werden, um als Reaktion auf zum Beispiel Speicherallozierungsanfragen von Anwendungen und/oder andere Datenverarbeitungsanforderungen hin Speicherplatz in den physischen Speicherseiten freizugeben. Saubere Daten (oder Speicherdaten), die von einer Plattendatei in den Massenspeichervorrichtungen 121 verfügbar sein können, können aus der Speichervorrichtung ausgepaget (oder gelöscht) werden, um den verfügbaren Speicherplatz zu erhöhen. Wenn eine Anwendung, wie die Anwendung 123, beendet wird, kann für die Anwendung allozierter Speicherplatz (z. B. Stapel, Heap-Speicher usw.) für eine zukünftige Allozierung verfügbar werden.
-
In einer Ausführungsform kann das Verwaltungsmodul für virtuellen Speicher 103 Anfragen zum Ein/Auslagern von Speicher an das Pager-Schicht-Modul 105 senden, um virtuelle Speicheradressen innerhalb des unkomprimierten Abschnitts der Speichervorrichtung zu verwalten. Das Pager-Schicht-Modul 105 kann mit den Massendatenspeichervorrichtungen 121 und/oder einem Verwaltungsmodul für komprimierten Speicher 107 über eine Schnittstelle verbunden sein, um Speicherseiten aus oder zum unkomprimierten Abschnitt der Speichervorrichtung zu verschieben. Infolgedessen kann das Verwaltungsmodul für virtuellen Speicher 103 eine virtuelle Speicheradresse außerhalb des unkomprimierten Abschnitts der Speichervorrichtung zuordnen, ohne zu unterscheiden (oder Wissen darüber), ob die virtuelle Speicheradresse einem Speicherort innerhalb des komprimierten Speichers 117 oder den Massendatenspeichervorrichtungen 121 entspricht. Mit anderen Worten muss das Verwaltungsmodul für virtuellen Speicher 103 von der Anwesenheit des komprimierten Speichers 117 nichts wissen.
-
Das Pager-Schicht-Modul 105 kann auf mehreren parallelen Threads (oder Eingabe/Ausgabe-Threads) beruhen, um Speicher-Paging-Operationen durchzuführen. Zum Beispiel kann das Pager-Schicht-Modul 105 einen Datei-Pager einschließen, um unkomprimierte Speicherseiten zu verwalten, in denen saubere Daten von Plattendateien der Massendatenspeichervorrichtungen 121 gespeichert sind. Das Pager-Schicht-Modul 105 kann einen Speicher-Pager (z. B. als einen oder mehrere Threads) einschließen, der mit dem Verwaltungsmodul für komprimierten Speicher 107 über eine Schnittstelle verbunden ist, um unkomprimierte Speicherseiten über den komprimierten Speicher 117 zum/vom unkomprimierten Abschnitt der Speichervorrichtung zu verschieben.
-
In einer Ausführungsform kann der komprimierte Speicher 117 eine oder mehrere Protokollstrukturen (z. B. auf der Grundlage eines Arrays oder einer Warteschlange mit einem Kopf und einem Ende) einschließen, um komprimierte Speichereinheiten zu speichern. Jede Protokollstruktur kann ein oder mehrere Segmente mit für das Speichern komprimierter Speichereinheiten allozierten Puffer einschließen. Jedes Segment kann eine gemeinsame Größe (z. B. 256 KB, 512 KB, 1024 KB oder andere anwendbare Größen) mit Speicherslots besitzen, um eine geordnete Liste komprimierter Speichereinheiten (oder komprimierter Seiten) zu speichern. Jede komprimierte Einheit kann vielleicht von einer Speicherseite im unkomprimierten Abschnitt einer Speichervorrichtung, z. B. über ein Komprimierer/Dekomprimierer-Modul 111, zum Kopf einer Protokollstruktur komprimiert werden. In manchen Ausführungsformen kann jede Protokollstruktur über separate Threads gleichzeitig und/oder unabhängig über das Verwaltungsmodul für komprimierten Speicher 107 aktualisiert oder betrieben werden.
-
Eine komprimierte Speichereinheit kann in einer Speicherlücke (oder Position) in einem Segment einer Protokollstruktur gespeichert werden. Das Komprimierermodul 111 kann neu komprimierte Speicherseiten in einer Kopflücke einer Protokollstruktur festhalten oder speichern und die (zur aktuellen Kopflücke) nächste Lücke als die Kopflücke der Protokollstruktur für zukünftige Komprimierung aktualisieren. Das Verwaltungsmodul für komprimierten Speicher 107 kann ein oder mehrere neue Segmente erzeugen (oder aus dem unkomprimierten Abschnitt einer Speichervorrichtung allozieren), wenn das aktuelle Segment (oder Kopfsegment in der Protokollstruktur) voll (oder im Wesentlichen voll) wird. Eine Zuordnung zwischen einer Speicherseite und ihrer entsprechenden komprimierten Speichereinheit in einer Protokollstruktur kann für den komprimierten Speicher 117 zum Beispiel auf der Grundlage von Kennungen gepflegt werden, die eine Protokollstruktur, ein Segment innerhalb der angegebenen Protokollstruktur und eine Speicherlücke innerhalb des angegebenen Segments angeben, in dem die komprimierte Speichereinheit gespeichert ist.
-
In einer Ausführungsform kann das Komprimierer/Dekomprimierer-Modul 111 Protokollstrukturen im komprimierten Speicher 117 verwalten. Jede Protokollstruktur kann einem Speicherkopf zugeordnet sein, der auf eine Kopflücke in einem aktuellen Segment, z. B. ein Kopfsegment in einem Array von Segmenten in der Protokollstruktur, zeigen kann. Mehrere Threads können dem Komprimierer/Dekomprimierer-Modul 111 zugeordnet sein, um Speicherkomprimier/dekomprimier-Operationen unter Verwendung separater Protokollstrukturen parallel durchzuführen. Das Komprimierer/Dekomprimierer-Modul 111 kann Komprimieroperationen gemäß einer Anfragewarteschlange durchführen, in der zu komprimierende Speicherseiten zum Beispiel wie über das Pager-Schicht-Modul 105 geplant gespeichert sind. Wenn eine Speicherseite komprimiert ist, kann sie weniger als die Größe einer Seite physischen Speichers erfordern, um in einer Speicherlücke innerhalb eines Segments in einer Protokollstruktur gespeichert zu werden.
-
In einer Ausführungsform können Speicherslots dem Kopf einer entsprechenden Protokollstruktur folgend aufgefüllt werden, wenn mehr Speicherseiten in den komprimierten Speicher 117 komprimiert werden. Alternativ dazu können manche Segmente oder Lücken in den Segmenten in der entsprechenden Protokollstruktur leer oder für eine Allozierung verfügbar werden, wenn die gespeicherten komprimierten Speichereinheiten freigegeben werden. Wenn zum Beispiel eine Anwendung oder ein Prozess beendet werden, können für die Anwendung unterhaltene Objekte oder Strukturen entfernt werden, und physische Speicherseiten oder komprimierte Speichereinheiten im Besitz der Anwendung können für eine zukünftige Verwendung (d. h. zur Allozierung verfügbar) freigegeben werden. Alternativ dazu können Segmente infolge eines Auslagerns, Dekomprimierens oder Verdichtens leer werden.
-
Das Komprimierer/Dekomprimierer-Modul 111 kann komprimierte Speichereinheiten aus dem komprimierten Speicher 117 zum unkomprimierten Abschnitt einer Speichervorrichtung, zum Beispiel als Reaktion auf im Verwaltungsmodul für virtuellen Speicher 103 auftretende Seitenfehler, herausziehen oder dekomprimieren. Das Komprimierer/Dekomprimierer-Modul 111 kann Komprimier- und Dekomprimieroperationen auf unterschiedlichen Segmenten des komprimierten Speichers 117 zum Beispiel über separate Threads gleichzeitig durchführen.
-
Das Verwaltungsmodul für komprimierten Speicher 107 kann ein Ein/Auslagerungsmodul 113 einschließen, um Segmente komprimierter Speichereinheiten über ein Schnittstellenmodul 119 zwischen dem komprimierten Speicher 117 und der Massendatenspeichereinheit 121 zu verschieben. Zum Beispiel können Segmente von komprimierten Speichereinheiten aus dem komprimierten Speicher 117 ausgelagert werden, um Platz für ein Aufnehmen neu komprimierter Speicherseiten zu schaffen und/oder um einen Zustand der Speichervorrichtung für eine zukünftige Wiederherstellung während eines Systemruhezustandsprozesses usw. zu speichern. Alternativ dazu kann ein Segment komprimierter Speichereinheiten in den komprimierten Speicher 117 eingelagert werden, weil Seitenfehler im Verwaltungsmodul für virtuellen Speicher 103 aufgetreten sind, um auf Daten in einem oder mehreren des Segments komprimierter Speichereinheiten zuzugreifen.
-
In einer Ausführungsform können ein oder mehrere Threads für das Ein/Auslagerungsmodul 113 ausgeführt werden. Ein Ein/Auslagerungs-Thread kann gemäß einem zugewiesenen Plan oder auf Anfragen reagierend aufwachen. Zum Beispiel kann das Pager-Schicht-Modul 105 Anfragen zum Auflösen von Seitenfehlern ausgeben. Ein Verwaltungsmodul für die Speichernutzung 115 kann Anfragen zum Unterhalten von genügend verfügbarem Speicherplatz in der Speichervorrichtung senden. Gemäß einer Ausführungsform kann ein Ein/Auslagerungs-Thread aufwachen, um den aktuellen Zustand der Speichervorrichtung zu untersuchen, um zu ermitteln, wie viele Segmente unkomprimierter Speichereinheiten aus dem komprimierten Speicher 117 auszulagern sind. Der Ein/Auslagerungs-Thread kann ein am wenigsten benutztes (z. B. überaltertes oder altes) Segment auswählen, es bei Bedarf verdichten (z. B. über ein Verdichtungsmodul 109) und das ausgewählte Segment an die Massenspeichervorrichtungen 121 weiterleiten. Ein/Auslagerungsoperationen über das Ein/Auslagerungsmodul 113 können unabhängig und/oder gleichzeitig mit Komprimierungs/Dekomprimierungsoperationen über das Komprimimierer/Dekomprimierer-Modul 111 durchgeführt werden.
-
Das Verdichtungsmodul 109 kann Verdichtungsoperationen am komprimierten Speicher 117 durchführen, um die Speicherfragmentierung zu verringern und/oder Speicher-Ein/Auslagerungs-Effizienzen zu erhöhen. Zum Beispiel kann das Verdichtungsmodul 109 kleinere Verdichtungsoperationen durchführen, um komprimierte Speichereinheiten innerhalb eines Segments einer Protokollstruktur zu bewegen (oder zu verschieben), ohne die Ordnungsbeziehung zwischen den komprimierten Speichereinheiten zu verändern, um dazwischen übriggelassene leere Speicherslots zu schließen. Alternativ oder optional dazu kann das Verdichtungsmodul 109 größere Verdichtungsoperationen durchführen, um komprimierte Speichereinheiten über unterschiedliche Segmente hinweg zu verschieben, um bestimmte Segmente zu füllen und/oder zu leeren.
-
In einer Ausführungsform kann das Ein/Auslagerungsmodul 113 das Verdichtungsmodul 109 auffordern, Segmente für eine bessere Ein/Auslagerungsleistung zu verdichten (z. B. leere Lücken minimieren oder verringern). Zum Beispiel kann die Schnittstelle zwischen einer Speichervorrichtung und einer Auslagerungsvorrichtung auf einem Datenpuffer einer festen Größe für die Datenübertragung beruhen. Ein eng gepacktes Segment, das der Datenpuffergröße entspricht, kann die Übertragungseffizienz maximieren (z. B. die pro Zeiteinheit oder Taktzyklus übertragene Datenmenge)
-
Das Verwaltungsmodul für die Speichernutzung 115 kann ermitteln, wann komprimierte Speichereinheiten oder -seiten aus dem komprimierten Speicher 117 zu den Massenspeichervorrichtungen 121 zu schieben oder auszulagern sind. Das Verwaltungsmodul für die Speichernutzung kann den Nutzungsstatus der Speichervorrichtung überwachen, um Auslöser für das Ein/Auslagerungsmodul 113 bereitzustellen (oder eine Anfrage zu schicken), um Ein/Auslagerungsoperationen zu initiieren. Der Nutzungsstatus kann eine Energienutzung, Speicherleistung (z. B. Lese/Schreib-Geschwindigkeit), ein Speichernutzungsratenverhältnis, ein Verhältnis von komprimierten/unkomprimierten Partitionen in der Speichervorrichtung, eine Größe des komprimierten Speichers 117, eine Größe des Arbeitssatzes von Speicherseiten oder andere anwendbare Laufzeitmaßzahlen usw. einschließen.
-
2 zeigt ein Ablaufdiagramm, das eine Ausführungsform des Komprimierens und Dekomprimierens von Speicher für einen virtuellen Speicher veranschaulicht. Zum Beispiel kann ein Prozess 200 durch manche Komponenten des Systems 100 von 1 durchgeführt werden. In Block 201 kann die Verarbeitungslogik des Prozesses 200 einen komprimierten Speicherabschnitt in einer Speichervorrichtung für einen virtuellen Speicher dynamisch aktualisieren, der einen oder mehrere Prozessoren unterstützt. Die Speichervorrichtung kann einen unkomprimierten Speicherabschnitt separat vom komprimierten Speicherabschnitt einschließen. Eine Speicheradresse im virtuellen Speicher kann in den komprimierten Abschnitt oder den unkomprimierten Abschnitt des Speichers zugeordnet werden.
-
In einer Ausführungsform kann der komprimierte Speicherabschnitt mit zusätzlichem Speicher aktualisiert werden, der vom unkomprimierten Speicherabschnitt alloziert wird. Eine im unkomprimierten Speicherabschnitt allozierte Speicherregion kann in den komprimierten Speicherabschnitt komprimiert werden, um es der Speicherregion zu ermöglichen, für eine zukünftige Allozierung im unkomprimierten Speicherabschnitt der Speichervorrichtung verfügbar zu sein. Der aktualisierte komprimierte Speicherabschnitt kann in der Lage sein, die komprimierte Speicherregion zu speichern. Die Größe des für die Allozierung im unkomprimierten Speicherabschnitt verfügbaren Speichers kann sich infolge der Komprimierung der Speicherregion erhöhen.
-
Gemäß einer Ausführungsform kann die komprimierte Speicherregion zum Beispiel als Reaktion auf ein Empfangen einer Anfrage, auf Daten in der komprimierten Speicherregion zuzugreifen, in den unkomprimierten Abschnitt in der Speichervorrichtung zurückkomprimiert werden. Die Verarbeitungslogik des Prozesses 200 kann ermitteln, ob die angefragten Daten derzeit im unkomprimierten Speicherbereich verfügbar sind. Wenn die angefragten Daten derzeit nicht im unkomprimierten Speicherabschnitt verfügbar sind, kann die Anfrage ein Seitenfehlerereignis verursachen, um die Aktualisierung auf dem komprimierten Speicherabschnitt auszulösen, z. B. die komprimierte Speicherregion zu dekomprimieren.
-
Der komprimierte Speicherabschnitt kann in mehreren (oder mindestens einer) komprimierten Speichereinheiten gespeichert werden. Jede komprimierte Speichereinheit kann einer separaten Speicherregion entsprechen, die aus dem unkomprimierten Speicherabschnitt komprimiert wurde. Separate komprimierte Speichereinheiten sind im komprimierten Speicherabschnitt (z. B. auf der Grundlage physischer Allozierung innerhalb der Speichervorrichtung) unter Umständen nicht aufeinanderfolgend gespeichert. In einer Ausführungsform kann der komprimierte Speicherabschnitt verdichtet werden, um zu veranlassen, dass diese separaten komprimierten Speichereinheiten aufeinanderfolgend im komprimierten Speicherabschnitt gespeichert werden.
-
Eine Speicherregion kann einer Speichereinheit einer festen Größe, wie einer Speicherseite, im unkomprimierten Abschnitt einer Speichervorrichtung entsprechen. Eine komprimierte Speichereinheit kann abhängig von zum Beispiel einer Menge oder Komprimierungseigenschaft von in die komprimierte Speichereinheit komprimiertem ursprünglichem Dateninhalt in der Größe variieren. In einer Ausführungsform kann eine komprimierte Speicherregion einer bestimmten komprimierten Speichereinheit im komprimierten Speicherabschnitt entsprechen.
-
In einer Ausführungsform kann eine bestimmte komprimierte Speichereinheit zwischen benachbarten komprimierten Speichereinheiten im komprimierten Speicherabschnitt gespeichert werden. Wenn die bestimmte komprimierte Speichereinheit aus dem komprimierten Speicherabschnitt entfernt wird, können die benachbarten Speichereinheiten z. B. über Verdichtungsoperationen verschoben werden, damit sie aufeinanderfolgend nebeneinander gespeichert sind. Die bestimmte komprimierte Speichereinheit kann aus dem komprimierten Speicherabschnitt zum Beispiel über eine Dekomprimierungsoperation, Ein/Auslagerungsoperationen oder andere anwendbare Speicherverwaltungsoperationen entfernt werden.
-
In manchen Ausführungsformen kann der komprimierte Speicherabschnitt mehrere Pools von Speicherslots einschließen. Jede komprimierte Speichereinheit kann in einer oder mehreren (gemäß der Allozierung physischen Speichers) aufeinanderfolgenden Speicherslots gespeichert werden. Jeder Pool kann einer separaten Partition der komprimierten Speichereinheiten entsprechen. In einer Ausführungsform kann jeder Pool einem separaten Thread zugeordnet sein, der z. B. zu einem in einem System unter Verwendung des Speichers ausgeführten Prozess gehört. Verdichtungsoperationen am komprimierten Speicherabschnitt können für jeden Pool über seinen zugeordneten Thread separat und asynchron durchgeführt werden.
-
Die Speichervorrichtung kann mit einer separaten Datenspeichervorrichtung gekoppelt sein, wie einer Festplatte, einem Flash-Speicher oder einer anderen anwendbaren nichtflüchtigen Datenspeichervorrichtung. Eine oder mehrere der komprimierten Speichereinheiten können vom komprimierten Speicherabschnitt auf die separate Massendatenspeichervorrichtung ausgelagert werden (um z. B. den komprimierten Speicherabschnitt zu aktualisieren). Infolgedessen kann die Größe des komprimierten Speicherabschnitts verringert werden, um die Größe des unkomprimierten Speicherabschnitts zu vergrößern. Alternativ dazu können die komprimierten Speichereinheiten für komprimierte Speicherregionen von der separaten Datenspeichervorrichtung auf den komprimierten Speicherabschnitt ausgelagert werden, wenn Daten in den komprimierten Speichereinheiten im komprimierten Speicherabschnitt bei einer Anfrage derzeit nicht verfügbar sind.
-
Die Verarbeitungslogik des Prozesses 200 kann komprimierte Speichereinheiten zwischen der Datenspeichervorrichtung (z. B. einer Auslagerungsvorrichtung) und der Speichervorrichtung über eine Schnittstelle mit einem Datenübertragungspuffer, wie einen Buspuffer mit einer bestimmten Bitgröße, ein- und auslagern. In einer Ausführungsform kann die Verarbeitungslogik des Prozesses 200 den komprimierten Speicherabschnitt verdichten, um es dem Datenübertragungspuffer zu ermöglichen, mehrere komprimierten Speichereinheiten z. B. mit im Wesentlichen voller Kapazität bei jeder Hardware-Datentransaktion effizient zusammen zu tragen.
-
In einer Ausführungsform kann die Speicherregion einer Speicherseite in der Speichervorrichtung entsprechen. Der unkomprimierte Speicherabschnitt kann einen Arbeitssatz von Speicherseiten einschließen, um derzeit aktive Datenverarbeitungsprozesse zu unterstützen. Der Arbeitssatz von Speicherseiten kann in eine Reihe von komprimierten Speichereinheiten im komprimierten Speicherabschnitt komprimiert werden, z. B. als Reaktion auf eine Ruhezustandsanfrage, um Operationen des Systems vorübergehend anzuhalten. Die Reihe komprimierter Speichereinheiten kann dann zur zukünftigen Verwendung zu einer mit der Speichervorrichtung gekoppelten Datenspeichervorrichtung ausgelagert werden.
-
Die Verarbeitungslogik des Prozesses 200 kann mindestens eine komprimierte Speichereinheit zum Auslagern vom komprimierten Speicherabschnitt auswählen. Die Auswahl kann auf Nutzungseigenschaften der komprimierten Speichereinheiten beruhen. Die Nutzungseigenschaften können angeben, wann auf Daten für die komprimierten Speichereinheiten zugegriffen wird. Zum Beispiel können die Nutzungseigenschaften Zeitstempel oder andere einer komprimierten Speichereinheit zugeordnete Metadaten einschließen, um anzugeben, wann auf die komprimierte Speichereinheit zugegriffen wurde, wann sie erstellt, komprimiert, eingelagert oder verwendet wurde usw.
-
In einer Ausführungsform kann die Verarbeitungslogik des Prozesses 200 diejenigen komprimierten Speichereinheiten auslagern, für welche die Wahrscheinlichkeit, für den Arbeitssatz verwendet oder angefordert zu werden, am geringsten ist, wie über eine LRU-Strategie. Die Verarbeitungslogik des Prozesses 200 kann auf der Grundlage zugeordneter Nutzungseigenschaften heuristisch die Wahrscheinlichkeit ermitteln, dass auf die komprimierten Speichereinheiten in der nahen Zukunft zugegriffen wird. In einer Ausführungsform können die komprimierten Speichereinheiten linear mit einer Ordnung im komprimierten Speicherabschnitt gespeichert werden. Die Ordnung kann den Nutzungseigenschaften (z. B. Zugriffszeitstempeln) entsprechen, die den komprimierten Speichereinheiten zugeordnet sind.
-
Der komprimierte Speicherabschnitt kann ein oder mehrere Speichersegmente einschließen. Jedes Speichersegment kann einem Array von einer oder mehreren der komprimierten Speichereinheiten entsprechen. Die Verarbeitungslogik des Prozesses 200 kann eine oder mehrere komprimierte Speichereinheiten innerhalb eines bestimmten Speichersegments zum Durchführen von Verdichtungsoperationen bewegen oder verschieben, um es zu ermöglichen, dass mehrere komprimierte Speichereinheiten in fortlaufendem Speicherplatz innerhalb des bestimmten Speichersegments gespeichert werden.
-
In einer Ausführungsform kann jedes Speichersegment eine Speicherkapazität und/oder eine Auslastungsrate aufweisen. Die Auslastungsrate kann angeben, wie viel der Speicherkapazität verwendet wurde, um ein entsprechendes Array komprimierter Speichereinheiten zu speichern. Die Verarbeitungslogik des Prozesses 200 kann die Verdichtungsoperationen durchführen, um eine oder mehrere der komprimierten Speichereinheiten zwischen den Speichersegmenten zu verschieben, um die Nutzungsrate mindestens eines der Speichersegmente zu erhöhen. Zum Beispiel kann ein Speichersegment, das zu 60% voll ist, nach den Verdichtungsoperationen zu 99% voll sein.
-
3 zeigt ein Ablaufdiagramm, das eine Ausführungsform eines Prozesses zum Ein- und Auslagern komprimierter Speicherseiten für einen virtuellen Speicher veranschaulicht. Zum Beispiel kann ein Prozess 300 durch manche Komponenten des Systems 100 von 1 durchgeführt werden. In Block 301 kann die Verarbeitungslogik des Prozesses 300 auf der Grundlage einer Speichervorrichtung einen virtuellen Speicher bereitstellen. Die Verarbeitungslogik des Prozesses 300 kann die Speichervorrichtung dynamisch in einen unkomprimierten Abschnitt (oder Schicht) von Speicher und einen komprimierten Abschnitt (oder Schicht) von Speicher partitionieren. Ein Arbeitssatz von Speicherplatz, der verwendet wird, um Datenverarbeitungsaufgaben durch einen oder mehrere mit der Speichervorrichtung gekoppelte Prozessoren durchzuführen, kann im unkomprimierten Speicherabschnitt gespeichert werden.
-
In Block 303 kann die Verarbeitungslogik des Prozesses 300 eine oder mehrere Speicherseiten des unkomprimierten Speicherabschnitts in eine oder mehrere komprimierte Speicherseiten variierender Größe im komprimierten Speicherabschnitt komprimieren. Die Komprimierung kann einen verfügbaren Speicherplatz im unkomprimierten Speicherabschnitt erhöhen.
-
In Block 305 kann die Verarbeitungslogik des Prozesses 300 eine bestimmte der komprimierten Speichereinheiten vom komprimierten Speicherabschnitt in den unkomprimierten Speicherabschnitt dekomprimieren, zum Beispiel als Reaktion auf einen Seitenfehler infolge einer Zugriffsanfrage auf Daten in der bestimmten komprimierten Speichereinheit.
-
In Block 307 kann die Verarbeitungslogik des Prozesses 300 mindestens eine komprimierte Speichereinheit variierender Größe aus dem komprimierten Speicherabschnitt zur Massendatenspeichervorrichtung auslagern, um einen verfügbaren Speicherplatz im unkomprimierten Speicherabschnitt zu erhöhen, um zum Beispiel eine zusätzliche Allozierungsanforderung für den Arbeitssatz im unkomprimierten Speicherabschnitt aufzunehmen.
-
4 zeigt ein Ablaufdiagramm, das eine Ausführungsform eines Prozesses zum Ein- und Auslagern eines verdichteten Segments komprimierten Speichers für einen virtuellen Speicher veranschaulicht. Zum Beispiel kann ein Prozess 400 durch manche Komponenten des Systems 100 von 1 durchgeführt werden. In Block 401 kann die Verarbeitungslogik des Prozesses 400 eine oder mehrere Speicherseiten eines unkomprimierten Abschnitts einer Speichervorrichtung in eine oder mehrere komprimierte Speicherseiten variierender Größe in einem komprimierten Abschnitt der Speichervorrichtung komprimieren. Die Speichervorrichtung kann mit einer Massendatenspeichervorrichtung gekoppelt sein.
-
In Block 403 kann die Verarbeitungslogik des Prozesses 400 die komprimierten Speichereinheiten variierender Größe in ein Segment oder andere anwendbare Protokollstrukturdaten im komprimierten Abschnitt der Speichervorrichtung verdichten.
-
Als Reaktion auf ein Empfangen einer Zugriffsanfrage auf komprimierte Daten in einer der komprimierten Speichereinheiten kann die Verarbeitungslogik des Prozesses 400 in Block 405 eine oder mehrere Speichereinheiten zum Beispiel aus dem Segment im komprimierten Abschnitt zum unkomprimierten Abschnitt der Speichervorrichtung dekomprimieren.
-
In Block 407 kann die Verarbeitungslogik 400 das Segment der komprimierten Speichereinheiten zur Massendatenspeichervorrichtung auslagern, um einen verfügbaren Speicherplatz in der Speichervorrichtung zu erhöhen.
-
5 zeigt ein Beispiel eines Datenverarbeitungssystems, wie eines Computersystems, das in Verbindung mit einer Ausführungsform der vorliegenden Erfindung verwendet werden kann. Zum Beispiel kann das System 1 von 1 als ein Teil des in 5 gezeigten Systems implementiert werden. Obwohl 5 verschiedene Komponenten eines Computersystems veranschaulicht, ist zu beachten, dass es nicht beabsichtigt ist, dass sie irgendeine bestimmte Architektur oder Art und Weise des Verbindens der Komponenten wiedergibt, da solche Details für die hierin beschriebenen Techniken nicht relevant sind. Es wird ebenso ersichtlich sein, dass Netzwerkcomputer und andere Datenverarbeitungssysteme, die weniger Komponenten oder vielleicht mehr Komponenten besitzen, bei der vorliegenden Erfindung ebenfalls verwendet werden können.
-
Wie in 5 gezeigt, schließt das Computersystem 500, bei dem es sich um eine Form von Datenverarbeitungssystem handelt, einen Bus 503 ein, der mit einem oder mehreren Mikroprozessoren 505, einem ROM (Nur-Lese-Speicher) 507 und einem flüchtigen RAM 509 und einem nichtflüchtigen Speicher 511 gekoppelt ist. Der Mikroprozessor 505 kann die Anweisungen von den Speichern 507, 509, 511 abrufen und Anweisungen ausführen, um vorstehend beschriebene Operationen durchzuführen. Der Bus 503 verbindet diese verschiedenen Komponenten miteinander und verbindet diese Komponenten 505, 507, 509 und 511 auch mit einer Anzeigesteuereinheit und Anzeigevorrichtung 513 und mit Peripherievorrichtungen wie Eingabe/Ausgabe(E/A)-Vorrichtungen, bei denen es sich um Mäuse, Tastaturen, Modems, Netzwerkschnittstellen, Drucker und andere Vorrichtungen handeln kann, die im Stand der Technik allgemein bekannt sind. Typischerweise sind die Eingabe/Ausgabe-Vorrichtungen 515 über Eingabe/Ausgabe-Steuereinheiten 517 mit dem System gekoppelt. Der flüchtige RAM (Speicher mit wahlfreiem Zugriff) 509 ist typischerweise als dynamischer RAM (DRAM) implementiert, der kontinuierlich Energie benötigt, um die Daten im Speicher zu aktualisieren oder zu unterhalten.
-
Bei dem Massendatenspeicher 511 handelt es sich typischerweise um eine magnetische Festplatte oder ein magnetisches optisches Laufwerk oder ein optisches Laufwerk oder einen DVD-RAM oder einen Flash-Speicher oder andere Typen von Speichersystemen, die Daten (z. B. große Datenmengen) auch dann beibehalten, wenn das System von der Energieversorgung getrennt ist. Typischerweise wird es sich bei dem Massendatenspeicher 511 auch um einen Speicher mit wahlfreiem Zugriff handeln, obwohl dies nicht erforderlich ist. Obwohl 5 zeigt, dass es sich bei dem Massendatenspeicher 511 um eine lokale Vorrichtung handelt, die direkt mit dem Rest der Komponenten im Datenverarbeitungssystem gekoppelt ist, wird es ersichtlich sein, dass die vorliegende Erfindung einen nichtflüchtigen Speicher verwenden kann, der vom System entfernt angeordnet ist, wie eine Netzwerkdatenspeichervorrichtung, die durch eine Netzwerkschnittstelle wie ein Modem oder eine Ethernet-Schnittstelle oder eine kabellose Netzwerkschnittstelle mit dem Datenverarbeitungssystem gekoppelt ist. Der Bus 503 kann einen oder mehrere Busse einschließen, die miteinander über vielfältige Brücken, Steuereinheiten und/oder Adapter verbunden sind, wie in der Technik allgemein bekannt ist.
-
Abschnitte dessen, was vorstehend beschrieben wurde, können mit Schaltlogik, wie einer dedizierten Logikschaltung, oder mit einer Mikrosteuereinheit oder einer anderen Form von Verarbeitungskern, der Programmcodeanweisungen ausführt, implementiert werden. Somit können durch die vorstehende Erläuterung gelehrte Prozesse mit Programmcode wie maschinenausführbaren Anweisungen durchgeführt werden, die bewirken, dass eine Maschine, die diese Anweisungen ausführt, bestimmte Funktionen durchführt. In diesem Kontext kann es sich bei einer „Maschine” um eine Maschine, die Zwischenform(oder „abstrakte”)-Anweisungen in prozessorspezifische Anweisungen umwandelt (z. B. eine abstrakte Ausführungsumgebung wie eine „virtuelle Maschine” (z. B. eine virtuelle Java-Maschine), einen Übersetzer, eine Common Language Runtime, eine virtuelle Maschine einer übergeordneten Sprache usw.) und/oder eine elektronische Schaltlogik handeln, die auf einem Halbleiterchip (z. B. einer mit Transistoren implementierten „Schaltlogik”) angeordnet sind, der konzipiert ist, Anweisungen auszuführen, wie ein universeller Prozessor und/oder ein zweckbestimmter Prozessor. Durch die vorstehende Erläuterung gelehrte Prozesse können auch (als Alternative zu einer Maschine oder in Kombination mit einer Maschine) durch eine elektronische Schaltlogik durchgeführt werden, die gestaltet ist, die Prozesse (oder einen Abschnitt davon) ohne die Ausführung von Programmcode durchzuführen.
-
Ein Herstellungsartikel kann verwendet werden, um Programmcode zu speichern. Ein Herstellungsartikel, der Programmcode speichert, kann, ohne auf diese beschränkt zu sein, als ein oder mehrere Speicher (z. B. ein oder mehrere Flash-Speicher, Speicher mit wahlfreiem Zugriff (statisch, dynamisch oder andere)), optische Platten, CD-ROMs, DVD-ROMs, EPROMs, EEPROMs, magnetische oder optische Karten oder andere Typen maschinenlesbarer Medien ausgebildet werden, die zum Speichern elektronischer Anweisungen geeignet sind. Programmcode kann zudem von einem entfernt angeordneten Computer (z. B. einem Server) auf einen anfragenden Computer (z. B. einen Client) mittels Datensignalen heruntergeladen werden, die in einem Ausbreitungsmedium (z. B. über eine Datenübertragungsverbindung (z. B. eine Netzwerkverbindung)) ausgebildet sein können.
-
Die vorhergehenden detaillierten Beschreibungen werden bezüglich Algorithmen und symbolischen Darstellungen von Operationen an Datenbits innerhalb eines Computerspeichers vorgelegt. Diese algorithmischen Beschreibungen und Darstellungen stellen Werkzeuge dar, die durch den Fachmann der Datenverarbeitungstechnik verwendet werden, um anderen Fachleuten die Substanz seiner Arbeit am effektivsten zu übermitteln. Ein Algorithmus wird hier und allgemein als eine selbstständige Folge von Operation betrachtet, die zu einem gewünschten Ergebnis führen. Bei den Operationen handelt es sich um diejenigen, die physische Bearbeitungen physischer Quantitäten erfordern. Üblicherweise, aber nicht notwendigerweise, nehmen diese Quantitäten die Form elektronischer oder magnetischer Signale an, die in der Lage sind, gespeichert, übertragen, kombiniert, verglichen oder anderweitig bearbeitet zu werden. Es hat sich manchmal als bequem erwiesen, diese Signale prinzipiell aus Gründen allgemeiner Verwendung als Bits, Werte, Elemente, Symbole, Zeichen, Ausdrücke, Zahlen oder Ähnliches zu bezeichnen.
-
Es sollte jedoch im Kopf behalten werden, dass all diese und ähnliche Ausdrücke den entsprechenden physischen Quantitäten zuzuordnen sind und lediglich bequeme, auf diese Quantitäten angewandte Kennzeichnungen darstellen. Sofern nicht speziell anders angegeben als anhand der vorstehenden Erläuterung ersichtlich, ist zu ersehen, dass sich innerhalb der Beschreibung Erläuterungen, welche Ausdrücke verwenden wie „verarbeiten”, „bearbeiten”, „berechnen” oder „ermitteln” oder „anzeigen” oder Ähnliches, auf das Handeln und die Prozesse eines Computersystems oder einer ähnlichen elektronischen Rechenvorrichtung beziehen, das oder die als physische (elektronische) Quantitäten innerhalb der Register und Speicher des Computersystems dargestellte Daten in andere, gleichermaßen als physische Quantitäten innerhalb der Speicher oder Register des Computersystems oder einer anderen solche Informationsdatenspeicher-, Übertragungs- oder Anzeigevorrichtungen dargestellte Daten bearbeitet und umwandelt.
-
Die vorliegende Erfindung betrifft zudem eine Einrichtung zum Durchführen der hierin beschriebenen Operationen. Diese Einrichtung kann speziell für den erforderlichen Zweck konstruiert sein oder einen universellen Computer umfassen, der selektiv durch ein im Computer gespeichertes Computerprogramm aktiviert oder rekonfiguriert wird. Solch ein Computerprogramm kann in einem computerlesbaren Datenspeichermedium, wie etwa, ohne auf diese beschränkt zu sein, einem beliebigen Typ von Platte einschließlich Floppy-Disketten, optische Platten, CD-ROMs und magneto-optische Platten, Nur-Lese-Speicher (ROMs), RAMs, EPROMS, EEPROMS, magnetische oder optische Karten oder jedem Typ von Medium gespeichert sein, das zum Speichern elektronischer Anweisungen geeignet ist und von denen jedes mit einem Computersystembus gekoppelt ist.
-
Die hierin vorgelegten Prozesse und Anzeigen sind nicht inhärent auf irgendeinen bestimmten Computer oder irgendeine bestimmte Einrichtung bezogen. Vielfältige universelle System können mit Programmen gemäß den Lehren hierin verwendet werden, oder es kann sich als bequem erweisen, eine spezialisiertere Einrichtung zu konstruieren, um die beschrieben Operationen durchzuführen. Die erforderliche Struktur für eine Vielfalt dieser Systeme wird anhand der nachstehenden Beschreibung offensichtlich. Darüber hinaus wird die vorliegende Erfindung nicht unter Bezugnahme auf irgendeine bestimmte Programmiersprache beschrieben. Es wird ersichtlich sein, dass eine Vielfalt von Programmiersprachen verwendet werden können, um die Lehren der Erfindung zu implementieren, wie sie hierin beschrieben ist.
-
Die vorhergehende Erläuterung beschreibt lediglich einige beispielhafte Ausführungsformen der vorliegenden Erfindung. Der Fachmann wird anhand einer solchen Erläuterung, der begleitenden Zeichnungen und der Ansprüche leicht erkennen, dass vielfältige Modifikationen vorgenommen werden können, ohne den Geist und Umfang der Erfindung zu verlassen.