DE112016001730T5 - Virtuelle Maschinensysteme - Google Patents

Virtuelle Maschinensysteme Download PDF

Info

Publication number
DE112016001730T5
DE112016001730T5 DE112016001730.8T DE112016001730T DE112016001730T5 DE 112016001730 T5 DE112016001730 T5 DE 112016001730T5 DE 112016001730 T DE112016001730 T DE 112016001730T DE 112016001730 T5 DE112016001730 T5 DE 112016001730T5
Authority
DE
Germany
Prior art keywords
queue
virtual machine
processor
doorbell
pages
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.)
Pending
Application number
DE112016001730.8T
Other languages
English (en)
Inventor
Benjamin C. Serebrin
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
Priority claimed from US14/688,258 external-priority patent/US9747122B2/en
Application filed by Google LLC filed Critical Google LLC
Publication of DE112016001730T5 publication Critical patent/DE112016001730T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4843Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
    • G06F9/485Task life-cycle, e.g. stopping, restarting, resuming execution
    • G06F9/4856Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration
    • G06F9/4862Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration the task being a mobile agent, i.e. specifically designed to migrate
    • G06F9/4868Task life-cycle, e.g. stopping, restarting, resuming execution resumption being on a different machine, e.g. task migration, virtual machine migration the task being a mobile agent, i.e. specifically designed to migrate with creation or replication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5061Partitioning or combining of resources
    • G06F9/5077Logical partitioning of resources; Management or configuration of virtualized resources
    • 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/0614Improving the reliability of storage systems
    • G06F3/0619Improving the reliability of storage systems in relation to data integrity, e.g. data losses, bit errors
    • 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0647Migration mechanisms
    • 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/065Replication mechanisms
    • 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]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/546Message passing systems or structures, e.g. queues
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/4557Distribution of virtual machine instances; Migration and load balancing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45533Hypervisors; Virtual machine monitors
    • G06F9/45558Hypervisor-specific management and integration aspects
    • G06F2009/45583Memory management, e.g. access or allocation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/54Indexing scheme relating to G06F9/54
    • G06F2209/548Queue

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Multimedia (AREA)
  • Computer Security & Cryptography (AREA)
  • Memory System Of A Hierarchy Structure (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Advance Control (AREA)

Abstract

Verfahren, Systems und Apparate, einschließlich Computerprogramme, kodiert auf Computerspeichermedien, für Speicheranfragen durch ein virtuelle Maschine. Eines der Verfahren umfasst Erzeugen einer Vielzahl von Doorbell-Seiten für eine Vielzahl von auf einem Gerät ausgeführten virtuellen Maschinen; Bereitstellen des Zugriffs auf eine der jeweiligen Vielzahlen von Doorbell-Seiten, die eine Warteschlange mit gespeicherten Anforderungen von der jeweiligen virtuellen Maschine identifiziert, für jede der Vielzahlen von virtuellen Maschinen; Empfangen einer Benachrichtigung von einer bestimmten Vielzahl von Doorbell-Seiten darüber, dass die jeweilige Warteschlange eine Anforderung von der jeweiligen virtuellen Maschine empfangen hat; und Senden des Befehls an den Prozessor, die jeweilige Warteschlange der jeweiligen virtuellen Maschine zu verarbeiten, als Reaktion auf den Empfang der Benachrichtigung darüber, dass die jeweilige Warteschlange eine Anforderung von der jeweiligen virtuellen Maschine empfangen hat.

Description

  • HINTERGRUND
  • Diese Spezifikation bezieht sich auf den Speicherzugriff durch virtuelle Maschinensysteme.
  • Virtuelle Maschinen wie Cloudbasierte virtuelle Maschinen benötigen manchmal einen eingeschränkten bidirektionalen Kommunikationspfad zu ihren virtuellen Geräten. Eine virtuelle Maschine kann beispielsweise einen kreisförmigen Puffer mit Haupt- und Endzeigern verwenden. Ein Hypervisor, ein Hypervisor-Agent oder ein vertrauenswürdiges physisches Gerät können den Hauptzeiger abfragen, ob die virtuelle Maschine neue Anforderungen eingegeben hat, und den Inhalt der Warteschlange lesen. Einige Systeme können mehrere Prozessorkerne verwenden, um Warteschlangen abzufragen.
  • KURZDARSTELLUNG
  • In einigen Ausführungsformen kann ein Hypervisor, z. b. ein Helfer des Hypervisors, mithilfe einer Doorbell-Seite für jede Warteschlange multiple Warteschlangen für multiple virtuelle Maschinen überwachen sowie potenziell multiple Warteschlangen für jede virtuelle Maschine überwachen. Der Hypervisor verwendet die Doorbell-Seiten, um zu bestimmen, ob und wann es Einträge in den Warteschlangen gab, die Arbeit für einen Prozessor beinhalten. Der Hypervisor kann einen Bitvektor aktualisieren, wenn eine Doorbell-Seite "angeklingelt" wird, und diesen Bitvektor dem Prozessor bereitstellen, um anzugeben, welche Warteschlangen bedient werden sollen. Wenn eine Doorbell-Seite angeklingelt wird, kann der Hypervisor eine Doorbell-Seite bzw. einen Wert der Doorbell-Seite in den Speicher kopieren, z. B. für die Nutzung durch den Hypervisor oder einen Prozessor. Der Hypervisor kann ein Unterbrechungssignal an einen Prozessor senden, um den Prozessor über die anstehende Operation zu benachrichtigen, wenn der Prozessor gerade mit einer anderen Operation beschäftigt ist. Der Hypervisorhelfer kann eine Anwendung oder Hardware sein, die zur Ausführung der vorstehend beschriebenen Schritte konfiguriert wurde.
  • In einigen Ausführungsformen kann eine Hilfsanwendung oder ein Hilfsgerät, z. B. ein Hypervisor oder eine Hilfsanwendung oder ein Hilfsgerät für einen Hypervisor den Speicherzugriff während der Migration einer Anwendung z. B. einer virtuellen Maschine von einem ersten Gerät auf ein zweites Gerät überwachen. Der Helfer kann die von der Anwendung verwendeten Seiten des Speichers überwachen und nur die Dirty Bytes von den Seiten an das zweite Gerät während des Migrationsvorgangs transferieren.
  • Im Allgemeinen kann ein innovativer Aspekt des in dieser Spezifikation beschriebenen Gegenstands in Verfahren verkörpert werden, die Folgendes beinhalten: Erzeugen einer Vielzahl von Doorbell-Seiten für eine Vielzahl von auf einem Gerät ausgeführten virtuellen Maschinen; Bereitstellen des Zugriffs auf eine der jeweiligen Vielzahlen von Doorbell-Seiten, die eine Warteschlange mit gespeicherten Anforderungen von der jeweiligen virtuellen Maschine identifiziert, für jede der Vielzahlen von virtuellen Maschinen; Empfangen einer Benachrichtigung von einer bestimmten Vielzahl von Doorbell-Seiten darüber, dass die jeweilige Warteschlange eine Anforderung von der jeweiligen virtuellen Maschine empfangen hat; und Senden des Befehls an den Prozessor, die jeweilige Warteschlange der jeweiligen virtuellen Maschine zu verarbeiten als Reaktion auf den Empfang der Benachrichtigung darüber, dass die jeweilige Warteschlange eine Anforderung von der jeweiligen virtuellen Maschine empfangen hat. 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.
  • Im Allgemeinen kann ein innovativer Aspekt des in dieser Spezifikation beschriebenen Gegenstandes in Verfahren verkörpert werden, die Folgendes umfassen: Initiieren eines Migrationsvorgangs, um eine auf einem ersten Gerät ausgeführte Anwendung auf ein zweites Gerät zu verschieben, indem Datenseiten aus dem Speicher des ersten Geräts, die für die Ausführung der Anwendung auf dem ersten Gerät verwendet werden, auf das zweite Gerät kopiert werden, während die Ausführung auf dem ersten Gerät weiterhin ausgeführt wird; Aktualisieren eines oder mehrerer Bytes in mindestens einer der Datenseiten als Reaktion auf die Ausführung der Anwendung auf dem ersten Gerät während des Migrationsvorgangs, Stoppen der Anwendungsausführung auf dem ersten Gerät; Kopieren der aktualisierten Bytes von dem ersten Gerät auf das zweite Gerät, sodass die Ausführung der Anwendung auf dem zweiten Gerät fortgesetzt wird. 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 aus einem oder mehreren Computern kann konfiguriert werden, um bestimmte Operationen oder Aktionen durch Software, Firmware, Hardware oder eine Kombination der genannten Komponenten, die im System installiert werden und die Aktionen des Systems ausführen, 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 nachfolgenden und anderen Ausführungsformen können eines oder mehrere der folgenden Merkmale umfassen. Das Verfahren kann die Fortsetzung der Ausführung der jeweiligen virtuellen Maschine beinhalten, während der Prozessor die Anforderung verarbeitet. Das Verfahren kann das Empfangen eines Updates der jeweiligen Warteschlange beinhalten, im Vorfeld der Benachrichtigung darüber, dass die jeweilige Warteschlange eine Anforderung der jeweiligen virtuellen Maschine empfangen hat.
  • In einigen Ausführungsformen beinhaltet das Verfahren das Erzeugen eines Arrays, welcher für jede Vielzahl von Doorbell-Seiten einen jeweiligen Eintrag beinhaltet, der die Doorbell-Seite und die Warteschlange, die durch die Doorbell-Seite identifiziert wird, eindeutig identifiziert; und als Reaktion auf den Empfang einer Benachrichtigung darüber, dass die jeweilige Warteschlange eine Anforderung der jeweiligen virtuellen Maschine empfangen hat, das Aktualisieren des jeweiligen Eintrags im Array, der die jeweilige Warteschlange identifiziert. Das Auslösen der Verarbeitung der jeweiligen Warteschlange für die jeweilige virtuelle Maschine durch den Prozessor kann das Bereitstellen des Arrays für den Prozessor beinhalten, um die jeweilige Warteschlange der jeweiligen virtuellen Maschine durch diesen Prozessor zu verarbeiten. Das Erzeugen des Arrays, der für jede der Vielzahl von Doorbell-Seiten einen jeweiligen Eintrag beinhaltet, der die Doorbell-Seite und die Warteschlange, die durch die Doorbell-Seite identifiziert wird, eindeutig identifiziert, kann das Erzeugen eines Bitvektors beinhalten, welcher für jede der Vielzahlen von Doorbell-Seiten einen jeweiligen Eintrag beinhaltet, der die Doorbell-Seite und die Warteschlange, die durch die Doorbell-Seite identifiziert wird, eindeutig identifiziert. Das Aktualisieren des jeweiligen Eintrags im Array, der die jeweilige Warteschlange identifiziert, kann das Aktualisieren des jeweiligen Eintrags im Bitvektor, der die jeweilige Warteschlange identifiziert, beinhalten. Bereitstellen des Arrays für den Prozessor, um zu bewirken, dass der Prozessor die jeweilige Warteschlange der jeweiligen virtuellen Maschine verarbeitet, kann das Bereitstellen des Bitvektors für den Prozessor beinhalten, um die jeweilige Warteschlange der jeweiligen virtuellen Maschine durch diesen Prozessor zu verarbeiten. Bereitstellen des Arrays für den Prozessor, um zu bewirken, dass der Prozessor die jeweilige Warteschlange der jeweiligen virtuellen Maschine verarbeitet, kann das Bereitstellen des Arrays für den Prozessor beinhalten, um multiple Warteschlangen für die Vielzahl von virtuellen Maschinen durch diesen Prozessor zu verarbeiten.
  • In einigen Ausführungsformen beinhaltet das Auslösen der Verarbeitung der jeweiligen Warteschlange für die jeweilige virtuelle Maschine durch den Prozessor das Senden eines Unterbrechungssignals an den Prozessor. Das Bereitstellen des Zugriffs auf die jeweilige Vielzahl von Doorbell-Seiten für die Vielzahl von virtuellen Maschinen, die die Warteschlange mit den gespeicherten Anforderungen für die jeweilige virtuelle Maschine identifiziert, kann das Bereitstellen des Zugriffs auf die jeweilige Vielzahl von Doorbell-Seiten für die Vielzahl von virtuellen Maschinen beinhalten, die einen Kopfknoten der jeweiligen Warteschlange beinhaltet. Das Bereitstellen für die Vielzahl von virtuellen Maschinen des Zugriffs auf die jeweilige Vielzahl von Doorbell-Seiten, die die Warteschlange mit den gespeicherten Anforderungen für die jeweilige virtuelle Maschine identifiziert, kann das Bereitstellen für die Vielzahl von virtuellen Maschinen des Zugriffs auf die jeweilige Vielzahl von Doorbell-Seiten beinhalten, die einen Ringpuffer mit den gespeicherten Anforderungen von der jeweiligen virtuellen Maschine identifiziert.
  • In einigen Ausführungsformen beinhaltet das Erzeugen der Doorbell-Seiten das Zuweisen einer entsprechenden Adresse für jede der Vielzahl von Doorbell-Seiten und das Bereitstellen für jede der Vielzahl von virtuellen Maschinen des Zugriffs auf die jeweilige Vielzahl der Doorbell-Seiten, die die Warteschlange mit den gespeicherten Anforderungen für die jeweilige virtuelle Maschine identifiziert und das Bereitstellen der entsprechenden Adresse für die jeweilige virtuelle Maschine aus der Vielzahl von virtuellen Maschinen. Das Erzeugen der Vielzahl von Doorbell-Seiten kann das Erzeugen einer Tracking-Struktur und das Zuweisen eines entsprechenden Indexes der Tracking-Struktur für jede der Vielzahl von Doorbell-Seiten und das Bereitstellen für jede der Vielzahl von virtuellen Maschinen des Zugriffs auf die jeweilige Vielzahl der Doorbell-Seiten beinhalten, die die Warteschlange mit den gespeicherten Anforderungen für die jeweilige virtuelle Maschine identifiziert, und kann das Bereitstellen der entsprechenden Adresse für den jeweiligen Index der jeweiligen virtuellen Maschine aus der Vielzahl der virtuellen Maschinen beinhalten. Das Erzeugen der Vielzahl von Doorbell-Seite kann das Erzeugen einer Seite für jede aus der Vielzahl von Doorbell-Seiten, und das Zuweisen für jede aus der Vielzahl von Doorbell-Seiten eines Non-Zero-Offsets, bei welchem die jeweilige aus der Vielzahl von Doorbell-Seiten sich innerhalb der jeweiligen Seite befindet. Das Bereitstellen für die Vielzahl von virtuellen Maschinen des Zugriffs auf die jeweilige Vielzahl von Doorbell-Seiten, die die Warteschlange mit den gespeicherten Anforderungen für die jeweilige virtuelle Maschine identifiziert, kann das Bereitstellen für jede aus der Vielzahl von virtuellen Maschinen einer Adresse für die jeweilige Seite und einen Non-Zero-Offset für die jeweilige virtuelle Maschine beinhalten.
  • In einigen Ausführungsformen beinhaltet das Verfahren das Erzeugen einer zweiten Vielzahl von Doorbell-Seiten, und das Bereitstellen für jede der zumindest einigen Vielzahlen von virtuellen Maschinen des Zugriffs auf die jeweilige der Vielzahlen von Doorbell-Seiten, die eine zweite Warteschlange mit zweiten Anforderungen der jeweiligen virtuellen Maschine identifiziert, wobei der erste Typ der Anforderungen sich von dem zweiten Anforderungstyp unterscheidet. Das Empfangen durch eine Vielzahl der Doorbell-Seiten einer Benachrichtigung darüber, dass die jeweilige Warteschlange eine Anforderung von der jeweiligen virtuellen Maschine erhalten hat, kann das Empfangen durch eine Vielzahl der Doorbell-Seiten einer Benachrichtigung, die den Anforderungstyp identifiziert, beinhalten. Das Auslösen der Verarbeitung der jeweiligen Warteschlange für die jeweilige virtuelle Maschine kann das Bestimmen, dass der Typ der Anforderung dem ersten Typ zugehört, das Bestimmen eines bestimmten Prozessors, der die Anforderungen des ersten Typs verarbeiten soll, und das Auslösen der Verarbeitung der jeweiligen Warteschlange für die jeweilige virtuelle Maschine durch den Prozessor beinhalten. Das Verfahren kann die Ausführung einer Vielzahl von virtuellen Maschinen auf dem ersten Prozessor des Geräts beinhalten. Das Auslösen der Verarbeitung der jeweiligen Warteschlange für die jeweilige virtuelle Maschine durch den bestimmten Prozessor kann das Ausliefern einer Nachricht an den auf dem zweiten Prozessor ausgeführten Hypervisor beinhalten, welche den zweiten Prozessor veranlasst, die jeweilige Warteschlange der jeweiligen virtuellen Maschine zu verarbeiten. Das Ausliefern einer Nachricht an den auf dem zweiten Prozessor ausgeführten Hypervisor kann die Nachricht an den auf dem zweiten Prozessor eines anderen zweiten Geräts ausgeführten Hypervisor beinhalten.
  • In einigen Ausführungsformen kann das Verfahren das Erstellen eines Mappings für die Anwendung zum Identifizieren von Positionen der Datenseiten im Speicher beinhalten. Das Aktualisieren eines oder mehrerer Bytes in mindestens einer der Datenseiten durch das erste Gerät als Reaktion auf die Ausführung der Anwendung auf dem ersten Gerät während des Migrationsvorgangs kann das Zuweisen jeder von mindestens einer der Datenseiten einem Helfer, das Aktualisieren für jede der mindestens einer Seite des Mappings der Anwendung, um die entsprechende Seite im Helfer zu identifizieren, und das Aktualisieren eines oder mehrerer Bytes in mindestens einer der Datenseiten beinhalten. Das Ausführen der Anwendung auf dem ersten Gerät kann das Ausführen einer virtuellen Maschine auf dem ersten Gerät beinhalten.
  • In einigen Ausführungsformen beinhaltet das Verfahren das Speichern durch das erste Gerät der Daten, die die aktualisierten Bytes als Reaktion auf das Aktualisieren einer oder mehrerer Bytes in mindestens einer Datenseite. Das Kopieren von nur den aktualisierten Bytes vom ersten Gerät auf das zweite Gerät kann das Identifizieren der aktualisierten Bytes mithilfe der Daten zur Identifizierung der aktualisierten Bytes beinhalten sowie das Kopieren von nur den aktualisierten Bytes vom ersten Gerät auf das zweite Gerät als Reaktion auf das Identifizieren der aktualisierten Bytes mithilfe der Daten zur Identifizierung der aktualisierten Bytes. Das Verfahren kann das Empfangen durch das erste Gerät eines oder mehrerer Bytes in mindestens einer der Datenseiten beinhalten sowie das Bestimmen durch das erste Gerät, dass einer oder mehrere Bytes für die Datenseiten der Anwendung, die momentan migriert wird, bestimmt sind. Das Speichern der Daten zur Identifizierung der aktualisierten Bytes kann das Speichern der Daten zur Identifizierung der aktualisierten Bytes als Reaktion auf das Bestimmen, dass einer oder mehrere Bytes für die Datenseiten der Anwendung, die momentan migriert wird, bestimmt sind. Das Verfahren kann das Empfangen einer Anforderung für den Zugriff auf den Speicher von der Anwendung beinhalten, sowie das Bestimmen, dass die Anforderung für den Speicherzugriff eine Schreiben-Anforderung ist. Das Speichern der Daten zur Identifizierung der aktualisierten Bytes kann das Speichern der Daten zur Identifizierung der aktualisierten Bytes als Reaktion auf das Bestimmen, dass die Anforderung für den Speicherzugriff eine Schreibanforderung ist. Das Verfahren kann das Ausführen der Anwendung auf dem ersten Gerät einschließlich des Speicherns der Datenseiten für die Anwendung im Speicher des ersten Geräts beinhalten.
  • 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 Ausführungsformen können die nachfolgend beschriebenen Systeme und Verfahren bestimmen, wann eine virtuelle Maschine eine Datenanforderung in eine Warteschlange schneller platziert, z. B. innerhalb einer Mikrosekunde, weniger Ressourcen verwendet oder beides im Vergleich zu Systemen und Verfahren, die keine Doorbell-Seiten mit Beschleunigung aufgrund eines Hypervisors, einer Hilfsanwendung oder eines Geräts verwenden. In einigen Ausführungsformen können die nachfolgend beschriebenen Systeme und Verfahren die Ausführung einer virtuellen Maschine fortsetzen, wenn eine Doorbell-Seite angeklingelt wurde und die Anforderungen in der entsprechenden Warteschlange z. B. asynchron verarbeitet werden.
  • In einigen Ausführungsformen können die nachfolgend beschriebenen Systeme und Verfahren einen Bitvektor für einen Prozessor liefern, damit ein Hypervisor, ein Prozessor oder beides schnell bestimmen können, welche virtuellen Maschinen bedient werden müssen. Ein System kann beispielsweise schneller erfahren, ob eine Doorbell-Seite von einer virtuellen Maschine angeklingelt wurde, im Gegensatz zu einem Doorbell-Abfrageassistenten, sodass das System reagieren kann, auch wenn es Tausende von instanziierten Doorbell-Seiten beinhaltet. In einigen Ausführungsformen, wenn sich die Doorbell-Seiten in einem peripheren PCI-Raum befinden, kann das Gerät die gewöhnlichen Trap-and Emulate-Traps vermeiden, die z. B. mindestens 3.000 Prozessortakte oder eine Mikrosekunde verbrauchen, die von der virtuellen Maschine für den Zugriff auf die softwareemulierten Doorbells des Geräts benötigt werden können. In einigen Ausführungsformen kann ein System eine Benachrichtigung für die auf dem ersten Prozessor ausgeführte virtuelle Maschine mit einer zu bedienenden Warteschlange an einen zweiten Prozessor ausliefern, um die Bedienung der Warteschlange der virtuellen Maschine während der Ausführung auf dem ersten Prozessor zu verhindern, um die Verschmutzung des Caches des ersten Prozessors zu verhindern, um die Verarbeitung von Warteschlangen durch den zweiten Prozessor zu erlauben, z. B. für denselben oder ähnliche Anforderungstypen von multiplen Maschinen, oder eine beliebige Kombination dieser Faktoren.
  • In einigen Ausführungsformen können die nachfolgend beschriebenen Systeme und Verfahren nur Dirty Bytes oder Byte-Blöcke z. B. kleiner als eine Seite beim Transfer einer Anwendung zwischen den Geräten kopieren, um die Ausfallzeiten für die Anwendung zu reduzieren, z. B. in einer Cloud-Umgebung, im Vergleich zu anderen Systemen und Verfahren, die Seiten des Speichers transferieren.
  • Die Details einer oder mehrerer Ausführungen eines Themengebietes, die in dieser Spezifikation beschrieben werden, sind in den begleiteten Bildern 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 ist ein Blockdiagramm einer exemplarischen Umgebung, in der ein Gerät die Doorbell-Seiten verwendet, um zu bestimmen, wann Warteschlangen für virtuelle Maschinen bedient werden müssen.
  • 2 ist ein Flussdiagramm eines Prozesses, bei dem bewirkt wird, dass ein Prozessor eine Warteschlange einer virtuellen Maschine verarbeitet.
  • 3 ist ein Flussdiagramm eines Prozesses, bei dem bewirkt wird, dass ein bestimmter Prozessor eine Warteschlange verarbeitet.
  • 4 ist ein Blockdiagramm einer exemplarischen Umgebung, in der ein Gerät A 402a eine Anwendung an das Gerät B migriert.
  • 5 ist ein Flussdiagramm eines Transfervorgangs einer Anwendung von einem ersten Gerät auf ein zweites Gerät.
  • 6 ist ein Blockdiagramm eines Computersystems, das in Verbindung mit computerimplementierten Verfahren, die in diesem Dokument beschrieben sind, verwendet werden kann.
  • Entsprechende Referenznummern und Kennzeichnungen in den verschiedenen Zeichnungen zeigen entsprechende Elemente an.
  • AUSFÜHRLICHE BESCHREIBUNG
  • Übersicht
  • Eine Anwendung, z. B. ein Hypervisor oder ein Hypervisorhelfer, die auf einem Gerät ausgeführt wird, kann eine große Anzahl von Doorbell-Seiten wie 1024 oder höher erstellen. Die Doorbell-Seiten können sich in einem BAR-Space (Base Address Register) eines PCI Express (Peripheral Component Interconnect), mit entweder Eingabe / Ausgabe (IO) oder Memory-mapped IO (MMIO) befinden. Die Anwendung nutzt Doorbell-Seiten, um zu bestimmen, ob eine oder mehrere Warteschlangen der auf dem Gerät ausgeführten virtuellen Maschinen bedient werden müssen. Die Anwendung kann die zugewiesenen Doorbell-Seiten konfigurieren, um den Hypervisor mit einer Liste von ausstehenden Doorbell-Seiten und den Werten der Doorbell-Seiten zu benachrichtigen, wenn eine Doorbell-Seite von einer virtuellen Maschine geschrieben wird. Nach dem Empfang einer Benachrichtigung kann der Hypervisor eine Liste von ausstehenden Doorbells oder entsprechenden Warteschlangen an einen Prozessor liefern, damit dieser die Datenanforderungen aus den Warteschlangen verarbeitet. In einigen Beispielen kann die Anwendung auf einer Gerät-Komponente ausgeführt werden und den für die Doorbell-Seiten verwendeten Speicher beinhalten.
  • Jede der Doorbell-Seiten kann konfigurierbare Semantik enthalten. Eine NIC-100-Stil-Doorbell-Seite kann beispielsweise einen 32-Bit-Ringpufferindex enthalten, eine Warteschlange, die im Speicher gespeichert ist und an den Hypervisor bereitgestellt wird. In einigen Beispielen kann eine NVMe-Warteschlange eine Indikation enthalten, dass die entsprechende Warteschlange bedient werden muss und die entsprechende Warteschlange, z. B. ein Ringpufferindex, sich in einem separaten Speicher befindet. In einigen Beispielen kann eine Virtio-Net-Warteschlange ein IO-Raumregister enthalten, das mit der gewünschten Warteschlangennummer geschrieben wird, wenn eine Doorbell-Seite "angeklingelt" wird. Die Anwendung, z. B. der Hypervisorhelfer, kann programmiert werden, um jede Semantik einer Doorbell-Seite an den Hypervisor zu liefern.
  • In einigen Beispielen kann die Anwendung eine Bitvektorsumme mithilfe der Doorbell-Seiten erzeugen, die angeklingelt wurden um alle der Warteschlangen anzukündigen, die bedient werden müssen. Die Anwendung kann den Bitvektor an einen Hypervisor liefern, damit der Hypervisor oder ein Prozessor alle Warteschlangen, die eine Verarbeitung benötigen, schnell und ohne alle Warteschlangenwerte zu scannen, zu identifizieren.
  • In einigen Ausführungsformen können einige der Doorbell-Seiten Einstellungen enthalten, die es der Anwendung z. B. einem Hypervisor erlauben, eine Verzögerung der Benachrichtigungen in derselben Weise wie die Verzögerung von Unterbrechungssignalen anzuwenden. Wenn der Hypervisor beispielsweise eine Benachrichtigung erhält, dass eine bestimmte Doorbell-Seite angeklingelt wurde, wird diese Doorbell-Seite die Anwendung möglicherweise nicht über die zusätzlichen Anforderungen in der entsprechenden Warteschlange informieren, z. B. kann sich diese Doorbell-Seite maskieren, bis die Anwendung oder der Hypervisor sie wieder reaktiviert, z. B. nachdem die entsprechende Warteschlange bedient wurde. In einigen Beispielen kann eine bestimmte Doorbell-Seite geschwindkeitsbegrenzende Einstellungen beinhalten, die die Frequenz festlegen, mit der ein Hypervisor darüber benachrichtigt werden sollte, dass eine entsprechende Warteschlange bedient werden muss.
  • In einigen Ausführungsformen kann jede der Doorbell-Seiten eine separate 4 KB-Seite belegen und sich optional auf einem Non-Zero-Offset innerhalb dieser Seite befinden, wenn eine bestimmte Warteschlangenstruktur Zero-Offset nicht unterstützt. Die Anwendung kann ein Mapping für die Zugriffe auf den Speicher der virtuellen Maschine erstellen, z. B. identifiziert in den Warteschlangen für die einzelnen Doorbell-Seiten, z. B. mithilfe des x86 MMU-Standards und des EPT-Pagings, mit einer Genauigkeit von 4 Kb, um jeder virtuellen Maschine nur den Zugriff auf Doorbell-Seiten, die ihr zugewiesen wurden, zu gewähren.
  • In einigen Ausführungsformen kann eine Hilfsanwendung den Datenverkehr während einer gerade stattfindenden Migration einer anderen Anwendung umleiten. Die Hilfsanwendung kann beispielsweise eine Seitenspiegelung ausführen, um eine granularere Migration der anderen Anwendung zu ermöglichen, z. b. auf dem Byte- oder Multibyte-Niveau, von einem ersten auf ein zweites Gerät. Nach dem Transfer einer Seite auf das zweite Gerät, wenn ein bestimmtes Byte in der Seite aktualisiert wurde, kann die Hilfsanwendung den Transfer von Zwei-Byte-Blöcken inklusive des bestimmten Bytes auf das zweite Gerät erlauben, sodass nicht die gesamte Seite auf das zweite Gerät transferiert werden muss.
  • In einigen Ausführungsformen werden der Hypervisorhelfer oder die Hilfsanwendung auf dem Gerät ausgeführt. In einigen Ausführungsformen sind der Hypervisorhelfer oder die Hilfsanwendung Hardwarekomponenten eines Geräts, z. B. mit dem Gerät integriert oder damit verbunden.
  • Verarbeitung der Warteschlangen
  • 1 ist ein Blockdiagramm einer exemplarischen Umgebung 100, in der ein Gerät 102 die Doorbell-Seiten verwendet, um zu bestimmen, wann Warteschlangen für virtuelle Maschinen bedient werden müssen. Das Gerät 102 beinhaltet einen oder mehrere Prozessoren A–B 104a–b. Einer der Prozessor A 104a führt einen Hypervisor 106 aus und einer oder beide der Prozessoren A–B 104a–b führen eine oder mehrere virtuelle Maschinen 108a–c aus.
  • Wenn die virtuellen Maschinen 108a–c eine Datenanforderung haben, und zwar eine Lese- bzw. Schreibe-Anfrage, platzieren die virtuellen Maschinen 108a–c einen Eintrag in der entsprechenden Warteschlange 110. Die virtuelle Maschine A 108a kann beispielsweise Leseanforderungen in einer ersten Warteschlange A1 und Schreibeanforderungen in einer zweiten Warteschlange A2 platzieren. In einigen Beispielen kann eine virtuelle Maschine alle Anforderungen in einer einzelnen Warteschlange wie Warteschlange B1 für die virtuelle Maschine B 108b platzieren. Jede der Warteschlangen 110 kann ein Ringpuffer oder ein anderer entsprechender Warteschlangentyp sein.
  • Nach dem Platzieren einer Datenanforderung in einer Warteschlange 110 schreiben die virtuellen Maschinen 108a–c einen Benachrichtigungswert in die entsprechende Doorbell-Seite 112, z. B. Anklingeln der entsprechenden Doorbell-Seite 112. Wenn die virtuelle Maschine A 108a beispielsweise eine Leseanforderung in die Warteschlange A1 platziert, kann sie den Benachrichtigungswert in die Doorbell-Seite A1 der Warteschlange A1 schreiben. In einigen Beispielen können eine oder mehrere virtuelle Maschinen 108a–c den Benachrichtigungswert in die entsprechende Doorbell-Seite 112 vor dem Platzieren der Datenanforderung in eine Warteschlange 110 schreiben.
  • Das Gerät 102 reagiert auf das Schreiben des Benachrichtigungswertes in die Doorbell-Seite 112, indem es den Prozessor A–D 104a–d darüber benachrichtigt, dass die jeweilige Warteschlange bedient werden muss. Das Gerät 102 kann beispielsweise einen entsprechenden Bitvektor A–D 114a–b aktualisieren und den aktualisierten Bitvektor an einen der Prozessoren 104a–d ausliefern. Der Bitvektor A 114a kann Benachrichtigungs-Bitwerte für die Warteschlangen A1, B1 und C1 beinhalten. Wenn das Gerät 102 eine Benachrichtigung für eine der Doorbell-Seiten A1, B1 oder C1 empfängt, aktualisiert das Gerät 102 den Bitvektor A 114a, um anzuzeigen, dass die entsprechende Warteschlange verarbeitet werden muss. Ein Wert einer ersten Position des Bitvektors A 114a gibt an, ob die Warteschlange A1 bedient werden muss, ein Wert der zweiten Position des Bitvektors A 114a gibt an, ob die Warteschlange B1 bedient werden muss, und ein Wert der dritten Position des Bitvektors A 114a gibt an, ob die Warteschlange C1 bedient werden muss. Dementsprechend entsprechen die Werte der Positionen des Bitvektors B 114b den Warteschlangen A2 und C2.
  • In einigen Ausführungsformen gibt der Wert "Eins" im Bitvektor A 114a an, dass die entsprechende Warteschlange bedient werden muss, und der Wert "Null" gibt an, dass die entsprechende Warteschlange nicht bedient werden muss. In anderen Ausführungsformen gibt der Wert "Null" an, dass die entsprechende Warteschlange bedient werden muss und der Wert "Eins" gibt an, dass die Warteschlange nicht bedient werden muss.
  • In einigen Ausführungsformen sendet das Gerät 102 ein Unterbrechungssignal an einen Hypervisor, der auf einem anderen Prozessorkern ausgeführt wird als dem Prozessorkern, auf dem sich die virtuelle Maschine mit der zu verarbeitenden Warteschlange befindet. Wenn der Prozessor A 104a die virtuelle Maschine B 108b ausführt und die Warteschlange B1 bedient werden muss, kann das Gerät 102 den Prozessor B 104b oder den Prozessor D 104d darüber benachrichtigen, dass die Warteschlange B1 bedient werden muss. Das Gerät 102 kann ein Unterbrechungssignal an einen Hypervisor oder eine andere Anwendung, die auf einem anderen Prozessorkern ausgeführt wird, senden, um den Hypervisor der zu verarbeitenden Warteschlange B1 zu benachrichtigen.
  • In einigen Ausführungsformen kann das Gerät 102 den Benachrichtigungswert von der Doorbell-Seite, für welche das Gerät 102 benachrichtigt wurde, puffern. Das Gerät 102 kann den Bitvektor beispielsweise im Speicher speichern und Werte des Bitvektors z. B. eine Kopie des Bitvektors dem Prozessor bereitstellen, der die durch den Bitvektor identifizierten Warteschlangen verarbeitet, bzw. einer Anwendung, die den Bitvektor verwendet, auf Befehl oder passiv. In einigen Beispielen, wenn ein Hypervisorhelfer den Bitvektor verwaltet und der Hypervisor 106 einen oder mehrere Bits im Bitvektor bereinigen will für die bereits verarbeiteten Warteschlangen bzw. Warteschlangen, die nicht mehr verarbeitet werden müssen, kann der Hypervisor 106 eine Nachricht an den Hypervisorhelfer senden, um die zu bereinigenden Bits zu identifizieren. Der Hypervisorhelfer kann die identifizierten Bits dann bereinigen, sodass der Bitvektor aktuell bleibt, z. B. mithilfe einer Masterkopie des Bitvektors.
  • Das Gerät 102 kann den Bitvektor 114a–b für die Doorbell-Seite 112 liefern, für welche das Gerät bzgl. des Prozessors 104a–d, welcher die entsprechenden Warteschlangen verarbeiten wird, benachrichtigt wurde. Wenn das Gerät 102 den Bitvektor A 114a als Reaktion auf die Serviceanforderung für die Warteschlange B1 aktualisiert, liefert das Gerät 102 den Bitvektor A 114ak an den Prozessor B 104b. Der Prozessor B 104b verwendet den Bitvektor A 114a, um zu bestimmen, dass die Warteschlange B1 bedient werden muss, und dass die Warteschlangen A1, C1 oder beide möglicherweise auch bedient werden müssen, z. B. mithilfe der Werte der entsprechenden Positionen des Bitvektors 114a. Der Prozessor B 104b kann die im Bitvektor A 114a identifizierten Warteschlangen dann bedienen. Der Prozessor B 104b wird beispielsweise auf einen ersten Eintrag in der Warteschlange A1 zugreifen, um die durch den ersten Eintrag angeforderten Daten zu bestimmen, und die angeforderten Daten für die Nutzung durch die virtuelle Maschine A 108a abrufen.
  • Jede der Doorbell-Seiten 112 kann eine oder mehrere Einstellungen beinhalten. Die Doorbell-Seiten 112 können eine gewünschte Bitposition innerhalb des entsprechenden Bitvektors indizieren, die aktualisiert werden soll, wenn die jeweilige Doorbell-Seite angeklingelt wird.
  • In einigen Beispielen können die Doorbell-Seiten 112 eine Einstellung für die Zusammenfügung von Benachrichtigungen beinhalten, die angibt, ob die Zusammenfügung von Benachrichtigungen ausgeführt werden sollte. Die Einstellung für die Zusammenfügung der Benachrichtigungen kann ein Boolescher Wert sein, der das Eintreten eines Ereignisses angibt und dass das Gerät 102 das Schreiben weiterer Benachrichtigungen für die jeweilige Doorbell-Seite unterdrücken muss, bis der Boolesche Wert bereinigt wurde. Das Gerät 102 kann beispielsweise das Schreiben weiterer Benachrichtigungen unterdrücken, indem es den Booleschen Wert auf "true" setzt bis alle Einträge in der jeweiligen Warteschlange verarbeitet wurden, und den Booleschen Wert dann auf "false" setzt, sodass das Gerät 102 über weitere Einträge, die zur entsprechenden Warteschlange hinzugefügt wurden, informiert wird.
  • In Ausführungsformen, wo das Gerät 102 multiple Bitvektoren beinhaltet, kann jede der Doorbell-Seiten 112 einen bestimmten Bitvektor für die Doorbell-Seite aufweisen. Das Gerät 102 kann beispielsweise einen Bitvektor für jeden Prozessor oder Prozessorkern beinhalten, der die Anforderungen von den virtuellen Maschinen 108a–c verarbeiten wird, und jede der Doorbell-Seiten kann angeben, welcher der Bitvektoren aktualisiert werden muss, wenn die Doorbell-Seite angeklingelt wird, sodass der korrekte Prozessor oder Prozessorkern über die entsprechende zu bedienende Warteschlange benachrichtigt werden kann. Einige der Prozessoren und Prozessorkerne können auf dem Gerät 102 beinhaltet sein, z. B. die Prozessoren A–B 104a–b. Einige der Prozessoren und Prozessorkerne können auf einem oder mehreren Geräten wie dem Prozessor C–D 104c–d beinhaltet sein. Der Prozessor oder der Prozessorkern, der eine Anforderung verarbeitet, kann auf einem bestimmten Gerät mit einem Speicher einschließlich Daten für die Anforderung beinhaltet sein.
  • In einigen Beispielen kann das Gerät 102 eine Benachrichtigung über die erste Doorbell-Seite A1 erhalten, dass die erste Warteschlange A1 für die virtuelle Maschine A 108a bedient werden muss, und den Bitvektor A 114a, z. B. eine Kopie des Bitvektors an den Prozessor B 104b liefern. Wenn das Gerät eine Benachrichtigung über eine zweite Doorbell-Seite A2 empfängt, dass eine zweite Warteschlange A2 für die virtuelle Maschine A 108a bedient werden muss, kann das Gerät 102 eine Kopie des Bitvektors B 114b nach dem Aktualisieren des Bitvektors als Reaktion auf die Benachrichtigung an den Prozessor C 104c senden, welcher sich z. B. auf einem anderen Gerät befindet.
  • In einigen Ausführungsformen kann jede der Doorbell-Seiten 112 ein Verhalten für die Schreibeinstellung beinhalten, das eine Aktion angibt, die vom Gerät 102 ausgeführt wird, wenn eine entsprechende Warteschlange 110 bedient werden muss und die entsprechende Doorbell-Seite angeklingelt wurde. Das Gerät 102 kann beispielsweise die Einstellungen für eine Doorbell-Seite nutzen, um zu bestimmen, dass das Gerät 102 einen Wert für die Anzahl der neuen Einträge in der entsprechenden Warteschlange, die Gesamtanzahl der Einträge in der entsprechenden Warteschlange, die Anzahl der nicht neuen Einträge in der entsprechenden Warteschlange (die in der Warteschlange vor dem letzten Update der Warteschlange enthalten waren) oder eine Kombination von zwei oder mehreren dieser Faktoren aktualisieren sollte. In einigen Beispielen kann eine Doorbell-Seite einen Index des letzten Eintrags in der entsprechenden Warteschlange beinhalten. Eine Doorbell-Seite kann einen Wert beinhalten, der angibt, dass eine entsprechende Warteschlange z. b. einen Eintrag hat, und das Gerät 102 überwacht diesen Wert auf Änderungen. Es ist dabei gleichgültig, ob der bestimmte Wert angibt, dass die Doorbell-Seite angeklingelt wurde und die entsprechende Warteschlange bedient werden muss.
  • In einigen Ausführungsformen können ein Hypervisor 106, ein Hypervisorhelfer 118, einen Anwendung oder ein Gerät oder eine andere Anwendung oder ein anderes Gerät auf das Schreiben des Benachrichtigungswertes an die Doorbell-Seiten 112 reagieren oder einige der vorstehend beschriebenen Schritte ausführen. Der Hypervisorhelfer 118 kann ein Unterbrechungssignal an einen Hypervisor, der auf einem anderen Prozessorkern als dem Prozessorkern, auf dem sich die virtuelle Maschine mit der zu verarbeitenden Warteschlange befindet, ausgeführt wird, senden. Der Speicher, der die Doorbell-Seiten 112 beinhaltet, kann zum Hypervisor 106, dem Hypervisorhelfer 118 oder einer anderen Anwendung bzw. einem anderen Gerät gehören.
  • Das Gerät 102 kann einen PC, ein mobiles Kommunikationsgerät, einen Server und andere Geräte beinhalten, die Daten über das Netzwerk 116 senden und empfangen können. Das Netzwerk 116 wie ein lokales Netzwerk (LAN), ein Fernnetz (WAN), das Internet oder eine Kombination davon verbindet das Gerät 102 und eines oder mehrere andere Geräte, die die Prozessor C–D 104c–d beinhalten.
  • Exemplarischer Prozess der Warteschlangenbedienung
  • 2 ist ein Flussdiagramm eines Prozesses 200, bei dem bewirkt wird, dass ein Prozessor eine Warteschlange einer virtuellen Maschine verarbeitet. Der Prozess 200 kann vom Gerät 102 aus der Umgebung 100 beispielsweise verwendet werden, z. B. die Ausführung eines Hypervisors, eines Hypervisorhelfers, einer anderen Anwendung, eines anderen Geräts oder einer beliebigen Kombination davon. In einigen Beispielen kann eine der Anwendungen bestimmte Schritte des Prozesses 200 ausführen, und ein Gerät oder eine andere Anwendung können andere bestimmte Schritte des Prozesses 200 ausführen.
  • Ein erstes Gerät führt multiple virtuelle Maschinen (202) aus. Das erste Gerät kann beispielsweise ein Server oder ein anderes Gerät, das multiple virtuelle Maschinen ausführt, sein. Das erste Gerät kann eine Hypervisoranwendung nutzen, um eine oder mehrere der multiplen virtuellen Maschinen auszuführen.
  • Ein erstes Gerät führt multiple virtuelle Doorbell-Seiten (204) aus. Das erste Gerät kann eine Doorbell-Seite für jede der virtuellen Maschinen oder für jede Warteschlange der virtuellen Maschinen erzeugen. In einigen Beispielen generiert das erste Gerät mehr Doorbell-Seiten als die Anzahl der durch die virtuellen Maschinen verwendeten Warteschlangen, und weist die Doorbell-Seiten automatisch den Warteschlangen der virtuellen Maschinen nach der Ausführung einer neuen virtuellen Maschine oder einer Anforderung für eine neue Warteschlange zu. Ein Hypervisorhelfer kann beispielsweise multiple Doorbell-Seiten erstellen oder die Erstellung multipler Doorbell-Seiten vom Hypervisor anfordern.
  • Das erste Gerät kann jeder der Doorbell-Seiten beim Erzeugen von Doorbell-Seiten eine Adresse zuweisen, z. B. eine Adresse der Doorbell-Seite. In einigen Ausführungsformen kann das erste Gerät eine Tracking-Struktur für alle Doorbell-Seiten erzeugen und den jeweiligen Index aus der Tracking-Struktur für jede der Doorbell-Seiten zuweisen. In einigen Beispielen kann ein Hypervisor die Adressen jeder der Doorbell-Seiten zuweisen und diese Adressen für den Hypervisorhelfer bereitstellen. Der Hypervisorhelfer kann eine Tracking-Struktur verwenden, z. B. im Hypervisorhelfer, um die Doorbell-Seiten zu überwachen.
  • Das erste Gerät generiert optional einen Array, der für jede der Vielzahlen der Doorbell-Seiten einen entsprechenden Eintrag umfasst, der eindeutig einer Doorbell-Seite entspricht und die Warteschlange durch die Doorbell-Seite eindeutig identifiziert (206). Das erste Gerät, z. B. ein Hypervisorhelfer, generiert beispielsweise multiple Bitvektoren, jeweils einen für jeden Prozessor, der die Warteschlangen verarbeiten wird. Jede der Doorbell-Seiten entspricht jeweils einem Eintrag in einem bestimmten Bitvektor und entspricht keinen Einträgen der anderen Bitvektoren. Der Prozessor, der den Bitvektor verwendet, ist in der Lage, diesen einen Eintrag zu nutzen, um die entsprechende Warteschlange zu identifizieren und sie zu bedienen.
  • Das erste Gerät stellt für jede Vielzahl der virtuellen Maschinen einen Zugriff auf die jeweilige Vielzahl von Doorbell-Seiten, die eine Warteschlange mit den Anforderungen der jeweiligen virtuellen Maschine identifiziert, bereit (208). Das erste Gerät liefert beispielsweise für die jeweilige virtuelle Maschine eine Adresse für die jeweilige Doorbell-Seite, z. B. eine Adresse des jeweiligen Indexes für die jeweilige Doorbell-Seite. In einigen Beispielen kann die Doorbell-Seite ein Kopfknoten der jeweiligen Warteschlange sein und das erste Gerät kann die Adresse des Kopfknotens an die jeweilige virtuelle Maschine liefern. In einigen Beispielen kann eine Doorbell-Seite einen Ringpuffer für die jeweilige virtuelle Maschine identifizieren, um Dienstanforderungen zu platzieren, z. B. wenn die Warteschlange der Ringpuffer ist. Eine Hypervisoranwendung kann die Adresse der jeweiligen Doorbell-Seite von einem Hypervisorhelfer empfangen und diese Adresse an die jeweilige virtuelle Maschine senden.
  • Das erste Gerät empfängt ein Update der jeweiligen Warteschlange (210). Die jeweilige virtuelle Maschine platziert beispielsweise eine Serviceanforderung, z. B. Daten in der jeweiligen Warteschlange.
  • Das erste Gerät empfängt von einer bestimmten Vielzahl aus der Vielzahl der Doorbell-Seiten einer Benachrichtigung darüber, dass die jeweilige Warteschlange eine Anforderung von der jeweiligen virtuellen Maschine hat (212). Die jeweilige virtuelle Maschine aktualisiert beispielsweise einen Wert der Doorbell-Seite, z. B. mithilfe eines Verhaltens der Schreibeinstellung für die Doorbell-Seite. Als Reaktion darauf benachrichtigt die Doorbell-Seite das erste Gerät, z. B. einen Hypervisorhelfer, dass der Wert geändert wurde.
  • Das erste Gerät aktualisiert optional den jeweiligen Eintrag im Array, der die jeweilige Warteschlange identifiziert (214). Ein Hypervisorhelfer aktualisiert beispielsweise den jeweiligen Eintrag, z. b. im Bitvektor, auf einen bestimmten Wert, der angibt, dass die jeweilige Warteschlange bedient werden muss. Der bestimmte Wert kann "Eins" sein, wenn "Null" indiziert, dass die jeweilige Warteschlange keinen Service erfordert, und "Eins" indiziert, dass die jeweilige Warteschlange bedient werden muss. In einigen Beispielen kann der bestimmte Wert "Null" oder ein beliebiger anderer entsprechender Wert sein. In einigen Ausführungsformen aktualisiert die Hypervisoranwendung den jeweiligen Eintrag.
  • Das erste Gerät bewirkt, dass ein Prozessor die jeweilige Warteschlange für die jeweilige virtuelle Maschine verarbeitet (216). In einigen Beispielen liefert das erste Gerät, z. B. ein Hypervisorhelfer einen Identifikator für die jeweilige Warteschlange an den Prozessor. Das erste Gerät, z.B. der Hypervisor oder der Hypervisorhelfer liefert beispielsweise den Bitvektor an den Prozessor. Als Reaktion auf den Empfang des Bitvektors verwendet der Prozessor diesen, um zu bestimmen, welche Warteschlangen bedient werden müssen, z. B. Warteschlangen, die mit dem Bitvektor zusammenhängen, und bedient diese Warteschlangen anschließend. In einigen Beispielen sendet das erste Gerät ein Unterbrechungssignal an den Prozessor, z. B. um zu bewirken, dass der Prozessor andere Prozesse beendet, wenn der Prozessor nicht dabei ist, eine Warteschlange zu bedienen. In einigen Ausführungsformen kann ein zweites Gerät den Prozessor beinhalten.
  • Das erste Gerät setzt die Ausführung der jeweiligen virtuellen Maschine fort, während der Prozessor die Anforderung verarbeitet (218). Das erste Gerät kann beispielsweise einen einzelnen Prozessor beinhalten, der die jeweilige virtuelle Maschine ausführt und gleichzeitig die Anforderung verarbeitet. In einigen Beispielen führt ein erster Prozessor die jeweilige virtuelle Maschine aus, während ein zweites Gerät oder ein zweiter Prozessor gleichzeitig die Anforderung verarbeitet.
  • Die Reihenfolge der vorgehend beschriebenen Schritte im Prozess 200 dient nur der Veranschaulichung. Das Veranlassen der Verarbeitung der Warteschlange einer virtuellen Maschine durch den Prozessor kann in unterschiedlichen Schrittabfolgen erfolgen. Das erste Gerät kann beispielsweise die Doorbell-Seiten erzeugen und danach die virtuellen Maschinen ausführen.
  • In einigen Ausführungsformen kann der Prozess 200 zusätzliche Schritte, weniger Schritte oder Schritte, die in multiple Schritte aufgeteilt wurden, beinhalten. Das erste Gerät generiert beispielsweise nicht den Array. In einigen Beispielen kann das erste Gerät die Schritte 208 bis 218 durchführen, und nicht die Schritte 202 bis 206.
  • 3 ist ein Flussdiagramm eines Prozesses 300, bei dem bewirkt wird, dass ein bestimmter Prozessor eine Warteschlange verarbeitet. Der Prozess 300 kann z. B. vom Gerät 102 aus der Umgebung 100 genutzt werden. Das Gerät 102 kann einen Hypervisor oder eine Hypervisor-Hilfsanwendung für einen oder mehrere Schritte des Prozesses 300 ausführen, kann ein Hypervisor-Hilfsgerät beinhalten, welches einen oder mehrere Schritte des Prozesses 300 ausführen, oder eine Kombination der oben genannten Faktoren.
  • Ein Hypervisor empfängt von einer bestimmten Vielzahl der Doorbell-Seiten eine Benachrichtigung, die den Anforderungstyp identifiziert. (302). Jede der Doorbell-Seiten kann eine Konfigurationseinstellung beinhalten, die den Anforderungstyp identifiziert. Dieser Typ kann eine Leseanforderung, eine Schreibeanforderung, eine Anforderung zum Lesen eines bestimmten Speichers, eine Anforderung zum Schreiben in einen bestimmten Speicher oder ein anderer Anforderungstyp sein. In einigen Ausführungsformen kann der Hypervisor ein Verhalten bei der Schreibeinstellung verwenden, um den Typ der Anforderung zu bestimmen.
  • Der Hypervisor bestimmt, dass die Anforderung dem ersten Typ zugehörig ist (304). Der Hypervisor oder eine andere Anwendung, die auf dem Gerät ausgeführt wird, bestimmt beispielsweise den bestimmten Typ der Anforderung, z. B. den ersten Typ, aus den unterschiedlichen Anforderungstypen.
  • Der Hypervisor bestimmt einen bestimmten Prozessor, der Anforderungen des ersten Typs verarbeiten soll (306). Der Hypervisor kann beispielsweise auf dem ersten Prozessor ausgeführt werden und bestimmen, dass ein zweiter Prozessor auf demselben oder einem anderen Gerät die Anforderungen des ersten Typs verarbeiten soll.
  • Der Hypervisor bewirkt, dass ein bestimmter Prozessor die jeweilige Warteschlange für die jeweilige virtuelle Maschine verarbeitet (308). Der Hypervisor liefert beispielsweise eine Nachricht an den bestimmten Prozessor mit der Angabe, welche jeweilige Warteschlange bedient werden muss. In einigen Beispielen kann der Hypervisor einen Bitvektor für einen bestimmten Prozessor bereitstellen, der angibt, dass die jeweilige Warteschlange bedient werden muss.
  • Migration von Anwendungen
  • In einigen Ausführungsformen kann eine Anwendung wie ein Hypervisor oder eine Hilfsanwendung oder ein Gerät den Transfer der Ausführung einer virtuellen Maschine von einem Gerät auf den anderen erleichtern. Die Anwendung kann einen Prozessor beispielsweise darüber benachrichtigen, welche Warteschlangen einer virtuellen Maschine während der Ausführung dieser Maschine auf einem ersten Gerät bedient werden müssen und die Byte-Verunreinigung während der Migration der virtuellen Maschine von dem ersten auf das zweite Gerät überwachen. Die Warteschlangen der virtuellen Maschinen und die Vorgehensweise beim Bedienen der Warteschlangen wurden in den vorgehenden Abschnitten behandelt. Auf Basis dieser Strukturen und derer Prozesse kann ein Helfer 406 für die Anwendungsmigration wie folgt implementiert werden. In einigen Beispielen kann die Anwendung während des Transfers einer Ausführung einer virtuellen Maschine von einem ersten auf ein zweites Gerät einen Prozessor über die in den Speicher zu schreibenden Bytes benachrichtigen, z. B. auf Basis eines Eintrags in einer Warteschlange für die virtuelle Maschine, und die Daten zur Identifizierung der geschriebenen Bytes speichern, sodass diese Bytes und nicht die Seite, die die Bytes enthält, auf das zweite Gerät übertragen werden, z. B. wenn die Seite mit diesen Bytes bereits im Vorfeld auf das zweite Gerät übertragen wurde, jedoch ohne die aktualisierten Bytes. In einigen Ausführungsformen erleichtern unterschiedliche Anwendungen den Transfer der Ausführung einer virtuellen Maschine von einem Gerät auf ein anderes und benachrichtigen einen Prozessor über die Warteschlangen der virtuellen Maschine, die verarbeitet werden müssen.
  • 4 ist ein Blockdiagramm einer exemplarischen Umgebung 400, in der ein Gerät A 402a eine Anwendung 404 auf das Gerät B 402b migriert. Das Gerät A 402a kann beispielsweise die Anwendung 404, z. B. eine virtuelle Maschine ausführen. Zum Zeitpunkt TA, kann das Gerät A 402a bestimmen, dass die Anwendung 404 auf das Gerät B 402b migriert werden soll. Das Gerät A 402a kann diesen Beschluss aufgrund des Empfangs einer Nachricht von einem anderen Gerät mit der Angabe, dass die Anwendung 404 verschoben werden sollte, treffen. Das Gerät A 402a kann diesen Beschluss aufgrund der Leistung der Anwendung 404 oder einer anderen Anwendung, die auf dem Gerät A 402a ausgeführt wird, treffen. Wenn die Anwendung 404 oder eine andere Anwendung beispielsweise die minimalen Leistungsanforderungen nicht erfüllt, kann das Gerät A 402a beschließen, die Anwendung 404 auf das Gerät B 402b zu verschieben.
  • Das Gerät A 402a kopiert Daten für die Ausführung der Anwendung 404 auf dem Gerät B 402b. Das Gerät A 402a kann beispielsweise auf einen Speicher A 408a zugreifen und Kopien einer oder mehrerer Seiten A–B 410a–b mit Daten für die Anwendung 404 aus dem Speicher A 408a für das Gerät B 402b bereitstellen. Das Gerät B 402b kann die Datenseiten A–B 410a–b in einem Speicher B 408b des Geräts B 402b speichern.
  • Das Gerät A 402a erstellt zum Zeitpunkt TB, eine Zuordnung der Seiten im Speicher A 408a für einen Helfer 406, z. B. in einer Seitenzuordnung. Der Helfer 406 kann eine Anwendung oder ein Gerät sein, z. B. eine Komponente des Geräts A 402a. Während des Ausführung der Anwendung 404 erstellt das Gerät A 402a beispielsweise eine Zuordnung der Seiten A–B 410a–b für die Anwendung 404. Beim Kopieren der Seiten A–B 410a–b auf das Gerät B 402b oder unmittelbar davor ändert das Gerät 402a die Seitenzuordnung, sodass die Seiten A–B 410a–b dem Helfer 406 zugeordnet werden, damit dieser die granulare Verunreinigung in den Seiten A–B 410a–b während des Migrationsvorgangs überwachen kann. In einigen Beispielen benachrichtigt der Helfer 406 einen Hypervisor darüber, dass die Seitenzuordnung aktualisiert werden muss. In einigen Ausführungsformen ist der Helfer 406 ein Hypervisorhelfer oder ein Hypervisor.
  • Während das Gerät A 402a Daten für die Ausführung der Anwendung 404 auf das Gerät B 402b kopiert, setzt das Gerät A 402a die Ausführung der Anwendung 404 fort. Während der Ausführung der Anwendung 404, zum Zeitpunkt Tc bestimmt die Anwendung 404 die in die Seite A 410a zu schreibenden Bytes.
  • Zum Zeitpunkt TD, bestimmt das Gerät 402a mithilfe eines Speicher-Mappings, das angibt, welche Seiten welchen Anwendungen zugewiesen wurden, dass die Seite A 410a dem Helfer 406 zugeordnet ist, z. B. der Helfer 406 kann die Seite A 410a bearbeiten und die Anwendung 404 kann die Seite A 410a nicht bearbeiten. Das Gerät 402a empfängt die Bytes der Anwendung 404 und liefert die in die Seite A 410a zu schreibenden Bytes an den Helfer 406.
  • Der Helfer 406 schreibt zum Zeitpunkt TE die Bytes in die Seite A 410a im Speicher A 408a und aktualisiert zum Zeitpunkt TF, das Dirty-Mapping 412, z. B. die Metadaten für die Seiten, die die in die Seite A 410a geschriebenen Bytes angeben. Die zeitliche Planung TE und TF kann in einer beliebigen Reihenfolge sein. Der Helfer 406 kann das Dirty-Mapping 412 aktualisieren und dann die Bytes in die Seite A 410a schreiben, beide Aktionen gleichzeitig ausführen, oder erst die Bytes schreiben und dann das Dirty-Mapping 412 aktualisieren.
  • In einigen Ausführungsformen weist der Helfer 406 eine neue Seite zum Schreiben von Bytes zu, z. B. eine neue Seite im Speicher A 408a. Der Helfer 406 kann eine neue Seite aus dem Pufferpool zuweisen und die Bytes in die neue Seite schreiben. Der Helfer 406 aktualisiert dann die Zuordnung der Seiten, damit die Anforderungen für den Lese- und Schreibzugriff für die Seite A 410a zur neu zugewiesenen Seite statt der Seite A 410a geleitet werden. In einigen Beispielen benachrichtigt der Helfer 406 einen Hypervisor darüber, dass die Seitenzuordnung aktualisiert werden muss. Der Helfer 406 kann die neue Seite zuweisen, damit das Gerät A 402a das Kopieren der Seiten A–B 410a–b vom Gerät A 402a auf das Gerät B 402b fortsetzen kann, d.h. ohne eine Unterbrechung aufgrund neu geschriebener Bytes.
  • Wenn die Anwendung 404 Daten für einen Lesevorgang anfordert, empfängt der Helfer 406 eine Benachrichtigung über die Leseanforderung. Der Helfer 406 verwendet die Seitenzuordnung, um die angeforderten Daten zu bestimmen und liefert diese Daten anschließend an die Anwendung 404. Der Helfer 406 kann beispielsweise einen bekannten Konstantenwert zurückgeben, z. B. diese Seite beinhaltet alle Nullen, Werte einer freigegebenen Copy-on-Write-Seite, z. B. das Gerät 402a kann nur eine Kopie der Seite speichern, bis das Gerät 402a ein Schreibereignis empfängt, in diesem Moment macht das Gerät 402a eine Kopie der Seite und aktualisiert die Seite mit den neuen Bytes, oder dekomprimiert komprimierte Daten und liefert die dekomprimierten Daten an die Anwendung 404. Während einer Leseanforderung kann der Helfer 406 auf eine der Seiten A–B 410a–b zugreifen, wenn diese Seiten keine Aktualisierungen also neu geschriebene Bytes haben. Während einer Leseanforderung kann der Helfer 406 auf eine oder mehrere zugewiesene Seiten zugreifen, z. B. wenn die entsprechenden Seiten aktualisierte Bytes haben.
  • Das Gerät A 402a hält die Ausführung der Anwendung 404 zum Zeitpunkt TG an. Das Gerät A 402a kann das Kopieren der Daten für die Ausführung der Anwendung 404 mit Ausnahme der Dirty Bytes auf das Gerät B 402b abschließen, und dann die Ausführung der Anwendung 404 anhalten. Das Gerät A 402a kann die Ausführung der Anwendung 404 anhalten als Reaktion auf das Bestimmen, dass das Gerät A 402a das Kopieren der Daten für die Ausführung der Anwendung 404 auf das Gerät B 402b nicht fortsetzen kann, ohne dass einige der noch zu kopierenden Daten noch geschrieben und somit verunreinigt werden.
  • Das Gerät A 402a oder der Helfer 406 kopiert die Dirty Bytes für die Anwendung 404 auf das Gerät B 402b zum Zeitpunkt TH. Der Helfer 406 nutzt das Dirty-Mapping 412, um zu bestimmen, welche Bytes seit der Bereitstellung der Kopien der entsprechenden Seiten an das Gerät B 402b aktualisiert wurden, und liefert diese Bytes an das Gerät B 402b.
  • Das Gerät B 402b verwendet die Dirty Bytes, um die Kopien im Speicher B 408b zu aktualisieren. Zum Zeitpunkt Ti initiiert das Gerät B 402b die Ausführung der Anwendung 404b.
  • Nach der Übertragung der Dirty Bytes auf das Gerät B 402b kann das Gerät A 402a alle Daten für die Anwendung 404 aus dem Speicher A 408a löschen. Das Gerät A 402a kann beispielsweise bestimmen, welche Daten für die Anwendung 404 nicht für die Ausführung einer anderen Anwendung verwendet werden, und löscht diese Daten aus dem Speicher A 408a.
  • Die Geräte 402a–b kann PCs, mobile Kommunikationsgeräte, Server und andere Geräte beinhalten, die Daten über das Netzwerk senden und empfangen können. Das Netzwerk wie ein lokales Netzwerk (LAN), ein Fernnetz (WAN), das Internet oder eine Kombination davon verbindet die Geräte 402a–b und möglicherweise andere Geräte (nicht abgebildet).
  • In einigen Ausführungsformen beinhaltet der Helfer 406 eine Liste mit multiplen Dirty Bytes-Datenblöcken im Dirty-Mapping 412. Der Helfer 406 kann eine Granularität, z. B Zwei- oder Vier-Byte-Datenblöcke, zum Schreiben in eine der Seiten für die Anwendung 404 bestimmen und dementsprechend das Dirty-Mapping 412 aktualisieren.
  • Exemplarischer Migrationsvorgang einer Anwendung
  • 5 ist ein Flussdiagramm eines Transfervorgangs 500 einer Anwendung von einem ersten Gerät auf ein zweites Gerät. Der Prozess 500 kann z. B. vom Gerät A 402a aus der Umgebung 400 genutzt werden.
  • Ein erstes Gerät führt eine Anwendung auf einem ersten Gerät einschließlich dem Speichern der Datenseiten für die Anwendung in einem Speicher des ersten Geräts aus (502). Die Datenseiten können Anweisungen für die Anwendung, Daten für die Anweisungen für die Anwendung oder beides enthalten. Die Anwendung kann eine virtuelle Maschine oder ein anderer Typ der Anwendung sein, die von einem Gerät zum anderen migriert werden kann.
  • Das erste Gerät erstellt ein Mapping für die Anwendung zum Identifizieren von Positionen der Datenseiten im Speicher (504). Das erste Gerät erstellt beispielsweise ein Seiten-Mapping, welches anzeigt, dass die Datenseiten zur Anwendung gehören.
  • Das erste Gerät initiiert einen Migrationsvorgang, um eine Anwendung vom ersten Gerät auf ein zweites Gerät zu verschieben, indem Datenseiten vom ersten Gerät auf das zweite Gerät kopiert werden, während die Anwendung weiterhin auf dem ersten Gerät ausgeführt wird (506). Das erste Gerät bestimmt beispielsweise, dass das erste Gerät heruntergefahren oder neugestartet werden muss und initiiert den Migrationsvorgang.
  • Das erste Gerät weist mindestens eine Datenseite einem Helfer zu (508). Das erste Gerät weist beispielsweise alle Datenseiten einer Hilfsanwendung oder einem Hilfsgerät zu. In einigen Beispielen kann das erste Gerät einige der Datenseiten dem Helfer zuweisen, z. B. Datenseiten, die verarbeitet werden müssen, jedoch keine Seiten, die nur Anweisungen beinhalten. In einigen Beispielen kann das erste Gerät die Seiten dem Helfer dynamisch zuweisen, wenn die Anwendung versucht, in die Seiten zu schreiben. Das erste Gerät kann die Seiten dem Helfer zuweisen, indem es das Seiten-Mapping aktualisiert, z. B. um anzugeben, dass die Seiten dem Helfer gehören.
  • Das erste Gerät empfängt eine Zugriffsanforderung für den Speicher von der Anwendung (510). Es kann sich hierbei um eine Lese- oder Schreibeanforderung handeln. Das erste Gerät kann den Anforderungstyp bestimmen, z. B. ob die Anforderung eine Lese- oder Schreibeanforderung ist.
  • Das erste Gerät bestimmt, dass die Zugriffsanforderung für den Speicher eine Schreibeanforderung ist (512). Das erste Gerät aktualisieren einen oder mehrere Bytes in mindestens einer der Datenseiten (514). Der Helfer empfängt beispielsweise die Bytes von der Anwendung und aktualisiert sie im Speicher. Der Helfer kann eine Kopie einer Seite, in die die Bytes geschrieben werden sollen, machen und die Bytes in dieser Kopie aktualisieren, z. B. eine neu zugewiesene Seite, und die Kopie dieser Seite für weitere Lese- und Schreibeanforderungen für diese Seite verwenden.
  • Das erste Gerät speichert die Daten, die die aktualisierten Bytes identifizieren (516). Der Helfer speichert beispielsweise die Daten, die die aktualisierten Bytes identifizieren. Die Daten können eine bestimmte Seite identifizieren, in der die Bytes gespeichert werden, sowie die bestimmte Position innerhalb der Seite mit den Bytes. Der Helfer kann das Dirty-Mapping aktualisieren, um anzugeben, dass die Bytes überschrieben wurden. Das Dirty-Mapping kann für einzelne Bytes oder Bytegruppen z. B. einen Block von 64 Bytes gelten. Jede angemessene Granularität, die kleiner als die Anzahl der Bytes in einer einzelnen Seite ist, kann verwendet werden.
  • In einigen Ausführungsformen können die Daten zur Identifizierung der aktualisierten Bytes eine Liste mit Adressen für die überschriebenen Bytes bilden. Das Dirty-Mapping kann beispielsweise ein Protokoll der überschriebenen Bytes sein. Die Liste kann die Adressen in zeitlicher Reihenfolge beinhalten, in der die Bytes geschrieben wurden. In einigen Beispielen kann die Liste in nummerischer Abfolge der Adressen gestaltet sein.
  • In einigen Beispielen können die Daten zur Identifizierung der aktualisierten Bytes ein Bitvektor mit einer konfigurierbaren Granularität sein. Jedes Bit im Bitvektor kann beispielsweise vierundsechzig Speicherbytes repräsentieren, und wenn eines der entsprechenden Bytes überschrieben wird, wird der Eintrag im Bitvektor aktualisiert. Der Bitvektor kann Einträge für alle Bytes im Gastspeicher, z. B. für eine bestimmte Anwendung beinhalten.
  • In einigen Ausführungsformen kann das erste Gerät eine Schattenstruktur verwenden, die einem Datenlayout einer erweiterten Seitentabelle (EPT) folgt. Das erste Gerät kann 4 KB einem EPT-Blattknoten und die benachbarten 4 KB im Speicher dem Bitvektor, der die Dirty Bytes für die Speicherpositionen, die durch den EPT-Blattknoten identifiziert werden, so zuweisen, dass jedes Bit im Bitvektor 64 Speicherbytes repräsentiert.
  • Das erste Gerät stoppt die Ausführung der Anwendung auf dem ersten Gerät (518). Das erste Gerät stoppt die Ausführung der Anwendung und leitet alle Anforderungen für die Anwendung an das zweite Gerät weiter, sodass das zweite Gerät die Anforderungen an die Anwendung bereitstellen kann, wenn die Anwendung auf dem zweiten Gerät ausgeführt wird.
  • Das erste Gerät identifiziert die aktualisierten Bytes mithilfe der Daten zur Identifizierung der aktualisierten Bytes (520). Der Helfer kann das Dirty-Mapping verwenden, um die aktualisierten Bytes zu identifizieren und optional die Seiten, in denen die aktualisierten Bytes gespeichert werden.
  • Das erste Gerät kopiert die aktualisierten Bytes von dem ersten Gerät auf das zweite Gerät, damit das zweite Gerät die Ausführung der Anwendung fortsetzen kann (522). Das erste Gerät kann Kopien der aktualisierten Bytes an das zweite Gerät senden. Das erste Gerät kann nach Abschluss des Kopiervorgangs eine Nachricht an das zweite Gerät mit Informationen darüber senden, dass das zweite Gerät die Anwendung ausführen soll. In einigen Ausführungsformen sendet das erste Gerät nur Kopien von den aktualisierten Bytes an das zweite Gerät. In einigen Beispielen sendet das erste Gerät eine Kopie eines Byte-Blocks an das zweite Gerät, z. B. eines 64-Byte-Blocks, je nach der Granularität der Daten zur Identifizierung der aktualisierten Bytes, z. B. das Dirty-Mapping. Wenn das Dirty-Mapping indiziert, dass eines der 64 Bytes in einem bestimmten 64-Byte-Block überschrieben wurde, sendet das erste Gerät eine Kopie des bestimmten Blocks mit Bytes an das zweite Gerät.
  • In einigen Ausführungsformen kann der Prozess 500 zusätzliche Schritte, weniger Schritte oder Schritte, die in multiple Schritte aufgeteilt wurden, beinhalten. Das erste Gerät kann beispielsweise die Schritte 506 bis 522 durchführen, und nicht die Schritte 502 bis 504. In einigen Beispielen kann das erste Gerät oder der Helfer eine Leseanforderung von der Anwendung während des Migrationsvorgangs erhalten und der Anwendung die angeforderten Daten liefern.
  • Optionale Ausführungsdetails
  • In einigen Ausführungsformen kann der Helfer eine Hardware-Komponente in einer mit PCIe verbundenen anwendungsspezifischen integrierten Schaltung (ASIC) oder einem Field Programmable Gate Array (FPGA) sein. Die Implementierung des Helfers in einem mit PCIe verbundenen Gerät kann es den bestehenden Systemen beispielsweise ermöglichen, den Helfer zu verwenden, ohne Änderungen an der physischen Hardware des Systems vorzunehmen.
  • In einigen Ausführungsformen kann der Helfer ein System-on-a-Chip sein (SoC). Der Helfer kann beispielsweise ein CPU-Chip mit SoC-Funktion sein. Der CPU-Chip mit SoC-Funktion kann entweder über PCIe, ein kohärentes On-Die-Fabric oder ein kohärentes Off-Chip-Fabric, z. B. über einen Intel® QuickPath Interconnect (QPI) oder ein ARM® Advanced Extended Interface(AXI)-Bus, angeschlossen werden. In einigen Ausführungsformen kann der Helfer in einem Off-Socket-Chip mittels eines QPI- oder eines AXI-Busses angeschlossen werden.
  • Wenn der Helfer in der Hardware implementiert ist, ist er in der Lage, in den Speicher zu schreiben, z. B. in den Cache oder den CPU-Speicher, und Unterbrechungssignale zu senden. Der Helfer kann in der Lage sein, auf eine große Anzahl von Doorbell-Anforderungen pro Sekunde, z. B. fünf Millionen Doorbell-Anforderungen pro Sekunde, zu reagieren.
  • Zusätzliche Informationen zu Ausführungsformen
  • Ausführungsformen des Gegenstands und die in dieser Spezifikation beschriebenen Tätigkeiten können in digitalen elektronischen Schaltungen oder in Computer-Software, Firmware oder in Computer-Hardware implementiert werden, einschließlich der in dieser Spezifikation offen gelegten Strukturen und ihrer strukturellen Entsprechungen oder in Kombinationen von einer oder mehreren 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 materiellen, nicht-flüchtigen Programmträger für die Durchführung durch oder die Kontrolle des Betriebs des datenverarbeitenden Apparats kodiert werden. Alternativ oder ergänzend dazu können die Programmbefehle auf einem künstlich erzeugten sich ausbreitendem Signal, wie beispielsweise einem maschinenerzeugten elektrischen, optischen oder elektromagnetischen Signal kodiert werden, welches erzeugt wird, um Informationen zur Übertragung an ein geeignetes Empfängergerät zu kodieren, welche dann von einem Datenverarbeitungsgerät ausgeführt werden. 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.
  • Der Begriff "datenverarbeitender Apparat" bezieht sich auf datenverarbeitende Hardware und umfasst alle Arten von Apparaten, Geräten und Maschinen für die Verarbeitung von Daten, einschließlich beispielsweise durch einen programmierbaren Prozessor, einen Computer oder multiple Prozessoren und Computer. Bei dem Apparat kann es sich auch um eine Sonderzweckschaltung handeln bzw. eine solche ferner beinhalten, z. B. einen FPGA (Field Programmable Gate Array) oder eine ASIC (anwendungsspezifische integrierte Schaltung). Der Apparat kann als Option neben der Hardware auch einen Code einschließen, der eine Ausführungsumgebung für das betreffende Computerprogramm erstellt, z. B. einen Code, der Prozessor-Firmware, einen Protokollstapel, ein Datenbank-Managementsystem, ein Betriebssystem oder eine Kombination einer oder mehrerer der genannten darstellt.
  • 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 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 Computern 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 ein oder mehrere Computerprogramme, die eine oder mehrere Funktionen 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).
  • Computer, die für die Ausführung eines Computerprogramms geeignet sind, beinhalten beispielsweise sowohl allgemeine und als auch Spezial-Mikroprozessoren sowie alle Arten einer zentralen Recheneinheit. Ganz allgemein empfängt eine CPU Anweisungen und Daten von einem Festwertspeicher oder einem Arbeitsspeicher oder von beiden. Die wesentlichen Elemente eines Computers sind eine CPU für das Ausführen von Anweisungen und ein oder mehrere Speichergeräte für das Speichern von Anweisungen und Daten. Ganz allgemein gehören zu einem Computer auch ein oder mehrere Massenspeichergeräte für das Speichern von Daten, z. B. Magnet-, magneto-optische 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 Personal Digital Assistant (PDA), einem mobilen Audio- oder Videoplayer, einer Spielkonsole, einem Funknavigationsempfänger (GPS) oder einem tragbaren Speichergerät (z. B. in einem USB-Stick), um nur einige zu nennen.
  • Computerlesbare Medien, die für das Speichern von Computerprogrammanweisungen und -daten geeignet sind, schließen alle Formen von Permanentspeichern, Medien- und Speichergeräten ein, einschließlich beispielsweise Halbleiter-Speichergeräte, z. B. EPROM, EEPROM und USB-Flash-Speicher; Magnetdisketten, z. B. interne Festplatten oder herausnehmbare Disketten; magnetooptische Disketten; und CD-ROMs und DVD-ROMs. Der Prozessor und der Speicher können durch logische Sonderzweckschaltungen ergänzt werden oder darin eingebaut sein.
  • Zur Interaktion mit einem Benutzer können die in dieser Spezifikation beschriebenen Ausführungsformen des Gegenstandes auf einem Computer mit einem Anzeigegerät (z. B. ein CRT-[Kathodenstrahlröhre] oder ein LCD-[Flüssigkristallanzeige]Monitor) implementiert werden, um Informationen für den Benutzer anzuzeigen, und eine Tastatur und ein Pointergerät (z. B. Maus oder 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 eine beliebige Form von sensorischer Rückkopplung annehmen, 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. Zusätzlich kann ein Computer mit einem Benutzer durch das Senden und Empfangen von Dokumenten von einem Gerät, das von einem Benutzer verwendet wird, interagieren; so zum Beispiel durch senden von Webseiten an einen Webbrowser durch ein Benutzergerät als Antwort auf Anforderungen des Webbrowsers.
  • Die in dieser Spezifikation beschriebenen Ausführungsformen des Gegenstands können in einem Computersystem implementiert werden, das eine Back-End-Komponente beinhaltet (z. B. als Datenserver), oder das eine Middleware-Komponente beinhaltet (z. B. einen Anwendungsserver), oder das eine Front-End-Komponente beinhaltet (z. B. ein Client-Computer mit einer grafischen Benutzeroberfläche oder einem Webbrowser, über welche ein Benutzer mit einer Implementierung der hier beschriebenen Ausführungsformen des Gegenstands) oder Kombination derartiger Back-End-, Middleware- und Front-End-Komponenten. Die Komponenten des Systems können durch eine beliebige Form oder ein beliebiges Medium digitaler Datenkommunikation miteinander verbunden sein, z. B. ein Kommunikationsnetz. Beispiele von Kommunikationsnetzwerken beinhalten ein lokales Netzwerk („LAN“) und ein Fernnetz („WAN“), z. B. das Internet.
  • 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 manchen Ausführungen überträgt ein Server Daten (z. B. eine HTML Seite) an ein Benutzergerät, z. B. mit dem Zweck, Daten anzuzeigen und Benutzereingaben von einem Benutzer, der mit dem Benutzergerät interagiert, zu erhalten. Daten, die am Benutzergerät erzeugt werden (z. B. das Resultat einer Interaktion mit einem Benutzer) können vom Benutzergerät am Server erhalten werden.
  • Ein Beispiel eines solchen Computertyps ist in 6 dargestellt, in Form eines schematischen Diagramms eines generischen Computersystems 600. Das System 600 kann für die Operationen verwendet werden, die im Zusammenhang mit vorstehend beschriebenen, beliebigen computerimplementierten Verfahren beschrieben wurden, nach einem Verfahren. Das System 600 beinhaltet einen Prozessor 610, einen Speicher 620, ein Speichergerät 630 und ein Eingabe-/Ausgabe-Gerät 640. Jede der Komponenten 610, 620, 630 und 640 sind über einen Systembus 650 zusammengeschaltet. Der Prozessor 610 ist in der Lage, Anweisungen für die Ausführung innerhalb des Systems 600 zu verarbeiten. In einer Ausführungsform ist der Prozessor 610 ein Prozessor mit einem Thread. In einer Ausführungsform ist der Prozessor 610 ein Prozessor mit multiplen Threads. Der Prozessor 610 ist in der Lage, Anweisungen aus dem Speicher 620 oder von dem Speichergerät 630 zu verarbeiten, um grafische Informationen für eine Benutzeroberfläche auf dem Eingabe-/Ausgabe-Gerät 640 anzuzeigen.
  • Der Speicher 620 zeichnet Informationen im System 600 auf. In einer Ausführungsform ist der Speicher 620 ein computerlesbares Medium. In einer Ausführungsform ist der Speicher 620 eine flüchtige Speichereinheit. In einer anderen Ausführungsform ist der Speicher 620 eine nicht flüchtige Speichereinheit.
  • Das Speichergerät 630 ist geeignet, Massenspeicherung für das System 600 bereitzustellen. In einer Ausführungsform ist der Speicher 630 ein computerlesbares Medium. In unterschiedlichen Ausführungsformen kann das Speichergerät 630 ein Floppy-Laufwerk, ein Festplattenlaufwerk, ein optisches Laufwerk oder ein Bandgerät sein.
  • Das Eingabe-/Ausgabe-Gerät 640 liefert Eingabe-/Ausgabeoperationen für das System 600. In einer Ausführungsform kann das Eingabe-/Ausgabe-Gerät 640 eine Tastatur und / oder ein Zeigegerät beinhalten. In einer anderen Ausführungsform kann das Eingabe-/Ausgabe-Gerät 640 eine Anzeigeeinheit für die Anzeige von grafischen Benutzeroberflächen beinhalten.
  • 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. 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 Anforderung verstanden werden, dass solche Tätigkeiten in der bestimmten gezeigten Reihenfolge oder in einer aufeinander folgenden 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 Systemmodule und -komponenten in den oben beschriebenen Ausführungsformen nicht als 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.
  • Bestimmte Ausführungsformen des Gegenstands wurden beschrieben. Weitere Ausführungsformen gehören zum Umfang der folgenden Ansprüche. Die in den Ansprüchen ausgeführten Vorgänge können beispielsweise in einer anderen Reihenfolge ausgeführt werden und dennoch gewünschte Ergebnisse erzielen. Die in den beigefügten Abbildungen dargestellten Verfahren erfordern beispielsweise nicht notwendigerweise die gezeigte Reihenfolge oder sequentielle Reihenfolge, um erwünschte Ergebnisse zu erzielen. Unter bestimmten Umständen können Multitasking und eine Parallelbearbeitung vorteilhaft sein.

Claims (29)

  1. Computerimplementiertes Verfahren, umfassend: Erzeugen einer Vielzahl von Doorbell-Seiten für eine Vielzahl von auf einem Gerät ausgeführten virtuellen Maschinen; Bereitstellen für jede Vielzahl virtueller Maschinen eines Zugriffs auf eine jeweilige der Vielzahl von Doorbell-Seiten, die eine Warteschlange identifiziert, die Anforderungen der jeweiligen virtuellen Maschine speichert; Empfangen von einer spezifischen der Vielzahl der Doorbell-Seiten einer Benachrichtigung darüber, dass die jeweilige Warteschlange eine Anforderung von der jeweiligen virtuellen Maschine hat, und Bewirken, dass ein Prozessor die jeweilige Warteschlange für die jeweilige virtuelle Maschine verarbeitet, als Reaktion auf den Empfang der Benachrichtigung, dass die jeweilige Warteschlange eine Anforderung von der jeweiligen virtuellen Maschine hat.
  2. Verfahren nach Anspruch 1, umfassend: Fortsetzen der Ausführung der jeweiligen virtuellen Maschine, während der Prozessor die Anforderung verarbeitet.
  3. Verfahren nach Anspruch 1, umfassend: Empfangen eines Updates der jeweiligen Warteschlange, im Vorfeld der Benachrichtigung darüber, dass die jeweilige Warteschlange eine Anforderung der jeweiligen virtuellen Maschine empfangen hat.
  4. Verfahren nach Anspruch 1, umfassend: Erzeugen eines Arrays, der für jede der Vielzahlen der Doorbell-Seiten einen entsprechenden Eintrag umfasst, der eindeutig der Doorbell-Seite entspricht und die Warteschlange durch die Doorbell-Seite eindeutig identifiziert; und als Reaktion auf den Empfang der Benachrichtigung, dass die jeweilige Warteschlange eine Anforderung von der jeweiligen virtuellen Maschine hat, Aktualisieren des jeweiligen Eintrags im Array, der die jeweilige Warteschlange identifiziert, worin das Bewirken, dass der Prozessor die jeweilige Warteschlange für die jeweilige virtuelle Maschine verarbeitet, ein Bereitstellen des Arrays an den Prozessor umfasst, um zu bewirken, dass der Prozessor die jeweilige Warteschlange für die jeweilige virtuelle Maschine verarbeitet.
  5. Verfahren nach Anspruch 4, worin: ein Erzeugen des Arrays, der für jede der Vielzahl von Doorbell-Seiten einen jeweiligen Eintrag beinhaltet, der der Doorbell-Seite eindeutig entspricht und die Warteschlange, die durch die Doorbell-Seite identifiziert wird, eindeutig identifiziert, das Erzeugen eines Bitvektors beinhaltet, welcher für jede der Vielzahlen von Doorbell-Seiten einen jeweiligen Eintrag beinhaltet, der der Doorbell-Seite eindeutig entspricht und die Warteschlange, die durch die Doorbell-Seite identifiziert wird, eindeutig identifiziert; ein Aktualisieren des jeweiligen Eintrags im Array, der die jeweilige Warteschlange identifiziert, das Aktualisieren des jeweiligen Eintrags im Bitvektor, der die jeweilige Warteschlange identifiziert, umfasst, und ein Bereitstellen des Arrays für den Prozessor, um zu bewirken, dass der Prozessor die jeweilige Warteschlange der jeweiligen virtuellen Maschine verarbeitet, das Bereitstellen des Bitvektors für den Prozessor, um die jeweilige Warteschlange der jeweiligen virtuellen Maschine durch diesen Prozessor zu verarbeiten, umfasst.
  6. Verfahren nach Anspruch 4, wobei ein Bereitstellen des Arrays für den Prozessor, um zu bewirken, dass der Prozessor die jeweilige Warteschlange der jeweiligen virtuellen Maschine verarbeitet, das Bereitstellen des Arrays für den Prozessor, um multiple Warteschlange für die Vielzahl von virtuellen Maschinen durch diesen Prozessor zu verarbeiten, beinhaltet.
  7. Verfahren nach Anspruch 1, wobei ein Auslösen der Verarbeitung der jeweiligen Warteschlange für die jeweilige virtuelle Maschine durch den Prozessor das Senden eines Unterbrechungssignals an den Prozessor beinhaltet.
  8. Verfahren nach Anspruch 1, wobei ein Bereitstellen für jede der Vielzahl von virtuellen Maschinen des Zugriffs auf die jeweilige Vielzahl von Doorbell-Seiten, die die Warteschlange mit den gespeicherten Anforderungen für die jeweilige virtuelle Maschine identifiziert, ein Bereitstellen für jede der Vielzahl von virtuellen Maschinen des Zugriffs auf die jeweilige Vielzahl von Doorbell-Seiten, die einen Kopfknoten der jeweiligen Warteschlange beinhaltet, umfasst.
  9. Verfahren nach Anspruch 1, wobei ein Bereitstellen für jede der Vielzahl von virtuellen Maschinen des Zugriffs auf die jeweilige Vielzahl von Doorbell-Seiten, die die Warteschlange mit den gespeicherten Anforderungen für die jeweilige virtuelle Maschine identifiziert, ein Bereitstellen für die Vielzahl von virtuellen Maschinen des Zugriffs auf die jeweilige Vielzahl von Doorbell-Seiten, die einen Ringpuffer mit den gespeicherten Anforderungen von der jeweiligen virtuellen Maschine identifiziert, beinhaltet, umfasst.
  10. Verfahren nach Anspruch 1, worin: ein Erzeugen einer Vielzahl von Doorbell-Seiten ein Zuweisen der jeweiligen Adresse jeder der Vielzahl von Doorbell-Seiten umfasst; und ein Bereitstellen für jede der Vielzahl von virtuellen Maschinen des Zugriffs auf die jeweilige Vielzahl von Doorbell-Seiten, die die Warteschlange mit den gespeicherten Anforderungen für die jeweilige virtuelle Maschine identifiziert, ein Bereitstellen für jede aus der Vielzahl von virtuellen Maschinen einer Adresse für die jeweilige virtuelle Maschine umfasst.
  11. Verfahren nach Anspruch 1, worin: ein Erzeugen einer Vielzahl von Doorbell-Seiten ein Erzeugen einer Tracking-Struktur und Zuweisen des jeweiligen Indexes aus der Tracking-Struktur jeder der Vielzahl von Doorbell-Seiten umfasst; und ein Bereitstellen für jede der Vielzahl von virtuellen Maschinen des Zugriffs auf die jeweilige Vielzahl von Doorbell-Seiten, die die Warteschlange mit den gespeicherten Anforderungen für die jeweilige virtuelle Maschine identifiziert, ein Bereitstellen für jede der Vielzahl von virtuellen Maschinen einer Adresse für den jeweiligen Index an die jeweilige virtuelle Maschine umfasst.
  12. Verfahren nach Anspruch 1, worin: ein Erzeugen der Vielzahl von Doorbell-Seiten umfasst: Erzeugen einer Seite für jede der Vielzahl von Doorbell-Seiten, und das Zuweisen für jede aus der Vielzahl von Doorbell-Seiten eines Non-Zero-Offsets, bei welchem die jeweilige aus der Vielzahl von Doorbell-Seiten sich innerhalb der jeweiligen Seite befindet, und ein Bereitstellen für jede der Vielzahl von virtuellen Maschinen des Zugriffs auf die jeweilige der Vielzahl von Doorbell-Seiten, die die Warteschlange mit den gespeicherten Anforderungen für die jeweilige virtuelle Maschine identifiziert, ein Bereitstellen für jede aus der Vielzahl von virtuellen Maschinen einer Adresse für die jeweilige Seite und einen Non-Zero-Offset für die jeweilige virtuelle Maschine umfasst.
  13. Verfahren nach Anspruch 1, umfassend: Erzeugen einer zweiten Vielzahl von Doorbell-Seiten, und Bereitstellen für jede von zumindest einigen der Vielzahl von virtuellen Maschinen des Zugriffs auf die jeweilige der Vielzahlen von Doorbell-Seiten, die eine zweite Warteschlange mit zweiten Anforderungen der jeweiligen virtuellen Maschine identifiziert, wobei der erste Typ der Anforderungen sich von dem zweiten Anforderungstyp unterscheidet, worin: ein Empfangen durch eine bestimmte Vielzahl der Doorbell-Seiten einer Benachrichtigung darüber, dass die jeweilige Warteschlange eine Anforderung von der jeweiligen virtuellen Maschine erhalten hat, ein Empfangen einer Benachrichtigung beinhaltet, die den Anforderungstyp identifiziert, durch eine Vielzahl der Doorbell-Seiten, und das Bewirken, dass die jeweilige Warteschlange für die jeweilige virtuelle Maschine von dem Prozessor verarbeitet wird, umfasst: Bestimmen, dass der Anforderungstyp den ersten Typ umfasst; Bestimmen eines bestimmten Prozesses, der die Anforderungen des ersten Typs verarbeitet; und Bewirken, dass ein bestimmter Prozessor die jeweilige Warteschlange für die jeweilige virtuelle Maschine verarbeitet.
  14. Verfahren nach Anspruch 13, umfassend: ein Ausführen der Vielzahl von virtuellen Maschinen auf dem ersten Prozessor des Geräts, um zu bewirken, dass der bestimmte Prozessor die jeweilige Warteschlange der jeweiligen virtuellen Maschine verarbeitet, umfasst ein Bereitstellen einer Nachricht für einen auf dem zweiten Prozessor ausgeführten Hypervisor, um die jeweilige Warteschlange der jeweiligen virtuellen Maschine durch diesen zweiten Prozessor zu verarbeiten.
  15. Verfahren nach Anspruch 14, worin ein Bereitstellen einer Nachricht an den auf dem zweiten Prozessor ausgeführten Hypervisor die Nachricht an den auf dem zweiten Prozessor eines anderen zweiten Geräts ausgeführten Hypervisor beinhaltet.
  16. Ein nichtflüchtiges computerlesbares Speichermedium, das Anweisungen speichert, welche von einem datenverarbeitenden Apparat ausführbar sind und der bei dieser Ausführung bewirkt, dass der datenverarbeitende Apparat Operationen ausführt, umfassend: Initiieren eines Migrationsvorgangs, um eine auf einem ersten Gerät ausgeführte Anwendung von dem ersten auf das zweite Gerät zu verschieben, indem Datenseiten aus dem Speicher des ersten Geräts, die für die Ausführung der Anwendung auf dem ersten Gerät verwendet werden, von dem ersten auf das zweite Gerät kopiert werden, während die Anwendung weiterhin auf dem ersten Gerät ausgeführt wird; Aktualisieren eines oder mehrerer Bytes in mindestens einer Datenseite durch das erste Gerät als Reaktion auf die Anwendungsausführung auf dem ersten Gerät während des Migrationsvorgangs; Stoppen der Anwendungsausführung auf dem ersten Gerät, und Kopieren der aktualisierten Bytes von dem ersten Gerät auf das zweite Gerät, damit das zweite Gerät die Ausführung der Anwendung fortsetzen kann.
  17. Computerlesbares Speichermedium nach Anspruch 16, die Vorgänge umfassend: Erstellen eines Mappings für die Anwendung zwecks Identifizieren der Positionen im Speicher der Datenseiten, wobei ein Aktualisieren eines oder mehrerer Bytes in mindestens einer Datenseite durch das erste Gerät als Reaktion auf die Anwendungsausführung auf dem ersten Gerät während des Migrationsvorgangs Folgendes umfasst: Zuweisen mindestens einer Datenseite zu einem Helfer; Aktualisieren des Mappings für die Anwendung für mindestens eine Seite, um eine entsprechende Seite im Helfer zu identifizieren; und Aktualisieren eines oder mehrerer Bytes in mindestens einer Datenseite.
  18. Computerlesbares Speichermedium nach Anspruch 16, die Vorgänge umfassend: Speichern von Daten, die die aktualisierten Bytes identifizieren, durch das erste Gerät, als Reaktion auf ein Aktualisieren eines oder mehrerer Bytes in mindestens einer Datenseite, worin das Kopieren der aktualisierten Bytes vom ersten auf das zweite Gerät Folgendes umfasst: Identifizieren der aktualisierten Bytes unter Verwendung der Daten zum Identifizieren von Bytes; und Kopieren der aktualisierten Bytes vom ersten Gerät auf das zweite Gerät als Reaktion auf die Identifizierung der aktualisierten Bytes mithilfe der Daten zur Bytes-Identifizierung.
  19. Computerlesbares Speichermedium nach Anspruch 18, die Vorgänge umfassend: Empfangen eines oder mehrerer Bytes in mindestens einer der Datenseiten, und Bestimmen durch das erste Gerät, dass einer oder mehrere Bytes für die Datenseiten der Anwendung, die momentan migriert wird, sind, wobei ein Speichern der Daten zur Identifikation der aktualisierten Bytes ein Speichern der Daten zur Identifikation der aktualisierten Bytes als Reaktion auf das Bestimmen, dass einer oder mehrere Bytes für die Datenseiten der Anwendung, die momentan migriert wird, sind, umfasst.
  20. Computerlesbares Speichermedium nach Anspruch 18, die Vorgänge umfassend: Empfangen einer Anforderung für den Zugriff auf den Speicher durch die Anwendung; und Bestimmen, dass die Anforderung für den Speicherzugriff eine Schreibeanforderung ist, wobei ein Speichern der Daten zur Identifizierung der aktualisierten Bytes ein Speichern der Daten zur Identifizierung der aktualisierten Bytes als Reaktion auf das Bestimmen, dass die Anforderung für den Speicherzugriff eine Schreibeanforderung ist, umfasst.
  21. Computerlesbares Speichermedium nach Anspruch 16, die Vorgänge umfassend: Ausführen der Anwendung auf dem ersten Gerät einschließlich Speichern der Datenseiten für die Anwendung im Speicher des ersten Geräts.
  22. Computerlesbares Speichermedium nach Anspruch 21, wobei ein Ausführen der Anwendung auf dem ersten Gerät ein Ausführen einer virtuellen Maschine auf dem ersten Gerät umfasst.
  23. Computerlesbares Speichermedium nach Anspruch 16, wobei ein Kopieren der aktualisierten Bytes vom ersten Gerät auf das zweite Gerät zwecks Fortsetzens der Anwendungsausführung auf dem zweiten Gerät ein Kopieren von nur aktualisierten Bytes vom ersten Gerät auf das zweite Gerät zur Anwendungsausführung auf dem zweiten Gerät umfasst.
  24. System, das Folgendes umfasst: einen Speicher; einen datenverarbeitenden Apparat; und ein nichtflüchtiges computerlesbares Speichermedium in Datenkommunikation mit der Datenverarbeitungsvorrichtung, das Anweisungen speichert, welche von einer Datenverarbeitungsvorrichtung ausführbar sind und bei dieser Ausführung bewirkt, dass die Datenverarbeitungsvorrichtung Operationen ausführt, umfassend: Speichern einer Vielzahl von Doorbell-Seiten im Speicher für eine Vielzahl von im System ausgeführten virtuellen Maschinen; Bereitstellen für jede Vielzahl virtueller Maschinen eines Zugriffs auf eine jeweilige der Vielzahl von Doorbell-Seiten, die eine Warteschlange identifiziert, die Anforderungen der jeweiligen virtuellen Maschine speichert; Empfangen von einer spezifischen der Vielzahl der Doorbell-Seiten einer Benachrichtigung darüber, dass die jeweilige Warteschlange eine Anforderung von der jeweiligen virtuellen Maschine hat, und Bewirken, dass ein Prozessor die jeweilige Warteschlange für die jeweilige virtuelle Maschine verarbeitet, als Reaktion auf den Empfang der Benachrichtigung, dass die jeweilige Warteschlange eine Anforderung von der jeweiligen virtuellen Maschine hat.
  25. System nach Anspruch 24, wobei das Datenverarbeitungssystem den Prozessor umfasst.
  26. System nach Anspruch 24, umfassend: den Prozessor, im Unterschied zum Datenverarbeitungssystem, die Vorgänge umfassend: ein Ausführen der Vielzahl von virtuellen Maschinen auf dem Datenverarbeitungsapparat, um zu bewirken, dass der Prozessor die jeweilige Warteschlange der jeweiligen virtuellen Maschine verarbeitet, umfasst ein Bereitstellen einer Nachricht für einen Hypervisor, um die jeweilige Warteschlange der jeweiligen virtuellen Maschine durch diesen Prozessor zu verarbeiten.
  27. System nach Anspruch 26, umfassend: ein erstes Gerät, das den Datenverarbeitungsapparat umfasst, und ein zweites Gerät, das den Prozessor beinhaltet, wobei ein Bereitstellen einer Nachricht an den auf dem Prozessor ausgeführten Hypervisor ein Bereitstellen einer Nachricht an den auf dem zweiten Gerät ausgeführten Hypervisor umfasst.
  28. System, das Folgendes umfasst: Ein erstes Gerät umfassend: einen Speicher; ein Datenverarbeitungsapparat; und ein nichtflüchtiges, computerlesbares Speichermedium, das mit dem datenverarbeitetenden Apparat Daten austauscht, und Anweisungen, die durch den datenverarbeitenden Apparat ausgeführt werden, speichert, und nach Abschluss dieser Ausführung bewirkt, dass der datenverarbeitende Apparat Operationen ausführt, die Folgendes umfassen: Initiieren eines Migrationsvorgangs, um eine auf einem ersten Gerät ausgeführte Anwendung von dem ersten auf das zweite Gerät zu verschieben, indem Datenseiten aus dem Speicher des ersten Geräts, die für die Ausführung der Anwendung auf dem ersten Gerät verwendet werden, von dem ersten auf das zweite Gerät kopiert werden, während die Anwendung weiterhin auf dem ersten Gerät ausgeführt wird; Aktualisieren eines oder mehrerer Bytes in mindestens einer Datenseite als Reaktion auf die Anwendungsausführung auf dem ersten Gerät während des Migrationsvorgangs; Stoppen der Ausführung der Anwendung auf dem ersten Gerät; und Kopieren der aktualisierten Bytes vom ersten auf das zweite Gerät, damit das zweite Gerät die Ausführung der Anwendung fortsetzen kann.
  29. System nach Anspruch 28, umfassend das zweite Gerät.
DE112016001730.8T 2015-04-16 2016-03-31 Virtuelle Maschinensysteme Pending DE112016001730T5 (de)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US14/688,258 US9747122B2 (en) 2015-04-16 2015-04-16 Virtual machine systems
US14/688,258 2015-04-16
US14/724,259 US9639395B2 (en) 2015-04-16 2015-05-28 Byte application migration
US14/724,259 2015-05-28
PCT/US2016/025303 WO2016167980A2 (en) 2015-04-16 2016-03-31 Virtual machine systems

Publications (1)

Publication Number Publication Date
DE112016001730T5 true DE112016001730T5 (de) 2017-12-28

Family

ID=55750492

Family Applications (2)

Application Number Title Priority Date Filing Date
DE112016001730.8T Pending DE112016001730T5 (de) 2015-04-16 2016-03-31 Virtuelle Maschinensysteme
DE202016107376.6U Active DE202016107376U1 (de) 2015-04-16 2016-03-31 Virtuelle Maschinensysteme

Family Applications After (1)

Application Number Title Priority Date Filing Date
DE202016107376.6U Active DE202016107376U1 (de) 2015-04-16 2016-03-31 Virtuelle Maschinensysteme

Country Status (9)

Country Link
US (1) US9639395B2 (de)
EP (2) EP3283960A2 (de)
JP (2) JP6423547B2 (de)
KR (2) KR102011478B1 (de)
CN (2) CN108268331B (de)
DE (2) DE112016001730T5 (de)
GB (1) GB2553050A (de)
HK (2) HK1243792B (de)
WO (1) WO2016167980A2 (de)

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8019732B2 (en) * 2008-08-08 2011-09-13 Amazon Technologies, Inc. Managing access of multiple executing programs to non-local block data storage
US10838852B2 (en) 2015-04-17 2020-11-17 Samsung Electronics Co., Ltd. System and method to extend NVME queues to user space
US11036533B2 (en) * 2015-04-17 2021-06-15 Samsung Electronics Co., Ltd. Mechanism to dynamically allocate physical storage device resources in virtualized environments
US10228969B1 (en) * 2015-06-25 2019-03-12 Amazon Technologies, Inc. Optimistic locking in virtual machine instance migration
US10970110B1 (en) 2015-06-25 2021-04-06 Amazon Technologies, Inc. Managed orchestration of virtual machine instance migration
US10043010B1 (en) * 2015-12-31 2018-08-07 Cybereason Migration of sandbox processes for malware prevention
US10545800B2 (en) * 2017-05-31 2020-01-28 Ati Technologies Ulc Direct doorbell ring in virtualized processing device
US10860475B1 (en) 2017-11-17 2020-12-08 Pure Storage, Inc. Hybrid flash translation layer
KR102107374B1 (ko) * 2018-08-27 2020-05-07 주식회사 두두아이티 가상화 기반 훈련 콘텐츠 제공 시스템
KR20220118004A (ko) * 2021-02-18 2022-08-25 에스케이하이닉스 주식회사 메모리 시스템 및 메모리 시스템의 동작 방법
US11922026B2 (en) 2022-02-16 2024-03-05 T-Mobile Usa, Inc. Preventing data loss in a filesystem by creating duplicates of data in parallel, such as charging data in a wireless telecommunications network

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5918248A (en) * 1996-12-30 1999-06-29 Northern Telecom Limited Shared memory control algorithm for mutual exclusion and rollback
US7543290B2 (en) * 2001-04-11 2009-06-02 Mellanox Technologies Ltd. Multiple queue pair access with single doorbell
US20050144422A1 (en) * 2003-12-30 2005-06-30 Mcalpine Gary L. Virtual to physical address translation
US7257811B2 (en) * 2004-05-11 2007-08-14 International Business Machines Corporation System, method and program to migrate a virtual machine
US8694990B2 (en) * 2007-08-27 2014-04-08 International Business Machines Corporation Utilizing system configuration information to determine a data migration order
CN101609419B (zh) * 2009-06-29 2012-05-30 北京航空航天大学 虚拟机持续在线迁移的数据备份方法及装置
US8386731B2 (en) * 2009-09-14 2013-02-26 Vmware, Inc. Method and system for optimizing live migration of persistent data of virtual machine using disk I/O heuristics
US8356149B2 (en) * 2009-10-30 2013-01-15 Hewlett-Packard Development Company, L.P. Memory migration
US8327060B2 (en) * 2009-11-30 2012-12-04 Red Hat Israel, Ltd. Mechanism for live migration of virtual machines with memory optimizations
US8468288B2 (en) * 2009-12-10 2013-06-18 International Business Machines Corporation Method for efficient guest operating system (OS) migration over a network
US9058183B2 (en) 2009-12-29 2015-06-16 Advanced Micro Devices, Inc. Hypervisor isolation of processor cores to enable computing accelerator cores
US9032398B2 (en) 2010-07-12 2015-05-12 Vmware, Inc. Online classification of memory pages based on activity level represented by one or more bits
US20120229481A1 (en) * 2010-12-13 2012-09-13 Ati Technologies Ulc Accessibility of graphics processing compute resources
US8832029B2 (en) * 2011-02-16 2014-09-09 Microsoft Corporation Incremental virtual machine backup supporting migration
US8813083B2 (en) * 2011-07-01 2014-08-19 Intel Corporation Method and system for safe enqueuing of events
US9274825B2 (en) * 2011-08-16 2016-03-01 Microsoft Technology Licensing, Llc Virtualization gateway between virtualized and non-virtualized networks
US20130174144A1 (en) 2011-12-28 2013-07-04 Ati Technologies Ulc Hardware based virtualization system
US10360176B2 (en) 2012-01-17 2019-07-23 Intel Corporation Techniques for command validation for access to a storage device by a remote client
US10474369B2 (en) * 2012-02-06 2019-11-12 Vmware, Inc. Mapping guest pages to disk blocks to improve virtual machine management processes
US9454487B2 (en) * 2012-08-27 2016-09-27 Vmware, Inc. Transparent host-side caching of virtual disks located on shared storage
GB2506177A (en) * 2012-09-25 2014-03-26 Ibm Method of migrating an operating system executing an application
US9069485B2 (en) 2012-12-20 2015-06-30 Oracle International Corporation Doorbell backpressure avoidance mechanism on a host channel adapter
US10223026B2 (en) * 2013-09-30 2019-03-05 Vmware, Inc. Consistent and efficient mirroring of nonvolatile memory state in virtualized environments where dirty bit of page table entries in non-volatile memory are not cleared until pages in non-volatile memory are remotely mirrored
EP3127300B1 (de) * 2014-05-12 2019-09-04 Google LLC Verwaltung von nic-verschlüsselten strömen zur migration von gästen oder aufgaben

Also Published As

Publication number Publication date
WO2016167980A2 (en) 2016-10-20
WO2016167980A3 (en) 2016-11-17
KR101922533B1 (ko) 2019-02-20
GB201715307D0 (en) 2017-11-08
US9639395B2 (en) 2017-05-02
CN108268331B (zh) 2019-05-31
CN107430522B (zh) 2018-09-21
CN107430522A (zh) 2017-12-01
JP2018511881A (ja) 2018-04-26
EP3779695A1 (de) 2021-02-17
JP2018170033A (ja) 2018-11-01
KR20170122826A (ko) 2017-11-06
KR102011478B1 (ko) 2019-10-21
DE202016107376U1 (de) 2017-01-24
HK1243792B (zh) 2019-11-01
US20160306658A1 (en) 2016-10-20
EP3283960A2 (de) 2018-02-21
KR20180081847A (ko) 2018-07-17
JP6423547B2 (ja) 2018-11-14
CN108268331A (zh) 2018-07-10
GB2553050A (en) 2018-02-21
HK1251315B (zh) 2020-06-26
JP6391878B1 (ja) 2018-09-19

Similar Documents

Publication Publication Date Title
DE112016001730T5 (de) Virtuelle Maschinensysteme
DE112018000193B4 (de) Daten sequenziell in Zonen in einem verstreuten Speichernetzwerk speichern
DE112015001977B4 (de) Synchronisieren von Aktualisierungen von Statusanzeigern in einer Datenverarbeitungsumgebung
DE112012002241T5 (de) Migration eines transparenten Dateisystems zu einem neuen physischen Speicherort
DE112010005821T5 (de) Kontextwechsel
DE112011102822T5 (de) Leistungsoptimierte Interrupt-Abgabe
DE202012013432U1 (de) Speichern von Daten auf Speicherknoten
DE202013012495U1 (de) Metadatenbasierte virtual Maschine-Konfiguration
DE112013006063T5 (de) Funktionsübernahme für einen Datenübertragungskanal in einem Netzwerk mit Hochleistungsdatenverarbeitung
DE112019000629B4 (de) Koordination von cacheoperationen
DE112020002575T5 (de) Drosselung von speicher als dienst auf grundlage der verbindungsbandbreite
DE202012013448U1 (de) Prozessormodussperre
DE112011103408T5 (de) Verwalten von komprimiertem Speicher unter Verwendung gestaffelter Interrupts
DE112012005209T5 (de) Brückenfunktion zwischen Virtual Machine Monitor und Bare-Metal-Bootvorgang
DE112014002847T5 (de) Verwenden von Client-Ressourcen während Mobilitätsoperationen
DE112013000889T5 (de) Weiterleitungsfortschritts-Mechanismus für Speichervorgänge bei Vorhandensein von Ladekonflikten in einem Ladevorgänge begünstigenden System
DE202016107437U1 (de) Daten-Caching
DE112015001477T5 (de) Hardwarezähler zum Verfolgen einer Auslastung in einem Multithreading-Computersystem
DE102013006396A1 (de) Eine grafikverarbeitungseinheit, in der eine standardverarbeitungseinheit verwendet ist, und ein verfahren zum aufbau einer grafikverarbeitungseinheit
DE112017005063T5 (de) Verwalten eines Speichers mit niedrigstem Kohärenzpunkt (LPC) mithilfe eines Dienstschichtadapters
DE112018004138B4 (de) Asynchrone aktualisierung von metadatenspuren in reaktion auf einen mittels einer e/a-operation über eine busschnittstelle erzeugten cachetreffer
DE112020002583T5 (de) Speicherdienste zwischen betriebssystemen über kommunikationsnetzwerkverbindungen
DE112013000687T5 (de) Verteilte Funktionsausführung für Hybridsysteme
DE202013012478U1 (de) Kompression der datenkarte
DE112018006068T5 (de) Dynamische adressübersetzung für eine virtuelle maschine

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R082 Change of representative

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

R081 Change of applicant/patentee

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

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