DE112016004264T5 - Verfahren und vorrichtung zum dynamischen auslagern der ausführung von maschinencode in einer anwendung an eine virtuelle maschine - Google Patents

Verfahren und vorrichtung zum dynamischen auslagern der ausführung von maschinencode in einer anwendung an eine virtuelle maschine Download PDF

Info

Publication number
DE112016004264T5
DE112016004264T5 DE112016004264.7T DE112016004264T DE112016004264T5 DE 112016004264 T5 DE112016004264 T5 DE 112016004264T5 DE 112016004264 T DE112016004264 T DE 112016004264T DE 112016004264 T5 DE112016004264 T5 DE 112016004264T5
Authority
DE
Germany
Prior art keywords
machine
computing device
subset
code
machine state
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
DE112016004264.7T
Other languages
English (en)
Inventor
Kwan Lin Chit
Paul Arnab
N. Chinya Gautham
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.)
Intel Corp
Original Assignee
Intel Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Intel Corp filed Critical Intel Corp
Publication of DE112016004264T5 publication Critical patent/DE112016004264T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1031Controlling of the operation of servers by a load balancer, e.g. adding or removing servers that serve requests
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1001Protocols in which an application is distributed across nodes in the network for accessing one among a plurality of replicated servers
    • H04L67/1004Server selection for load balancing
    • H04L67/1008Server selection for load balancing based on parameters of servers, e.g. available memory or workload
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes

Landscapes

  • Engineering & Computer Science (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Signal Processing (AREA)
  • Computer Hardware Design (AREA)
  • General Engineering & Computer Science (AREA)
  • Computer And Data Communications (AREA)
  • Stored Programmes (AREA)
  • Information Transfer Between Computers (AREA)

Abstract

Ein Verfahren zur Verwaltung von Rechenoperationen beinhaltet das Replizieren einer Untermenge eines Maschinenzustands eines ersten Rechengeräts auf ein zweites Rechengerät, wobei es erforderlich ist, dass die Untermenge des Maschinenzustands Maschinencode ausführt. Die Ausführung des Maschinencodes wird an das zweite Rechengerät ausgelagert.

Description

  • GEBIET DER TECHNIK
  • Eine Ausführungsform der vorliegenden Offenbarung bezieht sich auf Cloud Computing für mobile Geräte. Insbesondere betrifft eine Ausführungsform der vorliegenden Erfindung ein Verfahren und eine Vorrichtung zur Durchführung von dynamischem Auslagern von beliebigem Maschinencode in einer Anwendung an eine virtuelle Maschine.
  • HINTERGRUND
  • Üblicherweise ist Cloud Computing die praktische Verwendung eines Netzwerks aus ferngehosteten Servern, um Daten zu speichern, zu verwalten und zu verarbeiten, anstatt einen lokalen Server oder ein lokales Rechengerät zu verwenden. Cloud Computing hat ein Modell bereitgestellt, um Netzwerkzugang zu einem gemeinsamen Pool konfigurierbarer Rechenressourcen zu ermöglichen. Gemeinsam mit Speicherlösungen hat Cloud Computing den Benutzern diverse Möglichkeiten bereitgestellt, um ihre Daten unter Verwendung dritter Datenzentren zu speichern, zu verwalten und zu verarbeiten. Cloud Computing verwendet Ressourcenteilung, um Kohärenz und Rationalisierung zu erreichen.
  • Mobile Geräte sind oft bezüglich Ressourcen wie z. B. Prozessorleistung, Akkulebensdauer und verfügbarem Speicherplatz beschränkt. Die Beschränkung dieser Ressourcen kann mobile Geräte darin einschränken, die facettenreichen mobilen Erfahrungen zu bieten, die Benutzer sich möglicherweise wünschen. Trotz der Ankunft neuer Technologien zur Verbesserung der Prozessorleistung, der Akkulebensdauer und des Speicherplatzes auf mobilen Geräten bringen die wachsende Komplexität und die Anforderungen mobiler Anwendungen die Ressourcen an ihre Grenzen.
  • Mobiles Cloud Computing verwendet eine Kombination aus Cloud Computing, mobiler Computernutzung und Drahtlosnetzwerken, um mobilen Nutzern zusätzliche Rechenressourcen zu bringen. Mobiles Cloud Computing kann elastischen Ressourcen diverser Clouds und Netzwerktechnologien zu erhöhter Funktionalität, Speicherplatz und Mobilität verhelfen, um überall und jederzeit ungeachtet der heterogenen Umgebungen und Plattformen eine Vielzahl von mobilen Geräten zu bedienen.
  • Figurenliste
  • Die Merkmale und Vorteile von Ausführungsformen der vorliegenden Offenbarung werden beispielhaft dargestellt und sollen die Ausführungsformen der vorliegenden Offenbarung nicht auf die konkret gezeigten Ausführungsformen einschränken.
    • 1 ist ein Blockdiagramm einer Cloud-Computing-Umgebung gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung.
    • 2 ist ein Blockdiagramm eines Rechengeräts gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung.
    • 3 ist ein Flussdiagramm, das ein Verfahren zur Verarbeitung von Maschinencode zum Auslagern der Ausführung gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung darstellt.
    • 4 ist ein Flussdiagramm, das ein Verfahrung zum Auslagern der Ausführung von Maschinencode von einem ersten Rechengerät, das als Client fungiert, an ein zweites Rechengerät, das als Server fungiert, gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung darstellt.
    • 5 ist ein Flussdiagramm, das ein Verfahren zur Identifizierung von Möglichkeiten für das Auslagern der Ausführung von Maschinencode gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung darstellt.
    • 6 ist ein Flussidagramm, das ein Verfahren zur Verwaltung der ausgelagerten Ausführung von Maschinencode auf einem Server gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung darstellt.
    • 7 ist ein anschauliches Beispiel für die Replikation von Maschinenzuständen, um das Auslagern der Ausführung von Maschinencode gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung zu unterstützen.
    • 8 ist ein Blockdiagramm einer virtuellen Maschine, die auf einem Server-Rechengerät gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung implementiert ist.
    • 9 ist ein Blockdiagramm einer Einheit zum Auslagern der Ausführung von Maschinencode gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung.
  • DETAILBESCHREIBUNG
  • In der folgenden Beschreibung wird zu Erklärungszwecken eine spezifische Nomenklatur dargelegt, um ein genaues Verständnis der Ausführungsform der vorliegenden Offenbarung bereitzustellen. Ein Fachmann wird erkennen, dass konkrete Einzelheiten in der Beschreibung möglicherweise nicht erforderlich sind, um die Ausführungsformen der vorliegenden Offenbarung zu praktizieren. In anderen Fällen sind allgemein bekannte Schaltungen, Geräte, Verfahren und Programme in Blockdiagrammform dargestellt, um zu vermeiden, Ausführungsformen der vorliegenden Offenbarung unnötig zu verkomplizieren.
  • Das Auslagern komplexer Berechnungen von einem mobilen Rechengerät an einen Server in einer Cloud kann erzielt werden, indem ein dedizierter Webdienst verwendet wird, der a priori definierte Funktionen implementiert. Dies kann unflexibel sein, da ausgeschlossen wird, beliebige Arbeitslasten während der Laufzeit an den Server in der Cloud zu verschieben. Zum Beispiel können derzeitige dedizierte Webdienste nur das Auslagern von Arbeitslasten zulassen, die auf einer Anwendungsebene, nicht aber auf einer Maschinenbefehlsebene spezifiziert sind.
  • Gemäß einer Ausführungsform der vorliegenden Offenbarung wird eine Rahmenstruktur bereitgestellt, um das Auslagern einer beliebigen Arbeitslast, d. h. einem beliebigen Maschinencode-Block, von einem ersten Rechengerät an ein zweites Rechengerät mit der Granularität von Maschinenbefehlen zu ermöglichen. In dieser Ausführungsform wird die Ausführung auf dem ersten Rechengerät unterbrochen, und eine Untermenge seines Maschinenzustands wird erfasst. Die Untermenge des erfassten Maschinenzustands beinhaltet, was minimal erforderlich ist, um einen gewünschten Codeblock rechnerfern auszuführen. Die Untermenge des Maschinenzustands kann die Registerinhalte des Rechengeräts sowie Teile seines virtuellen Arbeitsspeichers einschließlich des Stapel-, Heap-, Block-Started-by-Symbol- (BSS-), Daten- und Textspeichers beinhalten. Die Untermenge des Maschinenzustands des ersten Rechengeräts wird auf das zweite Rechengerät repliziert, wo sie dynamisch in eine virtuelle Maschine eingefügt wird, die den ausgelagerten Codeblock ausführt. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann die virtuelle Maschine eine ultra-leichtgewichtige virtuelle Maschine sein, die lediglich eine virtuelle zentrale Verarbeitungseinheit und einen virtuellen Arbeitsspeicher beinhaltet. Die ultra-leichtgewichtige virtuelle Maschine muss kein Betriebssystem ausführen. Die ultra-leichtgewichtige virtuelle Maschine muss auch keine virtuelle Festplatte, virtuelle Netzwerkschnittstellen oder andere virtuellen Geräte beinhalten.
  • Nachdem die virtuelle Maschine auf dem zweiten Rechengerät das Ausführen des ausgelagerten Codes fertiggestellt hat, wird der Maschinenzustand der virtuellen Maschine in Form einer aktualisierten Maschinenzustand-Untermenge von dem zweiten Rechengerät auf das erste Rechengerät repliziert. Dies erlaubt es dem ersten Rechengerät, die Ausführung vom neuen Zustand aus wieder aufzunehmen. Diese Rahmenstruktur stellt eine enge Kopplung bereit, welche die Grenze zwischen dem ersten und dem zweiten Rechengerät verschwinden lässt. In Folge dessen scheint es für den Benutzer des ersten Rechengeräts so, dass das erste Rechengerät die ausgelagerte Berechnung selbst durchgeführt hat.
  • Ausführungsformen der vorliegenden Offenbarung erlauben es, dass beliebige Arbeitslasten, die vielmehr auf einer Maschinenbefehlsebene als auf der Anwendungsebene spezifiziert sind, von einem ersten Rechengerät ausgelagert werden, um auf einem zweiten Rechengerät ausgeführt zu werden. Es wird eine Rahmenstruktur offenbart, die eine sofortige Wiederaufnahme der Geräteausführung auf dem ersten Rechengerät, eine geeignete Maschinenzustandsübertragung sowie eine Gastcode-Ausführung auf dem zweiten Rechengerät ermöglicht.
  • Gemäß einer ersten Ausführungsform der vorliegenden Offenbarung beinhaltet ein Verfahren zur Verwaltung von Rechenoperationen das Replizieren einer Untermenge eines Maschinenzustands eines ersten Rechengeräts auf ein zweites Rechengerät, wobei die Untermenge des Maschinenzustands Maschinencode ausführen soll. Die Ausführung des Maschinencodes wird an das zweite Rechengerät ausgelagert. Gemäß einer Ausführungsform der Offenbarung bezieht sich eine Maschinenzustand-Untermenge auf eine geeignete Untermenge des Maschinenzustands.
  • Gemäß einer zweiten Ausführungsform der vorliegenden Offenbarung beinhaltet ein Verfahren zur Verwaltung von Rechenoperationen das Erzeugen einer virtuellen Maschine für einen Client auf einem Server. Ein replizierter Maschinenzustand und Maschinencode, der vom Client empfangen wird, werden in die virtuelle Maschine eingefügt. Die Steuerung der Rechenressourcen auf dem Server wird der virtuellen Maschine übergeben, um den Maschinencode auszuführen. Die Steuerung der Rechenressourcen wird nach Fertigstellung der Ausführung des Maschinencodes wieder an den Server übergeben.
  • Ausführungsformen der vorliegenden Offenbarung können potentielle Vorteile wie z. B. Unabhängigkeit von a-priori-Planungsentscheidungen bereitstellen. Bisherige Ansätze wie z. B. Webdienste erfordern einen Anwendungsprogrammierer, um eine Anwendung zur rechnerfernen Ausführung in getrennte Funktionseinheiten aufzuteilen. Eine derartige Abstraktion hat eine feste Compilierungszeit und kann nicht während der Laufzeit geändert werden. Ausführungsformen der vorliegenden Offenbarung erlauben ein dynamisches Auslagern beliebiger Codeblöcke während der Laufzeit.
  • Ausführungsformen der vorliegenden Offenbarung können den potentiellen Vorteil der Verwendung eines Allzweck-Servers bereitstellen. Bisherige Ansätze wie z. B. Webdienste erfordern spezialisierte Server, die so konfiguriert sind, dass sie jeden unterstützen Dienst implementieren. Ausführungsformen der vorliegenden Offenbarung erlauben, dass ein Allzweck-Server ein Auslagern auf Befehlsebene implementiert. Dies erlaubt es einem Allzweckserver, unterschiedliche Rechenarten und -dienste zu bewältigen, ohne dass er auf eine für den unterstützten Dienst spezifische Weise vorkonfiguriert werden muss.
  • Ausführungsformen der vorliegenden Offenbarung können den potentiellen Vorteil bereitstellen, Teile bestehender Anwendungen zu bestimmen, die ex post facto dynamisch ausgelagert werden sollen. Bestehender Code auf einem ersten Rechengerät muss nicht neu strukturiert oder neu geschrieben werden, um eine Auslagerung zu nutzen.
  • Ausführungsformen der vorliegenden Offenbarung können den potentiellen Vorteil bereitstellen, dass das Ansprechen seitens des ersten Rechengeräts wahrgenommen wird. Der Maschinenzustand des ersten Rechengeräts wird auf dem zweiten Rechengerät kontinuierlich aktualisiert. Eine aktuelle Version des Arbeitsspeichers des ersten Rechengeräts ist „gerade rechtzeitig“ verfügbar, um einen ausgelagerten Codeblock durch das zweite Rechengerät auszuführen. In Folge dessen unterliegt das Auslagern keiner langen Verzögerung.
  • Ausführungsformen der vorliegenden Offenbarung können den potentiellen Vorteil bereitstellen, komplexe Rechenoperationen zu beschleunigen. Zum Beispiel kann ein Server dazu fähig sein, komplexe Rechenoperationen schneller als ein durch ein mobiles Gerät implementierter Client durchzuführen. Dies erlaubt Leistungsbeschleunigungen.
  • Ausführungsformen der vorliegenden Offenbarung können den potentiellen Vorteil bereitstellen, die Leistung auf einem ersten Rechengerät zu schonen, indem die Ausführung von Maschinencode an ein zweites Rechengerät ausgelagert wird.
  • 1 ist ein Blockdiagramm einer Umgebung für Cloud Computing 100 gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung. Die Umgebung für Cloud Computing 100 beinhaltet ein erstes Rechengerät 110 und ein zweites Rechengerät 120. Das erste Rechengerät 110 fungiert als Client und kann durch ein Desktop- oder Laptop-Computersystem, ein Smartphone, ein Tablet, eine Smartwatch, ein Smart-Gerät oder ein anderes Rechengerät implementiert sein. Das zweite Rechengerät 120 fungiert als Server, der rechnerfern vom ersten Rechengerät 110 in einer Cloud angeordnet ist. Das zweite Rechengerät 120 kann durch eine beliebige der für das erste Rechengerät 110 aufgelisteten Rechengeräte oder durch ein Rechengerät mit einer signifikant höheren Prozessorleistung wie z. B. einen Netzwerkcomputer, einen Servercomputer, einen Mainframecomputer, einen Supercomputer oder ein anderes Rechengerät implementiert sein. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann das erste Rechengerät 110 einen oder mehrere Blöcke von Maschinencode zur Ausführung auf dem zweiten Rechengerät 120 hochladen.
  • Das erste Rechengerät 110 kann mit dem zweiten Rechengerät 120 über ein Netzwerk 130 verbunden sein. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann das Netzwerk 130 ein mobiles Netzwerk sein. Das mobile Netzwerk kann Komponenten wie z. B. eine oder mehrere Basis-Sendeempfängerstationen, Zugriffspunkte und/oder Satelliten beinhalten, die Signale zwischen dem ersten Rechengerät 110 und einem mobilen Netzwerkdienst übermitteln. Der mobile Netzwerkdienst kann über das Internet mit dem zweiten Rechengerät 120 verbunden sein. Es ist zu beachten, dass das Netzwerk 130 auch eine andere Art von Netzwerk sein kann, das eine Kombination anderer Komponenten und Kommunikationsmedien verwendet.
  • 2 ist ein Blockdiagramm eines Rechengeräts 200 gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung. Das Rechengerät 200 kann verwendet werden, um das erste Rechengerät 110 oder das zweite Rechengerät 120, die in 1 dargestellt sind, zu implementieren. Das Computersystem 200 beinhaltet einen Prozessor 201, der Datensignale verarbeitet. 2 zeigt das Computersystem 200 mit einem einzigen Prozessor. Es versteht sich jedoch, dass das Computersystem 200 mit mehreren Prozessoren betrieben werden kann. Der Prozessor 201 kann durch (einen) Single-Core- oder (einen) Multi-Core-Prozessor(en), einen digitalen Signalprozessor, Mikrocontroller oder einen anderen Prozessor oder eine andere Verarbeitungs-/Steuerschaltung implementiert werden.
  • Der Prozessor 201 ist mit einem Eingabe-/Ausgabe (I/O-) Subsystem 210 gekoppelt. Das (I/O-)Subsystem 210 kann Hubs für die Arbeitsspeichersteuerung, I/O-Steuerhubs, Kommunikationsverbindungen und/oder andere Komponenten und Subsysteme beinhalten, um I/O-Operationen zu ermöglichen. Gemäß einer Ausführungsform des Rechengeräts 200 übermittelt das I/O-Subsystem 210 Datensignale zwischen Komponenten im Rechengerät 200. In dieser Ausführungsform kann das I/O-Subsystem 210 einen einzigen Bus oder eine Kombination mehrerer Busse beinhalten. Das Rechengerät 200 beinhaltet einen Arbeitsspeicher 202. Der Arbeitsspeicher 202 ist mit dem I/O-Subsystem 210 gekoppelt. Der Arbeitsspeicher 202 kann ein dynamisches Direktzugriffsspeichergerät, ein statisches Direktzugriffsspeichergerät und/oder ein anderes Arbeitsspeichergerät sein. Der Arbeitsspeicher 202 kann Befehle und Code speichern, die durch Datensignale repräsentiert werden, die vom Prozessor 201 ausgeführt werden können. Ein Datenspeichergerät 203 ist mit dem I/O-Subsystem 210 gekoppelt. Das Datenspeichergerät 203 kann mittels eines Geräts implementiert werden, das zur kurzfristigen oder langfristigen Datenspeicherung konfiguriert ist, wie z. B. mittels eines Halbleiterlaufwerks, einer Speicherkarte oder eines anderen Datenspeichergeräts.
  • Peripheriegeräte 206 sind mit dem I/O-Subsystem 210 gekoppelt. Die Peripheriegeräte 206 können verschiedene I/O-Geräte beinhalten, wie z. B. Geräte, die Kommunikation und Anzeige unterstützen. Die Peripheriegeräte 206 können Anzeigebildschirme und Touchscreens, Tasten, Schalter, Tastaturen, Mäuse, Lautsprecher, Mikrophone und/oder andere periphere Geräte beinhalten. Sensoren 207 sind mit dem I/O-Subsystem 210 gekoppelt und können in Form eines oder mehrerer Sensoren ausgeführt sein. Gemäß einer Ausführungsform der Offenbarung können die Sensoren 207 einen oder mehrere Bewegungs-, Standort- und Lagesensoren beinhalten. Eine (nicht dargestellte) Netzwerksteuerung kann ebenfalls mit dem I/O-Subsystem 210 gekoppelt sein. Die Netzwerksteuerung kann das Computersystem 200 mit einem Netzwerk aus (nicht dargestellten) Computern vernetzen und unterstützt eine Kommunikation zwischen den Maschinen. Es ist zu beachten, dass Rechengeräte, die eine andere Architektur aufweisen oder andere Komponenten aufweisen, ebenso verwendet werden können, um das Rechengerät 200 zu implementieren.
  • 3 ist ein Flussidagramm, das ein Verfahren zur Verarbeitung von Maschinencode zum Auslagern der Ausführung gemäß einer beispielhaften Ausführungsform der vorliegenden Erfindung darstellt. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann das in 3 beschriebene Verfahren mittels eines Softwareentwicklerwerkzeugs durchgeführt werden, das auf einem Rechengerät ausgeführt wird.
  • Bei 301 wird Code profiliert, der auf einem ersten Rechengerät ausgeführt werden soll. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann das Profilieren der Ausführung des Codes beinhalten, zu eruieren, wie oft verschiedene Codeblöcke ausgeführt werden. Das Profilieren der Ausführung von Code kann beinhalten, zu identifizieren, welche und wie häufig Arbeitsspeicheradressen ausgelesen und/oder beschrieben werden. Das Profilieren der Ausführung von Code kann es beinhalten, die Aufrufkette(n) von Codeblöcken zu identifizieren und die Computer-Verarbeitungseinheit-(CPU-) Zyklen zu eruieren, die für die Aufrufkette(n) oder einen Teil einer/mehrerer Aufrufkette(n) benötigt werden. Das Profilieren der Ausführung von Code kann auch beinhalten, die Befehle zu identifizieren, die eine Aufrufkette oder einen Teil einer Aufrufkette beinhalten, oder andere Sammelaufgaben.
  • Bei 302 werden Codeblöcke von Interesse identifiziert. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann ein Codeblock von Interesse sein, wenn eine Feststellung gemacht wird, dass Leistungsgewinne beim Auslagern des Codeblocks zu dessen Ausführung auf einem Server gegenüber dem Overhead-Aufwand des Auslagerns überwiegen. Es ist zu beachten, dass auch andere Kriterien verwendet werden können, um Codeblöcke von Interesse zu identifizieren.
  • Bei 303 werden relevante Maschinenzustandsinformationen für die Codeblöcke von Interesse identifiziert. Gemäß einer Ausführungsform der vorliegenden Offenbarung identifizieren die relevanten Maschinenzustandsinformationen eine Untermenge des Maschinenzustands des ersten Rechengeräts sowie den Speicherort der Untermenge des Maschinenzustands im virtuellen Arbeitsspeicher, an den die Maschinenzustand-Untermenge die Ausführung des Codeblocks auslagern muss. Die Untermenge des Maschinenzustands kann aus der bei 301 durchgeführten Profilierung identifiziert werden. Der Maschinenzustand kann die Registerwerte des Rechengeräts sowie die Standorte und Inhalte seines virtuellen Arbeitsspeichers beinhalten, die zum Beispiel die Stapel-, Heap-, Block-Started-by-Symbol-(BSS-) Daten und Textregionen beinhalten.
  • Bei 304 wird der Codeblock modifiziert, um das Auslagern der Ausführung des Codeblocks an ein zweites Rechengerät zu unterstützen. Gemäß einer Ausführungsform der vorliegenden Offenbarung werden Aufrufe in einen Codeblock eingebunden, um das Auslagern seiner Ausführung zu ermöglichen. Der modifizierte Code identifiziert auch die Untermenge von Maschinenzuständen, die vom ersten Rechengerät auf das zweite Rechengerät repliziert werden sollten, und wo sich die Untermenge von Maschinenzuständen auf dem ersten Rechengerät befindet. In einer Ausführungsform wird eine Menge virtueller Arbeitsspeicheradressbereiche bereitgestellt, welche die Untermenge von Maschinenzuständen beinhaltet.
  • 4 ist ein Flussdiagramm, das ein Verfahren darstellt, um die Ausführung von Maschinencode von einem ersten, als Client betriebenen Rechengerät zu einem zweiten, als Server betriebenen Rechengerät gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung auszulagern. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann das in 4 beschriebene Verfahren von dem in 1 dargestellten ersten Rechengerät 110 durchgeführt werden.
  • Bei 401 wird eine Initialisierung durchgeführt. Gemäß einer Ausführungsform der vorliegenden Offenbarung wird eine Initialisierungsnachricht an ein als Server betriebenes Rechengerät übermittelt. Die Initialisierungsnachricht kann einen Status oder eine spezifische Information über den Server vom Server anfordern.
  • Bei 402 wird eine Feststellung über den Status des Servers gemacht. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann der Status des Servers auf seiner Verbindung, dem Datenverkehr auf dem Server, den Verarbeitungskapazitäten und/oder anderen Kriterien oder Informationen basieren, die vom Server angefordert werden. Falls eine Feststellung gemacht wird, dass der Status des Servers nicht akzeptabel ist, fährt die Steuerung mit 403 fort. Falls eine Feststellung gemacht wird, dass der Status des Servers akzeptabel ist, fährt die Steuerung mit 404 fort. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann bei 401 eine Initialisierungsnachricht an mehr als einen Server übermittelt werden, und es kann bei 402 eine Feststellung gemacht werden, dass der Status von mehr als einem Server akzeptabel ist.
  • Bei 403 wird der Code lokal auf dem Client ausgeführt, und ein Auslagern wird unterlassen.
  • Bei 404 werden Möglichkeiten für das Auslagern der Ausführung von Codeblöcken identifiziert. Gemäß einer Ausführungsform der vorliegenden Offenbarung wird eine Feststellung gemacht, welche Codeblöcke ausgelagert werden sollen und welcher Server verwendet werden soll, wenn mehr als ein Server zur Verfügung steht. Codeblöcke, die zur Ausführung ausgelagert werden sollen, können als Ziel-Codeblöcke bezeichnet werden. Ein Ziel-Codeblock kann Maschinencode beinhalten, der eine Funktion oder lediglich einen Teil einer Funktion beschreibt.
  • Bei 405 werden die Auslagerungsmöglichkeiten mit einem Replikationsagenten registriert, wobei eine Maschinenzustand-Untermenge des Clients auf dem Server repliziert wird. Gemäß einer Ausführungsform der vorliegenden Offenbarung beinhaltet das Replizieren der Maschinenzustand-Untermenge des Clients das Übertragen von Inhalten eines im Code spezifizierten, virtuellen Arbeitsspeicheradressbereichs, der die Text-, Heap-, Daten- und BSS-Regionen beinhaltet. Das Replizieren der Maschinenzustand-Untermenge des Clients beinhaltet auch das Markieren einer Region im Text, die den auf dem Server auszuführenden Code mit einem Zielcode-Statuszeichen identifiziert. Das Replizieren der Maschinenzustand-Untermenge des Clients beinhaltet ferner das Übertragen von Inhalten eines Stapels an den Server. Gemäß einer Ausführungsform der Offenbarung können die Inhalte des replizierten Stapels durch Prüfen eines Registers, das einen Stapel-Zeiger enthält, und eines Registers, das einen Stapelbasis-Zeiger enthält, eruiert werden. Das Replizieren der Maschinenzustand-Untermenge des Clients beinhaltet auch das Übertragen der Inhalte der Register auf dem Client an den Server. Die auf dem Server replizierte Untermenge von Maschinenzuständen des Clients beinhaltet eine aktuelle Versionsaktualisierungsnummer. Gemäß einer Ausführungsform der vorliegenden Offenbarung wird die Untermenge der Maschinenzustände vom Replikationsagenten registriert. Änderungen am Maschinenzustand im Laufe der Ausführung der Anwendung auf dem Client werden vom Replikationsagenten auf dem Server repliziert. Dies erlaubt eine kontinuierliche Replikation der Untermenge der Maschinenzustände.
  • Bei 406 wird die Ausführung des Zielcodeblocks an den Server ausgelagert.
  • Bei 407 wird eruiert, ob ein Auslagerungsstatus akzeptabel ist. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann ein Auslagerungsstatus inakzeptabel sein, falls ein Fehler auftritt, wenn die Ausführung eines Zielcodeblocks ausgelagert wird oder nach einem vorbestimmten Zeitraum keine Antwort vom Server empfangen wird. Falls eine Feststellung gemacht wird, dass der Auslagerungsstatus nicht akzeptabel ist, fährt die Steuerung bei 403 fort. Falls eine Feststellung gemacht wird, dass der Auslagerungsstatus akzeptabel ist, fährt die Steuerung bei 408 fort.
  • Bei 408 wird eine Reintegration durchgeführt, wobei eine aktualisierte Maschinenzustand-Untermenge vom Server auf den Client repliziert wird. Die aktualisierte Maschinenzustand-Untermenge spiegelt die Ausführung des Ziel-Codeblocks auf dem Server wider. Gemäß einer Ausführungsform der vorliegenden Offenbarung wird beim Empfang einer aktualisierten Maschinenzustand-Untermenge vom Server eine Versionsaktualisierungsnummer der aktualisierten Maschinenzustand-Untermenge vom Server mit der aktuellen Versionsaktualisierungsnummer verglichen. Falls die Versionsaktualisierungsnummer der aktualisierten Maschinenzustand-Untermenge vom Server mit der aktuellen Versionsaktualisierungsnummer übereinstimmt, wird die Maschinenzustand-Untermenge auf dem Client mit der aktualisierten Maschinenzustand-Untermenge vom Server überschrieben. Gemäß einer Ausführungsform der vorliegenden Offenbarung werden der virtuelle Arbeitsspeicher (Heap-, BSS-, Daten- und Stapelspeicher) sowie die virtuellen Register auf dem Client in der vorliegenden Reihenfolge aktualisiert. Die Versionsaktualisierungsnummer wird nach Fertigstellung der Zustandsreintegration erhöht. Ein aktueller Befehlszeiger des Clients kann auf einen Endpunkt des Zielcodeblocks gesetzt werden.
  • 5 ist ein Flussdiagramm, das ein Verfahren zum Identifizieren von Möglichkeiten zum Auslagern der Ausführung von Maschinencode gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung veranschaulicht. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann das in 5 veranschaulichte Verfahren verwendet werden, um den in 4 veranschaulichten Vorgang 404 zu implementieren.
  • Bei 501 wird ein gewünschter Auslagerungsgrad identifiziert. Der Auslagerungsgrad entspricht einem Ausmaß der Auslagerung der Ausführung von Maschinencode, der für eine Anwendung gewünscht wird. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann der Auslagerungsgrad von einem Benutzer eines ersten Rechengeräts, das Maschinencode der Anwendung ausführt, spezifiziert werden. Der Auslagerungsgrad kann auch dynamisch von einem Agenten auf dem ersten Rechengerät spezifiziert werden, wenn festgestellt wird, dass die Leistung, Prozessorressourcen oder andere Rechenressourcen auf dem ersten Rechengerät geschont werden sollten. Es ist zu beachten, dass ein gewünschter Auslagerungsgrad durch eine Art der Arbeitslast oder eine Größe eines Codeblocks gekennzeichnet sein kann. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann ein Benutzer eine Präferenz für ein aggressives, gemäßigtes oder leichtes Auslagern spezifizieren. In dieser Ausführungsform kann ein aggressives Auslagern dazu führen, dass alle möglichen Ziel-Codeblöcke ausgelagert werden, wohingegen ein leichtes Auslagern dazu führen kann, dass ein bestimmter Prozentsatz von Ziel-Codeblöcken auf Basis der Aufruffrequenz ausgelagert wird.
  • Bei 502 werden zum Auslagern der Ausführung verfügbare Codeblöcke identifiziert. Gemäß einer Ausführungsform der vorliegenden Offenbarung können die zum Auslagern der Ausführung verfügbaren Codeblöcke identifiziert werden, indem der Code geparst wird, um festzustellen, welche Codeblöcke eingefügte Aufrufe aufweisen, die das Auslagern der Ausführung ermöglichen. Die für das Auslagern der Ausführung verfügbaren Codeblöcke identifizieren auch eine Untermenge von Maschinenzuständen, die repliziert werden soll, und wo sich die Untermenge von Maschinenzuständen befindet.
  • Bei 503 wird eine Feststellung gemacht, welcher Codeblock oder welche Codeblöcke auszulagern sind. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann die Feststellung in Reaktion auf den gewünschten Auslagerungsgrad gemacht werden. Zum Beispiel kann eine größere Anzahl von Codeblöcken ausgelagert werden, wenn der gewünschte Auslagerungsgrad höher ist.
  • Bei 504 wird, falls mehr als ein Server zur Annahme von ausgelagertem Code zur Ausführung verfügbar ist, eine Feststellung gemacht, welchem Server der Code zugeteilt wird. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann die Feststellung auf einer Netzwerk-Latenz zwischen dem Client und einem Server, der Prozessorlast eines Servers oder anderen Kriterien basieren.
  • 6 ist ein Flussdiagramm, das ein Verfahren zur Verwaltung der Auslagerung von Maschinencode an einen Server gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung veranschaulicht. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann das in 6 beschriebene Verfahren von dem in 1 veranschaulichten zweiten Rechengerät 120 durchgeführt werden.
  • Bei 601 wartet die Steuerung auf eine Nachricht von einem Client.
  • Bei 602 wird festgestellt, ob eine vom Client empfangene Nachricht eine Statusabfrage ist. Falls die vom Client empfangene Nachricht eine Statusabfrage ist, fährt die Steuerung bei 603 fort. Falls die vom Client empfangene Nachricht keine Statusabfrage ist, fährt die Steuerung bei 604 fort.
  • Bei 603 wird ein Status des Servers an den Client übermittelt. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann der Status angeben, dass der Server betriebsbereit ist. Der Status kann auch Informationen über die Prozessorressourcen des Servers, die Prozessorlast des Servers, die Netzwerklatenz zwischen dem Server und dem Client und/oder andere Informationen bereitstellen, die vom Client verwendet werden können, um festzustellen, ob der Server für die Ausführung von Code ausgewählt werden soll.
  • Bei 604 wird festgestellt, ob eine vom Client empfangene Nachricht eine Anfrage zur Erstellung einer virtuellen Maschine (VM) ist. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann eine Anfrage zur Erstellung einer VM vom Client empfangen werden, wenn der Server dazu ausgewählt wird, Code vom Client auszuführen. Falls die Nachricht vom Client eine Anfrage zur Erstellung einer VM ist, fährt die Steuerung bei 605 fort. Falls die Nachricht vom Client keine Anfrage zur Erstellung einer VM ist, fährt die Steuerung bei 606 fort.
  • Bei 605 wird eine VM erstellt. Gemäß einer Ausführungsform der vorliegenden Offenbarung werden eine einzelne virtuelle zentrale Verarbeitungseinheit (VCPU) und ein virtueller Arbeitsspeicher für die VM erstellt. Der virtuelle Arbeitsspeicher kann ein speicherabgebildeter Host-Arbeitsspeicherblock sein und kann konfigurierbar sein. Eine physische Gast-Wurzel-Seitentabelle wird im virtuellen Speicher eingerichtet. Die VM wird nicht gestartet, bis eine Replikationsaktualisierung vom Client empfangen worden ist.
  • Bei 606 wird festgestellt, ob eine Replikationsaktualisierung vom Client empfangen wird. Falls keine Replikationsaktualisierung vom Client empfangen wird, fährt die Steuerung bei 607 fort. Falls eine Replikationsaktualisierung vom Client empfangen wird, fährt die Steuerung bei 608 fort.
  • Bei 607 wird die Nachricht vom Client verworfen.
  • Bei 608 wird festgestellt, ob eine Versionsaktualisierungsnummer einer vom Client empfangenen Replikationsaktualisierung eine neue Versionsaktualisierungsnummer ist.
  • Gemäß einer Ausführungsform der vorliegenden Offenbarung ist die Versionsaktualisierungsnummer nicht neu, falls die Versionsaktualisierungsnummer kleiner oder gleich einer aktuellen Versionsaktualisierungsnummer ist. Falls die Versionsaktualisierungsnummer nicht neu ist, fährt die Steuerung bei 609 fort. Falls die Versionsaktualisierungsnummer neu ist, fährt die Steuerung bei 610 fort.
  • Bei 609 wird die der alten Versionsaktualisierungsnummer zugeordnete Replikationsaktualisierung verworfen.
  • Wie in 6 veranschaulicht, warten Ausführungsformen der vorliegenden Offenbarung auf drei beispielhafte Nachrichtentypen. Es ist zu beachten, dass auf zusätzliche Nachrichtentypen gewartet werden kann und diese identifiziert und verarbeitet werden können.
  • Bei 610 werden Informationen von der vom Client empfangenen Replikationsaktualisierung in die VM eingefügt. Gemäß einer Ausführungsform der vorliegenden Offenbarung beinhaltet die Replikationsaktualisierung eine Maschinenzustand-Untermenge vom Client, die eine Liste virtueller Arbeitsspeicheradressbereiche und ihre Inhalte beinhaltet. Diese werden zu virtuellen Gast-Arbeitsspeicheradressen in der für den Client bestimmten VM. Für jeden empfangenen Adressbereich werden eigene Seitentabellenstrukturen und physische Gastseiten alloziert und im physischen Gastarbeitsspeicher der VM eingerichtet, sodass die virtuellen Adressen innerhalb der VM rückverfolgbar sind. Anschließend kopiert der Server die entsprechenden Inhalte im Einklang mit den Gast-Seitentabellen an eigene Orte innerhalb des physischen Gast-Arbeitsspeichers.
  • Im Zielcode der Maschinenzustand-Untergruppe, der vom Client empfangen wurde, wird ein Zielcode-Statuszeichen für einen Adressbereich gesetzt, der den auszuführenden Ziel-Codeblock beinhaltet. Wenn der Ziel-Codeblock in den physischen Gastarbeitsspeicher in der VM kopiert wird, wird er mit Footer-Code erweitert, der die VM anweist, die Steuerung der Rechenressourcen wieder an den Server zu übergeben. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann der Footer-Code mit den folgenden Befehlen implementiert werden:
    • mov eax, 0Xdeadc0de
    • vmcall .
  • Die Seitentabellen in der VM sind so eingerichtet, dass sie auf eine Situation, in welcher der Footer-Code über einen Seitenrand hinaus auf eine neue Seite reicht, geeignet reagieren können. Nachdem der Registerzustand in die Register der VM kopiert worden ist, ist die VM startbereit. Die aktuelle Versionsaktualisierungsnummer wird mit der neuen Versionsaktualisierungsnummer überschrieben.
  • Bei 611 wird die VM ausgeführt. Gemäß einer Ausführungsform der vorliegenden Offenbarung wird die VM nur dann ausgeführt, wenn ein Ziel-Codeblock installiert worden ist. Dies geschieht, wenn bei einer Replikationsaktualisierung das Ziel-Statuszeichen gesetzt ist. Andernfalls fährt der Server damit fort, auf Client-Nachrichten zu warten und Aktualisierungen einzufügen. Gemäß einer Ausführungsform der vorliegenden Offenbarung wird das Befehlszeigerregister der VM an den Beginn des Ziel-Codeblocks gesetzt, und der Ziel-Codeblock beginnt mit der Ausführung. Die VM hält an, nachdem der angefügte Footer-Code ausgeführt worden ist. An diesem Punkt wird der vmcall-Befehl von einem Kernmodul erfasst, das die Steuerung der Rechenressourcen zurück an den Server übergibt.
  • Bei 612 wird eine aktualisierte Maschinenzustand-Untermenge der VM auf dem Server an den Client exportiert. Nach Fertigstellung der Ausführung des Ziel-Codeblocks wäre der Maschinenzustand der VM auf dem Server identisch mit dem Maschinenzustand des Clients, wenn der Client die Ausführung des Ziel-Codeblocks fertiggestellt hätte. Die aktualisierte Maschinenzustand-Untermenge der VM wird durch Replizieren des virtuellen Arbeitsspeichers (einschließlich Heap-, Daten-, BSS-, Stapelspeicher) und des Registerzustands der VM auf den Client an den Client exportiert. Die aktuelle Versionsaktualisierungsnummer der Replikationsaktualisierung wird mit der aktualisierten Maschinenzustand-Untermenge an den Client übermittelt.
  • Wie in 6 veranschaulicht, kann eine Nachricht vom Client entweder eine Statusabfrage, eine VM-Anfrage oder eine Replikationsaktualisierung sein, wobei jeder Nachrichtentyp eine andere Reaktion vom Server erzeugen kann. Es ist jedoch zu beachten, dass eine Nachricht vom Client auch eine Kombination der offenbarten, beispielhaften Nachrichten beinhalten kann und dass in Folge dessen eine Kombination der offenbarten Reaktionen gemeinsam durchgeführt werden kann. Zum Beispiel kann ein Client eine Nachricht senden, die sowohl eine VM-Anfrage als auch eine Replikationsaktualisierung beinhaltet. In diesem Fall kann der Server eine Kombination der Vorgänge 605-612 durchführen.
  • 3-6 sind Flussdiagramme, die Verfahren gemäß beispielhaften Ausführungsformen der vorliegenden Offenbarung veranschaulichen. Einige der in diesen Figuren veranschaulichten Techniken können nacheinander, parallel oder in einer beliebigen anderen als der beschriebenen Reihenfolge durchgeführt werden. Ferner können einige der veranschaulichten Verfahren in einer Schleife wiederholt oder iterativ durchgeführt werden. Es ist zu beachten, dass nicht alle der beschriebenen Techniken durchgeführt werden müssen, dass zusätzliche Techniken hinzugefügt werden können und dass manche der veranschaulichten Techniken durch andere Techniken ersetzt werden können.
  • 7 ist ein veranschaulichendes Beispiel einer Maschinenzustandsreplikation, um das Auslagern der Ausführung von Maschinencode gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung zu unterstützen. Der Client 710 ist durch ein erstes Rechengerät implementiert. Ein Arbeitsspeicher im Client 710 beinhaltet einen ersten Abschnitt 711, der Registerwerte speichert. Ein zweiter Abschnitt 712 im Arbeitsspeicher beinhaltet Orte zum Speichern von Stapeln 713, Heaps 714, BSSs 715, Daten 716 und Text 717.
  • Wenn eine Entscheidung getroffen wird, den Server 720 zu verwenden, um einen Ziel-Codeblock vom Client 710 auszuführen, wird eine Untermenge eines Maschinenzustands des Clients 710 repliziert und an den Server 720 ausgelagert. Die Maschinenzustand-Untermenge des Clients 710 beinhaltet Registerwerte 711 und Werte aus dem Stapel- 713, Heap- 714, BSS- 715, Daten- 716 und Textspeicher 717.
  • Der Server 720 ist mittels eines zweiten Rechengeräts implementiert. Der Server 720 implementiert eine VM 730, die einen ersten Abschnitt 731 virtueller Register beinhaltet, der Registerwerte speichert, die aus einem Maschinenzustand des Clients 710 repliziert worden sind. Die VM beinhaltet einen zweiten Abschnitt 732 virtuellen Arbeitsspeichers, der Speicherorte beinhaltet, um die Stapel, Heaps, BSSs, Daten und den Text zu speichern, die aus der Maschinenzustand-Untermenge des Client 710 repliziert worden sind. Der virtuelle Arbeitsspeicher beinhaltet auch einen dritten Abschnitt 740, der eine Seitentabelle implementiert, die verwendet werden kann, um virtuelle Adressen mit physischen Adressen in der VM zu verknüpfen.
  • Nachdem der Ziel-Codeblock auf der VM 730 am Server 720 ausgeführt wird, wird die Untermenge von Maschinenzuständen der VM 730 an den Client übermittelt, um wieder in den Arbeitsspeicher integriert zu werden. Durch das Integrieren der Maschinenzustand-Untermenge der VM 730 entwickelt sich der Maschinenzustand des Clients 710 so, als ob der Ziel-Codeblock lokal auf dem Client 710 ausgeführt worden wäre.
  • 8 ist ein Blockdiagramm von virtuellen Maschinen 831 und 832, die auf einem Server 800 gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung implementiert sind. Der Server 800 beinhaltet eine physische Maschine 810. Gemäß einer Ausführungsform kann die physische Maschine 810 Komponenten eines Rechengeräts wie zum Beispiel einen oder mehrere Prozessoren, einen Arbeitsspeicher, Busse und verschiedene I/O-Geräte beinhalten.
  • Der Server 800 beinhaltet einen Server-Daemon 820. Der Server-Daemon 820 ist eine Schicht, die eine Schnittstelle zur physischen Maschine 810 bildet und die Erstellung und Ausführung einer oder mehrerer VMs 830 ermöglicht. Gemäß einer Ausführungsform der vorliegenden Offenbarung kann der Server-Daemon 820 eine Sequenz von Befehlen sein, die in einem Arbeitsspeicher eines Rechengeräts gespeichert sind. Der Server-Daemon 820 verwaltet und vermittelt Rechengerätressourcen in der physischen Maschine 810 zwischen den VMs 830 und erlaubt die Isolation von oder den Datenaustausch zwischen den VMs 830. Der Server-Daemon 820 erzielt diese Isolation oder diesen Austausch durch das Virtualisieren von Ressourcen in der physischen Maschine 810 und das Exportieren einer virtuellen Hardware-Schnittstelle, die eine zugrundeliegende Architektur der physischen Maschine 810, einer Variante der physischen Maschine oder einer gänzlich anderen physischen Maschine widerspiegeln könnte.
  • Der Server 800 beinhaltet eine oder mehrere VMs 831-832 (gemeinsam als 830 dargestellt). Gemäß einer Ausführungsform der vorliegenden Offenbarung kann eine VM als ein isoliertes Modell einer Maschine beschrieben werden, einschließlich, aber nicht beschränkt auf eine Replikation der physischen Maschine 810, eine Untermenge der physischen Maschine 810 oder ein Modell einer gänzlich anderen Maschine. Eine VM kann die Ressourcen des Computergeräts in der physischen Maschine 810, eine Untermenge der Ressourcen des Rechengeräts in der physischen Maschine 810 oder gänzlich virtuelle Ressourcen, die nicht in der physischen Maschine zu finden sind, beinhalten.
  • Gemäß einer Ausführungsform der vorliegenden Offenbarung wartet der Server-Daemon 820 auf Replikationsaktualisierungen von einem Client. Wenn eine neue Replikationsaktualisierung empfangen wird, fügt der Server-Daemon 820 eine Untermenge eines Maschinenzustands des Clients aus Informationen in der Replikationsaktualisierung in die passende VM. Die Maschinenzustandsinformationen können einen Ziel-Codeblock beinhalten, den eine VM ausführen soll. Nachdem eine VM mit der Ausführung des Ziel-Codeblocks fertig ist, repliziert der Server-Daemon 820 den Maschinenzustand der VM in Form einer aktualisierten Maschinenzustand-Untermenge auf den Client.
  • Es ist zu beachten, dass der Server 800 unterschiedliche Arten von Betriebssystem ausführen kann. Gemäß einer Ausführungsform der vorliegenden Offenbarung führt der Server 800 ein Linux-Betriebssystem aus und verwendet eine kernbasierte virtuelle Maschine (KVM) mit dem Server-Daemon 820, um VMs 130 zu erstellen und zu verwalten.
  • 9 ist ein Blockdiagramm einer Einheit 900 zum Auslagern der Ausführung von Maschinencode (MCEO) gemäß einer beispielhaften Ausführungsform der vorliegenden Offenbarung. Die MCEO-Einheit 900 beinhaltet einen MCEO-Einheit-Verwalter 910. Der MCEO-Einheit-Verwalter 910 ist mit Komponenten in der MCEO-Einheit 900 gekoppelt und übermittelt Informationen zwischen diesen.
  • Die MCEO-Einheit 900 beinhaltet eine Code-Identifikationseinheit 920. Die Code-Identifikationseinheit 920 identifiziert Maschinencode auf einem ersten Rechengerät, um ihn an ein zweites Rechengerät auszulagern. Gemäß einer Ausführungsform der vorliegenden Offenbarung identifiziert die Code-Identifikationseinheit 920 den Maschinencode in Reaktion auf eine benutzergewählte Einstellung, die einen gewünschten Auslagerungsgrad angibt. Der Maschinencode kann ein Codeblock sein, der eine Funktion oder einen Teil einer Funktion beschreibt.
  • Die MCEO-Einheit 900 beinhaltet eine Replikationseinheit 930. Die Replikationseinheit 930 repliziert eine Untermenge eines Maschinenzustands des ersten Rechengeräts auf das zweite Rechengerät, wobei es erforderlich ist, dass die Untermenge des Maschinenzustands den Maschinencode ausführt. Gemäß einer Ausführungsform der vorliegenden Offenbarung beinhaltet die Untermenge des Maschinenzustands Registerwerte sowie virtuelle Arbeitsspeicheradressbereiche und -inhalte, die Stapel-, Heap-, Block-Started-by-Symbol- (BSS-), Daten- und Textregionen beinhalten.
  • Die MCEO-Einheit 900 beinhaltet eine Integrationseinheit 940. Die Integrationseinheit 940 überschreibt die Untermenge des Maschinenzustands mit einer aktualisierten Untermenge des Maschinenzustands vom zweiten Rechengerät, wobei die aktualisierte Untermenge des Maschinenzustands eine Ausführung des Maschinencodes auf dem zweiten Rechengerät widerspiegelt.
  • Es ist zu beachten, dass die MCEO-Einheit 900 ferner die unter Bezugnahme auf 4 und 5 beschriebenen Vorgänge durchführen kann.
  • 9 veranschaulicht Module, die Ausführungsformen einer MCEO-Einheit 900 implementieren. Gemäß einer Ausführungsform repräsentieren die Module Software-Module, und Operationen können von einem Computersystem wie z. B. dem in 2 veranschaulichten durchgeführt werden, indem Befehlssequenzen ausgeführt werden, die von den in 9 dargestellten Modulen repräsentiert werden. In alternativen Ausführungsformen können festverdrahtete Schaltungen an Stelle von oder in Kombination mit Software-Befehlen verwendet werden, um Ausführungsformen der vorliegenden Offenbarung zu implementieren. Daher sind Ausführungsformen der vorliegenden Offenbarung nicht auf eine konkrete Kombination von Hardware-Schaltungen und Software beschränkt.
  • Die folgenden Beispiele beziehen sich auf weitere Ausführungsformen. In einer Ausführungsform weist ein nicht flüchtiges, computerlesbares Medium Befehlssequenzen auf, wobei die Befehlssequenzen Befehle beinhalten, die, wenn sie ausgeführt werden, bewirken, dass ein Prozessor ein Verfahren zum Replizieren einer Untermenge eines Maschinenzustands eines ersten Rechengeräts auf ein zweites Rechengerät durchführt, wobei es erforderlich ist, dass die Untermenge des Maschinenzustands Maschinencode ausführt. Die Ausführung des Maschinencodes wird an das zweite Rechengerät ausgelagert.
  • In einer weiteren Ausführungsform beinhaltet das Replizieren der Untermenge des Maschinenzustands das Replizieren von Registerwerten sowie das Replizieren von virtuellen Arbeitsspeicheradressbereichen und -inhalten, die Stapel-, Heap-, Block-Started-by-Symbol- (BSS-), Daten- und Textregionen beinhalten.
  • In einer weiteren Ausführungsform beschreibt der Maschinencode eine Funktion.
  • In einer weiteren Ausführungsform, beschreibt der Maschinencode einen Teil einer Funktion.
  • In einer weiteren Ausführungsform beinhaltet das oben identifizierte, nicht flüchtige, computerlesbare Medium ferner das Identifizieren des Maschinencodes auf dem ersten Rechengerät, um ihn an das zweite Rechengerät auszulagern.
  • In einer weiteren Ausführungsform wird das Identifizieren des Maschinencodes in Reaktion auf eine benutzergewählte Einstellung durchgeführt, die einen gewünschten Auslagerungsgrad angibt.
  • In einer weiteren Ausführungsform kann der gewünschte Auslagerungsgrad durch aggressives, gemäßigtes und leichtes Auslagern gekennzeichnet sein.
  • In einer weiteren Ausführungsform beinhaltet das oben identifizierte, nicht flüchtige, computerlesbare Medium ferner das Zuweisen einer Versionsaktualisierungsnummer zur replizierten Maschinenzustand-Untermenge.
  • In einer weiteren Ausführungsform beinhaltet das oben identifizierte, nicht flüchtige, computerlesbare Medium ferner das Ausführen des Maschinencodes auf dem ersten Rechengerät, falls ein Zeitraum verstrichen ist, ohne dass eine aktualisierte Maschinenzustand-Untermenge vom zweiten Rechengerät empfangen worden ist.
  • In einer weiteren Ausführungsform beinhaltet das oben identifizierte, nicht flüchtige, computerlesbare Medium ferner das Empfangen einer aktualisierten Maschinenzustand-Untermenge vom zweiten Rechengerät, wobei die aktualisierte Untermenge des Maschinenzustands eine Ausführung des Maschinencodes auf dem zweiten Rechengerät widerspiegelt. Die Untermenge des Maschinenzustands wird mit der aktualisierten Untermenge des Maschinenzustands überschrieben. Ein aktueller Befehlszeiger des ersten Rechengeräts wird auf einen Endpunkt des Maschinencodes gesetzt.
  • In einer weiteren Ausführungsform wird das Überschreiben durchgeführt, wenn die aktualisierte Maschinenzustand-Untermenge eine aktuelle Versionsaktualisierungsnummer aufweist.
  • In einer weiteren Ausführungsform beinhaltet das oben identifizierte, nicht flüchtige, computerlesbare Medium ferner das Erhöhen der aktuellen Versionsaktualisierungsnummer nach dem Überschreiben.
  • In einer weiteren Ausführungsform beinhaltet ein Verfahren zur Verwaltung von Rechenoperationen das Replizieren einer Untermenge eines Maschinenzustands eines ersten Rechengeräts auf ein zweites Rechengerät, wobei es erforderlich ist, dass die Untermenge des Maschinenzustands Maschinencode ausführt. Die Ausführung des Maschinencodes wird an das zweite Rechengerät ausgelagert.
  • In einer weiteren Ausführungsform beinhaltet das Replizieren der Untermenge des Maschinenzustands das Replizieren von Registerwerten sowie das Replizieren virtueller Arbeitsspeicheradressbereiche und -inhalte, die Stapel-, Heap-, Block-Started-by-Symbol-(BSS-), Daten- und Textregionen beinhalten.
  • In einer weiteren Ausführungsform beschreibt der Maschinencode eine Funktion.
  • In einer weiteren Ausführungsform beschreibt der Maschinencode einen Teil einer Funktion.
  • In einer weiteren Ausführungsform beinhaltet das Verfahren, auf das oben Bezug genommen wird, ferner das Identifizieren des Maschinencodes auf einem ersten Rechengerät, um diesen an ein zweites Rechengerät auszulagern.
  • In einer weiteren Ausführungsform beinhaltet das Verfahren, auf das oben Bezug genommen wird, ferner das Identifizieren des Maschinencodes in Reaktion auf eine benutzergewählte Einstellung, die einen gewünschten Auslagerungsgrad angibt.
  • In einer weiteren Ausführungsform kann der gewünschte Auslagerungsgrad durch aggressives, gemäßigtes und leichtes Auslagern gekennzeichnet sein.
  • In einer weiteren Ausführungsform beinhaltet das Verfahren, auf das oben Bezug genommen wird, ferner das Zuweisen einer Versionsaktualisierungsnummer zur replizierten Maschinenzustand-Untermenge.
  • In einer weiteren Ausführungsform beinhaltet das Verfahren, auf das oben Bezug genommen wird, ferner das Ausführen des Maschinencodes auf dem ersten Rechengerät, falls ein Zeitraum verstrichen ist, ohne dass eine aktualisierte Maschinenzustand-Untermenge vom zweiten Rechengerät empfangen wurde.
  • In einer weiteren Ausführungsform beinhaltet das Verfahren, auf das oben Bezug genommen wird, ferner das Empfangen einer aktualisierten Maschinenzustand-Untermenge vom zweiten Rechengerät, wobei die aktualisierte Untermenge des Maschinenzustands eine Ausführung des Maschinencodes auf dem zweiten Rechengerät widerspiegelt. Die Untermenge des Maschinenzustands wird mit der aktualisierten Untermenge des Maschinenzustands überschrieben. Ein aktueller Befehlszeiger des ersten Rechengeräts wird auf einen Endpunkt des Maschinencodes gesetzt.
  • In einer weiteren Ausführungsform wird das Überschreiben durchgeführt, falls die aktualisierte Maschinenzustand-Untermenge eine aktuelle Versionsaktualisierungsnummer aufweist.
  • In einer weiteren Ausführungsform weist ein nicht flüchtiges, computerlesbares Medium Befehlssequenzen auf, wobei die Befehlssequenzen Befehlen beinhalten, die, wenn sie ausgeführt werden, bewirken, dass ein Prozessor die Vorgänge auf einem beliebigen der oben beschriebenen Verfahren durchführt.
  • In einer weiteren Ausführungsform beinhaltet eine Vorrichtung Mittel zum Durchführen der Vorgänge aus einem beliebigen der oben beschriebenen Verfahren.
  • In einer weiteren Ausführungsform beinhaltet ein Verfahren zum Verwalten von Rechenoperationen das Erstellen einer virtuellen Maschine (VM) für einen Client auf einem Server. Ein replizierter Maschinenzustand und Maschinencode, die vom Client empfangen werden, werden in die VM eingefügt. Die Steuerung der Rechenressourcen auf dem Server wird der VM übergeben, um den Maschinencode auszuführen. Die Steuerung der Rechenressourcen wird bei Fertigstellung der Ausführung des Maschinencodes wieder an den Server übergeben.
  • In einer weiteren Ausführungsform beinhaltet das Verfahren, auf das oben Bezug genommen wird, ferner das Exportieren von aktualisiertem Maschinenzustand in der VM an den Client, wobei der aktualisierte Maschinenzustand die Ausführung des Maschinencodes auf dem Server widerspiegelt.
  • In einer weiteren Ausführungsform beinhaltet das Erstellen der VM für den Client das Erzeugen einer virtuellen zentralen Verarbeitungseinheit und eines speicherabgebildeten Host-Arbeitsspeicherblocks.
  • In einer weiteren Ausführungsform beinhaltet der vom Client empfangene, replizierte Maschinenzustand Registerwerte sowie virtuelle Arbeitsspeicheradressbereiche und -inhalte, die Stapel-, Heap-, Block-Started-by-Symbol- (BSS-), Daten- und Textregionen beinhalten.
  • In einer weiteren Ausführungsform beinhaltet das Verfahren, auf das oben Bezug genommen wird, ferner das Identifizieren eines Zielcode-Statuszeichens im Maschinencode. Footer-Code wird an einem Ort des Zielcode-Statuszeichens zum Maschinencode hinzugefügt, der die VM anweist, die Steuerung der Rechenressourcen wieder an den Server zu übertragen.
  • In einer weiteren Ausführungsform beinhaltet eine Einheit zum Auslagern der Ausführung von Maschinencode eine Code-Identifizierungseinheit, die Maschinencode auf einem ersten Rechengerät identifiziert, der an ein zweites Rechengerät ausgelagert werden soll. Die Einheit zum Auslagern der Ausführung von Maschinencode beinhaltet eine Replikationseinheit, die eine Untermenge eines Maschinenzustands des ersten Rechengeräts auf das zweite Rechengerät repliziert, wobei es erforderlich ist, dass die Untermenge des Maschinenzustands Maschinencode ausführt. Die Einheit zum Auslagern der Ausführung von Maschinencode beinhaltet eine Integrationseinheit, welche die Untermenge des Maschinenzustands mit einer aktualisierten Untermenge des Maschinenzustands vom zweiten Rechengerät überschreibt, wobei die aktualisierte Untermenge des Maschinenzustands eine Ausführung des Maschinencodes auf dem zweiten Rechengerät widerspiegelt.
  • In einer weiteren Ausführungsform beinhaltet die Untermenge des Maschinenzustands Registerwerte sowie virtuelle Arbeitsspeicheradressbereiche und -inhalte, die Stapel-, Heap-, Block-Started-by-Symbol- (BSS-), Daten- und Textregionen beinhalten.
  • In einer weiteren Ausführungsform identifiziert die Code-Identifizierungseinheit den Maschinencode in Reaktion auf eine benutzergewählte Einstellung, die einen gewünschten Auslagerungsgrad angibt.
  • In einer weiteren Ausführungsform beschreibt der Maschinencode einen Teil einer Funktion.
  • In einer weiteren Ausführungsform beinhaltet eine Einheit zum Auslagern der Ausführung von Maschinencode Mittel zum Identifizieren von Maschinencode auf einem ersten Rechengerät, um diesen an ein zweites Rechengerät auszulagern. Die Einheit zum Auslagern der Ausführung von Maschinencode beinhaltet Mittel zum Replizieren einer Untermenge eines Maschinenzustands des ersten Rechengeräts auf das zweite Rechengerät, wobei es erforderlich ist, dass die Untermenge des Maschinenzustands den Maschinencode ausführt. Die Einheit zum Auslagern der Ausführung von Maschinencode beinhaltet ein Mittel zum Überschreiben der Untermenge des Maschinenzustands mit einer aktualisierten Untermenge des Maschinenzustands vom zweiten Rechengerät, wobei die aktualisierte Untermenge des Maschinenzustands eine Ausführung des Maschinencodes auf dem zweiten Rechengerät widerspiegelt.
  • In einer weiteren Ausführungsform beinhaltet die Untermenge des Maschinenzustands Registerwerte sowie virtuelle Arbeitsspeicheradressbereiche und -inhalte, die Stapel-, Heap-, Block-Started-by-Symbol- (BSS-), Daten- und Textregionen beinhalten.
  • In einer weiteren Ausführungsform identifiziert die Code-Identifizierungseinheit den Maschinencode in Reaktion auf eine benutzergewählte Einstellung, die einen gewünschten Auslagerungsgrad angibt.
  • Ausführungsformen der vorliegenden Offenbarung können in Form eines Computerprogrammprodukts oder von Software bereitgestellt werden, das/die ein Herstellungserzeugnis auf einem für den maschinellen Zugriff geeigneten oder maschinenlesbaren Medium mit Befehlen beinhalten kann. Die Befehle auf dem für den maschinellen Zugriff geeigneten oder maschinenlesbaren Medium können verwendet werden, um ein Computersystem oder ein anderes elektronisches Gerät zu programmieren. Das maschinenlesbare Medium kann folgende beinhalten, ist aber nicht auf diese beschränkt: Disketten, optische Laufwerke, CD-ROMs und magnetooptische Laufwerke oder andere Arten von Medien/maschinenlesbarer Medien, die dazu geeignet sind, elektronische Befehle zu speichern oder zu übermitteln. Die hier beschriebenen Techniken sind nicht auf eine bestimmte Software-Konfiguration beschränkt. Sie können in einer beliebigen Rechen- oder Verarbeitungsumgebung Anwendung finden. Die hier verwendeten Begriffe „für den maschinellen Zugriff geeignetes Medium“ oder „maschinenlesbares Medium“ sollen jegliches Medium beinhalten, das dazu fähig ist, eine Befehlssequenz zur Ausführung durch die Maschine zu speichern, zu kodieren oder zu übermitteln, und das bewirkt, dass die Maschine ein beliebiges der hier beschriebenen Verfahren durchführt. Ferner ist es auf dem Gebiet der Erfindung üblich, in der einen oder anderen Form von Software (z. B. einem Programm, Verfahren, Prozess, einer Anwendung, Modul, Einheit, Logik und so weiter) zu sprechen, die eine Handlung ausführt oder ein Ergebnis verursacht. Derartige Ausdrücke sind nur eine Kurzform, um zu sagen, dass die Ausführung der Software durch ein Verarbeitungssystem bewirkt, dass der Prozessor eine Handlung ausführt, um ein Ergebnis zu erzielen.
  • In der vorangehenden Beschreibung wurden Ausführungsformen der Offenbarung unter Bezugnahme auf konkrete beispielhafte Ausführungsformen davon beschrieben. Es ist jedoch offensichtlich, dass die verschiedenen Modifikationen und Änderungen an diesen vorgenommen werden können, ohne von den Ausführungsformen der Offenbarung abzuweichen. Ferner ist zu beachten, dass konkrete Angaben in den präsentierten Beispielen an einer beliebigen Stelle in einer oder mehr der offenbarten Ausführungsformen verwendet werden können.

Claims (29)

  1. Nicht flüchtiges, computerlesbares Medium, das Befehlssequenzen aufweist, wobei die Befehlssequenzen Befehle beinhalten, die - wenn sie ausgeführt werden - bewirken, dass ein Prozessor ein Verfahren durchführt, umfassend: Replizieren einer Untermenge eines Maschinenzustands eines ersten Rechengeräts auf ein zweites Rechengerät, worin es erforderlich ist, dass die Untermenge des Maschinenzustands Maschinencode ausführt; und Auslagern der Ausführung des Maschinencodes an das zweite Rechengerät.
  2. Nicht flüchtiges, computerlesbares Medium nach Anspruch 1, worin das Replizieren der Untermenge des Maschinenzustands das Replizieren von Registerwerten sowie das Replizieren virtueller Arbeitsspeicheradressbereiche und -inhalte umfasst, die Stapel-, Heap-, Block-Started-by-Symbol- (BSS-), Daten- und Textregionen beinhalten.
  3. Nicht flüchtiges, computerlesbares Medium nach Anspruch 1, worin der Maschinencode eine Funktion beschreibt.
  4. Nicht flüchtiges, computerlesbares Medium nach Anspruch 1, worin der Maschinencode einen Teil einer Funktion beschreibt.
  5. Nicht flüchtiges, computerlesbares Medium nach Anspruch 1, welches ferner das Identifizieren des Maschinencodes auf dem ersten Rechengerät, der an das zweite Rechengerät ausgelagert werden soll, umfasst.
  6. Nicht flüchtiges, computerlesbares Medium nach Anspruch 5, worin das Identifizieren von Maschinencode in Reaktion auf eine benutzergewählte Einstellung durchgeführt wird, die einen gewünschten Auslagerungsgrad angibt.
  7. Nicht flüchtiges, computerlesbares Medium nach Anspruch 6, worin der gewünschte Auslagerungsgrad durch aggressives, gemäßigtes oder leichtes Auslagern gekennzeichnet sein kann.
  8. Nicht flüchtiges, computerlesbares Medium nach Anspruch 1, welches ferner das Zuweisen einer Versionsaktualisierungsnummer an die replizierte Untermenge des Maschinenzustands umfasst.
  9. Nicht flüchtiges, computerlesbares Medium nach Anspruch 1, welches ferner das Ausführen des Maschinencodes auf dem ersten Rechengerät umfasst, falls ein Zeitraum verstrichen ist, ohne dass eine aktualisierte Maschinenzustand-Untermenge vom zweiten Rechengerät empfangen worden ist.
  10. Nicht flüchtiges, computerlesbares Medium nach Anspruch 1, ferner umfassend: Empfangen einer aktualisierten Maschinenzustand-Untermenge vom zweiten Rechengerät, wobei die aktualisierte Untermenge des Maschinenzustands eine Ausführung des Maschinencodes auf dem zweiten Rechengerät widerspiegelt; Überschreiben der Untermenge des Maschinenzustands mit der aktualisierten Untermenge des Maschinenzustands und Setzen eines aktuellen Befehlszeigers des ersten Rechengeräts auf einen Endpunkt des Maschinencodes.
  11. Nicht flüchtiges, computerlesbares Medium nach Anspruch 1, worin das Überschreiben durchgeführt wird, falls die aktualisierte Maschinenzustand-Untermenge eine aktuelle Versionsaktualisierungsnummer aufweist.
  12. Nicht flüchtiges, computerlesbares Medium nach Anspruch 11, welches ferner das Erhöhen der aktuellen Versionsaktualisierungsnummer nach dem Überschreiben umfasst.
  13. Verfahren zur Verwaltung von Rechenoperationen, umfassend: Replizieren einer Untermenge eines Maschinenzustands eines ersten Rechengeräts auf ein zweites Rechengerät, wobei es erforderlich ist, dass die Untermenge des Maschinenzustands Maschinencode ausführt, und Auslagern der Ausführung des Maschinencodes an das zweite Rechengerät.
  14. Verfahren nach Anspruch 13, worin das Replizieren der Untermenge des Maschinenzustands das Replizieren von Registerwerten sowie das Replizieren von virtuellen Arbeitsspeicheradressbereichen und -inhalten umfasst, die Stapel-, Heap-, Block-Started-by-Symbol- (BSS-), Daten- und Textregionen beinhalten.
  15. Verfahren nach Anspruch 13, welches ferner das Identifizieren Maschinencode von auf einem ersten Rechengerät, um ihm an ein zweites Rechengerät auszulagern, in Reaktion auf eine benutzergewählte Einstellung umfasst, die einen gewünschten Auslagerungsgrad angibt.
  16. Verfahren nach Anspruch 13, ferner umfassend: Empfangen einer aktualisierten Maschinenzustand-Untermenge vom zweiten Rechengerät, worin die aktualisierte Untermenge des Maschinenzustands eine Ausführung des Maschinencodes auf dem zweiten Rechengerät widerspiegelt; Überschreiben der Untermenge des Maschinenzustands mit der aktualisierten Untermenge des Maschinenzustands; und Setzen eines aktuellen Befehlszeigers des ersten Rechengeräts auf einen Endpunkt des Maschinencodes.
  17. Verfahren zur Verwaltung von Rechenoperationen, umfassend: Erstellen einer virtuellen Maschine (VM) für einen Client auf einem Server; Einfügen eines vom Client empfangenen, replizierten Maschinenzustands und Maschinencodes in die VM; Übergeben der Steuerung von Rechenressourcen auf dem Server an die VM, um den Maschinencode auszuführen, und erneutes Übergeben der Steuerung der Rechenressourcen an den Server bei Fertigstellung der Ausführung des Maschinencodes.
  18. Verfahren nach Anspruch 17, welches ferner das Exportieren von aktualisiertem Maschinenzustand in der VM an den Client umfasst, worin der aktualisierte Maschinenzustand die Ausführung des Maschinencodes auf dem Server widerspiegelt.
  19. Verfahren nach Anspruch 17, worin das Erstellen der VM für den Client das Erzeugen einer virtuellen zentralen Verarbeitungseinheit und eines speicherabgebildeten Host-Arbeitsspeicherblocks umfasst.
  20. Verfahren nach Anspruch 17, worin der replizierte Maschinenzustand, der vom Client empfangen wurde, Registerwerte sowie virtuelle Arbeitsspeicheradressbereiche und - inhalte umfasst, die Stapel-, Heap-, Block-Started-by-Symbol- (BSS-), Daten- und Textregionen beinhalten.
  21. Verfahren nach Anspruch 17, ferner umfassend: Identifizieren eines Zielcode-Statuszeichens im replizierten Maschinenzustand, der vom Client empfangen wird; und Hinzufügen von Footer-Code an einem Endpunkt des Maschinencodes, der die VM anweist, die Steuerung der Rechenressourcen wieder an den Server zu übergeben.
  22. Einheit zum Auslagern der Ausführung von Maschinencode, umfassend: eine Code-Identifizierungseinheit, die Maschinencode auf einem ersten Rechengerät identifiziert, der an ein zweites Rechengerät ausgelagert werden soll; eine Replikationseinheit, die eine Untermenge eines Maschinenzustands des ersten Rechengeräts auf das zweite Rechengerät repliziert, worin es erforderlich ist, dass die Untermenge des Maschinenzustands den Maschinencode ausführt, und eine Integrationseinheit, welche die Untermenge des Maschinenzustands mit einer aktualisierten Untermenge des Maschinenzustands vom zweiten Rechengerät überschreibt, worin die aktualisierte Untermenge des Maschinenzustands eine Ausführung des Maschinencodes auf dem zweiten Rechengerät widerspiegelt.
  23. Einheit zum Auslagern der Ausführung von Maschinencode nach Anspruch 22, worin die Untermenge des Maschinenzustands Registerwerte sowie virtuelle Arbeitsspeicheradressbereiche und -inhalte umfasst, die Stapel-, Heap-, Block-Started-by-Symbol- (BSS-), Daten- und Textregionen beinhalten.
  24. Einheit zum Auslagern der Ausführung von Maschinencode nach Anspruch 22, worin die Code-Identifizierungseinheit den Maschinencode in Reaktion auf eine benutzergewählte Einstellung identifiziert, die den gewünschten Auslagerungsgrad angibt.
  25. Einheit zum Auslagern der Ausführung von Maschinencode nach Anspruch 22, worin der Maschinencode einen Teil einer Funktion beschreibt.
  26. Einheit zum Auslagern der Ausführung von Maschinencode, umfassend: Mittel zum Identifizieren von Maschinencode auf einem ersten Rechengerät, um diesen an ein zweites Rechengerät auszulagern; Mittel zum Replizieren einer Untermenge eines Maschinenzustands des ersten Rechengeräts auf das zweite Rechengerät, worin es erforderlich ist, dass die Untermenge des Maschinenzustands den Maschinencode ausführt, sowie Mittel zum Überschreiben der Untermenge des Maschinenzustands mit einer aktualisierten Untermenge des Maschinenzustands vom zweiten Rechengerät, worin die aktualisierte Untermenge des Maschinenzustands eine Ausführung des Maschinencodes auf dem zweiten Rechengerät widerspiegelt.
  27. Einheit zum Auslagern der Ausführung von Maschinencode nach Anspruch 26, worin die Untermenge des Maschinenzustands Registerwerte sowie virtuelle Arbeitsspeicheradressbereiche und -inhalte umfasst, die Stapel-, Heap-, Block-Started-by-Symbol (BSS-), Daten- und Textregionen beinhalten.
  28. Einheit zum Auslagern der Ausführung von Maschinencode nach Anspruch 26, worin die Mittel zum Identifizieren den Maschinencode in Reaktion auf eine benutzergewählte Einstellung identifizieren, die einen gewünschten Auslagerungsgrad angibt.
  29. Einheit zum Auslagern der Ausführung von Maschinencode nach Anspruch 26, worin der Maschinencode einen Teil einer Funktion beschreibt.
DE112016004264.7T 2015-09-21 2016-08-20 Verfahren und vorrichtung zum dynamischen auslagern der ausführung von maschinencode in einer anwendung an eine virtuelle maschine Pending DE112016004264T5 (de)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US14/860,241 US10305976B2 (en) 2015-09-21 2015-09-21 Method and apparatus for dynamically offloading execution of machine code in an application to a virtual machine
US14/860,241 2015-09-21
PCT/US2016/047929 WO2017052868A1 (en) 2015-09-21 2016-08-20 Method and apparatus for dynamically offloading execution of machine code in an application to a virtual machine

Publications (1)

Publication Number Publication Date
DE112016004264T5 true DE112016004264T5 (de) 2018-09-06

Family

ID=58283515

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112016004264.7T Pending DE112016004264T5 (de) 2015-09-21 2016-08-20 Verfahren und vorrichtung zum dynamischen auslagern der ausführung von maschinencode in einer anwendung an eine virtuelle maschine

Country Status (4)

Country Link
US (1) US10305976B2 (de)
CN (1) CN107949828B (de)
DE (1) DE112016004264T5 (de)
WO (1) WO2017052868A1 (de)

Families Citing this family (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11294702B2 (en) 2019-05-01 2022-04-05 EMC IP Holding Company LLC Method and system for processing data using a processing pipeline and processing units
US11119802B2 (en) 2019-05-01 2021-09-14 EMC IP Holding Company LLC Method and system for offloading parallel processing of multiple write requests
US11119803B2 (en) * 2019-05-01 2021-09-14 EMC IP Holding Company LLC Method and system for offloading parity processing
US11204711B2 (en) 2019-10-31 2021-12-21 EMC IP Holding Company LLC Method and system for optimizing a host computing device power down through offload capabilities

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7240176B2 (en) 2004-05-01 2007-07-03 Intel Corporation Apparatus and methods for placing a managed heap
US20060184718A1 (en) * 2005-02-16 2006-08-17 Sinclair Alan W Direct file data programming and deletion in flash memories
US20060184713A1 (en) * 2005-02-16 2006-08-17 Hob Gmbh & Co. Kg Method for operating a virtual machine computer system running guest operating systems on a central processing means virtualized by a host system having register stack engine functionality
US8296759B1 (en) * 2006-03-31 2012-10-23 Vmware, Inc. Offloading operations to a replicate virtual machine
US7966039B2 (en) * 2007-02-02 2011-06-21 Microsoft Corporation Bidirectional dynamic offloading of tasks between a host and a mobile device
US8495129B2 (en) * 2010-03-16 2013-07-23 Microsoft Corporation Energy-aware code offload for mobile devices
US8554762B1 (en) * 2010-12-28 2013-10-08 Amazon Technologies, Inc. Data replication framework
US9563555B2 (en) * 2011-03-18 2017-02-07 Sandisk Technologies Llc Systems and methods for storage allocation
US8667456B1 (en) * 2011-04-20 2014-03-04 Google Inc. Cloud-based indexing for integrated development environments
CN102243596A (zh) * 2011-08-09 2011-11-16 复旦大学 一种自适应动态代码卸载方法
US20130086298A1 (en) * 2011-10-04 2013-04-04 International Business Machines Corporation Live Logical Partition Migration with Stateful Offload Connections Using Context Extraction and Insertion
WO2014172386A2 (en) 2013-04-15 2014-10-23 Seven Networks, Inc. Temporary or partial offloading of mobile applicaton functions to a cloud-based environment
CN103473072B (zh) * 2013-09-24 2017-01-25 北京大学 一种移动云计算应用程序开发方法
EP3084622A4 (de) * 2013-12-20 2018-02-28 Intel Corporation Ausführung von abladung
CN104202373B (zh) * 2014-08-21 2017-12-12 清华大学深圳研究生院 移动云计算迁移方法及系统

Also Published As

Publication number Publication date
CN107949828B (zh) 2022-05-24
CN107949828A (zh) 2018-04-20
WO2017052868A1 (en) 2017-03-30
US20170085636A1 (en) 2017-03-23
US10305976B2 (en) 2019-05-28

Similar Documents

Publication Publication Date Title
DE69901176T2 (de) Rechnersystem mit einem emulationscoprozessor und verfahren zur emulation eines anwendungsprogramms
DE69727407T2 (de) Verteilte Ausführung von modusungeeigneten Befehlen in Multiprozessorsysteme
DE102004038649B4 (de) Dauerspeichervorrichtung für Sicherungsprozess-Prüfpunktzustände
DE102016105589A1 (de) Anwenden von Firmware-Updates in einem System mit Null-Stillstandszeit durch wahlweise Abschalten und Einschalten von Hardware unter Verwenden einer Hypervisor-Schicht
DE112011103026B4 (de) Bedarfsgesteuertes Streaming von Abbildern virtueller Maschinen
DE112011102822T5 (de) Leistungsoptimierte Interrupt-Abgabe
DE102006062802B4 (de) Informationsverarbeitungssystem und Verfahren zum Steuern von mehreren Hot Plug Vorgängen
DE112012005209T5 (de) Brückenfunktion zwischen Virtual Machine Monitor und Bare-Metal-Bootvorgang
DE102020102783A1 (de) Verfahren und einrichtungen zum verbessern einer leistungsdatensammlung einer hochleistungsberechnungsanwendung
CN103530167A (zh) 一种虚拟机内存数据的迁移方法及相关装置和集群系统
DE112020004181T5 (de) Bereitstellen eines direkten datenzugriffs zwischen beschleunigern und speicher in einer datenverarbeitungsumgebung
DE112016004264T5 (de) Verfahren und vorrichtung zum dynamischen auslagern der ausführung von maschinencode in einer anwendung an eine virtuelle maschine
DE112013000369T5 (de) Verwaltung von Threads innerhalb einer Datenverarbeitungsumgebung
DE112011100323T5 (de) Architekturübergreifende Migration virtueller Maschinen
DE112012002241T5 (de) Migration eines transparenten Dateisystems zu einem neuen physischen Speicherort
EP3757802A1 (de) Verfahren und vorrichtung zur beschleunigung der migration einer virtuellen maschine
DE112010005821T5 (de) Kontextwechsel
DE102021102589A1 (de) Berechnungsgraph-optimierung
DE112011103408T5 (de) Verwalten von komprimiertem Speicher unter Verwendung gestaffelter Interrupts
DE112015000203T5 (de) "Compare and Delay"-Befehle
US10430246B2 (en) Virtualized and synchronous access to hardware accelerators
DE102015102135A1 (de) Unterbrechbares Exklusivspeichern
DE102013209643A1 (de) Mechanismus für optimierte Nachrichtenaustauschdatenübertragung zwischen Nodelets innerhalb eines Plättchens
DE102021101709A1 (de) Virtuelle serielle schnittstellen für virtuelle maschinen
DE112017001704T5 (de) Arbiterbasierte Serialisierung von Prozessor-System-Management-Interrupt-Ereignissen

Legal Events

Date Code Title Description
R012 Request for examination validly filed