DE202013012478U1 - Kompression der datenkarte - Google Patents

Kompression der datenkarte Download PDF

Info

Publication number
DE202013012478U1
DE202013012478U1 DE202013012478.4U DE202013012478U DE202013012478U1 DE 202013012478 U1 DE202013012478 U1 DE 202013012478U1 DE 202013012478 U DE202013012478 U DE 202013012478U DE 202013012478 U1 DE202013012478 U1 DE 202013012478U1
Authority
DE
Germany
Prior art keywords
file
block
index
blocks
card
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Lifetime
Application number
DE202013012478.4U
Other languages
English (en)
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Google LLC
Original Assignee
Google LLC
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Google LLC filed Critical Google LLC
Publication of DE202013012478U1 publication Critical patent/DE202013012478U1/de
Anticipated expiration legal-status Critical
Expired - Lifetime legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/174Redundancy elimination performed by the file system
    • G06F16/1744Redundancy elimination performed by the file system using compression, e.g. sparse files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/0608Saving storage space on storage systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0638Organizing or formatting or addressing of data
    • G06F3/0643Management of files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/067Distributed or networked storage systems, e.g. storage area networks [SAN], network attached storage [NAS]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Data Mining & Analysis (AREA)
  • Databases & Information Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

System, das Folgendes umfasst: Speicheranweisungen; und Anweisungen speichern, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, Vorgänge auszuführen, die Vorgänge umfassend: Zugriff auf eine Datei, die von einem Dateisystem verwaltet wird, das den Zugriff auf eine Blockvorrichtung verwaltet, wobei die Datei mehrere aktive Blöcke enthält, wobei jeder der mehreren aktiven Blöcke einer jeweiligen logischen Blocknummer und einem entsprechenden Blockindex zugeordnet ist, repräsentiert eine Position des Blocks relativ zu anderen Blöcken in der Ausgabedatei; Zuweisen eines Dateiindex zu der Datei; Analysieren der Datei, um einen maximalen Blockindex und einen minimalen Blockindex zu bestimmen, der in der Datei enthalten ist; Identifizieren von Läufen von Blöcken in der Mehrzahl von aktiven Blöcken, wobei jeder Lauf von Blöcken einen entsprechenden Startblock enthält, wobei einige Blöcke mehrere Blöcke umfassen, die in der Ausgabedatei zueinander benachbart sind, wobei die logischen Blocknummern, die mit den benachbarten verbunden sind, sich um eins erhöhen; Für jeden der Läufe von Blöcken, die eine jeweilige Länge des Laufs von Blöcken identifizieren; für jeden Startblock, ein Dateikarteneintrag wird für jeden Startblock erzeugt, wobei das Erzeugen des Dateikarteneintrags folgendes umfasst: Komprimieren des Dateiindex; Komprimieren des Blockindex, der dem Startblock zugeordnet ist, basierend auf dem maximalen Blockindex und dem minimalen Blockindex; und Komprimieren der Länge des Laufs von Blöcken, die dem Startblock zugeordnet sind; und Speichern der Dateikarteneinträge in einer Dateikarte.

Description

  • VERWEIS
  • Unter Schutz gestellt werden und Gegenstand des Gebrauchsmusters sind dabei, entsprechend den Vorschriften des Gebrauchsmustergesetzes, lediglich Vorrichtungen wie in den beigefügten Schutzansprüchen definiert, jedoch keine Verfahren. Soweit nachfolgend in der Beschreibung gegebenenfalls auf Verfahren Bezug genommen wird, dienen diese Bezugnahmen lediglich der beispielhaften Erläuterung der in den beigefügten Schutzansprüchen unter Schutz gestellten Vorrichtung oder Vorrichtungen.
  • HINTERGRUND
  • Diese Spezifikation bezieht sich auf das Komprimieren von Dateikarten und insbesondere auf das Komprimieren von Dateikarten für virtuelle Maschinen.
  • Cloud Computing ist ein netzwerkbasiertes Computing, in dem typischerweise große Sammlungen von Servern, die in Rechenzentren oder Serverfarmen untergebracht sind, Rechenressourcen und Datenspeicher zur Verfügung stellen, wie von Remote-Endbenutzern benötigt. Einige Cloud-Computing-Dienste ermöglichen es Endbenutzern, vom Benutzer bereitgestellte Server-Softwareanwendungen (z. B. E-Commerce-Serveranwendungen, Web-Server oder Dateiserver) in der Cloud auszuführen. Einige andere Cloud-Computing-Dienste bieten Zugriff auf Softwareanwendungen wie Textverarbeitungsprogramme und andere häufig verwendete Anwendungen für Endbenutzer, die die Anwendungen über Webbrowser oder andere clientseitige Software nutzen. Die elektronischen Dateien der Benutzer werden normalerweise in der Serverfarm und nicht auf den persönlichen Computergeräten der Benutzer gespeichert.
  • ZUSAMMENFASSUNG
  • Im Allgemeinen kann ein innovativer Aspekt des in dieser Spezifikation beschriebenen Gegenstandes in Verfahren verkörpert werden, die die Aktionen des Zugriffs auf eine Datei umfassen, die von einem Dateisystem verwaltet wird, das den Zugriff auf ein Blockgerät verwaltet. Die Datei enthält mehrere aktive Blöcke. Jeder der mehreren aktiven Blöcke ist mit einer jeweiligen logischen Blocknummer und einem entsprechenden Blockindex, der eine Position des Blocks relativ zu anderen Blöcken in der Ausgabedatei darstellt, assoziiert. Die Methode umfasst auch die Zuweisung eines Datei-Index zu der Datei und die Analyse der Datei, um einen maximalen Blockindex und einen minimalen Blockindex zu bestimmen, der in der Datei enthalten ist. Das Verfahren umfasst auch das Identifizieren von Läufen von Blöcken in der Vielzahl von aktiven Blöcken. Jeder Lauf von Blöcken enthält einen entsprechenden Startblock. Einige Läufe von Blöcken umfassen mehrere Blöcke, die in der Ausgabedatei zueinander benachbart sind. Die logischen Blocknummern, die den benachbarten Blöcken zugeordnet sind, erhöhen sich um eins. Für jeden der Läufe von Blöcken umfasst das Verfahren das Identifizieren einer jeweiligen Länge des Laufs von Blöcken. Für jeden Startblock umfasst das Verfahren das Erzeugen eines Dateikarteeintrags für jeden Startblock. Das Erzeugen des Dateikarteneintrags umfasst die folgenden Aktionen: Komprimieren des Dateiindex; Komprimieren des Blockindex, der dem Startblock zugeordnet ist, basierend auf dem maximalen Blockindex und dem minimalen Blockindex; und Komprimieren der Länge des Laufs von Blöcken, die dem Startblock zugeordnet sind. Die Methode beinhaltet auch das Speichern der Dateikarteneinträge in einer Dateikarte. Andere Ausführungsformen dieses Aspekts umfassen entsprechende Computersysteme, Geräte und Computerprogramme, die auf einer oder mehreren Computerspeichervorrichtungen aufgezeichnet sind, die jeweils konfiguriert sind, um die Aktionen der Verfahren durchzuführen. Ein System von einem oder mehreren Computer kann so konfiguriert werden, dass es bestimmte Operationen oder Aktionen ausführt, indem es Software, Firmware, Hardware oder eine Kombination davon auf dem System installiert hat, die im Betrieb das System dazu veranlasst, die Aktionen auszuführen. Ein oder mehrere Computerprogramme können so konfiguriert werden, dass sie bestimmte Operationen oder Aktionen durchführen, indem sie Anweisungen enthalten, die bei Ausführung durch die Datenverarbeitungsvorrichtung bewirken, dass die Vorrichtung die Aktionen durchführt.
  • Die vorstehenden und andere Ausführungsformen können wahlweise alleine oder in Kombination eines oder mehrere der folgenden Merkmale enthalten. Das Verfahren kann das Speichern der Dateikarteneinträge in der Reihenfolge auf Basis der logischen Blocknummern, die den Dateikarteneinträgen zugeordnet sind, enthalten. Mindestens einer der Dateikarteneinträge ist eine Dreiergruppe mit dem Format <komprimierter Dateiindex, komprimierter Blockindex, komprimierte Länge des Laufs von Blöcken>. Das Komprimieren des Dateiindex und des Blockindex kann die Komprimierung mit variabler Länge umfassen, um den Dateiindex und den Blockindex zu komprimieren. Das Komprimieren der Länge des Laufs von Blöcken kann die Verwendung von arithmetischer Kodierung, Huffman-Kodierung oder universeller Kodierung umfassen. Die Dateikarte kann Dateikarteinträge umfassen, die mit mindestens einer zweiten Datei verknüpft sind, die durch das Dateisystem gepflegt wird, und das Komprimieren des Dateiindexes kann das Komprimieren des Dateiindexes auf der Basis einer Anzahl von Dateien, auf die durch die Dateikarte verwiesen wird, umfassen. Der zweiten Datei kann ein zweiter Dateiindex zugeordnet werden, der sich von dem der Datei zugeordneten Dateiindex unterscheidet. Der Dateiindex kann die Datei eindeutig identifizieren und der zweite Dateiindex identifiziert die zweite Datei eindeutig. Das Verfahren kann das Laden der Dateikarte während eines mit der Blockvorrichtung assoziierten Initialisierungsprozesses umfassen; und für jeden in der Dateikarte enthaltenen N-ten Dateikarteneintrag: ein Zeiger wird auf dem N-ten Dateikarteintrag in einer Datenstruktur gespeichert, wobei N eine ganze Zahl größer als 1 ist und wobei der Zeiger auf den N-ten Dateikarteeintrag auf Basis der logischen Blocknummer gespeichert wird, die mit dem N-ten Dateikarteneintrag, der durch N geteilt wird, assoziiert ist. Das Verfahren kann das Empfangen einer Anforderung umfassen, um auf einen bestimmten Block zuzugreifen, wobei der bestimmte Block einer bestimmten Blocknummer zugeordnet ist; und das Identifizieren des Dateikarteeintrags, der dem bestimmten Block entspricht, ohne Decodierung von mehr als N Dateikarteneinträgen.
  • Bestimmte Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können so implementiert werden, dass sie einen oder mehrere der folgenden Vorteile verwirklichen. In einigen Implementierungen kann eine komprimierte Dateikarte zu verbesserten Dateizugriffsraten beitragen oder dazu beitragen, da der Dateimanager aufgrund der reduzierten Größe mehrere Dateikarten im Speicher speichern kann. Da außerdem mehrere Dateikarten im Speicher gespeichert werden können, werden die Dateikarten weniger häufig in und aus dem Speicher ausgelagert, was auch die Dateizugriffsraten und die Systemleistung verbessern kann. Ein weiterer Vorteil kann sein, dass der Dateimanager auf Daten zugreifen kann, ohne zuerst die gesamte Dateikarte zu dekodieren. Dies kann die Dateizugriffsleistung erhöhen, da die gesamte Dateikarte nicht zuerst dekodiert wird, bevor auf die Daten zugegriffen wird.
  • Die Details einer oder mehrerer Ausführungen des Gegenstands, die in dieser Spezifikation beschrieben werden, sind in den begleiteten Zeichnungen und der Beschreibung unten dargelegt. Andere Merkmale, Aspekte und Vorteile des Gegenstands werden aus der Beschreibung, den Zeichnungen und den Ansprüchen deutlich.
  • KURZBESCHREIBUNG DER ZEICHNUNGEN
  • 1 zeigt ein Beispiel eines verteilten Systems, das mehrere virtuelle Maschineninstanzen umfasst.
  • 2 stellt eine beispielhafte Anforderung zur Kommunikation mit einer virtuellen Blockvorrichtung dar.
  • 3 veranschaulicht beispielhafte Dateien und Dateikarten.
  • 4 ist ein Flussdiagramm eines Beispielprozesses zum Komprimieren einer Dateikarte.
  • 5 ist ein Flussdiagramm eines Beispielprozesses, um auf einen virtuellen Block zuzugreifen.
  • Entsprechende Referenznummern und Kennzeichnungen in den verschiedenen Zeichnungen zeigen entsprechende Elemente an.
  • AUSFÜHRLICHE BESCHREIBUNG
  • 1 ist eine schematische Darstellung eines beispielhaften virtuellen Maschinensystems 100. Das System 100 enthält eine oder mehrere Host-Maschinen, wie beispielsweise die Host-Maschine 102. Allgemein gesagt stellt eine Host-Maschine eine oder mehrere Datenverarbeitungsvorrichtungen dar, wie beispielsweise Rack-montierte Server oder andere Computergeräte. Die Datenverarbeitungsvorrichtung kann sich an verschiedenen physikalischen Orten befinden und kann unterschiedliche Fähigkeiten und Computerarchitekturen aufweisen. Hostmaschinen können miteinander über ein internes Datenkommunikationsnetzwerk 116 kommunizieren. Das interne Netzwerk 116 kann beispielsweise ein oder mehrere drahtgebundene (z. B. Ethernet) oder drahtlose Netzwerke (z. B. WI-FI) umfassen. In einigen Implementierungen ist das interne Netzwerk 116 ein Intranet. Host-Rechner können auch mit Geräten in externen Netzwerken, wie dem Internet, über einen oder mehrere Gateways kommunizieren, bei denen es sich um Datenverarbeitungsgeräte handelt, die für das Routing des Datenkommunikationsverkehrs zwischen dem internen Netzwerk 116 und dem externen Netzwerk verantwortlich sind. Andere Arten von externen Netzwerken sind möglich.
  • Die Host-Maschine 102 führt ein Host-Betriebssystem 106 oder eine andere Software aus, die die zugrunde liegende Hardware des Host-Computers virtualisiert und die gleichzeitige Ausführung einer oder mehrerer virtueller Maschinen (z. B. eines virtuellen Maschinenmonitors oder Hypervisor) verwaltet. Beispielsweise verwaltet das Hostbetriebssystem 106 eine virtuelle Maschine (VM) 110. Obwohl nicht in 1 gezeigt, kann die Host-Maschine 102 eine zweite virtuelle Maschine ausführen. Eine VM, wie beispielsweise VM 110, kann eine simulierte Version der zugrundeliegenden Host-Maschinen-Hardware oder eine andere Computerarchitektur umfassen. Die simulierte Version der Hardware wird als virtuelle Hardware (z. B. virtuelle Hardware 110a) bezeichnet. Software, die durch die virtuelle Hardware ausgeführt wird, wird als Gastsoftware bezeichnet. In einigen Implementierungen kann Gastsoftware nicht bestimmen, ob sie durch virtuelle Hardware oder durch eine physikalische Hostmaschine ausgeführt wird. Wenn Gastsoftware, die in einer VM ausgeführt wird, oder die VM selbst fehlerhaft funktioniert oder abbricht, werden andere VMs, die auf der Hostmaschine ausgeführt werden, nicht beeinflusst. Der Mikroprozessor oder die Mikroprozessoren einer Host-Maschine können Prozessor-Level-Mechanismen umfassen, um es virtueller Hardware zu ermöglichen, Softwareanwendungen effizient auszuführen, indem es ermöglicht, dass Gast-Software-Anweisungen direkt auf dem Mikroprozessor der Host-Maschine ausgeführt werden, ohne dass ein Neuschreiben des Kodes, eine Rekompilation oder Befehlsemulation erforderlich ist.
  • Eine Gast-Software eines VM kann ein Gastbetriebssystem (z. B. Gastbetriebssystem 110b) umfassen, das eine Software ist, die die Ausführung der jeweiligen Gast-Software-Anwendungen (z. B. Gastanwendungen 110c) innerhalb der VM steuert und Dienste für diese Anwendungen bereitstellt. So könnte beispielsweise ein Gastbetriebssystem eine Variante des UNIX-Betriebssystems sein. Andere Betriebssysteme sind möglich. Jede VM kann dasselbe Gastbetriebssystem oder verschiedene Gastbetriebssysteme ausführen. In weiteren Implementierungen benötigt eine VM kein Gastbetriebssystem, um Gastsoftwareanwendungen auszuführen. Ein Zugriff des Gastbetriebssystems auf Ressourcen wie Netzwerke und virtuellen Plattenspeicher wird durch das zugrunde liegende Hostbetriebssystem gesteuert.
  • Einer VM kann eine Netzwerkadresse zugewiesen werden, über die ihre Gast-Software mit anderen Prozessen kommunizieren kann, die über das interne Netzwerk 116 oder das Internet erreichbar sind. Zum Beispiel kann eine Gastsoftware, die auf der VM 110 ausgeführt wird, mit einer Gast-Software kommunizieren, die auf einer zweiten VM ausgeführt wird. In einigen Implementierungen wird jeder VM eine oder mehrere eindeutige IP-Adressen (IP) der Version 4 oder Version 6 und eine oder mehrere UDP-Portnummern (UDP) zugewiesen. Andere Adresssysteme sind möglich.
  • Jeder VM (z. B. VM 110) wird ein Satz von virtuellen Speicherseiten aus dem virtuellen Speicher des zugrunde liegenden Host-Betriebssystems zugewiesen und virtuelle Plattenblöcke von einer oder mehreren virtuellen Blockvorrichtungen für die Verwendung durch die auf der VM ausgeführte Gast-Software zugewiesen. Beispielsweise weist das Hostbetriebssystem 106 der VM 110 virtuelle Speicherseiten und virtuelle Plattenblöcke zu. In einigen Implementierungen kann eine gegebene VM nicht auf die Seiten virtuellen Speichers zugreifen, die anderen VMs zugeordnet sind. Zum Beispiel kann VM 110 nicht auf Speicherseiten zugreifen, die einer anderen VM zugewiesen wurden. Ein virtuelles Blockgerät kann über VM-Neustarts bestehen bleiben.
  • Virtuelle Blockgeräte können virtualisierte Speichergeräte sein, z. B. virtualisierte Festplatten oder virtualisierte RAID-Datengruppen. Jede virtuelle Blockvorrichtung ist in einen oder mehrere virtuelle Blöcke organisiert. Jeder virtuelle Block ist eine vordefinierte Datenmenge, auf die als Einheit zugegriffen wird. Die Größe eines virtuellen Blocks kann je nach Systembeschränkungen und Anforderungen variieren. Eine Beispielgröße eines virtuellen Blocks kann 4 Kilobyte betragen. Jeder virtuelle Block ist einer jeweiligen virtuellen Blocknummer zugeordnet. Jede virtuelle Blockvorrichtung kann so organisiert sein, dass die virtuellen Blocknummern aufeinanderfolgend sind. Beispielsweise kann der erste virtuelle Block der virtuellen Blockvorrichtung die virtuelle Blocknummer 0 sein, auf die die virtuelle Blocknummer 1 folgt und so weiter.
  • Jede virtuelle Blockvorrichtung ist eine Sammlung von physikalischen Blockvorrichtungen 118a118d oder eine Sammlung von Abschnitten der physikalischen Blockvorrichtungen 118a118d, z. B. einer oder mehrere physikalische Blöcke einer physikalischen Blockvorrichtung 118a118d. Die physikalischen Blockvorrichtungen 118a bis 118n sind an Host-Maschinen gekoppelt oder sind beispielsweise über das interne Netzwerk 116 verfügbar. Die physikalischen Blockvorrichtungen 118a18n können jedwede Art von Speichervorrichtung sein. Beispielsweise können die physikalischen Blockvorrichtungen 118a118n Festplatten, netzwerkfähige Speichervorrichtungen, RAID-Datengruppen usw. sein. Ähnlich den virtuellen Blockvorrichtungen kann jede physikalische Blockvorrichtung 118a118n in einen oder mehrere physikalische Blöcke organisiert sein. Jeder physikalische Block kann eine vordefinierte Datenmenge sein, auf die als Einheit zugegriffen wird. Die Größe eines physikalischen Blocks kann je nach Systembeschränkungen und Anforderungen variieren. Eine Beispielgröße eines physikalischen Blocks kann 4 Kilobyte betragen. In einigen Implementierungen ist die Größe eines physikalischen Blocks gleich der Größe des virtuellen Blocks. Jeder physikalische Block ist mit einer physikalischen Blocknummer (beispielsweise einer logischen Blocknummer) assoziiert, die eine relative Position des physikalischen Blocks in Bezug auf die Speichervorrichtung anzeigt, auf der sich der physikalische Block befindet. Die physikalischen Blöcke auf einer physikalischen Blockvorrichtung 118 können durch eine physikalische Blocknummer organisiert werden, damit die physikalischen Blocknummern aufeinanderfolgend sind und zunehmen. Beispielsweise kann der erste physikalische Block einer physikalischen Blockvorrichtung die physikalische Blocknummer 0 sein, der nächste physikalische Block kann die physikalische Blocknummer 1 sein, und so weiter.
  • Der Zugriff auf die physikalischen Blockgeräte 118118n wird durch ein Dateisystem verwaltet. Beispielsweise kann das Dateisystem Anforderungen zum Lesen von Daten von den physikalischen Blockvorrichtungen 118a118n verwalten und Anforderungen zum Schreiben von Daten an die physikalischen Blockvorrichtungen 118a118n verwalten. Das Dateisystem kann ein beliebiges Dateisystem sein, das die physikalischen Blockvorrichtungen 118a118n verwalten kann Beispielsweise kann das Dateisystem ein Google-Dateisystem, ein verteiltes Dateisystem, ein NTFS-Dateisystem usw. sein.
  • Zur Veranschaulichung und mit Bezug auf die virtuelle Maschine 110, kann, wenn die Gastanwendung 110c oder das Gastbetriebssystem 110b versucht, eine Eingabe/Ausgabe-Operation an einer virtuellen Blockvorrichtung auszuführen, die Netzwerk-Kommunikation zu initiieren oder eine privilegierte Operation ausführen, beispielsweise die virtuelle Hardware 110a unterbrochen werden, damit das Hostbetriebssystem 106 die Aktion im Auftrag der virtuellen Maschine 110 ausführen kann. Das Hostbetriebssystem 106 kann diese Handlungen mit einem Prozess durchführen, der in Kernelprozessraum 106b, Benutzerprozessraum 106a oder beiden ausgeführt wird. Alternativ kann das Hostbetriebssystem 106 die Aktionen durch Senden einer Anforderung an einen Prozess ausführen, der auf einer separaten Datenverarbeitungsvorrichtung ausgeführt wird.
  • Der Kernelprozessraum 106b ist ein virtueller Speicher, der für den Kernel 106d des Host-Betriebssystems reserviert ist, der beispielsweise Kernel-Erweiterungen und Gerätetreiber umfassen kann. Der Kernelprozessraum verfügt über erhöhte Berechtigungen (manchmal auch als ”Supervisor-Modus” bekannt); D. h. der Kernel 106d kann bestimmte privilegierte Operationen ausführen, die für Prozesse, die im Benutzerprozessraum 106a laufen, ausgeschaltet sind. Beispiele für vorrangige Operationen umfassen Zugriff auf verschiedene Adressräume, Zugriff auf spezielle Funktionsprozessoreinheiten in der Hostmaschine wie Speicherverwaltungseinheiten usw. Der Benutzerprozessraum 106a ist ein separater Teil virtuellen Speichers, der für Prozesse des Benutzermodus reserviert ist. Prozesse des Benutzermodus können vorrangige Operationen nicht direkt durchführen.
  • Wenn beispielsweise die Gastanwendung 110c oder das Gastbetriebssystem 110b versucht, eine Eingabe/Ausgabe-Operation an einer virtuellen Blockvorrichtung auszuführen, z. B. der Versuch, ein Schreiben oder ein Lesen von der virtuellen Blockvorrichtung zu initiieren, wird die virtuelle Hardware 110a unterbrochen, damit das Hostbetriebssystem 106 die Aktion im Auftrag der virtuellen Maschine 110 unter Verwendung eines Blockvorrichtungsmanagers 120 ausführen kann. Der Blockvorrichtungsmanager 120 kann durch die Hostmaschine 102 als Teil des Kernelprozessraums 106b oder des Benutzerprozessraums 106a ausgeführt werden. Alternativ kann der Blockvorrichtungsmanager 120 auf einer separaten Rechenvorrichtung ausgeführt werden. Der Blockvorrichtungsmanager 120 kann Teil von der oder in Kommunikation mit dem Dateisystem sein, das die physikalischen Blockvorrichtungen 118a118n verwaltet.
  • Der Blockvorrichtungsmanager 120 empfängt Anforderungen von der virtuellen Maschine 110, um mit den virtuellen Blockvorrichtungen zu kommunizieren, die der virtuellen Maschine 110 zugeordnet sind. Zum Beispiel können die Anforderungen Anforderungen zum Lesen oder Schreiben von einem oder mehreren virtuellen Blöcken von Daten umfassen, die der virtuellen Maschine 110 zugeordnet sind. Der Blockvorrichtungsmanager 120 kann Zugriff auf eine Dateikarte 130 haben, die Daten (z. B. Dateikarteneinträge) umfassen kann, die die virtuellen Blöcke von Daten auf Pfaden in Dateien abbilden, die durch das Dateisystem gepflegt werden. Die Pfade in Dateien können von dem Dateisystem verwendet werden, um den physikalischen Datenblock zu lesen, der dem virtuellen Datenblock von einer der physikalischen Blockvorrichtungen 118a118n entspricht.
  • 2 veranschaulicht die Verarbeitung einer beispielhaften Anforderung zum Lesen eines virtuellen Datenblocks. In der Beispielanfrage von 2 stellt eine virtuelle Maschine 110 eine Anforderung 204 an einen Blockvorrichtungsmanager 120 zur Verfügung, um Daten von einem bestimmten virtuellen Block zu lesen. Beispielsweise kann die Anforderung den bestimmten virtuellen Block durch eine eindeutige virtuelle Blocknummer identifizieren, die dem bestimmten virtuellen Block zugewiesen ist.
  • Der Blockvorrichtungsmanager 120, der in einem Dateisystem 207 enthalten ist oder damit kommunizieren kann, das den Zugriff auf die physikalischen Blockvorrichtungen 118a118n verwaltet, kann die Leseanforderung 204 empfangen und auf eine Dateikarte 130 zugreifen, um einen Dateikarteneintrag zu identifizieren, der mit dem angeforderten virtuellen Block assoziiert wird. Die Dateikarte 130 kann einen Dateikarteneintrag für jeden virtuellen Block umfassen, der der virtuellen Maschine 302 zugewiesen ist. Die Dateikarteneinträge können basierend auf virtuellen Blocknummern organisiert werden, damit die virtuellen Blocknummern aufeinanderfolgend und zunehmend sind. Beispielsweise kann der erste Dateikarteneintrag, der in der Dateikarte 130 enthalten ist, der virtuellen Blocknummer 0 zugeordnet werden, der zweite Dateikarteneintrag, der in dem Dateikarte 130 enthalten ist, der virtuellen Blocknummer 1 zugeordnet werden usw.
  • Jeder Dateikarteneintrag kann Daten umfassen, die dem Dateisystem 207 den Ort des physikalischen Blocks, der einem virtuellen Block entspricht, anzeigen. Beispielsweise kann die Dateikarte 130 einen Dateikarteneintrag enthalten, der einen virtuellen Block zu einer bestimmten Datendatei 210, die von dem Dateisystem 207 verwaltet wird, und einer Position in der Datendatei 210, z. B. Position 211b, abbildet. Der Dateikarteeintrag kann von dem Dateisystem 207 verwendet werden, um die physikalische Blockvorrichtung 118 zu identifizieren, die den bestimmten physikalischen Block enthält, der dem virtuellen Block und dem Ort innerhalb der physikalischen Blockvorrichtung 118 des bestimmten physikalischen Blocks entspricht. Die Datei 210 kann eine aus einer Gruppe von Dateien stammen, die vom Dateisystem 207 verwaltet werden und durch das Dateisystem 207 verwendet werden, um die physikalischen Blockvorrichtungen zu identifizieren, die die physikalischen Datenblöcke enthalten, die den virtuellen Datenblöcken entsprechen. In einigen Implementierungen ist jede physikalische Blockvorrichtung 118 einer einzigen Datei 210 zugeordnet. In einigen Implementierungen kann jede physikalische Blockvorrichtung mit mehreren Dateien 210 assoziiert sein.
  • Im Beispiel von 2, kann das Dateisystem 207 eine Anforderung empfangen, um einen Datenblock, der einer virtuellen Blocknummer entspricht, zu lesen. Basierend auf der Anforderung kann der Blockvorrichtungsmanager 120 auf die Dateikarte 130 zugreifen, um einen Dateikarteneintrag zu identifizieren, der der angeforderten virtuellen Blocknummer entspricht. Der Dateikarteeintrag kann eine oder mehrere physikalische Blockvorrichtungen 118a118n identifizieren, die den physikalischen Datenblock speichern, der dem angeforderten virtuellen Block entspricht, und dem Speicherort innerhalb jeder physikalischen Blockvorrichtung, z. B. der physikalischen Blocknummer, die dem Wert des angeforderten virtuellen Blocks entspricht.
  • 3 zeigt ein veranschaulichendes Beispiel 300, das Dateien und eine komprimierte Dateikarte enthält. Die Dateien 302 und 320 umfassen jeweils eine Kennung (z. B. ”Datendatei A” und ”Datendatei B”). Jede Kennung kann eine beliebige Anzahl von Bytes lang sein und sich aus eindeutigen alphanumerischen Zeichenfolgen zusammensetzen. Im Allgemeinen sind die Kennungen Zeichenfolgen von alphanumerischen Zeichen und erfordern mehrere Bytes, um die Kennungen zu speichern. Beispielsweise ist eine Beispielkennung ”/storage_locations/cluster_location/project/disk/segment003/ 3402439203940923_233453989333_10099975423.log”, die mehrere Bytes erfordern würde. Jede Datendatei 302 und 320 ist einer entsprechenden physikalischen Blockvorrichtung zugeordnet. In einigen Implementierungen sind die Datendateien 302 und 320 der gleichen physikalischen Blockvorrichtung zugeordnet, stellen jedoch unterschiedliche nichtüberlappende Abschnitte der gleichen physikalischen Blockvorrichtung, z. B. Segmente, dar.
  • Jede Datei 302 und 320 enthält einen oder mehrere Einträge 302. Jede Datei 302 und 320 kann ähnlich einer Datengruppe angeordnet sein und einen oder mehrere Einträge enthalten. Jeder Dateieintrag enthält einen Blockindex 304 und eine Blocknummer 306. Der Blockindex 304 identifiziert den Ort des Eintrags innerhalb der Datendatei. Beispielsweise kann der Blockindex 304 einem Index in einer Datengruppe ähnlich sein. Die Blocknummer 306 kennzeichnet eine physikalische Blocknummer, die mit einer physikalischen Blockvorrichtung verknüpft ist, die die Daten speichert, die einer virtuellen Blocknummer zugeordnet sind.
  • Jeder Blocknummer 306 ist auch einer Statusanzeige 306 zugeordnet, die anzeigt, ob die Blocknummer 306 aktiv oder inaktiv ist. Wenn eine Blocknummer 306 einer aktiven Statusanzeige 308 zugeordnet ist, dann ist die Blocknummer 306 der aktuellen Version der Daten zugeordnet und spiegelt die aktuellen Datenwerte wider, und wenn eine Blocknummer 306 einer inaktiven Statusanzeige 308 zugeordnet ist, dann ist diese Blocknummer einer älteren Version der Daten zugeordnet und spiegelt nicht die aktuellen Datenwerte wider. In einigen Implementierungen besteht der Statusindikator 308 aus Metadaten, die der Blocknummer 306 zugeordnet sind. Beispielsweise kann die Statusanzeige 308 in einem Datenblock enthalten sein, der der Blocknummer 306 zugeordnet ist.
  • Die Dateien 302 und 320 können durch eine beispielhafte unkomprimierte Dateikarte 325 oder eine beispielhafte komprimierte Dateikarte 330 dargestellt werden. Die unkomprimierte Dateikarte 325 enthält die Dateikarteneinträge 327. Jeder Dateikarteeintrag 327a–g entspricht einer virtuellen Blocknummer und enthält die Dateikennung und den Blockindex. Der Dateikarteeintrag 327h entspricht einem virtuellen Block, der der virtuellen Maschine zugewiesen wurde, aber keine Daten enthält, z. B. Blöcke, auf denen keine Daten geschrieben wurden. In einigen Implementierungen kann die unkomprimierte Dateikarte 325 teilweise komprimiert werden. Beispielsweise können die Dateikarteneinträge 327e327g nach Lauflänge komprimiert werden.
  • Die komprimierte Dateikarte 330 enthält die Dateikarteneinträge 332a332f. Jeder Dateikarteeintrag 332a–e entspricht einem virtuellen Block. Beispielsweise entspricht der Dateikarteeintrag 332a einer virtuellen Blocknummer 0 und ein Dateikarteeintrag 332b entspricht der virtuellen Blocknummer 1.
  • Jeder Dateikarteneintrag 332 kann einen komprimierten Dateiindex, einen komprimierten Blockindex und eine komprimierte Lauflänge umfassen. Der Dateikarteneintrag kann in einer Datenstruktur, wie beispielsweise einer Dreiergruppe, organisiert sein. Die Dreiergruppe kann die Form <komprimierter Dateiindex, komprimierter Blockindex, komprimierte Lauflänge> haben. Andere Datenstrukturen können verwendet werden.
  • Der komprimierte Dateiindex kann ein Index sein, der die Datei, die dem angeforderten virtuellen Block entspricht, eindeutig identifiziert. Der Datei-Index kann auf der Anzahl der Dateikennungen basieren und kann unter Verwendung eines Kodieralgorithmus mit variabler Länge, wie beispielsweise eines einheitlichen Kodieralgorithmus, komprimiert werden. Beispielsweise kann der einheitliche Kodierungsalgorithmus den Dateiindex komprimieren und den Dateiindex darstellen, wobei ein Kode verwendet wird, der ceil(log2 (Anzahl von Datendateien + 1)) Bits lang ist. Wie in 3 gezeigt, sind die Codes, die die Dateiindizes darstellen, gleich 01 und 10, die der Datei A bzw. der Datei B entsprechen. In einigen Implementierungen wird der Dateiindex unter Verwendung von Kompressionstechniken komprimiert, die sich von einem Kodierungsalgorithmus mit variabler Länge unterscheiden. Zusätzlich können adaptive oder statische Kompressionstechniken verwendet werden. Es kann eine Tabelle gespeichert werden, die die Kodes und die entsprechende Datei enthält. Die Tabelle kann von dem Block-Geräteverwalter verwendet werden, um die Kodes zu übersetzen.
  • Der komprimierte Blockindex kann den Pfad innerhalb der Datei identifizieren, der einem bestimmten virtuellen Block entspricht. Beispielsweise kann die Datei ähnlich einer Datengruppe angeordnet sein, und der Blockindex kann als Index verwendet werden, um auf einen bestimmten Pfad/Eintrag in der Datei zuzugreifen. Ähnlich wie der Dateiindex kann der Blockindex unter Verwendung eines Kodieralgorithmus mit variabler Länge komprimiert werden, z. B. eine einheitliche Kodierung. Der Verschlüsselungsalgorithmus mit variabler Länge,
    der zum Komprimieren des Blockindex verwendet werden kann, kann derselbe sein wie der Kodieralgorithmus mit variabler Länge, der verwendet wird, um den Dateiindex zu kodieren, oder er kann unterschiedlich sein. In einigen Implementierungen unterscheidet sich der Komprimierungsalgorithmus, der zum Komprimieren des Dateiindex verwendet wird, von dem Komprimierungsalgorithmus, der verwendet wird, um den Blockindex zu komprimieren.
  • Der komprimierte Blockindex kann den Blockindex mit Kodes darstellen, die ceil (log2 (Max [i] – Min [i] + 1) Bits lang sind, wobei Max [i] den maximalen Blockindex darstellt, der einem aktiven Block zugeordnet ist, der in der Datei enthalten ist, und Min [i] den minimalen Blockindex darstellt, der einem aktiven Block zugeordnet ist, der in der Datei enthalten ist. Wie in den 3 sind die komprimierten Blockindizes, die der Datendatei 302 zugeordnet sind, unter Verwendung von drei Bitcodes 000, 101 und 010 dargestellt, die den Blockindizes 0, 5 bzw. 2 entsprechen, und die komprimierten Blockindizes, die der Datei B zugeordnet sind, werden unter Verwendung von 1-Bit-Codes 0 und 1 dargestellt, die den Blockindizes 1 bzw. 2 entsprechen. In einigen Implementierungen wird der Blockindex unter Verwendung von Kompressionstechniken komprimiert, die sich von einem Kodieralgorithmus mit variabler Länge unterscheiden. Zusätzlich können adaptive oder statische Kompressionstechniken verwendet werden. Die Kodes und die entsprechenden Blockindexwerte können in der Tabelle gespeichert werden, die die Kodes und die entsprechenden Dateikennungen speichert.
  • Die komprimierte Lauflänge kann eine Anzahl von aktiven Blöcken darstellen, die auf der Grundlage der physikalischen Blocknummer („ein Lauf von Blöcken”) gespeichert sind. Unter Bezugnahme auf die Datei 302 sind der physikalische Block 4, der physikalische Block 5 und der physikalische Block 6 aktive Blöcke und werden nebeneinander in der Datei 302 gespeichert. Als Ergebnis ist die Lauflänge, die dem Ablauf von Blöcken zugeordnet ist, beginnend bei dem physikalischen Block 4, gleich drei. Jeder Lauf von Blöcken enthält einen Startblock, d. h. den ersten Block des Laufs. Im obigen Beispiel ist der Startblock der physikalische Block 4. In einigen Fällen kann ein Lauf von Blöcken eine Lauflänge aufweisen, die gleich einem Block ist. Beispielsweise ist der Ablauf von Blöcken, die bei dem physikalischen Block 0 beginnen, gleich 1, und der Startblock ist gleich dem physikalischen Block 0.
  • Die Lauflänge kann auch mit verschiedenen Kompressionstechniken komprimiert werden. Zum Beispiel kann die Lauflänge unter Verwendung von Kodieralgorithmen mit variabler Länge komprimiert werden, z. B. arithmetische Kodierung, Huffman-Kodierung oder universelle Kodes (z. B. unärer Kode, Golomb-Kode, Rice-Kode, etc.). Obwohl 3 die komprimierte Lauflänge als eine Zahl veranschaulicht, kann jeder Dateikarteneintrag einen Kode enthalten, der dem Kodieralgorithmus zugeordnet ist, um die komprimierte Lauflänge darzustellen. Wenn beispielsweise die Lauflänge unter Verwendung einer Huffman-Kodierung komprimiert wird, wird die komprimierte Lauflänge durch einen Huffman-Kode dargestellt. Die Kodieralgorithmen können adaptiv oder statisch sein. Der Blockindex und die Lauflänge können für die Lauflängenkomprimierung verwendet werden. Die Kodes, die verwendet werden, um die Lauflänge darzustellen, und die Werte, die den Kodes entsprechen, können in einer Tabelle gespeichert werden.
  • In einigen Implementierungen enthält die Dateikarte 330 einen Dateikarteneintrag 332f, der nicht einer virtuellen Blocknummer entspricht. Stattdessen kann der Dateikarteneintrag 332f durch das Dateisystem verwendet werden, um Blöcke darzustellen, die inaktiv sind, oder Blöcke, die keine Daten speichern, z. B. Daten die nicht in die Blöcke geschrieben wurden.
  • 4 ist ein Flussdiagramm eines Beispielprozesses 400 zum Komprimieren einer Dateikarte. Der Prozess 400 beginnt mit dem Analysieren einer unkomprimierten Dateikarte, dem Erstellen einer Liste der Dateien, auf die durch die Dateikarte verwiesen wird, und Sammelstatistiken, die verwendet werden, um die Dateikarteneinträge zu kodieren (bei 402). Beispielsweise kann der Blockvorrichtungsmanager 120 die unkomprimierte Dateikarte, z. B. die unkomprimierte Dateikarte 325, durchlaufen, und eine Liste der in der Dateikarte darzustellenden Dateien aufbauen, z. B. Dateien 302 und 320, die der physikalischen Blockvorrichtung 118 entsprechen (oder Teile der physikalischen Blockvorrichtung 118), die einer bestimmten virtuellen Blockvorrichtung entsprechen, die einer VM zugeordnet ist (z. B. VM 110).
  • Wie oben beschrieben, werden die für die Kodierung der Dateikarteneinträge verwendeten Statistiken für jede Datei (bei 402) gesammelt. Wenn beispielsweise der Blockvorrichtungsmanager 120 die Liste von Dateien aufbaut, kann der Blockvorrichtungsmanager 120 Statistiken für jede Datei ermitteln. Die Statistiken können Informationen umfassen, wie beispielsweise die Häufigkeit, mit der jede Datei in der Dateikarte referenziert wird, z. B. wie viele Dateikarteneinträge sich auf die Datei beziehen. Die Häufigkeit der Dateireferenzen kann auf der Grundlage von Läufen von Blöcken angepasst werden. Zum Beispiel wird unter Bezugnahme auf die unkomprimierte Dateikarte 325 der Blockvorrichtungsmanager 120 die Dateikarteneinträge 327e327g als eine einzige Referenz auf die Datei A betrachten. Zusätzlich können die Statistiken die maximalen und minimalen Blockindizes enthalten, die den aktiven Blöcken entsprechen, die von jeder Datei referenziert werden.
  • Bezugnehmend auf die beispielhafte unkomprimierte Dateikarte 325 von 3 kann der Blockvorrichtungsmanager 120 die unkomprimierte Dateikarte 325 analysieren und feststellen, dass zwei Dateien, z. B. die Datei 302 und die Datei 320, referenziert sind. Zusätzlich kann der Blockvorrichtungsmanager 120 feststellen, dass die Datei 302 dreimal (die Ausführung der Blöcke 4–6 wird als eine Referenz betrachtet) und die Datei 320 zweimal referenziert ist. Zusätzlich kann der Blockvorrichtungsmanager 120 bestimmen, dass der maximale Blockindex und der minimale Blockindex, auf die durch die Datei 302 verwiesen wird, gleich 5 bzw. 0 sind, und der maximale Blockindex und der minimale Blockindex, auf die durch die Datei 320 verwiesen wird, gleich 2 bzw. 1 sind (Blockindex 0 des Datenspeichers B ist ein inaktiver Block).
  • Die Einträge der Dateien werden serialisiert (bei 406). Beispielsweise kann der Blockvorrichtungsmanager eine temporäre Dateikarte erzeugen, die auf den Blocknummern basiert, die mit den Einträgen in den Dateien verknüpft sind. Bezugnehmend auf das Beispiel in 2 kann der Blockvorrichtungsmanager 120 eine temporäre Dateikarte erzeugen, die die Einträge der Dateien basierend auf der Blocknummer, die den Einträgen zugeordnet ist, serialisiert. Die temporäre Karte kann folgenden Werten ähneln:
    Blocknummer 0: Datei A, Blockindex = 0, max [i]/min[i] = [5,0]
    Blocknummer 1: Datei B, Blockindex = 2, max [i]/min[i] = [2,1]
    Blocknummer 2: Datei A, Blockindex = 5, max [i]/min[i] = [5,0]
    Blocknummer 3: Datei B, Blockindex = 1, max [i]/min[i] = [2,1]
    Blocknummer 4: Datei A, Blockindex = 2, max [i]/min[i] = [5,0]
    Blocknummer 5: Datei A, Blockindex = 3, max [i]/min[i] = [5,0]
    Blocknummer 6: Datei A, Blockindex = 4, max [i]/min[i] = [5,0]
  • Die Dreiergruppen werden aus der temporären Dateikarte extrahiert und die komprimierten Dateikarteneinträge werden erzeugt (bei 408). Beispielsweise kann der Blockvorrichtungsmanager 120 jeden Eintrag in der temporären Dateikarte analysieren und eine Dreiergruppe erzeugen. Die Dreiergruppe kann den komprimierten Dateiindex (z. B. der Kode, der den Dateiindex repräsentiert), den komprimierten Blockindex (z. B. der Kode, der den Blockindex repräsentiert) und die komprimierte Lauflänge (z. B. der Kode, der die Lauflänge repräsentiert) beinhalten.
  • Der Dateiindex kann einheitlich kodiert werden, um die Dateien effizient darzustellen. Beispielsweise kann der Blockvorrichtungsmanager 120 einen eindeutigen Kode zuweisen, der den Dateiindex für jede Datei auf der Basis der Gesamtzahl der Dateien darstellt. Der Dateiindex ist einheitlich kodiert, um effizient die Datei-IDs zu repräsentieren. Beispielsweise kann der Dateiindex in ceil(log2(Anzahl der Datendateien + 1))) Bits dargestellt werden. Unter Bezugnahme auf die beispielhaften Dateien 302 und 320 von 3 kann der Blockvorrichtungsmanager 120 zwei Bitcodes verwenden, d. h. Kodes, die ceil(log2 (2 + 1))) Bits lang sind, um die Dateikennungen darzustellen. Der Blockvorrichtungsmanager 120 kann der Datei 302 einen Zwei-Bit-Kode zuordnen, z. B. 01, und der Datei 320 einen anderen Zwei-Bit-Kode zuordnen, z. B. 10. Da die Dateikennungen typischerweise lange, alpha-numerische Zeichenfolgen sind, können die einheitlich kodierten Datei-Indizes unter Verwendung von weniger Speicher gespeichert werden.
  • Der Blockindex kann einheitlich kodiert werden, um die Blockindizes effizient darzustellen. Beispielsweise kann der Blockvorrichtungsmanager 120 den maximalen Blockindex und minimalen Blockindex verwenden, auf den eine Datei Bezug nimmt, um die Blockindizes, die der Datei zugeordnet sind, zu komprimieren. Die Blockindizes, die einer Datei zugeordnet sind, können unter Verwendung von Kodes dargestellt werden, die ceil(log2 (maximaler Blockindex – minimaler Blockindex +1)) Bits lang sind. Unter Bezugnahme auf die Beispieldateien 302 und 320 können die Blockindizes für die Datei A 302 unter Verwendung von drei Bitcodes, z. B. 000, 010, 100 usw., dargestellt werden, und die Blockindizes, die der Datei B 320 zugeordnet sind, können durch Ein-Bit-Codes, z. B. 0 und 1, dargestellt werden.
  • Die Einträge der temporären Dateikarte können auch nach Lauflänge kodiert werden. Beispielsweise kann der Blockvorrichtungsmanager 120 jeden Eintrag der temporären Dateikarte analysieren und bestimmen, ob der Eintrag ein Start eines Laufs von Blöcken ist (”ein Startblock”). Beispielsweise kann der Blockvorrichtungsmanager 120 die Einträge der temporären Dateikarte analysieren und ermitteln, dass die Blocknummer 0 einem Lauf eines einzelnen Blocks entspricht (z. B. der Startblock ist gleich dem Block null und die Lauflänge ist gleich 1) und dass Blocknummer vier einem Lauf von drei Blöcken (Startblock ist gleich Block 4 und Lauflänge ist gleich 3) entspricht.
  • Jede Lauflänge kann unter Verwendung von variablen Kodieralgorithmen komprimiert werden, wie beispielsweise Huffman-Kodes, arithmetische Kodes und Universalkodes. Die Dreiergruppe kann den Kode enthalten, der die Lauflänge repräsentiert, z. B. den Huffman-Kode oder einen Universalkode.
  • Der Prozess 400 kann periodisch durchgeführt werden. Beispielsweise kann der Prozess 400 ausgeführt werden, nachdem eine vorbestimmte Zeitspanne abgelaufen ist. Die vorbestimmte Zeitdauer kann auf Systemanforderungen oder Prozessor/Systemfähigkeiten basieren. Zusätzlich kann der Prozess 400 ausgeführt werden, nachdem eine vorbestimmte Anzahl von Blöcken geschrieben wurde. Beispielsweise kann der Prozess 400 nach einer vorbestimmten Anzahl von Schreibanforderungen ausgeführt werden. Zusätzlich kann der Prozess 400 ausgeführt werden, nachdem eine Datei geschlossen oder gespeichert wurde. Beispielsweise kann der Prozess 400 ausgeführt werden nachdem ein Benutzer der VM, z. B. VM 110, eine auf der virtuellen Blockvorrichtung gespeicherte Datei schließt oder speichert.
  • 5 ist ein Flussdiagramm eines Beispielprozesses 500, um auf einen virtuellen Block zuzugreifen. Der Prozess 500 beginnt mit dem Laden der komprimierten Dateikarte in den Speicher (bei 502). Zum Beispiel kann während der Initialisierung der virtuellen Maschine 110, der virtuellen Blockvorrichtung oder der physikalischen Blockvorrichtungen 118 die komprimierte Dateikarte in den Speicher geladen werden, wie z. B. Arbeitsspeicher.
  • Die komprimierte Dateikarte wird dekodiert (bei 504). Beispielsweise kann der Blockvorrichtungsmanager 120 die komprimierte Dateikarte basierend auf der Kodierung der komprimierten Dateikarte dekodieren. Der Blockvorrichtungsmanager 120 kann die Dateikarte durchlaufen und die Liste der Dateiindizes identifizieren. Bezugnehmend auf das Beispiel in 2 kann der Blockvorrichtungsmanager 120 die Dateikarte 230 durchlaufen und feststellen, dass es zwei Dateien gibt, da es zwei unterschiedliche Dateiindizes (z. B. die zwei Zwei-Bit-Kodes) gibt. Zusätzlich kann der Blockvorrichtungsmanager 120 den maximalen Blockindex und den minimalen Blockindex, die jeder Datei zugeordnet sind, bestimmen.
  • Der Blockindex kann dann jeden Eintrag für eine komprimierte Dateikarte dekodieren. Beispielsweise kann der Blockvorrichtungsmanager 120 den ersten Eintrag aus dem komprimierten Dateiabbildungseintrag dekodieren, der den Dateiindex repräsentiert. In einigen Implementierungen dekodiert der Blockvorrichtungsmanager 120 den Dateiindex durch Extrahieren der ersten ceil(log2(Anzahl von Dateien +1) Bits aus dem komprimierten Dateikarteneintrag. Bezugnehmend auf die beispielhaft komprimierte Dateikarte 230 von 3 kann der Blockvorrichtungsmanager 120 feststellen, dass die ersten zwei Bits des Dateiabbildungseintrags, die dem Kode entsprechen, der den Dateiindex repräsentiert, entsprechen. Der Blockindex kann dann den nächsten Eintrag aus dem komprimierten Dateikarteneintrag entschlüsseln, der den komprimierten Blockindex darstellt. In einigen Implementierungen kann der Blockvorrichtungsmanager 120 den Blockindex dekodieren, indem er die nächsten ceil(log2(maximaler Blockindex – minimaler Blockindex +1) Bits aus dem komprimierten Dateiabbildungseintrag extrahiert. Bezugnehmend auf die beispielhaft komprimierte Dateikarte 230 von 3, kann der Blockvorrichtungsmanager 120 die nächsten drei Bits extrahieren, die dem Kode entsprechen, der den Blockindex darstellt. Der Blockvorrichtungsmanager 120 kann auf eine Tabelle zugreifen, um die Kodes zu interpretieren, die den Dateiindex und den Blockindex repräsentieren.
  • Wenn die Dateikarte dekodiert wird, wird die Position jedes N-ten Dateikarteneintrags in einer Datenstruktur (bei 506) gespeichert. Wenn der Blockvorrichtungsmanager 120 beispielsweise die Dateikarteneinträge dekodiert, kann der Blockvorrichtungsmanager 120 einen Zeiger auf jeden N-ten Eintrag in der dekomprimierten Dateikarte speichern. Die Zeiger können in einer Datengruppe gespeichert werden. Bezug nehmend auf die Beispieldateikarte 230 von 3 und unter der Annahme, dass N = 2 ist, kann der Blockvorrichtungsmanager 120 Zeiger in den komprimierten Dateikarteneinträgen 0, 2 und 4 in einer Datengruppe speichern. Die Zeiger werden in Abhängigkeit von der Reihenfolge der Dateikarteneinträge gespeichert. Beispielsweise würde der erste Eintrag in der Datengruppe (Index 0) einen Zeiger auf den Dateizuordnungseintrag 0 speichern und der zweite Eintrag in der Datengruppe (Index 1) würde einen Zeiger auf den Dateikarteneintrag 2 speichern. Der Wert von N kann jede beliebige Zahl sein und kann basierend auf Systemanforderungen und Verarbeitungs-/Systemfähigkeiten ausgewählt werden.
  • Jede Datengruppe kann ein Tupel sein. Beispielsweise kann jede Datengruppe ein Tupel mit einem Zeiger auf den Dateikarteneintrag und einen Startblock speichern. In dem obigen Beispiel würde der erste Eintrag in der Datengruppe einen Zeiger auf den Dateizuordnungseintrag 0 und den Startblock 0 speichern. Durch Speichern des Tupels kann der Blockvorrichtungsmanager 120 den Pfad eines Dateiabbildungseintrags speichern, der in einem Lauf von Blöcken enthalten ist. Beispielsweise würde der vierte Eintrag in der Datengruppe, der dem virtuellen Block 7 entspricht, der in dem Ablauf von Blöcken enthalten ist, der in dem Dateiabbildeintrag <file index = 1, block index = 4, run length = 3> dargestellt ist, einen Zeiger im Dateikarteneintrag 4 und dem Startblock des Laufes, z. B. Blocknummer 4, abspeichern.
  • Eine zweite beispielhafte unkomprimierte Dateikarte ist unten aufgezeigt.
    Dateikarteneinträge 0:
    <Dateiindex 1, Blockindex 0, Lauflänge = 1>
    1: <Dateiindex 1, Blockindex 3, Lauflänge = 6>
    2: <Dateiindex 2, Blockindex 2, Lauflänge = 3>
  • Wenn angenommen wird, dass N gleich 2 ist, könnte die Datengruppe folgender Anordnung ähneln:
    0: <Zeiger auf Dateikarteneintrag 0, Startblock = 0>
    1: <Zeiger auf Dateikarteneintrag 1, Startblock = 1>
    2: <Zeiger auf Dateikarteneintrag 1, Startblock = 1>
    3: <Zeiger auf Dateikarteneintrag 1, Startblock = 1>
    4: <Zeiger auf Dateikarteneintrag 2, Startblock = 2>
  • Wie oben zu sehen ist, entsprechen die Blocknummern 2, 4 und 6 den Zeilenindizes 1, 2 und 3, die auf den Dateikarteneintrag 1 hinweisen, da die Blocknummern 2, 4 und 6 in dem in Block 1 beginnenden Lauf enthalten sind.
  • Nachdem die Datengruppe von Zeigern erzeugt wurde (bei 506), kann die dekodierte Dateikarte aus dem Speicher entfernt werden. Nachdem die VM, die virtuelle Blockvorrichtung oder die physikalische Blockvorrichtung initialisiert worden ist, kann eine Anfrage zum Zugriff auf eine bestimmte Blocknummer empfangen werden (bei 508). Beispielsweise kann eine Anwendung, die auf der VM 110 ausgeführt wird, anfordern, auf Daten zuzugreifen, die in einem bestimmten virtuellen Block, z. B. dem virtuellen Block 1, gespeichert werden. Der Blockvorrichtungsmanager 120 kann die Leseanforderung empfangen.
  • Der Blockvorrichtungsmanager kann den Datengruppenindex bestimmen, der dem N-ten Dateikarteneintrag entspricht, der dem angeforderten virtuellen Block am nächsten ist und der kleiner als der angeforderte virtuelle Block ist (bei 510). Wenn beispielsweise der angeforderte virtuelle Block gleich 3 ist, dann kann der Blockvorrichtungsmanager 120 feststellen, dass der N-te Dateikarteneintrag, der dem angeforderten virtuellen Block am nächsten und kleiner als der angeforderte virtuelle Block ist, der virtuelle Block 2 ist, welcher in dem zweiten Eintrag in der Datengruppe, z. B. dem Datengruppenindex 1, gespeichert wird.
  • Der Dateikarteneintrag, der dem angeforderten virtuellen Block entspricht, kann basierend auf der Datengruppe von Zeigern (bei 512) bestimmt werden. Zum Beispiel kann der Blockvorrichtungsmanager 120 auf die Datengruppe zugreifen, die dem N-ten Dateikarteneintrag entspricht, der dem angeforderten virtuellen Block am nächsten ist, und den im Dateigruppeneintrag gespeicherten Zeiger verwenden, um auf den N-ten Dateikarteneintrag zuzugreifen. Der Blockvorrichtungsmanager 120 kann dann die verbleibenden Dateikarteneinträge dekodieren, bis der korrekte Dateikarteneintrag dekomprimiert ist. Beispielsweise kann der Blockvorrichtungsmanager 120 auf den zweiten Datengruppeneintrag (Index = 1) zugreifen und den in dem Datengruppeneintrag gespeicherten Zeiger verwenden, um auf die Dateikarte im Dateikarteneintrag 2 zuzugreifen. Der Blockvorrichtungsmanager 120 kann dann die verbleibenden Dateikarteneinträge dekodieren, bis er den Dateikarteneintrag für den angeforderten Block 3 erreicht. Dies kann dem Blockvorrichtungsmanager 120 erlauben, N oder weniger Dateikarteneinträge für jeden Zugriff in die Dateikarte zu dekodieren um so zu vermeiden, dass die gesamte Dateikarte für jede Anforderung dekodiert wird, um auf die Dateikarte zuzugreifen. Dies kann auch einen zufälligen Zugriff in die Dateikarte ermöglichen, ohne die gesamte Dateikarte zu dekodieren.
  • Der Dateikarteneintrag, der dem angeforderten virtuellen Block entspricht, wird dekodiert und an das Dateisystem zurückgegeben, das dann die Informationen verwenden kann, um auf die Daten zuzugreifen, die in der physikalischen Blocknummer gespeichert sind, die der angeforderten virtuellen Blocknummer entspricht.
  • Ausführungsformen des Gegenstands und die in dieser Spezifikation beschriebenen Tätigkeiten können in digitalen elektronischen Schaltungen oder in Computer-Software, Firmware oder Hardware implementiert werden, einschließlich der in dieser Spezifikation offengelegten Strukturen und ihrer strukturellen Entsprechungen oder in Kombinationen von einer oder mehrerer von ihnen. Ausführungsformen des in dieser Spezifikation beschriebenen Gegenstands können als ein oder mehrere Computerprogramme, d. h. als ein oder mehrere Module von Computerprogrammanweisungen implementiert werden, die auf einem Computer-Speichermedium für die Ausführung durch oder die Steuerung des Betriebs des datenverarbeitenden Apparats kodiert werden. Alternativ oder zusätzlich können die Programmanweisungen auf einem künstlich erzeugten propagierten Signal, z. B. einem maschinell erzeugten elektrischen, optischen oder elektromagnetischen Signal künstlich kodiert werden, das erzeugt wird, um Informationen für die Übertragung auf einen geeigneten Empfängerapparat für die Durchführung durch einen datenverarbeitenden Apparat zu kodieren. Bei einem Computer-Speichermedium kann es sich um ein maschinell lesbares Speichergerät, einen maschinell lesbaren Speicherträger, ein zufälliges oder serielles Speicher-Array oder Speichergerät oder um eine Kombination aus einem oder mehreren dieser Geräte handeln oder in ihnen enthalten sein. Außerdem ist ein Computer-Speichermedium zwar kein verbreitetes Signal, aber ein Computer-Speichermedium kann eine Quelle oder ein Bestimmungsort von Computerprogrammanweisungen sein, die in einem künstlich erzeugten verbreiteten Signal kodiert werden. Bei dem Computer-Speichermedium kann es sich auch um eine oder mehrere unterschiedliche physische Komponenten oder Medien (z. B. mehrere CDs, Plattenlaufwerke oder andere Speichergeräte) handeln, bzw. kann das Speichermedium darin enthalten sein.
  • Die in dieser Spezifikation beschriebenen Tätigkeiten können als Tätigkeiten implementiert werden, die von einem datenverarbeitenden Apparat mit Daten durchgeführt werden, die auf einem oder mehreren maschinell lesbaren Speichergeräten gespeichert werden oder von anderen Quellen entgegengenommen werden.
  • Der Begriff „datenverarbeitender Apparat” umfasst alle Arten von Apparaten, Geräten und Maschinen für die Verarbeitung von Daten, einschließlich beispielsweise durch einen programmierbaren Prozessor, einen Computer, ein System auf einem oder mehreren Chips oder Kombinationen des Vorstehenden. Der Apparat kann logische Schaltungen mit einem Sonderzweck, z. B. ein FPGA (Field Programmable Gate Array) oder eine ASIC (anwendungsspezifische integrierte Schaltung) enthalten. Der Apparat kann neben der Hardware auch einen Code einschließen, der eine Ausführungsumgebung für das betreffende Computerprogramm in der Frage erstellt, z. B. einen Code, der Prozessor-Firmware, einen Protokollstapel, ein Datenbank-Managementsystem, ein Betriebssystem, eine plattformunabhängige Laufzeitumgebung, eine virtuelle Maschine oder eine Kombination einer oder mehrerer der genannten darstellt. Der Apparat und die Ausführungsumgebung können verschiedene unterschiedliche Rechnermodell-Infrastrukturen umsetzen, wie Webdienstleistungen, verteilte Rechen- und Grid-Computing-Infrastrukturen.
  • Ein Computerprogramm (auch bezeichnet als Programm, Software, Softwareanwendung, Script oder Code) kann in einer beliebigen Form von Programmiersprache geschrieben sein, einschließlich kompilierter oder interpretierter Sprachen, deklarativer oder verfahrensorientierter Sprachen, und das Programm kann in jeder beliebigen Form eingesetzt sein, darunter als unabhängiges Programm oder als ein Modul, eine Komponente, eine Subroutine, ein Objekt oder eine andere Einheit, die zur Benutzung in einer Rechenumgebung geeignet ist. Ein Computerprogramm kann, muss aber nicht, einer Datei in einem Dateisystem entsprechen. Ein Programm kann in einem Teil einer Datei gespeichert sein, die andere Programme oder Daten enthält (z. B. ein oder mehrere Scripts, die in einem Dokument in Markup-Sprache gespeichert sind), in einer einzelnen Datei speziell für das betreffende Programm oder in mehreren koordinierten Dateien (z. B. Dateien, die ein oder mehrere Module, Unterprogramme oder Teile von Code speichern). Ein Computerprogramm kann auf einem Computer oder mehreren Computer eingerichtet sein oder ausgeführt werden, die an einem Standort angeordnet sind oder über mehrere Standorte verteilt sind und über ein Kommunikationsnetz verbunden sind.
  • Die Verfahren und Logikflüsse, die in dieser Spezifikation beschrieben sind, können durch Handlungen, wie dem Betreiben von Eingabedaten und dem Erzeugen von Ausgaben. durch einen oder mehrere programmierbare Prozessoren, die einen oder mehrere Computerprogramme ausführen, durchgeführt werden. Die Prozesse und die logischen Abläufe können auch durch logische Sonderzweckschaltungen durchgeführt werden, und der Apparat kann als Sonderzweckschaltungen implementiert werden, z. B. ein FPGA (Field Programmable Gate Array) oder eine ASIC (anwendungsspezifische integrierte Schaltung).
  • Prozessoren, die für die Durchführung eines Computerprogramms geeignet sind, schließen beispielsweise sowohl allgemeine und als auch Spezial-Mikroprozessoren sowie alle Arten eines oder mehrerer Prozessoren jeglicher Art Digitalrechner ein. Ganz allgemein nimmt ein Prozessor Anweisungen und Daten von einem Festwertspeicher oder einem Arbeitsspeicher oder von beiden entgegen. Die wesentlichen Elemente eines Computers sind ein Prozessor für das Durchführen von Handlungen gemäß Anweisungen und ein oder mehr Speichergeräte für das Speichern von Anweisungen und Daten. Ganz allgemein gehören zu einem Computer auch ein oder mehr Massenspeichergeräte für das Speichern von Daten, z. B. Magnet-, magnetooptische oder optische Disketten, um Daten entgegenzunehmen und/oder zu übertragen, bzw. ist ein Computer operativ an ein solches Speichergerät gekoppelt. Jedoch muss ein Computer solche Geräte nicht haben. Außerdem kann ein Computer in einem anderen Gerät eingebettet sein, z. B. in einem Mobiltelefon, einem Organizer (PDA), einem mobilen Audio- oder Videoplayer, einer Spielkonsole, einem Funknavigationsempfänger oder einem tragbaren Speichergerät (z. B. in einem USB-Stick), um nur einige zu nennen. Geräte, die für das Speichern von Computerprogrammanweisungen und -daten geeignet sind, schließen alle Formen von Dauerspeichern, Medien- und Speichergeräten ein, einschließlich beispielsweise Halbleiter-Speichergeräte, z. B. EPROM, EEPROM und USB-Flash-Speicher; Magnetplatten, z. B. interne Festplatten oder herausnehmbare Platten; magnetooptische Platten; und CD-ROMs und DVD-ROMs. Der Prozessor und der Speicher können durch logische Sonderzweckschaltungen ergänzt werden oder darin eingebaut sein.
  • Um die Interaktion mit einem Benutzer zu ermöglichen, können in dieser Spezifikation beschriebene Ausführungsformen des Gegenstands auf einem Computer mit einem Anzeigegerät implementiert werden, z. B. einem CRT-(Kathodenstrahlröhre) oder LCD-(Flüssigkristallanzeige) Monitor, mit welchem dem Benutzer Informationen angezeigt werden, sowie einer Tastatur und einem Anzeigegerät, z. B. einer Maus oder einem Trackball, mit denen der Benutzer Eingaben in den Computer vornehmen kann. Es können auch andere Arten von Einrichtungen verwendet werden, um für eine Interaktion mit einem Nutzer zu sorgen; beispielsweise kann eine dem Benutzer gelieferte Rückkopplung beliebiger Form von sensorischer Rückkopplung vorliegen, z. B. eine visuelle Rückkopplung, auditive Rückkopplung oder taktile Rückkopplung; und die Eingabe von dem Nutzer kann in beliebiger Form empfangen werden, einschließlich akustischer, Sprach- oder taktiler Eingabe. Darüber hinaus kann ein Computer über das Senden von Dokumenten an und das Empfangen von Dokumenten von einer Einrichtung, die vom Benutzer verwendet wird, mit einem Benutzer interagieren; beispielsweise über das Senden von Webpages an einen Webbrowser auf dem Clientgerät des Benutzers als Antwort auf die vom Webbrowser empfangenen Aufforderungen.
  • Ausführungsformen der in dieser Spezifikation betrachteten Gegenstands können in ein Computersystem implementiert werden, das eine Backend-Komponente (z. B. einen Datenserver), oder eine Middleware-Komponente (z. B. einen Anwendungsserver), oder eine Frontend-Komponente (z. B. einen Client-Computer mit graphischem Benutzerinterface oder Webbrowser) umfasst, worüber der Benutzer mit einer Implementierung der in dieser Spezifikation betrachteten Gegenstands interagieren kann, oder eine beliebige Kombination aus solchen Backend, Middleware- oder Frontend-Komponenten. Die Komponenten des Systems können durch eine beliebige Form oder ein beliebiges Medium digitaler Datenkommunikation miteinander verbunden sein, z. B. ein Kommunikationsnetz. Zu Beispielen für Kommunikationsnetze zählen ein lokales Netzwerk („LAN”), ein Fernnetzwerk („WAN”), eine netzübergreifende Verbindung (z. B. das Internet) und Peer-to-Peer Netzwerke (z. B. Ad-Hoc Peer-to-Peer Netzwerke).
  • Das Computersystem kann Clients und Server beinhalten. Ein Client und Server befinden sich im Allgemeinen ortsfern voneinander und interagieren typischerweise über ein Kommunikationsnetz. Die Beziehung zwischen Client und Server entsteht aufgrund von Computerprogrammen, die auf den jeweiligen Computern laufen und die eine Client-Server-Beziehung zueinander haben. In einigen Ausführungsformen überträgt ein Server Daten (z. B. eine HTML-Seite) an ein Client-Gerät (z. B. zum Anzeigen von Daten auf und zum Empfangen von Benutzereingaben von einem Benutzer, der mit dem Client-Gerät interagiert). Am Client-Gerät erzeugte Daten (z. B. infolge der Benutzerinteraktion) können vom Client-Gerät am Server empfangen werden.
  • Zwar enthält diese Spezifikation viele spezifische Implementierungsdetails, jedoch sollten diese nicht als Beschränkungen des Umfangs oder des Anspruchs ausgelegt werden, sondern vielmehr als Beschreibungen spezifischer Merkmale bestimmter Ausführungsformen bestimmter Erfindungen. Bestimmte Merkmale, die in dieser Spezifikation im Kontext der unterschiedlichen Ausführungsformen beschrieben werden, können auch in Kombination in einer einzelnen Ausführungsform implementiert werden. Andererseits können verschiedene Merkmale, die im Kontext einer einzelnen Ausführungsform beschrieben werden, in mehreren Ausführungsformen oder in jeder geeigneten Unterkombination implementiert werden. Außerdem können ein oder mehrere Merkmale einer beanspruchten Kombination in einigen Fällen aus der Kombination herausgelöst werden, auch wenn die Merkmale vorstehend als in gewissen Kombinationen funktionierend beschrieben oder gar als eine Kombination beansprucht werden, und die beanspruchte Kombination kann an eine Unterkombination oder eine Variation einer Unterkombination verwiesen werden.
  • Ebenso werden Tätigkeiten in den Zeichnungen zwar in einer bestimmten Reihenfolge dargestellt, aber dies sollte nicht als Anfordernis verstanden werden, dass solche Tätigkeiten in der bestimmten gezeigten Reihenfolge oder in einer aufeinanderfolgenden Reihenfolge ausgeführt werden müssen oder dass alle dargestellten Tätigkeiten ausgeführt werden müssen, um erwünschte Ergebnisse zu erzielen. Unter bestimmten Umständen können Multitasking und eine Parallelbearbeitung vorteilhaft sein. Darüber hinaus sollte die Trennung verschiedener Systemkomponenten in den oben beschriebenen Ausführungsformen nicht in allen Ausführungsformen erforderlich aufgefasst werden, und es versteht sich, dass die beschriebenen Programmkomponenten und Systeme im Allgemeinen zusammen in ein einziges Softwareprodukt integriert oder zu mehreren Softwareprodukten verkapselt werden können.
  • Folglich wurden bestimmte Ausführungsformen des Gegenstands beschrieben. Weitere Ausführungsformen gehören zum Umfang der folgenden Ansprüche. In einigen Fällen können die in den Ansprüchen beschriebenen Handlungen in einer anderen Reihenfolge durchgeführt werden und dennoch erwünschte Ergebnisse erzielen. Zusätzlich erfordern die in den beigefügten Figuren dargestellten Prozesse nicht notwendigerweise die bestimmte gezeigte Reihenfolge oder aufeinanderfolgende Reihenfolge, um erwünschte Ergebnisse zu erzielen. In bestimmten Implementierungen können Multitasking und eine Parallelbearbeitung vorteilhaft sein.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • /storage_locations/cluster_location/project/disk/segment003/ 3402439203940923_233453989333_10099975423.log [0030]

Claims (22)

  1. System, das Folgendes umfasst: Speicheranweisungen; und Anweisungen speichern, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, den einen oder die mehreren Prozessoren veranlassen, Vorgänge auszuführen, die Vorgänge umfassend: Zugriff auf eine Datei, die von einem Dateisystem verwaltet wird, das den Zugriff auf eine Blockvorrichtung verwaltet, wobei die Datei mehrere aktive Blöcke enthält, wobei jeder der mehreren aktiven Blöcke einer jeweiligen logischen Blocknummer und einem entsprechenden Blockindex zugeordnet ist, repräsentiert eine Position des Blocks relativ zu anderen Blöcken in der Ausgabedatei; Zuweisen eines Dateiindex zu der Datei; Analysieren der Datei, um einen maximalen Blockindex und einen minimalen Blockindex zu bestimmen, der in der Datei enthalten ist; Identifizieren von Läufen von Blöcken in der Mehrzahl von aktiven Blöcken, wobei jeder Lauf von Blöcken einen entsprechenden Startblock enthält, wobei einige Blöcke mehrere Blöcke umfassen, die in der Ausgabedatei zueinander benachbart sind, wobei die logischen Blocknummern, die mit den benachbarten verbunden sind, sich um eins erhöhen; Für jeden der Läufe von Blöcken, die eine jeweilige Länge des Laufs von Blöcken identifizieren; für jeden Startblock, ein Dateikarteneintrag wird für jeden Startblock erzeugt, wobei das Erzeugen des Dateikarteneintrags folgendes umfasst: Komprimieren des Dateiindex; Komprimieren des Blockindex, der dem Startblock zugeordnet ist, basierend auf dem maximalen Blockindex und dem minimalen Blockindex; und Komprimieren der Länge des Laufs von Blöcken, die dem Startblock zugeordnet sind; und Speichern der Dateikarteneinträge in einer Dateikarte.
  2. Computersystem nach Anspruch 1, worin die Vorgänge ferner Folgendes umfassen: Speichern der Dateikarteneinträge in einer Reihenfolge auf der Basis der logischen Blocknummern, die den Dateikarteneinträgen zugeordnet sind.
  3. Das System nach Anspruch 1, wobei mindestens einer der Dateikarteneinträge eine Dreiergruppe mit dem Format <komprimierter Dateiindex, komprimierter Blockindex, komprimierte Länge des Laufs von Blöcken ist.
  4. Das System nach Anspruch 1, wobei das Komprimieren des Dateiindex und des Blockindex das Verwenden einer Kompression variabler Länge umfasst, um den Dateiindex und den Blockindex zu komprimieren.
  5. Das System nach Anspruch 1, wobei das Komprimieren der Länge des Laufs von Blöcken die Verwendung einer arithmetischen Kodierung, einer Huffman-Kodierung oder einer universellen Kodierung umfasst.
  6. Das System nach Anspruch 1, wobei die Dateikarte Dateikarteneinträge enthält, die mindestens einer zweiten Datei zugeordnet sind, die durch das Dateisystem gepflegt wird, und wobei das Komprimieren des Dateiindexes das Komprimieren des Dateiindex auf der Basis einer Anzahl von Dateien umfasst, auf die durch die Dateikarte verwiesen wird.
  7. Das System nach Anspruch 6, wobei der zweiten Datei ein zweiter Dateiindex zugeordnet ist, der sich von dem der Datei zugeordneten Dateiindex unterscheidet.
  8. Das System nach Anspruch 7, wobei der Dateiindex die Datei eindeutig identifiziert und der zweite Dateiindex die zweite Datei eindeutig identifiziert.
  9. Computersystem nach Anspruch 1, worin die Vorgänge ferner Folgendes umfassen: Laden der Dateikarte während eines mit der Blockvorrichtung verbundenen Initialisierungsprozesses; und Für jeden N-ten Dateikarteneintrag, der in der Dateikarte enthalten ist: Speichern eines Zeigers auf den N-ten Dateikarteneintrag in einer Datenstruktur, wobei N eine ganze Zahl größer als 1 ist und wobei der Zeiger auf den N-ten Dateikarteneintrag an einem Pfad auf der Grundlage der logischen Blocknummer gespeichert ist, die dem N-ten Dateikarteneintrag geteilt durch N entspricht.
  10. Computersystem nach Anspruch 9, worin die Vorgänge ferner Folgendes umfassen: Empfangen einer Anforderung zum Zugriff auf einen bestimmten Block, wobei der bestimmte Block einer bestimmten logischen Blocknummer zugeordnet ist; Zugreifen auf die Datenstruktur, um einen Zeiger zu identifizieren, der dem N-ten Dateikarteneintrag entspricht, der der bestimmten logischen Blocknummer am nächsten liegt, wobei die logische Blocknummer, die dem N-ten Dateikarteneintrag entspricht, der der bestimmten logischen Blocknummer am nächsten ist, niedriger als die bestimmte Blocknummer ist; Identifizieren des Dateikarteneintrags, der dem bestimmten Block entspricht, basierend auf dem Zeiger, der dem N-ten Dateikarteneintrag entspricht, der der bestimmten logischen Blocknummer am nächsten liegt; und Dekodieren des Dateikarteneintrags entsprechend dem bestimmten Block.
  11. Computersystem nach Anspruch 9, worin die Vorgänge ferner Folgendes umfassen: Empfangen einer Anforderung zum Zugriff auf einen bestimmten Block, wobei der bestimmte Block einer bestimmten Blocknummer zugeordnet ist; und Identifizieren des Dateikarteneintrags, der dem bestimmten Block entspricht, ohne Dekodierung von mehr als N Dateikarteneinträgen.
  12. Computerlesbares Medium, auf dem computerlesbare Anweisungen gespeichert sind, die bei der Ausführung durch ein Computergerät das Computergerät dazu veranlassen, die folgenden Vorgänge auszuführen, umfassend: Zugriff auf eine Datei, die von einem Dateisystem verwaltet wird, das den Zugriff auf eine Blockvorrichtung verwaltet, wobei die Datei mehrere aktive Blöcke enthält, wobei jeder der mehreren aktiven Blöcke einer jeweiligen logischen Blocknummer und einem entsprechenden Blockindex zugeordnet ist, repräsentiert eine Position des Blocks relativ zu anderen Blöcken in der Ausgabedatei; Zuweisen eines Dateiindex zu der Datei; Analysieren der Datei, um einen maximalen Blockindex und einen minimalen Blockindex zu bestimmen, der in der Datei enthalten ist; Identifizieren von Läufen von Blöcken in der Mehrzahl von aktiven Blöcken, wobei jeder Lauf von Blöcken einen entsprechenden Startblock enthält, wobei einige Blöcke mehrere Blöcke umfassen, die in der Ausgabedatei zueinander benachbart sind, wobei die logischen Blocknummern, die mit den benachbarten verbunden sind, sich um eins erhöhen; Für jeden der Läufe von Blöcken, die eine jeweilige Länge des Laufs von Blöcken identifizieren; für jeden Startblock, ein Dateikarteneintrag wird für jeden Startblock erzeugt, wobei das Erzeugen des Dateikarteneintrags folgendes umfasst: Komprimieren des Dateiindexes; Komprimieren des Blockindex, der dem Startblock zugeordnet ist, basierend auf dem maximalen Blockindex und dem minimalen Blockindex; und Komprimieren der Länge des Laufs von Blöcken, die dem Startblock zugeordnet sind; und Speichern der Dateikarteneinträge in einer Dateikarte.
  13. Ein oder mehrere nicht-transitorische computerlesbare Medien nach Anspruch 12, worin die Operationen ferner umfassen: Speichern der Dateikarteneinträge in einer Reihenfolge auf der Basis der logischen Blocknummern, die den Dateikarteneinträgen zugeordnet sind.
  14. Das computerlesbare Medium nach Anspruch 12, wobei mindestens einer der Dateikarteneinträge eine Dreiergruppe mit dem Format <komprimierter Dateiindex, komprimierter Blockindex, komprimierte Länge des Laufs von Blöcken ist.
  15. Das computerlesbare Medium nach Anspruch 12, wobei das Komprimieren des Dateiindex und des Blockindex das Verwenden einer Kompression variabler Länge umfasst, um den Dateiindex und den Blockindex zu komprimieren.
  16. Das computerlesbare Medium nach Anspruch 12, wobei das Komprimieren der Länge des Laufs von Blöcken die Verwendung einer arithmetischen Kodierung, einer Huffman-Kodierung oder einer universellen Kodierung umfasst.
  17. Das computerlesbare Medium nach Anspruch 12, wobei die Dateikarte Dateikarteneinträge enthält, die mindestens einer zweiten Datei zugeordnet sind, die durch das Dateisystem gepflegt wird, und wobei das Komprimieren des Dateiindexes das Komprimieren des Dateiindex auf der Basis einer Anzahl von Dateien umfasst, auf die durch die Dateikarte verwiesen wird.
  18. Das computerlesbare Medium nach Anspruch 17, wobei der zweiten Datei ein zweiter Dateiindex zugeordnet ist, der sich von dem der Datei zugeordneten Dateiindex unterscheidet.
  19. Das computerlesbare Medium nach Anspruch 18, wobei der Dateiindex die Datei eindeutig identifiziert und der zweite Dateiindex die zweite Datei eindeutig identifiziert.
  20. Ein oder mehrere nicht-transitorische computerlesbare Medien nach Anspruch 12, worin die Operationen ferner umfassen: Laden der Dateikarte während eines mit der Blockvorrichtung verbundenen Initialisierungsprozesses; und Für jeden N-ten Dateikarteneintrag, der in der Dateikarte enthalten ist: Speichern eines Zeigers auf den N-ten Dateikarteneintrag in einer Datenstruktur, wobei N eine ganze Zahl größer als 1 ist und wobei der Zeiger auf den N-ten Dateikarteneintrag an einem Pfad auf der Grundlage der logischen Blocknummer gespeichert ist, die dem N-ten Dateikarteneintrag geteilt durch N entspricht.
  21. Ein oder mehrere nicht-transitorische computerlesbare Medien nach Anspruch 12, worin die Operationen ferner umfassen: Empfangen einer Anforderung zum Zugriff auf einen bestimmten Block, wobei der bestimmte Block einer bestimmten logischen Blocknummer zugeordnet ist; Zugreifen auf die Datenstruktur, um einen Zeiger zu identifizieren, der dem N-ten Dateikarteneintrag entspricht, der der bestimmten logischen Blocknummer am nächsten liegt, wobei die logische Blocknummer, die dem N-ten Dateikarteneintrag entspricht, der der bestimmten logischen Blocknummer am nächsten ist, niedriger als die bestimmte Blocknummer ist; Identifizieren des Dateikarteneintrags, der dem bestimmten Block entspricht, basierend auf dem Zeiger, der dem N-ten Dateikarteneintrag entspricht, der der bestimmten logischen Blocknummer am nächsten liegt; und Dekodieren des Dateikarteneintrags entsprechend dem bestimmten Block.
  22. Ein oder mehrere nicht-transitorische computerlesbare Medien nach Anspruch 21, worin die Operationen ferner umfassen: Empfangen einer Anforderung zum Zugriff auf einen bestimmten Block, wobei der bestimmte Block einer bestimmten Blocknummer zugeordnet ist; und Identifizieren des Dateikarteneintrags, der dem bestimmten Block entspricht, ohne Dekodierung von mehr als N Dateikarteneinträgen.
DE202013012478.4U 2012-03-28 2013-03-22 Kompression der datenkarte Expired - Lifetime DE202013012478U1 (de)

Applications Claiming Priority (4)

Application Number Priority Date Filing Date Title
US201261616745P 2012-03-28 2012-03-28
US201261616745P 2012-03-28
US201313826634 2013-03-14
US13/826,634 US9558198B2 (en) 2012-03-28 2013-03-14 File map compression using run length encoding for active blocks

Publications (1)

Publication Number Publication Date
DE202013012478U1 true DE202013012478U1 (de) 2017-01-17

Family

ID=49236415

Family Applications (1)

Application Number Title Priority Date Filing Date
DE202013012478.4U Expired - Lifetime DE202013012478U1 (de) 2012-03-28 2013-03-22 Kompression der datenkarte

Country Status (5)

Country Link
US (1) US9558198B2 (de)
EP (1) EP2831716B1 (de)
CN (1) CN104205035B (de)
DE (1) DE202013012478U1 (de)
WO (1) WO2013148491A1 (de)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9122712B1 (en) * 2013-06-28 2015-09-01 Emc Corporation Compressing container files
US10545936B2 (en) * 2014-07-08 2020-01-28 Sap Se Linear run length encoding: compressing the index vector
US10496656B2 (en) 2014-07-08 2019-12-03 Sap Se Compressing time stamp columns
US10248681B2 (en) * 2014-07-08 2019-04-02 Sap Se Faster access for compressed time series data: the block index
CN104156393B (zh) * 2014-07-09 2018-03-20 深圳市中博科创信息技术有限公司 创建虚拟块设备的方法及分布式文件系统
US10067881B2 (en) 2016-06-15 2018-09-04 Western Digital Technologies, Inc. Compression and caching for logical-to-physical storage address mapping tables
CN106201652B (zh) * 2016-06-29 2020-05-26 联想(北京)有限公司 一种数据处理方法及虚拟机
US9946463B2 (en) * 2016-07-12 2018-04-17 Western Digital Technologies, Inc. Compression of indirection tables
US10585626B2 (en) * 2017-12-07 2020-03-10 International Business Machines Corporation Management of non-universal and universal encoders
CN110851401B (zh) * 2018-08-03 2023-09-08 伊姆西Ip控股有限责任公司 用于管理数据存储的方法、装置和计算机可读介质

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5774715A (en) * 1996-03-27 1998-06-30 Sun Microsystems, Inc. File system level compression using holes
US6119120A (en) 1996-06-28 2000-09-12 Microsoft Corporation Computer implemented methods for constructing a compressed data structure from a data string and for using the data structure to find data patterns in the data string
US5734340A (en) 1996-08-27 1998-03-31 Symantech Corporation Method and apparatus for storing run-intensive information in compact form
US7103262B2 (en) * 1997-09-17 2006-09-05 Matsushita Electric Industrial Co., Ltd. Optical disc recording apparatus, computer-readable recording medium recording a file management program, and optical disc
US6055526A (en) * 1998-04-02 2000-04-25 Sun Microsystems, Inc. Data indexing technique
US6430565B1 (en) 1999-06-22 2002-08-06 Microsoft Corporation Path compression for records of multidimensional database
US6959116B2 (en) * 2001-09-18 2005-10-25 Emc Corporation Largest magnitude indices selection for (run, level) encoding of a block coded picture
US7536418B2 (en) * 2003-01-10 2009-05-19 At&T Intellectual Property Ii, Lp Preload library for transparent file transformation
US7676628B1 (en) * 2006-03-31 2010-03-09 Emc Corporation Methods, systems, and computer program products for providing access to shared storage by computing grids and clusters with large numbers of nodes
US7446681B2 (en) 2006-06-14 2008-11-04 Freescale Semiconductor, Inc. Lookup table array compression and indexing
WO2008142799A1 (ja) * 2007-05-24 2008-11-27 Fujitsu Limited 情報検索プログラム、該プログラムを記録した記録媒体、情報検索方法、および情報検索装置
US9678879B2 (en) * 2008-05-29 2017-06-13 Red Hat, Inc. Set partitioning for encoding file system allocation metadata
WO2011031903A2 (en) * 2009-09-09 2011-03-17 Fusion-Io, Inc. Apparatus, system, and method for allocating storage
US8291194B2 (en) 2009-11-16 2012-10-16 Mediatek Inc. Methods of utilizing address mapping table to manage data access of storage medium without physically accessing storage medium and related storage controllers thereof
WO2011143628A2 (en) * 2010-05-13 2011-11-17 Fusion-Io, Inc. Apparatus, system, and method for conditional and atomic storage operations

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
/storage_locations/cluster_location/project/disk/segment003/ 3402439203940923_233453989333_10099975423.log

Also Published As

Publication number Publication date
CN104205035A (zh) 2014-12-10
CN104205035B (zh) 2018-05-29
EP2831716A1 (de) 2015-02-04
US20130262411A1 (en) 2013-10-03
EP2831716B1 (de) 2018-08-01
WO2013148491A1 (en) 2013-10-03
US9558198B2 (en) 2017-01-31

Similar Documents

Publication Publication Date Title
DE202013012478U1 (de) Kompression der datenkarte
DE112013000752B4 (de) Verwalten von Verarbeitungselementen in einem Streaming-Datensystem
DE112012003505B4 (de) Automatisierte Auswahl von Funktionen zum Verringern der Speicherkapazität auf der Grundlage von Leistungsanforderungen
DE202013012495U1 (de) Metadatenbasierte virtual Maschine-Konfiguration
DE202012013448U1 (de) Prozessormodussperre
DE202012013432U1 (de) Speichern von Daten auf Speicherknoten
DE112016003249T5 (de) Container-Bereitstellung auf Abhängigkeitsgrundlage
DE202020005715U1 (de) Dynamische Maskierung geteilter Datenobjekte
DE102013207049A1 (de) Überwachen der Datenstrompufferung zur Optimierung der Operatorverarbeitung
DE202014010940U1 (de) Dynamische Shuffle-Rekonfiguration
DE112016000726T5 (de) Transparente hardwareunterstützte speicherdekompression
DE112011104787B4 (de) Nutzung von Inhalten über persönliche Clouds
DE202015009260U1 (de) Effiziente Datenlesungen von verteilten Speichersystemen
DE202020005693U1 (de) Externe berechtigungsnachweisfreie Stufen für Datenbankintegrationen
DE102012215219A1 (de) Ermitteln von Verteilungen von Abbildmustern von virtuellen Maschinen in einer vernetzten Datenverarbeitungsumgebung
DE112018004660T5 (de) Verwenden von kommentaren zum bereitstellen von optimierungen
DE112018002266T5 (de) Kognitives Datenfiltern für Speicherumgebungen
DE112017005022T5 (de) Umladen der Bandverarbeitung auf Objektspeicher
DE202014010885U1 (de) Beschleunigung basierend auf zwischengespeicherte Flüsse
DE102017213160A1 (de) Kompilierung für knotenvorrichtungs-GPU-basierte Parallelverarbeitung
DE112010004194T5 (de) Erleichterung der Datenverdichtung während des Kopierens
DE202014010924U1 (de) Nichtflüchtiges Shuffle-System
DE202023101653U1 (de) Organisations- und cloudübergreifende automatisierte Datenpipelines
DE112021005881T5 (de) Inline datenpakettransformationen
DE112016003598T5 (de) Gleichzeitige Massenverarbeitung von baumbasierten Datenstrukturen

Legal Events

Date Code Title Description
R207 Utility model specification
R150 Utility model maintained after payment of first maintenance fee after three years
R081 Change of applicant/patentee

Owner name: GOOGLE LLC (N.D.GES.D. STAATES DELAWARE), MOUN, US

Free format text: FORMER OWNER: GOOGLE INC., MOUNTAIN VIEW, CALIF., US

R082 Change of representative

Representative=s name: BETTEN & RESCH PATENT- UND RECHTSANWAELTE PART, DE

R151 Utility model maintained after payment of second maintenance fee after six years
R152 Utility model maintained after payment of third maintenance fee after eight years
R071 Expiry of right