-
Technisches Gebiet
-
Diese Offenbarung bezieht sich generell auf Speicherressourcen in einem Mehrknotensystem. Genauer gesagt, bezieht sich die Offenbarung auf das Poolen von Speicherressourcen über mehrere Knoten hinweg.
-
Hintergrund
-
Ein System kann verschiedene Knoten beinhalten, die alle eine bestimmte Funktion erfüllen. Das System enthält, aber ist nicht beschränkt auf, ein Netzwerk oder Rack-Serversystem und dergleichen. In einigen Fällen können die verschiedenen Knoten zusammenarbeiten, um eine ähnliche Aufgabe fertigzustellen. Die Knoten können auch verschiedene Aufgaben ohne Bezug auf die Aufgaben erfüllen, die von anderen Knoten des Systems erfüllt werden. Das System könnte auch Ressourcen wie Rechenressourcen, Speicherressourcen und Eingangs-/Ausgangsressourcen (E/A) beinhalten. Wenn ein Prozess innerhalb eines Knotens des Netzwerks versucht auf eine Speicheranfrage zuzugreifen, kann auf Speichermanagementanfragen eines E/A-Stacks zugegriffen werden, um die Speicheranforderung zu vollenden.
-
Kurze Beschreibung der Zeichnungen
-
Die folgende detaillierte Beschreibung kann besser verstanden werden unter Bezugnahme auf die begleitenden Zeichnungen, welche spezifische Beispiele einer Vielzahl von Objekten und Merkmalen der offengelegten Materie beinhalten.
-
1 ist ein Blockdiagramm eines Knoten 100, der auf gepoolte Speicherressourcen zugreifen kann;
-
2 ist eine Illustration eines Mehrknotensystems mit Zugang zu gepooltem/disaggregierten Speicher durch einen oder mehrere gemeinsame Speicher-Controller (Shared Memory Controllers – SMC);
-
3 ist eine Illustration eines disaggregierten Speichers, der jedem Knoten für verschiedene Aufgaben zugeteilt ist; und
-
4 ist ein Prozess-Flussdiagramm zum Poolen von Speicherressourcen über mehrere Knoten hinweg.
-
In der gesamten Offenbarung und in den Figuren werden dieselben Bezugsnummern verwendet, um auf gleiche Komponenten und Merkmale zu verweisen. Nummern der 100-Serie beziehen sich auf Merkmale, die ursprünglich in 1 zu finden sind, Nummern der 200-Serie beziehen sich auf Merkmale, die ursprünglich in 2 zu finden sind, usw.
-
Beschreibung der Ausführungsformen
-
In einem Mehrknotensystem, kann eine Reihe von Ressourcen dynamisch an verschiedene Knoten zugewiesen werden, abhängig von der Nachfrage an jedem Knoten. Wie oben besprochen, wird auf Speicherressourcen typischerweise durch einen E/A-Stack, wie das Transmission Control Protocol und Internet Protocol (TCP/IP) oder InfiniBand (IB) zugegriffen. Die Benutzung eines E/A-Stacks zur Unterstützung von Speicherdienstleistungen bezieht eine Vielzahl von Schichten von Softwareinteraktion ein. Zum Beispiel ist der E/A-Stack einbezogen, während Ladevorgängen, Speichervorgängen, Lesevorgängen, Schreibvorgängen, Nachfragevorgängen. Als ein Ergebnis, kann der Speicherzugang eines Knotens unter übermäßiger Wartezeit und Engpässen leiden, die aus der Nutzung des E/A-Stacks resultieren. Selbst wenn ein System einen Speicherserver einschließt, benötigt der E/A-Stack immernoch zugeordneten Speicher an jedem Knoten, um auf den Speicherserver zuzugreifen.
-
Hierin beschriebene Ausführungsformen beziehen sich auf das Poolen von Speicherressourcen über mehrere Knoten hinweg. In Ausführungsformen ist jeder Knoten eines Mehrknotensystems mit einem oder mehreren gemeinsamen Speicher-Controllern verbunden. Jeder Knoten ist mit einem oder mehreren gemeinsamen Speicher-Controllern verbunden. Jeder gemeinsame Speicher-Controller ist mit einem Speicherpool verbunden, welcher eine Kombination aus Dynamic Random Access Memory (DRAM), Festkörperlaufwerk (Solid State Drive – SSD), oder jedem anderen nichtflüchtigen Speicher (Non-Volatile Memory – NVM) oder Speichertechnologie sein kann. Der gemeinsame Speicher-Controller stellt sowohl lade- und speicherbasierten linearen Speicherzugriff unter Nutzung von flüchtigem und nicht-flüchtigem Speicher als auch Blockmodus-Speicherzugriff zu jedem Knoten bereit. Jeder Knoten greift auf den Teil des Speicherpools zu, der diesem spezifischen Knoten zugeteilt ist. In einigen Ausführungsformen ist jeder Knoten eines Mehrknotensystems mit einem oder mehreren gemeinsamen Speicher-Controllern gekoppelt, welche wiederum mit einem Speicherpool gekoppelt sind.
-
In der folgenden Beschreibung und den Ansprüchen können die Begriffe „gekoppelt” und „verbunden” gemeinsam mit ihren Ableitungen verwendet sein. Es sollte selbstverständlich sein, dass diese Begriffe nicht als Synonyme füreinander zu verstehen sind. Vielmehr kann bei bestimmten Ausführungsformen „verbunden” verwendet werden, um anzuzeigen, dass zwei oder mehr Elemente in direktem physischen oder elektrischen Kontakt miteinander stehen. „Gekoppelt” kann bedeuten, dass zwei oder mehr Elemente in direktem physischen oder elektrischen Kontakt stehen. Jedoch kann „gekoppelt” auch bedeuten, dass zwei oder mehr Elemente nicht in direktem Kontakt miteinander sind, trotzdem aber miteinander arbeiten oder interagieren.
-
Einige Ausführungsformen können in einer oder einer Kombination von Hardware, Firmware und Software implementiert werden. Einige Ausführungsformen können auch als auf einem maschinenlesbaren Medium gespeicherte Anweisungen implementiert werden, die von einer Computerplattform gelesen und ausgeführt werden können, um die hier beschriebenen Operationen auszuführen. Ein maschinenlesbares Medium kann jeden Mechanismus für das Speichern oder Senden von Information in einer durch eine Maschine (z. B. ein Computer) lesbaren Form enthalten. Zum Beispiel kann ein maschinenlesbares Medium u. a. Read Only Memory (ROM), Random Access Memory (RAM), Magnetplattenspeichermedien, optische Speichermedien, Flash-Speicher-Geräte beinhalten. Eine Ausführungsform ist eine Implementierung oder ein Beispiel. Die Bezugnahme auf „eine Ausführungsform”, „einige Ausführungsformen”, „verschiedene Ausführungsformen” oder „andere Ausführungsformen” bedeutet, dass eine bestimmte Funktion, Struktur oder ein bestimmtes Merkmal, die/das im Zusammenhang mit den Ausführungsformen beschrieben wird, in mindestens einigen Ausführungsformen, aber nicht notwendigerweise allen Ausführungsformen der Erfindungen eingeschlossen ist. Die verschiedenen Aufführungen von „eine Ausführungsform” oder „einige Ausführungsformen” beziehen sich nicht notwendigerweise auf dieselben Ausführungsformen. Elemente oder Aspekte einer Ausführungsform können mit Elementen oder Aspekten einer anderen Ausführungsform kombiniert werden.
-
Nicht alle Komponenten, Funktionen, Strukturen, Merkmale usw., die hier beschrieben und gezeigt sind, müssen in einer bestimmten Ausführungsform oder Ausführungsformen enthalten sein. Wenn die Beschreibung einer Komponente, eines Merkmals, einer Struktur oder einer Charakteristik aussagt, dass sie/es enthalten sein „kann” oder „könnte”, dann ist es zum Beispiel für diese bestimmte Komponente, ein bestimmtes Merkmal, eine bestimmte Struktur oder Charakteristik nicht erforderlich, enthalten zu sein. Wenn in der Beschreibung oder den Ansprüchen Bezug auf „ein” Element genommen wird, bedeutet das nicht, dass es nur eines von diesem Element gibt. Wenn die Beschreibung oder die Ansprüche Bezug auf „ein zusätzliches” Element nehmen, schließt das nicht aus, dass es dort mehr als ein zusätzliches Element gibt.
-
Es ist zu beachten, dass, obwohl einige Ausführungsformen in Bezugnahme auf bestimmte Implementierungen beschrieben wurden, sind andere Implementierungen gemäß einiger Ausführungsformen möglich. Zusätzlich brauchen die Anordnung und/oder Reihenfolge von Schaltelementen oder anderen Merkmalen, die in den Zeichnungen gezeigt und/oder hier beschrieben sind, nicht auf die bestimmte gezeigte und beschriebene Weise angeordnet sein. Viele andere Anordnungen sind gemäß einiger Ausführungsformen möglich.
-
Bei jedem in einer Figur gezeigten System können die Elemente in einigen Fällen jeweils dieselbe Referenznummer oder eine unterschiedliche Referenznummer aufweisen, um anzudeuten, dass die repräsentierten Elemente unterschiedlich und/oder ähnlich sein könnten. Ein Element kann jedoch flexibel genug sein, um unterschiedliche Implementierungen zu haben und es kann mit einigen oder allen hier dargestellten oder beschriebenen Systemen funktionieren. Die verschiedenen in den Figuren dargestellten Elemente können dieselben Elemente oder sie können unterschiedlich sein. Welches ein erstes Element genannt wird und welches ein zweites Element, ist willkürlich.
-
1 ist ein Blockdiagramm eines Knotens 100, der auf gepoolte Speicherressourcen zugreifen kann. Der Knoten 100 kann u. a. zum Beispiel ein Laptop, Computer, Desktop-Computer, Tablet-Computer, mobiles Gerät, Server oder Blade-Server sein. In einigen Beispielen ist ein Knoten jedes beliebige Gerät, dass in der Lage ist, über ein Mehrknotensystem hinweg mit einem anderen Knoten zu kommunizieren. Dementsprechend ist in einigen Beispielen das Mehrknotensystem ein Netzwerk von Knoten, wo jeder Knoten jedes beliebige Gerät ist, dass in der Lage ist, über das Netzwerk hinweg zu kommunizieren. Zusätzlich ist in einigen Beispielen der Mehrknoten ein Server in einem Rack-Serversystem. Der Knoten 100 kann eine zentralen Verarbeitungseinheit (Central Processing Unit – CPU) 102 beinhalten, die dazu konfiguriert ist gespeicherte Anweisungen auszuführen. Die CPU 102 kann ein Einkernprozessor, ein Mehrkernprozessor, ein Computercluster oder jede beliebige Anzahl anderer Konfigurationen sein. In einigen Fällen kann die CPU 102 und andere Komponenten des Knotens 100 als ein System an Chip (SOC) implementiert werden. Zudem kann der Knoten 100 mehr als eine CPU 102 beinhalten. Die Anweisungen, die von der CPU 102 ausgeführt werden, können benutzt werden, um das Poolen von Speicherressourcen über mehrere Knoten hinweg zu ermöglichen.
-
Der Knoten 100 kann außerdem einen Grafikprozessor (graphics processing unit – GPU) 104 beinhalten. Wie dargestellt, kann die CPU 102 über Bus 106 mit der GPU 104 verbunden sein. Dennoch können sich die CPU 102 und die GPU 104 in einigen Ausführungsformen auf dem selben Chip befinden. Die GPU 104 kann dazu konfiguriert werden, eine beliebige Anzahl von Grafikoperationen innerhalb des Knotens 100 auszuführen. Die GPU 104 kann zum Beispiel dazu konfiguriert werden, grafische Bilder, grafische Frames, Videos oder ähnliches darstellen oder manipulieren, um von einem Benutzer des Knotens 100 angezeigt zu werden. Dennoch enthält der Knoten 100 in einigen Fällen keine GPU 104.
-
Die CPU 102 kann auch durch den Bus 106 durch einen CPU Eingang/Ausgang (E/A) verbunden werden. In Ausführungsformen wird die CPU E/A 108 so gebraucht, dass CPU 102 auf gepoolten Speicher in einem Mehrknotensystem zugreifen kann. Die CPU 102 kann auf den gepoolten Speicher zugreifen ohne innerhalb des Knotens 100 zugeteilten Speicher einzuschließen. Weiterhin kann der CPU E/A 108 auf gepoolten Speicher innerhalb des Mehrknotensystem ohne die Nutzung von Kommunikations- und Networkingprotokollen, wie Transmission Control Protocol and Internet Protocol (TCP/IP) und InfiniBand (IB), zugreifen. In Ausführungsformen wird ein Link, wie z. B. eine Plattsmouth (PLM) Link 110 benutzt, um jeden Knoten mit einem gemeinsamen Speicher-Controller zu verbinden, der mit auf Speichersemantik basierten Protokollen auf einer seriellen Verbindung läuft. Eine Peripheral Component Interconnect Express (PCIe) Link 112 kann benutzt werden, um die CPU 102 mit einem Netzwerk zu verbinden.
-
Die CPU 102 kann außerdem über Bus 106 mit einer Eingangs-/Ausgangsschnittstelle (E/A) 114 verbunden werden, um den Knoten 100 mit einem oder mehreren E/A-Geräten 116 zu verbinden. Die E/A-Geräte 116 können z. B. eine Tastatur und ein Zeigegerät umfassen, wobei das Zeigegerät u. a. ein Touchpad oder einen Touchscreen umfassen kann. Die E/A-Geräte 116 können eingebaute Komponenten des Knotens 100 sein oder sie können Geräte sein, die extern mit Knoten 100 verbunden sind. CPU 102 kann über Bus 106 mit einer Displayschnittstelle 118 verbunden werden, um den Knoten 100 mit einem Anzeigegerät 120 zu verbinden. Das Anzeigegerät 120 kann einen Anzeigebildschirm beinhalten, der eine eingebaute Komponente des Knotens 100 ist. Das Anzeigegerät 120 kann außerdem u. a. einen Computermonitor, ein Fernsehgerät oder einen Projektor beinhalten, der extern mit Knoten 100 verbunden ist.
-
Das Blockdiagramm von 1 soll nicht anzeigen, dass der Knoten 100 alle von den in 1 darstellten Komponenten beinhalten muss. Außerdem kann der Knoten 100 je nach Details der spezifischen Implementierung eine beliebige Anzahl von zusätzlichen, in 1 nicht dargestellten Komponenten beinhalten. Weiterhin kann der Knoten 100 weniger Komponenten beinhalten, als die in 1 illustrierten. Zum Beispiel kann der Knoten 100 nicht eine GPU 104, E/A Geräteschnittstelle 114 oder Anzeigeschnittstelle 118 einschließen. 2 ist eine Illustration eines Mehrknotensystems 200. Das Mehrknotensystem kann einen gepoolten Speicher 202 beinhalten. Der gepoolte Speicher 202 kann jede andere Art von Speichertechnologie, wie z. B. Random Access Memory (RAM), Read Only Memory (ROM), Flash-Speicher oder jedes andere geeignete Speichersystem beinhalten. Der gepoolte Speicher 202 kann beispielsweise ein Dynamic Random Access Memory (DRAM) beinhalten. Der gepoolte Speicher 202 kann auch physischer Speicher, wie eine Festplatte, ein optisches Laufwerk, ein Thumbdrive oder eine Reihe von Laufwerken oder jede beliebige Kombination derselben sein. In einigen Ausführungsformen enthält der gepoolte Speicher DIMMs (Dual In-line Memory Module). In einigen Fällen können diese DIMMs die nächste Generation von auf nichtflüchtigen Speichern(Non-Volatile Memory – NVM)-basierenden DIMMs sein, was eine größere Speicherkapazität und sowohl beständige als auch volatile Speichercharakteristika ermöglicht. Zusätzlich kann in Ausführungsformen ein DIMM mit einem anderen Formfaktor ersetzt werden, der eine Sammlung von einem oder mehreren Speichergeräten ist. Das Konzept des gepoolte Speichers 202 kann auf verschiedene Server (z. B. Cloud Computing, Enterprise), High-Performance-Computing und Clientnutzung, anwendbar sein. Auf den gepoolten Speicher kann durch einen gemeinsamen Speicher-Controller 204 zugegriffen werden. Obwohl ein gemeinsamer Speicher-Controller 204 illustriert ist, kann das System 200 jede beliebige Anzahl von gemeinsamen Speicher-Controllern haben. Der gemeinsame Speicher-Controller 204 kann mehrere DIMMS hosten. Der gemeinsame Speicher-Controller 204 kann Double Date Rate (DDR) Busse, transaktionale DDR (DDR-T) Busse und andere Links/Busse unterstützen, die Verbindungen mit verschiedenen Speichern ermöglichen, die in den Speicherpool 202 eingeschlossen werden können, einschließlich DRAM und nichtflüchtigen DIMM (NVDIMM). Der gepoolte Speicher kann auch eine andere Speicherhierarchie, wie den zweistufigen Speicher (two level memory – 2LM) unterstützen, indem er die ”Far Memory” hostet, und damit die Memory-Side-Caching-Fähigkeit im integrierten Speicherkontroller (integrated Memory Controller – iMC) auf jedem Knoten übernimmt.
-
Ein Knoten 100A und ein Knoten 100B sind auch im System eingeschlossen. Obwohl das System 200 zwei mit dem gemeinsamen Speicher-Controller verbundene Knoten illustriert, kann jede beliebige Anzahl von Knoten direkt mit mehreren gemeinsamen Speicher-Controllern verbunden werden. Die Knoten 100A und 100B können sich mit dem gemeinsamen Speicher-Controller 204 verbinden, um auf den gepoolten Speicher 202 zuzugreifen. Ein Plattsmouth (PLM) Link wird benutzt, um jeden Knoten mit einem gemeinsamen Speicher-Controller zu verbinden. Der PLM kann beide Speichersemantiken mit optionalen Verzeichnisinformationen unterstützen, die in bestehenden Speicherprotokollen von Intel, wie z. B. dem SMI3 und oder einem E/A-Protokoll mit Lade- und Speicherfunktion, wie z. B. dem Peripheral Component Interconnect Express (PCIe) Protokoll vorhanden sind. In Ausführungsformen kann jeder Link, der Speichersemantiken und ein E/A-Protokoll unter Nutzung einer gemeinsamen Reihe von Pins unterstützen kann, benutzt werden, um einen Knoten mit einem gemeinsamen Speicher-Controller zu verbinden. In Ausführungsformen kann der PLM durch die Nutzung einer physikalen Ebene der PCIe-Architektur implementiert werden. Zusätzlich zur E/A-Funktionalität, die durch die PCIe-Architektur ermöglicht wird, werden direkte Speichersemantiken unter Nutzung gemeinsamer PCIe-Pins ermöglicht. Die Speichersemantiken ermöglichen es jedem Knoten mit dem Speicherpool zu kommunizieren, als ob er direkt mit dem Speicherpool verbunden wäre. Zum Beispiel kann der PLM Directory Information, Speicheradressenstellen und Blockspeicherstellen auf einer gemeinsamen Reihe von PCIe-Pins schicken. Auf diese Art kann der Knoten einen Standardlink benutzen, um Zugriff zu jedem beliebigen Speicher, der mit dem gemeinsamen Speicher-Controller verbunden ist, zu erhalten. Der Knoten kann ohne jegliche Re-Validierung des gepoolten Speichers aktualisiert werden, da die Verbindung zwischen dem Knoten und dem Speicherpool konstant bleibt. Zusätzlich können Speicherupgradezyklen unabhängig von CPU-Upgradezyklen sein. Zum Beispiel kann der Speicherpool nach mehreren CPU-Upgrades ersetzt werden, was dem Kunden erhebliche Kosten erspart.
-
In Ausführungsformen können mehrere gemeinsame Speicher-Controller miteinander durch PLM Links verbunden werden. Mehrere gemeinsame Speicher-Controller können auch miteinander durch einen herkömmlichen Netzwerk-Stack wie Ethernet, Infiniband, StormLake und so weiter verbunden werden, solange die Netzwerkhardware in der Lage ist, Datenpakete oder Flusskontrollziffern (flow control digits – Flits) zu den gemeinsamen Speicher-Controllern am Ziel zu liefern. Besonders die herkömmliche Netzwerkhardware kann unabhängige virtuelle Spuren nutzen, um Servicequalität für das PLM-Protokoll zu ermöglichen. In jedem Fall ermöglicht/ermöglichen einer oder mehrere gemeinsame Speicher-Controller direkten Speicherzugriff durch Hardware ohne softwareinduzierte Wartezeit.
-
Zusätzlich dazu können sich der gemeinsame Speicher-Controller 204 und die Knoten 100A und 100B mit dem Netzwerkverbindungsblock 206 verbinden. In einigen Ausführungsformen ist der Netzwerkverbindungsblock ein Network Interface Controller (NIC), der dazu konfiguriert werden kann, die Knoten 100A und 100B und jeden der gemeinsamen Speicher-Controller 204 mit einem Netzwerk 208 zu verbinden. Das Netzwerk 208 kann eine Festnetzverbindung, eine kabelloses Netzwerk oder ein Mobilfunknetzwerk sein. Das Netzwerk 208 kann unter anderem ein Wide Area Network (WAN, Weitverkehrsnetz), ein Local Area Network (LAN, lokales Netzwerk) oder das Internet sein. Zum Beispiel kann Netzwerk 208 ein 3GPP LTE Netzwerk oder ein WiFi Netzwerk sein. Dementsprechend sind die Knoten 100A und Knoten 100B nicht auf die Art der Verbindung begrenzt. Stattdessen können die Knoten sich mit verschiedenen Ressourcen unter Nutzung mehrerer Links verbinden. In einigen Fällen, gibt das Netzwerk 208 Zugriff auf zusätzliche Speichergeräte und Speicherlaufwerke und der gemeinsame Speicher-Controller 204 kann das Netzwerk 208 benutzen, um die zusätzlichen Speichergeräte und Speicherlaufwerke zuzuteilen.
-
3 ist eine Illustration eines disaggregierten/gepoolten Speichers, der verschiedenen Knoten zugeteilt ist. Ein Speicher 202 kann an einen gemeinsamen Speicher-Controller gekoppelt sein. Jeder der Knoten 100A, 100B und 100C benutzen den gemeinsamen Speicher-Controller um auf den gepoolten Speicher 202 zuzugreifen. In 3 ist der gepoolte Speicher ist als Tray nichtflüchtigen Speichers (NVM) illustriert, wie z. B. Tray nichtflüchtigen Speichers (NVM), der in Rack-Serversystemen eingeschlossen ist. Der Tray nichtflüchtigen Speichers (NVM) schließt eine Illustration eines disaggregierten Speichers 300 ein.
-
Der gepoolte 202 Speicher kann standard flüchtige DRAM DIMMs oder nichtflüchtige DIMMs (NVDIMMs) beinhalten. Wenn NVDIMMs benutzt werden, um den Speicherpool zu bauen, kann der Speicher als ein Speichergerät funktionieren. Dementsprechend kann auf den Speicherpool unter Nutzung von Speicherblöcken zugegriffen werden, da es ein typisches Speichergerät anstatt ein linearer Speicherzugriff ist, der auf Datenbytes linear zugreift. In einigen Ausführungsformen ist der disaggregierte Speicher 300 in drei Arten von Speicher partitioniert: einem Fernspeicher (far memory – FM) 306, einem peristenten Speicher (persistent memory – PM) 304 und einem Blockspeicher (block memory – BM) 302. Der FM stellt den herkömmlichen flüchtigen Speicher dar, wie die einem Knoten zugehörigen Speicherinhalte verloren gehen, nachdem der Knoten aufgrund von Ausschalten, systemmanagementinduzierter Resets usw. zurückgesetzt wird. Auf den PM wird als regulärer Speicher direkt von der CPU unter Nutzung des traditionellen Lade-/Speichermodells zugegriffen. Dennoch werden Speicherinhalte über Resets/Ausschalten hinweg erhalten. Jeder der FM 306 und PM 304 können durch Memory-Side-Caching basierter Architektur ermöglicht werden. Der Speicherpool 202 kann auf variable Art in FM 306, PM 304 und BM 302 eingeteilt werden. Der BM 302 ist Speicher, der ähnlich dem ist, der im Speichergerät enthalten ist. Auf den BM 302 wird durch Operationen zugegriffen, die Speicherblöcke nutzen, indem er auf einen Softwaredriver im Knoten zugreift.
-
Der gemeinsame Speicher-Controller steuert die Teilung des Speichers zwischen FM 306, PM 304 und BM 302. Der gemeinsame Speicher-Controller steuert auch die Zuteilung des Speichers zu jedem Knoten. Dementsprechend wird jedem der Knoten 100A, 100B und 100C ein Teil des disaggregierten Speichers 300 zugeteilt. Der gemeinsame Speicher-Controller kann Register enthalten, die die Speicherteilung durchführen, welche für jede Speicherregion jedes Knotens gemappt werden können. Die Speicherregion jedes Knotens kann im Fall eines Blockspeichers eine E/A oder MMIO (memory mapped I/O [E/A]) zugängliche Region sein. In einigen Fällen kann die Speichermenge, die jedem Knoten zugeteilt ist, durch einen Tray-/Rackmanagement Stack verändert werden. Weiterhin kann in einigen Fällen der Speicher, der mit einem ersten gemeinsamen Speicher-Controller verbunden ist auch einem Knoten zugewiesen werden, der nicht direkt mit dem ersten gemeinsamen Speicher-Controller verbunden ist. Wenn Speicher in einem ersten, entfernten gemeinsamen Speicher-Controller zu einem Knoten gemappt werden kann, erhält ein zweiter, lokaler gemeinsamer Speicher-Controller die Adressinformation für den entfernten gemeinsamen Speicher-Controller aufrecht, um die Zugriffe angemessen zu routen.
-
In Ausführungsformen wird jeder der Knoten einem oder mehreren virtuellen DIMMs (VDIMMs) zugewiesen, basierend auf der Anzahl von Knotenpartitionen, die der Knoten erhält. Der VDIMM kann einer teilweiser DIMM sein oder der VDIMM kann mehrere physische DIMMs (voll und/oder teilweise) umspannen. Knotenidentifikationen (IDs) können jedem VDIMM durch einen oder mehrere gemeinsame Speicher-Controller zugewiesen werden, so dass sie Requests/Responses zu unabhängigen Knoten vereindeutigt werden können. Es ist zu beachten, dass die gleichen Knoten-IDs durch die gemeinsamer Speicher-Controller/Inter-SMC-Links (SMC = Shared Memory Controller = gemeinsamer Speicher-Controller) hinweg aufrechterhalten werden, um den gemeinsamen Speicher-Controller und den Knoten innerhalb des gemeinsamer Speicher-Controllers zu identifizieren, woher der Request kam und/oder die Response, die dahin geliefert werden muss. Durch den VDIMM nehmen die Knoten andere Knoten nicht wahr, die den physischen Speicher und Speichergeräte mit ihm teilen, die die VDIMM bilden. Der Knoten kann jede Operation auf dem VDIMM-Level durchführen, wie einen Reset, Hot-Add und Hot-Remove. Der eine oder die mehreren gemeinsamen Speicher-Controller nehmen die VDIMMs wahr, die jedem Knoten zugeteilt sind und jeder gemeinsamer Speicher-Controller steuert die Befehle, die es für die VDIMMs empfängt. Der gemeinsamer Speicher-Controller erhält die Knoten-ID zusammen mit der Adresse oder VDIMM-Nummer aufrecht, so dass der gemeinsamer Speicher-Controller diese benutzen kann, um zwischen Speicherzugang und verschiedenen Knoten zu vereindeutigen.
-
Obwohl der die Knotenpartitionen als benachbarte Speichergebiete illustriert sind, können die Knotenpartitionen innerhalb des Speicherpools nicht benachbart sein. Weiterhin, obwohl die Knotenpartitionen als zu einem Tray nichtflüchtigen Speichers gehörend illustriert sind, der von einem gemeinsamen Speicher-Controller kontrolliert wird, können die Knotenpartitionen 300 Speicher darstellen, der aus mehreren gemeinsamen Speicher-Controllern aggregiert wird, die auf einen oder mehrere Ort(e) zugreifen kann, die jede Art von Speicher oder Speichergerät beinhalten. Zum Beispiel können die Knotenpartitionen auch Speicher beinhalten, auf die über einen Netzwerkchip zugegriffen werden kann.
-
4 ist ein Prozess-Flussdiagramm zum Poolen von Speicherressourcen über mehrere Knoten hinweg. Bei Block 402 ist ein Speicherpool durch den Rack-/Traycontroller einer Reihe von Knoten zugeteilt, die entweder direkt mit dem gemeinsamen Speicher-Controller verbunden sind oder durch ein entfernten gemeinsamer Speicher-Controller verbunden sind. Es ist zu beachten, dass Block 402 Speicher über mehrere gemeinsame Speicher-Controller hinweg zuweisen kann. In einigen Fällen, ist der Speicherpool in Fernspeicher, persistenten Speicher und Blockspeicher eingeteilt. Bei Block 404 ist der zugeteilte Speicherpool zur Speicherregion jedes Knotens gemappt. Wenn die Systemsoftware eines Knotens (wie z. B. BIOS/OS/VMM) Speicher anfordert (Fernspeicher, persistenten Speicher und/oder Blockspeicher), teilt der Rack-/Traycontroller den angeforderten Speicher aus dem Speicherpool, wie in Block 402 beschrieben, zu. In dem Prozess, stellt der Knoten seine Kennfeldinformationen für den angeforderten Speicher bereit und der Rack-/Traycontroller stellt den/die gemeinsamen Speicher-Controller mit der angemessenen Kennfeldinformation aus der Perspektive des Knotens auf. Jeder gemeinsame Speicher-Controller speichert auch Informationen bezüglich dazu, wie jeder Knoten den gesamte gepoolte Speicher-Adressraum mappt. Bei Block 406 kann jeder Knoten direkt auf seinen zugeteilten Teil des Speicherpools zugreifen, indem er einen gemeinsamen Speicher-Controller ohne zusätzlichen Software-Overhead nutzt. Das Poolen von Speicher ermöglicht es, dass Daten von Knoten ohne Message-Passing und Kopieren von Daten gemeinsam benutzt werden können. Zusätzlich dazu können die gegenwärtigen Techniken dazu in der Lage sein, Speicher effizienter zu benutzen und physische Speichergeräte können zwischen mehreren Knoten geteilt werden, wobei jeder Knoten nicht wahrnimmt, dass das physische Speichergerät gemeinsam benutzt wird, da jeder Knoten nur auf den Speicher zugreifen kann, der ihm zugeteilt ist. Dies ist eine kosteneffektive Zuteilung von Speicher, die teilweise DIMM-Zuweisung an die Knoten ermöglicht, welche als Speicherkapazitätserweiterungen nützlich sind. Das Poolen von Speicher ermöglicht eine höhere Rechendichte, da der Speicher, der zum Rechnen benutzt wird von anderem Speicher disaggregiert ist. Auf diese Art kann mehr Speicher im Mehrknotensystem frei für Rechenknoten sein.
-
In einigen Fällen kann der gemeinsamen Speicher-Controller flexible Speicherzuteilung basierend auf Nachfrage von anderen Knoten ermöglichen. In einem solchen Szenario kann Speicherzuteilung sich basierend auf einer von jedem Knoten ausgeführten Arbeitslast verändern. Die Speicherzuteilung kann einem Knoten durch eine Memory Map zugewiesen werden. Weiterhin ermöglicht Speicherpooling, verglichen mit anderen Systemen ohne Speicherpooling größere Energieeffizienz, da jeder Knoten nicht mit der maximalen Speicherkapazität überversorgt ist, die er brauchen könnte.
-
Zusätzlich dazu kann in einigen Fällen ein Speicherserver genutzt werden, um Speicher zu poolen. In einem solchen Szenario kann ein Knoten zusätzlichen Speicher enthalten, den er anderen Knoten bereitstellt, basierend auf deren Nachfrage. Der zusätzliche Speicher kann entsprechend einem Betriebssystem oder der Nachfrage virtueller Maschinen bereitgestellt werden. Speicher-Clustering kann auch durch ein in-memory Datenraster verfügbar sein. Weiterhin können Replikationsdienstleistungen durch die gegenwärtigen Techniken für persistenten Speicher innerhalb von oder über Trays hinweg ermöglicht werden. In unserem Gebrauch kann nichtflüchtiger Speicher als beides – flüchtiger Hauptspeicher (FM) und nichtflüchtiger Speicher, wiederum als beides – memory-mapped (PM) und als ein block-mapped E/A-Gerät (BM) genutzt werden. Als Ergebnis kann der nichtflüchtige Speicher als ein Speicher gemappt, im Gegensatz zu einem E/A-Gerät gemappt werden, was Performanceauswirkungen hat. Den nichtflüchtigen Speicher als nichtflüchtigen Speicher zu mappen, während der nichtflüchtige Speicher als Speichergerät benutzt wird, ermöglicht Replikationsdienstleistungen, die mit herkömmlichen Speichergeräten nicht geboten werden.
-
BEISPIEL 1
-
Ein Apparat zum Poolen von Speicherressourcen über mehrere Knoten hinweg wird hierin beschrieben. Der Apparat einhält einen gemeinsamer Speicher-Controller und einen Speicherpool. Jeder Knoten der mehreren Knoten ist mit dem gemeinsamen Speicher-Controller verbunden. Der Speicherpool, der mit dem gemeinsamen Speicher-Controller verbunden ist, in welchem ein Teil des Speicherpools jedem der mehreren Knoten zugeteilt ist.
-
Der Apparat kann eine Pluralität von gemeinsamen Speicher-Controllern beinhalten und jeder der mehreren Knoten kann mit einem oder mehreren der Pluralität von gemeinsamen Speicher-Controllern verbunden sein. Der gemeinsame Speicher-Controller kann durch einen Plattsmouth Link, einem Link der beides – Speichersemantiken und ein E/A-Protokoll unterstützt verbunden werden, indem er eine gemeinsame Reihe von Pins, einen Netzwerk-Stack oder eine Kombination derselben nutzt. Zusätzlich kann eine Plattsmouth Link dazu benutzt werden, jeden Knoten mit einem gemeinsamen Speicher-Controller zu verbinden. Ein Link der beides – Speichersemantiken und ein E/A-Protokoll unterstützt, indem er eine gemeinsame Reihe von Pins nutzt, kann benutzt werden, um jeden Knoten mit dem gemeinsamen Speicher-Controller zu verbinden. Der Speicherpool kann Dynamic Random Access Memory (DRAM), Festkörperlaufwerk (Solid State Drive – SSD) oder jeden anderen nichtflüchtigen Speicher oder Speichertechnologie oder Kombination derselben enthalten. Der gemeinsamer Speicher-Controller kann lade- und speicherbasierten linearen Speicherzugriff bereitstellen. Weiterhin kann der gemeinsame Speicher-Controller Blockmoduszugang zu jedem dem Knoten zugehörigen Speicherteil geben und der Speicherpool kann DIMMs enthalten, die nichtflüchtigen, auf DIMMs basierenden Speicher der nächsten Generation mit einer großen Kapazität beinhalten.
-
BEISPIEL 2
-
Ein System wird hierin beschrieben. Das System enthält einen Bladeserver mit eine oder mehreren Knoten und einem gemeinsamen Speicher-Controller. Der gemeinsame Speicher-Controller ist mit einer Pluralität von Knoten und einem Speicherpool gekoppelt und der gemeinsame Speicher-Controller steuert Speicherdienstleistungen zwischen dem Speicherpool und der der Pluralität von Knoten auf eine Art, dass die Pluralität von Knoten auf den Speicherpool ohne Nutzung der E/A-Funktionalität zugreifen kann.
-
Das System kann eine Pluralität von gemeinsamen Speicher-Controllern enthalten, in welchem jeder Knoten oder Pluralität von Knoten verbunden mit einem oder mehreren der Pluralität von gemeinsamen Speicher-Controllern ist. Jeder gemeinsame Speicher-Controller kann mit anderen gemeinsamen Speicher-Controllern durch einen Plattsmouth Link, einen Link der beides – Speichersemantiken und ein E/A-Protokoll unterstützt, indem es eine gemeinsame Reihe von Pins, einen Netzwerk-Stack oder eine Kombination derselben nutzt. Weiterhin kann ein Plattsmouth Link benutzt werden um jeden Knoten mit einem gemeinsamen Speicher-Controller zu verbinden. Ein Link der beides – Speichersemantiken und ein E/A-Protokoll unterstützt, indem er eine gemeinsame Reihe von Pins nutzt, kann benutzt werden, um jeden Knoten mit dem gemeinsamen Speicher-Controller zu verbinden. Der Speicherpool kann einen Dynamic Random Access Memory (DRAM), Festkörperlaufwerk (Solid State Drive – SSD) oder andere nichtflüchtige Speicher (NVM) oder Speichertechnologie oder jede Kombination derselben beinhalten. Der Speicherpool kann auch cloud-basierte Speichergeräte und Speicherlaufwerke beinhalten.
-
BEISPIEL 3
-
Eine Methode des Poolens von Speicherressourcen über mehrere Knoten hinweg wird hierin beschrieben. Die Methode beinhaltet auch die Zuteilung eines Teils von gepoolten Speicher in eine Art von Speicher. Die Methode schließt auch das Mappen des zugeteilten Teils der Speicherpools zu der Speicherregion jedes Knotens ein. Weiterhin schließt die Methode das Zugreifen auf den zugeteilten Teil der Speicherpool für jeden Knoten unter Nutzung eines gemeinsamen Speicher-Controller ein.
-
Ein gemeinsamer Speicher-Controller kann Register enthalten und die Zuteilung des Speicherpools durchführen. Der Speicher eines gemeinsamen Speicher-Controller kann einem Knoten zugewiesen werden, der nicht direkt mit dem gemeinsamen Speicher-Controller verbunden ist. Zusätzlich dazu kann die virtuelle DIMM (VDIMM) ein teilweiser DIMM sein. Weiterhin kann der VDIMM mehrere physische DIMMs, Speichergeräte oder Speicherlaufwerke überspannen.
-
Bei der vorstehenden Beschreibung sind verschiedene Ausführungsformen des offenbarten Gegenstandes beschrieben worden. Zum Zwecke der Erklärung wurden spezifische Anzahlen, Systeme und Konfigurationen dargelegt, um ein gründliches Verständnis des Gegenstandes bereitzustellen. Es ist jedoch für einen Fachmann, der den Vorteil dieser Offenbarung hat, selbstverständlich, dass der Gegenstand ohne die spezifischen Details umgesetzt werden kann. In anderen Fällen wurden wohl bekannte Merkmale, Komponenten oder Module weggelassen, vereinfacht, kombiniert oder aufgeteilt, um den offenbarten Gegenstand nicht in den Hintergrund rücken zu lassen.
-
Verschiedene Ausführungsformen des offenbarten Gegenstandes können in Hardware, Firmware, Software oder Kombinationen davon implementiert sein, und können unter Bezugnahme auf oder in Verbindung mit Programmcode, wie z. B. Befehlen, Funktionen, Verfahrensweisen, Datenstrukturen, Logik, Anwendungsprogrammen, Designdarstellungen oder Formaten zur Simulation, Emulation und Herstellung eines Designs beschrieben werden, die, wenn von einer Maschine darauf zugegriffen wird, dazu führen, dass die Maschine Aufgaben ausführt, wobei abstrakte Datentypen oder hardwarenaher Zusammenhang definiert wird oder ein Ergebnis erzeugt wird.
-
Für Simulationen, kann Programm-Code Hardware verkörpern, in dem eine Hardwarebeschreibungssprache oder andere funktionale Beschreibungssprache genutzt wird, die essentiell ein Modell davon liefert, wie erwartet wird, dass sich entwickelte Hardware verhält. Der Programm-Code kann Assembler- oder Maschinensprache oder Daten sein, die übersetzt und/oder interpretiert werden können. Zudem ist es in dem Fachgebiet üblich, davon zu sprechen, dass Software in der einen oder anderen Form aktiv wird oder ein Ergebnis bewirkt. Solche Ausdrücke sind lediglich eine Weise, die Ausführung von Programm-Code durch ein Verarbeitungssystem, die einen Prozessor zum Ausführen einer Aktion oder zum Erzeugen eines Ergebnisses veranlasst, in abgekürzter Weise anzugeben.
-
Programm-Code kann zum Beispiel in flüchtigem und nichtflüchtigem Speicher gespeichert werden, wie Speichergeräten und/oder einem dazugehörigen maschinenlesbaren oder maschinenzugänglichen Medium, einschließlich Festkörperspeichern, Festplatten, Disketten, optischen Speichermedien, Bändern, Flash-Speichern, Memory-Sticks, digitalen Videodisketten, DVDs (Digital Versatile Disks) usw. und auch exotischeren Medien, wie maschinenzugänglichen, den biologischen Zustand erhaltenden Speicher. Ein maschinenlesbares Medium kann u. a. jeden beliebigen materiellen Mechanismus zum Speichern, Übermitteln oder Empfangen von Informationen in einer Form, die von einer Maschine lesbar ist, wie z. B. Antennen, Lichtleitfasern, Kommunikationsschnittstellen usw., beinhalten. Programm-Code kann in Form von Paketen, seriellen Daten, parallelen Daten usw. übermittelt werden und kann in einem komprimierten oder verschlüsselten Format benutzt werden.
-
Programm-Code kann in Programmen implementiert werden, die auf programmierbaren Maschinen, wie mobilen oder stationären Computern, Personal Digital Assistents (PDAs), Set-Top-Boxen, Handys und Pagern und anderen elektronischen Geräten ausgeführt werden können, die alle einen Prozessor, vom Prozessor lesbaren flüchtigen und/oder nichtflüchtigen Speicher und wenigstens ein Eingabegerät und/oder ein oder mehrere Ausgabegerät(en) haben. Programm-Code kann auf die Daten angewandt werden, die unter Benutzen des Eingabegerätes eingegeben werden, um die beschriebenen Ausführungsformen auszuführen und Ausgabeinformationen zu erzeugen. Die Ausgabeinformationen können auf ein oder mehrere Ausgabegeräte angewendet werden. Jemand, der in dieser Kunst normal bewandert ist, kann verstehen, dass Ausführungsformen des offenbarten Gegenstandes auf verschiedenen Computersystemkonfigurationen ausgeführt werden können, einschließlich Multiprozessor- oder Multikernprozessorensystemen und allgegenwärtigen Computern (pervasive computers) oder Miniaturcomputern, die in praktisch allen Geräten eingebettet werden können. Ausführungsformen des offenbarten Gegenstandes können auch in verteilten Computerumgebungen in die Praxis umgesetzt werden, wo Aufgaben von entfernten Verarbeitungsgeräten ausgeführt werden können, die durch ein Kommunikationsnetzwerk verknüpft sind.
-
Obwohl Operationen als sequentieller Prozess beschrieben werden können, können einige der Operationen in der Tat parallel, gleichzeitig und/oder in einer verteilten Umgebung und mit lokal und/oder fern gespeichertem Programm-Code für Zugang durch Einkernprozessor- oder Mehrkernprozessormaschinen, ausgeführt werden. Außerdem kann in einigen Ausführungsformen die Reihenfolge von Operationen umgeordnet sein, ohne von der Idee des offenbarten Gegenstandes abzuweichen. Programm-Code kann durch oder in Verbindung mit eingebetteten Controllern benutzt werden.
-
Während der offenbarte Gegenstand unter Bezugnahme auf veranschaulichende Ausführungsformen beschrieben wurde, soll diese Beschreibung nicht einschränkend ausgelegt werden. Verschiedene Modifikationen der veranschaulichenden Ausführungsformen sowie anderer Ausführungsformen des Gegenstandes, der Fachleuten, die der offenbarte Gegenstand betrifft, offensichtlich ist, sollen als im Umfang des offenbarten Gegenstandes einbegriffen erachtet werden.