-
QUERVERWEIS AUF VERWANDTE ANMELDUNGEN
-
Die vorliegende Anmeldung beansprucht die Priorität des Einreichungsdatums der vorläufigen US-Patentanmeldung Nr. 62/362.353, eingereicht am 14. Juli 2016, deren Offenbarung hier durch Bezugnahme vollständig mit aufgenommen ist.
-
In Übereinstimmung mit den Anforderungen des Gebrauchsmustergesetzes sind als Gegenstand des Gebrauchsmusters nur Vorrichtungen, wie sie in den beigefügten Ansprüchen definiert sind, aber keine Verfahren zu schützen. Falls in der Beschreibung auf Verfahren Bezug genommen wird, dienen diese Bezugnahmen lediglich zur Veranschaulichung der Vorrichtung oder Vorrichtungen, für die mit den beigefügten Ansprüchen Schutz begehrt wird.
-
HINTERRUND
-
Moderne Computersysteme enthalten häufig Speichervorrichtungen, die zum Speichern von Daten Datenspeicher wie etwa Flash-Datenspeicher nutzen. Anstelle des Flash-Datenspeichers können auch andere Datenspeichertechnologien, etwa Spin-Transfer-Torque-Magnet-Schreib-Lese-Datenspeicher (STT-MRAM), Phasenwechseldatenspeicher (PCM) und resistive Datenspeicher (ReR-AM) verwendet werden. Alle von diesen weisen die Eigenschaft auf, dass sie langsamer als DRAM sind, der als der primäre Arbeitsdatenspeicher des Computersystems verwendet wird. Diese anderen Datenspeicher ergänzen den DRAM in bestimmter Weise und werden hier "zweitrangige Datenspeicher" genannt. In einigen Fällen müssen die Daten von dem zweitrangigen Datenspeicher in den DRAM gebracht werden, bevor sie bearbeitet werden können.
-
Wenn Daten von einer zweitrangigen Datenspeichervorrichtung in einen dynamischen Host-Schreib-Lese-Datenspeicher (DRAM) geschrieben werden sollen, muss sie Schreibzugriff auf die Host-DRAM-Seiten haben. In einem System mit einer Eingabe/Ausgabe-Datenspeichermanagementeinheit (IOMMU), die das Prinzip des kleinsten Privilegs durchsetzt, kann das IOMMU-Management zu dem Prozess des Abrufens von Daten aus dem zweitrangigen Datenspeicher und des Kopierens in den DRAM eine kritische Latenzzeit hinzufügen. Zum Beispiel gibt es dort, wo Seiten durch die zweitrangige Datenspeichervorrichtung nur für eine minimale Dauer geschrieben werden können, die von der zweitrangigen Datenspeichervorrichtung benötigt wird, keine langlebigen Abbildungen auf den gesamten physikalischen Datenspeicher. Dementsprechend müssen die Abbildungen für jede Schreiboperation ausgeführt werden, was eine Verzögerung erzeugt.
-
Ein Typ eines Speichervorrichtungscontrollers ist eine anwendungsspezifische integrierte Schaltung (ASIC), die einen nichtflüchtigen NAND-Speicher-Flash mit niedriger Latenzzeit (LLNAND-Flash) verwendet, der unter anderen Funktionen als eine Umlagerungsvorrichtung dient. DRAM-Seiten, auf die selten zugegriffen wird, werden durch das Betriebssystem (BS) geräumt und in den Speichervorrichtungscontroller gelegt. Bei einem Nutzerbetriebsart-Seitenfehler zu einer geräumten Seite bestimmt der BS-Seitenfehler-Handler, von wo die Einlagerungsdaten kommen. Wenn der Speichervorrichtungscontroller der Handler für einen Seitenfehler ist, muss er eine Seite aus seiner Flash-Vorrichtung abrufen und sie an eine spezifizierte Adresse in den DRAM seiner Host-CPU kopieren.
-
Der Speichervorrichtungscontroller kann eine Anzahl von Befehlspuffern besitzen, die gleichzeitige ausstehende Anforderungen bedienen können und daraufhin ein abschließendes Zurückschreiben an eine spezifizierte Adresse vornehmen. Zum Beispiel besitzen einige Speichervorrichtungscontroller 128 Befehlspuffer. Das Kopieren aus dem Speichervorrichtungscontroller in den CPU-DRAM erfordert entweder, dass der Speichervorrichtungscontroller vollen Zugriff auf den CPU-DRAM hat, oder dass die IOMMU-Abbildungen nach Bedarf dynamisch erzeugt werden. Die Erzeugung der IOMMU-Abbildung kann eine Leistungsbelastung sein.
-
Üblicherweise erfordert das Schreiben von Daten aus einem zweitrangigen Datenspeicher wie etwa einem Flash-Datenspeicher in einen DRAM, dass ein BS-Seitenfehler-Handler bestimmt, dass ein Unterstützungsspeicher bei der Speichervorrichtungscontroller-Flash-Adresse (FA) ist, eine freie, mit Nullen gefüllte 4-kB-Seite bei der physikalischen Adresse des DRAM (DRAM-PA) zuordnet, die PA in die IOMMU abbildet und einen Befehl, der {FA, PA, Abschlussdaten} enthält, an den Speichervorrichtungscontroller sendet. Daraufhin kopiert der Speichervorrichtungscontroller die Bytes aus dem Flash bei der FA in einen internen Puffer. Dies kann eine verhältnismäßig lange Zeit wie etwa 1 µs–100 µs dauern. Nachfolgend kopiert der Speichervorrichtungscontroller die Bytes aus einem internen Puffer in die System-DRAM-PA und sendet eine Abschlussbenachrichtigung. Danach entfernt das BS die Abbildung der PA und setzt den Nutzercode fort. Dieser serielle Prozess führt zu einer erheblichen Latenzzeit.
-
KURZE ZUSAMMENFASSUNG
-
Die Abbildung in die IOMMU kann mit einem Zugriff auf einen zweitrangigen Datenspeicher überlappt werden, so dass die zwei Operationen wenigstens teilweise gleichzeitig ausgeführt werden. Zum Beispiel kann gleichzeitig eine IOMMU-Abbildung aufgebaut werden, wenn ein Lesevorgang des zweitrangigen Datenspeichers in einen internen Puffer des Speichervorrichtungscontrollers initiiert wird. Um diese Überlappung zu erzielen, wird ein zweiphasiger Befehlspuffer verwendet. In einer ersten Phase wird Inhalt von einer Adresse des zweitrangigen Datenspeichers in den internen Puffer des Speichervorrichtungscontrollers gelesen. In einer zweiten Phase wird der interne Puffer an die physikalische Adresse des DRAM geschrieben.
-
Ein Aspekt der Offenbarung schafft ein Verfahren, das das Kopieren von Daten von einer gegebenen Adresse eines zweitrangigen Datenspeichers in einen internen Puffer eines Speichercontrollers in einer ersten Phase unter Verwendung eines oder mehrerer Prozessoren, wobei das Kopieren wenigstens teilweise während des Abbildens einer spezifizierten physikalischen Adresse in eine Eingabe/Ausgabe-Datenspeichermanagementeinheit (IOMMU) durch ein Betriebssystem stattfindet, umfasst. Ferner enthält das Verfahren das Bestimmen, ob eine zweite Phase ausgelöst wird, mit dem einen oder den mehreren Prozessoren, und das Kopieren der Daten aus dem internen Puffer des Speichercontrollers an die spezifizierte physikalische Adresse des dynamischen Schreib-Lese-Datenspeichers (DRAM) mit dem einen oder den mehreren Prozessoren, falls die zweite Phase ausgelöst wird.
-
Ein anderer Aspekt der Offenbarung schafft ein weiteres Verfahren, das das Identifizieren einer bestimmten Adresse des zweitrangigen Datenspeichers, die Daten speichert, das Zuweisen einer Seite bei einer bestimmten physikalischen Adresse des dynamischen Schreib-Lese-Datenspeichers (DRAM) und das Senden eines Befehls an einen Speichercontroller umfasst, wobei der Befehl die bestimmte Adresse des zweitrangigen Datenspeichers und die bestimmte physikalische Adresse identifiziert und eine erste Phase initiiert, in der die gespeicherten Daten von der bestimmten Adresse des zweitrangigen Datenspeichers in einen Puffer des Speichercontrollers gelesen werden. Ferner enthält das Verfahren das Abbilden der bestimmten physikalischen Adresse in eine Eingabe/Ausgabe-Datenspeichermanagementeinheit (IOMMU), wobei das Abbilden wenigstens teilweise während des Lesens der ersten Phase stattfindet, und das Bearbeiten des Befehls für den Speichercontroller zum Initiieren einer zweiten Phase, in der die gespeicherten Daten aus dem Speichercontrollerpuffer an die bestimmte physikalische Adresse des DRAM geschrieben werden.
-
Ein abermals anderer Aspekt der Offenbarung schafft einen Speichercontroller, der einen Datenspeicher, der einen Puffer enthält, und einen oder mehrere Prozessoren in Kommunikation mit dem Datenspeicher umfasst. Der Speichercontroller kann ferner mit einem zweitrangigen Datenspeicher gekoppelt sein. Der eine oder die mehreren Prozessoren können dafür konfiguriert sein, in einer ersten Phase Daten von einer gegebenen Adresse eines zweitrangigen Datenspeichers des zweitrangigen Datenspeichers in den Puffer des Speichercontrollers zu kopieren, wobei das Kopieren wenigstens teilweise während des Abbildens einer spezifizierten physikalischen Adresse in eine Eingabe/Ausgabe-Datenspeichermanagementeinheit (IOMMU) durch ein Betriebssystem stattfindet. Ferner sind der eine oder die mehreren Prozessoren dafür konfiguriert zu bestimmen, ob die zweite Phase ausgelöst wird, und die Daten aus dem Puffer des Speichercontrollers an die spezifizierte physikalische Adresse des dynamischen Schreib-Lese-Datenspeichers (DRAM) zu kopieren, falls die zweite Phase ausgelöst wird.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
1 ist ein Blockschaltplan eines beispielhaften Systems in Übereinstimmung mit Aspekten der Offenbarung.
-
2 ist ein Blockschaltplan eines beispielhaften Speichercontrollers in Übereinstimmung mit Aspekten der Offenbarung.
-
3 ist ein beispielhafter Zeitablaufplan in Übereinstimmung mit Aspekten der Offenbarung.
-
4 ist ein Ablaufplan, der ein beispielhaftes Verfahren in Übereinstimmung mit Aspekten der Offenbarung darstellt.
-
5 ist ein Ablaufplan, der ein anderes beispielhaftes Verfahren in Übereinstimmung mit Aspekten der Offenbarung darstellt.
-
AUSFÜHRLICHE BESCHREIBUNG
-
Übersicht
-
Allgemein bezieht sich die Technologie auf das Optimieren des Zugriffs auf zweitrangige Datenspeichervorrichtungen durch überlappendes IOMMU-Einwärtsabbilden mit dem Zugriff auf zweitrangige Datenspeicher. Wenn ein Lesevorgang eines zweitrangigen Datenspeichers in einen internen Puffer des Speichervorrichtungscontrollers initiiert wird, wird gleichzeitig eine IOMMU-Abbildung aufgebaut. Dies kann unter Verwendung eines zweiphasigen Befehlspuffers ausgeführt werden. In einer ersten Phase wird Inhalt von einer Adresse des zweitrangigen Datenspeichers in den internen Puffer des Speichervorrichtungscontrollers gelesen. In der zweiten Phase wird der interne Puffer an eine physikalische Adresse des DRAM geschrieben.
-
In Übereinstimmung mit einigen Beispielen können die Operationen der zweiten Phase durch ein oder mehrere Ereignisse ausgelöst werden. Zum Beispiel kann ein Betriebssystem einen neuen Befehl senden oder einen vorhergehenden Befehl, der an den Speichercontroller gesendet wurde, aktualisieren. Zu einem Befehlstupel von dem BS-Seitenfehler-Handler kann ein einzelnes Bit hinzugefügt werden. Zum Beispiel kann das Tupel mit dem Auslöser sein: {FA, PA, Abschlussdaten, Beginn der Phase 2}, wobei FA die Adresse des zweitrangigen Datenspeichers ist, PA die physikalische Adresse ist und Beginn der Phase 2 ein Merker ist, der angibt, ob ein herkömmlicher Lesevorgang oder ein zweiphasiger Lesevorgang ausgeführt werden soll und/oder ob die zweite Phase des zweiphasigen Lesevorgangs initiiert werden sollte. In diesem Beispiel kann das Befehlstupel mit dem zusätzlichen Bit Beginn der Phase 2 = 1 geschrieben werden, um einen herkömmlichen Lesevorgang des zweitrangigen Datenspeichers auszuführen. Andererseits kann das zusätzliche Bit in einem Anfangsbefehl auf Beginn der Phase 2 = 0, um einen Lesevorgang des zweitrangigen Datenspeichers mit dem 2-Phasen-Verhalten auszuführen, und daraufhin auf Beginn der Phase 2 = 1, um die Operationen der zweiten Phase auszulösen, eingestellt werden. Das Einstellen des Beginns auf 1 kann mit einem Byte-großen Peripheral-Component-Interconnect-Express-Schreibvorgang (PCIe-Schreibvorgang) erfolgen. Falls das Anfangsbit selbst in einem Byte ist, kann die CPU die Phase 2 durch einen einfachen 1-Byte-Schreibvorgang an die geeignete PCIe-Adresse beginnen.
-
In Übereinstimmung mit diesem Beispiel der Verwendung eines zweiphasigen Puffers sendet das BS einen Befehl, der {FA, PA, Abschlussdaten, Beginn der Phase 2 = 0} enthält, an den Speichervorrichtungscontroller. Ferner bildet das BS die PA in die IOMMU ab und bearbeitet es den Befehl, um Beginn der Phase 2 = 1 einzustellen. Da Lesevorgänge des zweitrangigen Datenspeichers verhältnismäßig langsam sind und der Speichervorrichtungscontroller mehrere ausstehende Transaktionen haben kann, wird erwartet, dass die PA-Abbildung in die IOMMU schneller abgeschlossen wird als das Abrufen der Daten des zweitrangigen Datenspeichers durch den Speichervorrichtungscontroller. Jede einzelne CPU kann nur einen einzelnen Seitenfehler anstehend haben, so dass sie keine andere Arbeit als die IOMMU-Abbildung auszuführen hat.
-
Die Steuerung des Beginns der Phase 2 dient dazu, den Schreibvorgang durch den Speichervorrichtungscontroller zu vermeiden, bevor die IOMMU-Abbildung erzeugt wird, was ein kritischer Fehler wäre. Da CPU-PCIe-Schreibvorgänge nicht-cache-fähig gepostet werden, sollte der zusätzliche Schreibvorgang beim Bearbeiten des Befehls zum Einstellen von Beginn der Phase 2 = 1 nur Latenzzeit hinzufügen, die mit der Zugriffslatenzzeit des zweitrangigen Datenspeichers überlappt.
-
In einigen Beispielen können Speichervorrichtungscontroller auf den Host-Datenspeicher vollen Zugriff haben, während sie in anderen Beispielen nur vorübergehenden Zugriff unter Verwendung der IOMMU haben können. Auf jeden Fall ist erwünscht, dass die Abbildungen der PCIe-Adresse des Speichervorrichtungscontrollers auf die CPU-DRAM-Adresse einfach sind. Dementsprechend kann zu jeder verwendeten Adresse eine beliebige Konstante addiert werden, so dass keine zahlenmäßige Konsistenz erforderlich ist. Zum Beispiel wird ein einzelner BASE_OFFSET addiert und wird der gesamte CPU-Datenspeicher im PCIe-IOMMU-Raum auf ein zusammenhängendes Gebiet virtueller Eingabe/Ausgabe-Adressen (IOVAs) abgebildet. Zum Beispiel wird die IOMMU verwendet, um den CPU-Datenspeicher beginnend bei der PCIe-Adresse 1 TB abzubilden. Vorrichtungstreiber des Speichervorrichtungscontrollers setzen die physikalische DRAM-Adresse durch Addieren eines 1-TB-Offsets in PCIe-Adressen um.
-
Weiter mit dem obigen Beispiel kann der gesamte Datenspeicher abgebildet werden, wobei die IOMMU aber weiterhin Berechtigungen durchsetzen kann. Standardmäßig besitzt eine Systemvorrichtung keine Berechtigung, auf einen Host-Datenspeicher innerhalb des Basisadressen-Offset-Bereichs zuzugreifen. Wenn ein Eingabe/Ausgabe-Vorgang (EA-Vorgang) stattfindet, sendet der Host Befehle an die IOMMU, um zu ermöglichen, dass die Systemvorrichtung auf eine geeignete Seite in dem Basisadressen-Offset-Bereich zugreift. Die Systemvorrichtung schließt die EA ab. Daraufhin befiehlt der Host der IOMMU, die Berechtigungen fallenzulassen. Diesbezüglich wird die Abbildung selbst in der Initialisierungszeit einmal aufgebaut und brauchen zur EA-Zeit nur die Berechtigungen geändert zu werden.
-
Beispielhafte Systeme
-
1 stellt ein beispielhaftes System 100 zum Überlappen von Lesevorgängen eines zweitrangigen Datenspeichers mit der IOMMU-Abbildung dar. Das System 100 kann z. B. ein System von Computervorrichtungen sein, die auf einem Motherboard verbunden sind. Ein solches System kann in Rechenzentren oder anderen Computerumgebungen wie etwa Personal-Computer-Vorrichtungen, Laptops, Mobiltelephonen, Videospielsystemen, lokalen Netzen, Weitverkehrsnetzen usw. vorhanden sein. Das System 100 enthält einen Hauptdatenspeicher 110, der mit einer Zentraleinheit (CPU) 120 gekoppelt ist. Ferner ist die CPU 120 mit einer Eingabe/Ausgabe-Datenspeichermanagementeinheit (IOMMU) 130 gekoppelt. Die IOMMU 130 und eine oder mehrere Systemvorrichtungen 150 sind über einen Peripheral-Interconnect-Card-Express-Switch (PCIe-Switch) 140 verbunden.
-
Auf den Hauptdatenspeicher 110 kann durch die CPU 120 zugegriffen werden und er kann Daten und Anweisungen speichern, die durch die CPU 120 ausführbar sein können. Der Hauptdatenspeicher 110 kann irgendein Typ eines Datenspeichers wie etwa Nur-Lese-Datenspeicher, Schreib-Lese-Datenspeicher, Wechselspeichermedien, Cache, Register oder dergleichen sein. Der Hauptdatenspeicher 110 kann DRAM 125 und eine Adressenneuzuordnungstabelle 115 und andere Daten- und Datenspeichereinheiten enthalten.
-
Die CPU 120 ist z. B. durch einen Datenbus und durch einen Adressenbus mit dem Hauptdatenspeicher 110 verbunden und kommuniziert mit ihm. Die CPU 120 kann ein Mikroprozessor, der in einem Chip liegt, oder irgendein anderer bekannter Prozessor sein. Obgleich nur eine einzelne CPU 120 gezeigt ist, können zwischen dem Hauptdatenspeicher 110 und der IOMMU 130 irgendeine Anzahl von CPUs verbunden sein. Zum Beispiel kann die CPU 120 ein Mehrkernprozessor sein.
-
Die IOMMU 130 verbindet DMA-fähige Vorrichtungen mit dem Hauptdatenspeicher 110. Ferner bildet die IOMMU 130 in der Adressenneuzuordnungstabelle 115 Vorrichtungsadressen auf physikalische Adressen ab.
-
Der PCIe-Switch 140 ist eine schnelle Verdrahtung, die eine Verbindung einer oder mehrerer Systemvorrichtungen 150 mit anderen Komponenten in dem System 100 bereitstellt. Der PCIe-Switch 140 kann eine Verdrahtung auf der Ebene des Motherboards, eine Erweiterungskartenschnittstelle oder dergleichen sein. Die Systemvorrichtungen können über den PCIe-Switch 140 über eine oder mehrere Verbindungen kommunizieren. Obgleich in dem Beispiel aus 1 der PCIe-Switch 140 vorhanden ist, ist festzustellen, dass der PCIe-Switch in anderen beispielhaften Systemen weggelassen sein kann.
-
Die Systemvorrichtung 150 kann irgendeine Art Vorrichtung sein, die über das System 100 kommunizieren kann. Nur beispielhaft kann die Systemvorrichtung 150 ein Netzschnittstellencontroller (NIC) oder eine Graphikverarbeitungseinheit (GPU) sein. Obgleich nur eine Systemvorrichtung 150 gezeigt ist, kann das System 100 irgendeine Anzahl von Systemvorrichtungen enthalten.
-
Wie gezeigt ist, enthält die Systemvorrichtung 150 einen zweitrangigen Datenspeicher 160. Der zweitrangige Datenspeicher 160 kann z. B. eine Flash-Vorrichtung wie etwa eine Datenspeicherkarte, ein USB-Laufwerk, ein Festkörperlaufwerk oder irgendeine andere Art Datenspeichervorrichtung sein. In anderen Beispielen kann der zweitrangige Datenspeicher 160 ein STT-MRAM, ein ReRAM, ein PCM oder irgendeine andere Art zweitrangiger Datenspeicher sein. Der zweitrangige Datenspeicher 160 kann in der Systemvorrichtung 150 befestigt sein oder kann entnehmbar sein.
-
Ferner enthält die Systemvorrichtung 150 einen Speichercontroller 170. Der in Verbindung mit 2 weiter beschriebene Speichercontroller 170 enthält ferner einen internen Puffer 175.
-
Lese- und Schreibvorgänge von dem zweitrangigen Datenspeicher 160 betreffen viele der anderen Komponenten des Systems 100. Zum Beispiel identifiziert in Übereinstimmung mit der vorliegenden Offenbarung ein Betriebssystem (BS) der Host-CPU 120, dass Speicherdaten an einer bestimmten Adresse des zweitrangigen Datenspeichers des zweitrangigen Datenspeichers 160 gespeichert sind. Das BS ordnet eine Seite bei einer bestimmten physikalischen Adresse des dynamischen Schreib-Lese-Datenspeichers (DRAMs) zu. Daraufhin sendet das BS an den Speichercontroller 170 einen Befehl, um eine erste Phase zu initiieren, in der die Daten von der bestimmten Flash-Adresse in den internen Puffer 175 des Speichercontrollers 170 gelesen werden. Gleichzeitig während des Lesens aus dem Flash-Datenspeicher bildet das BS die bestimmte physikalische Adresse, z. B. unter Verwendung der Adressenneuzuordnungstabelle 115, in die IOMMU 130 ab. Wenn das Lesen der Flash-Datenspeicher-Adresse abgeschlossen ist, bearbeitet das BS den Befehl für die Speichersteuerung 170, um eine zweite Phase zu initiieren, in der die Daten aus dem internen Puffer 175 an die bestimmte physikalische Adresse des DRAM 125 geschrieben werden.
-
Obgleich das System 100 oben als ein System von Vorrichtungen auf einem Motherboard beschrieben worden ist, ist festzustellen, dass das System 100 irgendeine Konfiguration elektronisch gekoppelter Computervorrichtungen sein kann. Zum Beispiel kann das System eine Backplane, die Peripheriegeräte miteinander verbindet, eine Erweiterungskartenschnittstelle oder dergleichen enthalten. Als ein weiteres Beispiel kann die Verbindung zwischen den Computervorrichtungen festverdrahtete Verbindungen, drahtlose Verbindungen oder irgendeine andere Art Verbindungen sein. Als ein abermals weiteres Beispiel kann das System 100 TCP/IP, 802.11, Ethernet, InfiniBand oder irgendeine andere Art Netz enthalten.
-
Obgleich der Speichercontroller 170 vollen Zugriff auf den Host-Datenspeicher 120 haben kann, kann er in einigen Fällen nur vorübergehenden Zugriff unter Verwendung der IOMMU 130 haben. Zum Beispiel kann der gesamte Datenspeicher abgebildet sein, kann die IOMMU 130 aber weiterhin Berechtigungen durchsetzen. Standardmäßig besitzt die Systemvorrichtung 150 keine Berechtigung, innerhalb des Basisadressen-Offset-Bereichs auf den Host-Datenspeicher zuzugreifen. Wenn eine Eingabe/Ausgabe (EA) stattfindet, sendet der Host 120 an die IOMMU 130 Befehle, um zu ermöglichen, dass die Systemvorrichtung 150 auf eine geeignete Seite in dem Basisadressen-Offset-Bereich zugreift. Die Systemvorrichtung 150 schließt die EA ab und der Host 120 weist daraufhin die IOMMU 130 an, die Berechtigungen fallenzulassen. Diesbezüglich wird die Abbildung selbst einmal zur Initialisierungszeit aufgebaut und braucht zur EA-Zeit nur die Berechtigungen geändert zu werden.
-
Gleich, ob der Speichercontroller 170 auf den Host-Datenspeicher 120 vollen Zugriff oder vorübergehenden Zugriff hat, können die Abbildungen der PCIe-Adresse des Speichercontrollers auf die CPU-DRAM-Adresse trotz der Verwendung eines anderen Abbildungsmechanismus konsistent gehalten werden. Zum Beispiel kann zu dem relevanten Mechanismus ein einzelner base_offset addiert werden. Dementsprechend kann der gesamte CPU-Datenspeicher in dem PCIe-IOMMU-Raum auf ein zusammenhängendes Gebiet virtueller Eingabe/Ausgabe-Adressen (IOVAs) abgebildet werden.
-
Beispiel 2 zeigt einen beispielhaften Speichercontroller 270. Wie dargestellt ist, kann der Speichercontroller 270 einen Prozessor 210, einen Datenspeicher 230 und Befehlspuffer 280 enthalten. Der Prozessor 210 kann irgendein gut bekannter Prozessor wie etwa eine kommerziell verfügbare CPU oder ein kommerziell verfügbarer Mikrocontroller sein. Alternativ kann der Prozessor ein dedizierter Controller wie etwa eine ASIC sein. In Übereinstimmung mit einem anderen Beispiel kann der Prozessor eine Zustandsmaschine sein.
-
Der Datenspeicher 230 speichert Informationen, auf die durch den Prozessor 210 zugegriffen werden kann, einschließlich Anweisungen 234, die durch den Prozessor 210 ausgeführt werden können. Außerdem enthält der Datenspeicher Daten 232, die durch den Prozessor ausgelesen, manipuliert oder gespeichert werden können. Der Datenspeicher kann irgendeine Art, die Informationen speichern kann, auf die durch den Prozessor zugegriffen werden kann, wie etwa schreibfähige und lesefähige Datenspeicher sein. Der Datenspeicher 230 enthält Daten 232, die durch den Prozessor in Übereinstimmung mit den Anweisungen 234 ausgelesen, manipuliert oder gespeichert werden können. Obgleich das System und das Verfahren nicht durch irgendeine bestimmte Datenstruktur beschränkt sind, können die Daten z. B. in Computerregistern, in einer relationalen Datenbank als eine Tabelle mit mehreren verschiedenen Feldern und Datensätzen oder als XML-Dokumente gespeichert sein. Außerdem können die Daten in irgendeinem computerlesbaren Format wie etwa als Binärwerte, ASCII oder Unicode, darauf aber nicht beschränkt, formatiert sein. Darüber hinaus können die Daten irgendwelche Informationen, die ausreichen, um die relevanten Informationen zu identifizieren, wie etwa Zahlen, Beschreibungstext, herstellerspezifische Codes, Zeiger, Bezugnahmen auf Daten, die in anderen Datenspeichern (einschließlich an anderen Netzorten) gespeichert sind, oder Informationen, die durch eine Funktion verwendet werden, um die relevanten Daten zu berechnen, umfassen.
-
Die Anweisungen 234 können irgendein Satz von Anweisungen sein, die durch den Prozessor direkt (wie etwa Maschinencode) oder indirekt (wie etwa Skripte) ausgeführt werden sollen. Diesbezüglich können die Begriffe "Anweisungen", "Schritte" und "Programme" hier austauschbar verwendet sein. Die Anweisungen können im Objektcodeformat zur direkten Verarbeitung durch den Prozessor oder in irgendeiner anderen Computersprache, einschließlich Skripten oder Sammlungen unabhängiger Quellcodemodule, die bei Bedarf interpretiert oder im Voraus kompiliert werden, gespeichert sein.
-
Die Anweisungen 234 können durch den Prozessor ausgeführt werden, um z. B. einen effizienten Flash-Datenspeicher-Lese/Schreib-Vorgang auszuführen. Zum Beispiel können die Anweisungen 234 das Kopieren von Bytes von einer spezifizierten Flash-Adresse in den internen Puffer 275, während das BS eine bestimmte physikalische Adresse in die IOMMU abbildet, bereitstellen. Ferner können die Anweisungen 234 das Bestimmen bereitstellen, ob, z. B. durch einen Befehl von dem BS oder durch ein anderes Ereignis, eine zweite Phase ausgelöst wird. Solche Befehle von dem BS können in die Befehlspuffer 280 geschrieben werden. Wenn die zweite Phase ausgelöst worden ist, kopiert der Speichercontroller 270 Bytes aus dem internen Puffer 275 an die bestimmte physikalische Adresse in dem DRAM. Wenn dies abgeschlossen ist, kann der Speichercontroller 270 eine Benachrichtigung an das BS senden.
-
Obgleich 2 den Prozessor 210 und den Datenspeicher 230 in der Weise funktional darstellt, dass sie innerhalb desselben Blocks sind, ist festzustellen, dass der Prozessor und der Datenspeicher tatsächlich mehrere Prozessoren und Datenspeicher umfassen können, die innerhalb desselben physikalischen Gehäuses gelagert oder nicht gelagert sein können. Zum Beispiel können einige der Anweisungen und Daten in einer Wechsel-CD-ROM oder anders innerhalb eines Nur-Lese-Computerchips gespeichert sein. Einige oder alle der Anweisungen und Daten können an einem Ort gespeichert sein, der von dem Prozessor 120 physikalisch fern ist, auf den er aber dennoch zugreifen kann. Ähnlich kann der Prozessor 120 tatsächlich eine Ansammlung von Prozessoren umfassen, die parallel arbeiten oder nicht parallel arbeiten können.
-
3 ist ein beispielhafter Zeitablaufplan, der den relativen Zeitablauf der Flash-Lesevorgänge, der IOMMU-Abbildung und des Schreibens in den DRAM darstellt. Wie gezeigt ist, ist die Operation 310 des Lesens von einer gegebenen Flash-Adresse FA in den internen Puffer des Speichercontrollers verhältnismäßig lang. Zum Beispiel kann diese Operation bis zu 1 µs–100 µs oder mehr oder weniger dauern. Wie in 3 gezeigt ist, beginnt die Leseoperation zum Zeitpunkt t0 und endet sie zum Zeitpunkt t3.
-
In der Zwischenzeit wird die Operation 320 ausgeführt, in der eine gegebene physikalische Adresse PA in die IOMMU abgebildet wird. Diese Operation kann ebenfalls etwas langwierig sein. Allerdings ist eine Gesamtzeitdauer für alle Operationen 310–330 dadurch, dass die IOMMU-Abbildungsoperation 302, im Gegensatz zu sequentiell, gleichzeitig mit der Flash-Leseoperation 310 ausgeführt wird, verringert. Obgleich die IOMMU-Abbildungsoperation 320 in der Weise gezeigt ist, dass sie zu einem Zeitpunkt t1 beginnt und zu einem Zeitpunkt t2 endet, können diese Zeitpunkte relativ zu den Zeitpunkten t0 und t3 geändert werden. Zum Beispiel kann die IOMMU-Abbildungsoperation 320 vor der Flash-Leseoperation 310 beginnen. Alternativ oder zusätzlich kann die IOMMU-Abbildungsoperation 310 enden, nachdem die Flash-Leseoperation 310 abgeschlossen ist. Diesbezüglich kann sich die IOMMU-Abbildungsoperation 320 mit der Flash-Leseoperation 310 nur teilweise überlappen. Allerdings kann diese Überlappung weiterhin zu einer erheblichen Verringerung der Latenzzeit führen.
-
Wenn die IOMMU-Abbildungsoperation 320 abgeschlossen ist, kann die Operation 330 ausgelöst werden, in der der interne Puffer an die gegebene physikalische Adresse des DRAM geschrieben wird. Obgleich diese Operation 330 in der Weise gezeigt ist, dass sie nahezu sofort beginnt, wenn die Operation 310 endet, kann es zwischen den zwei Operationen eine geringfügige Pufferzeitdauer geben. In anderen Beispielen kann die Schreiboperation 330 beginnen, bevor die Leseoperation 310 abgeschlossen ist, aber nachdem die IOMMU-Abbildungsoperation 320 abgeschlossen ist.
-
Beispielhafte Verfahren
-
Weiter zu den oben beschriebenen beispielhaften Systemen werden nun beispielhafte Verfahren beschrieben. Diese Verfahren können unter Verwendung der oben beschriebenen Systeme, von Änderungen davon oder irgendwelcher einer Vielzahl von Systemen mit anderen Konfigurationen ausgeführt werden. Es ist festzustellen, dass die an den obigen Verfahren beteiligten Operationen nicht in der genau beschriebenen Reihenfolge ausgeführt zu werden brauchen. Vielmehr können verschiedene Operationen in einer anderen Reihenfolge oder gleichzeitig behandelt werden und können Operationen hinzugefügt oder weggelassen werden.
-
4 bietet einen beispielhaften Ablaufplan, der ein Verfahren 400 darstellt. Dieses Verfahren 400 kann z. B. durch das BS der Host-CPU 120 (1) ausgeführt werden.
-
Im Block 410 wird bestimmt, dass die Speicherdaten bei einer bestimmten Flash-Adresse FA gespeichert sind. Nur beispielhaft kann ein Nutzer einen Befehl zum Zugreifen auf Daten in einer bestimmten Datei, die in einer Flash-Datenspeicher-Vorrichtung gespeichert ist, eingeben. Dementsprechend kann ein BS-Seitenfehler-Handler die dieser Datei entsprechende Flash-Adresse identifizieren.
-
Im Block 420 werden Seiten einer bestimmten physikalischen Adresse PA des DRAM zugeordnet.
-
Im Block 430 wird ein Anfangsbefehl an den Speichercontroller gesendet. Dieser Befehl initiiert das Lesen von einer bestimmten Flash-Adresse FA in einen internen Puffer des Speichercontrollers. Der Befehl kann z. B. ein Tupel sein, das die Flash-Adresse, die physikalische Adresse und die Abschlussdaten identifiziert. Ferner kann der Befehl angeben, dass für den Lesevorgang die zweiphasige Verarbeitung, bei der die IOMMU-Abbildung mit den Flash-Lesevorgängen überlappt, ausgeführt werden sollte. Die Angabe kann z. B. ein Bit sein, das zu dem Befehlstupel hinzugefügt wird, wobei das Bit auf 0 eingestellt wird, um eine erste Phase zu initiieren, und auf 1 eingestellt wird, um eine zweite Phase zu initiieren. Zum Beispiel kann dieses Tupel sein: {FA, PA, Abschlussdaten, Beginn der 2. Phase}. Ein solches Tupel kann ebenfalls verwendet werden, um anzugeben, dass die herkömmliche einstufige serielle Verarbeitung ausgeführt werden sollte. Zum Beispiel kann in einem Anfangsbefehl das Bit des Beginns der 2. Phase im Gegensatz zu 0 auf 1 eingestellt werden. In anderen Beispielen kann die Angabe ein getrennter Befehl sein. Zum Beispiel kann ein Betriebssystem einen neuen Befehl an den Speichercontroller senden.
-
In einigen Fällen kann die physikalische Adresse PA erst bekannt sein, wenn die IOMMU-Abbildung (Block 440) abgeschlossen ist. Zum Beispiel kann die physikalische Adresse PA nach der IOMMU-Abbildung tatsächlich eine virtuelle Adresse wie eine virtuelle Eingabe/Ausgabe-Adresse (IOVA) sein. In diesen Fällen kann der Anfangsbefehl der ersten Phase nur die Flash-Adresse FA und Abschlussdaten, z. B. {FA, Abschlussdaten}, in den Speichercontroller schreiben. Der aktualisierte Befehl der zweiten Phase kann die physikalische Adresse PA und das Bit zum Initiieren des Beginns der zweiten Phase, z. B. {PA, Beginn der 2. Phase = 1}, angeben. Dieser aktualisierte Befehl der zweiten Phase kann z. B. ein einzelner 8-Byte-Schreibvorgang sein, bei dem die physikalische Adresse die Bits 63-1 belegt und die Angabe des Beginns der Phase 2 das letzte Bit 0 belegt.
-
Im Block 440 wird die bestimmte physikalische DRAM-Adresse PA in die IOMMU abgebildet. Diese Abbildung wird wenigstens teilweise während einer Zeitdauer ausgeführt, in der das Lesen der ersten Phase von der Flash-Adresse FA in den Puffer ausgeführt wird. In einigen Beispielen kann die IOMMU-Abbildung abgeschlossen werden, bevor der Flash-Lesevorgang abgeschlossen ist. In anderen Beispielen kann die IOMMU-Abbildung für einige Zeit fortgesetzt werden, nachdem der Flash-Lesevorgang abgeschlossen ist. In diesen Beispielen wird das Schreiben des internen Puffers in die physikalische DRAM-Adresse verzögert, bis die IOMMU-Abbildung abgeschlossen ist.
-
Im Block 450 wird der Anfangsbefehl bearbeitet, um eine zweite Phase anzugeben, in der die Daten von dem internen Puffer in die physikalische Adresse PA des DRAM geschrieben werden. Zum Beispiel kann das Bit des Beginns der 2. Phase unter Rückbezug auf das Beispiel, das das Tupel für den Anfangsbefehl verwendet, von 0 auf 1 geändert werden. Diese Änderung kann für den Speichercontroller angeben, dass die IOMMU-Abbildung abgeschlossen ist und dass der Speichercontroller somit mit dem Schreiben beginnen kann, ohne einen Fehler zu verursachen.
-
5 bietet einen weiteren beispielhaften Ablauf, der ein Verfahren 500 darstellt. Dieses Verfahren 500 kann z. B. durch den Speichercontroller ausgeführt werden. Einige der Operationen in dem Verfahren 500 entsprechen, wie etwa dadurch, dass sie auf Befehle von dem BS ansprechen, Operationen des BS in dem oben beschriebenen Verfahren 400.
-
Im Block 510 werden Bytes von Daten von der bestimmten Flash-Adresse FA in einen internen Puffer kopiert. Dies kann ausgeführt werden, während das BS die physikalische Adresse PA in die IOMMU abbildet (Block 440, 4).
-
Im Block 520 wird bestimmt, ob ein Auslöseereignis aufgetreten ist, das die Initiierung der zweiten Phase auslösen würde. Ein Beispiel eines Auslöseereignisses ist der Empfang einer Benachrichtigung wie etwa eines bestimmten Bits, das in einem Befehlstupel gesetzt ist, dass die IOMMU-Abbildung abgeschlossen ist, von dem BS. Andere Beispiele von Auslöseereignissen enthalten das Schreiben der physikalischen Adresse PA durch das BS, einen Zeitablauf mit einer vorgegebenen Länge usw. Es ist festzustellen, dass diese Auslöser lediglich Beispiele sind und dass irgendeine Anzahl anderer Arten von Auslösern möglich sind.
-
Falls die zweite Phase nicht ausgelöst worden ist, kann das Verfahren 500 zum Block 510 zurückkehren und weiter von dem Flash in den internen Puffer lesen. In anderen Beispielen kann der Speichercontroller den Auslöser abwarten, falls die zweite Phase nicht ausgelöst worden ist. Dagegen geht das Verfahren zum Block 530 über, falls bestimmt wird, dass die Phase 2 ausgelöst worden ist. Hier werden die Bytes in den internen Puffer kopierter Daten an die bestimmte physikalische Adresse des DRAM weiter kopiert.
-
Im Block 540 wird eine Benachrichtigung gesendet, die angibt, dass der Flash-Lese/Schreib-Vorgang abgeschlossen ist. Zum Beispiel kann die Benachrichtigung an das BS oder an eine andere Systemvorrichtung wie etwa an die Systemvorrichtung 105 (1) gesendet werden.
-
Die vorstehenden Systeme und Verfahren können die Computerleistung z. B. dadurch verbessern, dass sie die Flash-Lese/Schreib-Vorgängen zugeordnete Latenzzeit verringern. Durch Überlappen der IOMMU-Abbildung mit dem Anfangs-Flash-Lesevorgang wird erhebliche Zeit gespart, ohne die Verarbeitungsleistung zu behindern.
-
Obgleich oben eine Anzahl von Beispielen beschrieben worden sind, sind diese Beispiele selbstverständlich nicht beschränkend und können weitere Änderungen vorgenommen werden. Obgleich die oben beschriebenen Verfahren in Verbindung mit einem Speichervorrichtungscontroller beschrieben worden sind, können diese Verfahren selbstverständlich z. B. in Firmware oder in einem Computerprogrammprodukt wie etwa einem computerlesbaren Speichermedium, das Programmcode umfasst, der das Verfahren ausführt, wenn er durch einen oder mehrere Prozessoren ausgeführt wird, implementiert werden. Ferner ist die zweiphasige Verarbeitung nicht auf Flash beschränkt, sondern kann sie ebenfalls für Graphikverarbeitungseinheiten (GPUs), Universal-GPUs (GPGPUs), Beschleuniger mit neuronalen Netzen, die in den CPU-Datenspeicher kopieren, oder andere Beschleuniger, die Daten in den Host-Datenspeicher verschieben, verwendet werden.
-
Da diese und andere Varianten und Kombinationen der oben diskutierten Merkmale genutzt werden können, ohne von dem wie durch die Ansprüche definierten Gegenstand abzuweichen, soll die vorstehende Beschreibung beispielhafter Aspekte nur veranschaulichend anstatt beschränkend für den wie durch die Ansprüche definierten Gegenstand sein. Außerdem ist die Darstellung der hier beschriebenen Beispiele (sowie aller Satzteile mit Wendungen wie "wie etwa", "z. B.", "einschließlich" und dergleichen) selbstverständlich nicht als Beschränkung des beanspruchten Gegenstands auf die spezifischen Beispiele zu interpretieren; vielmehr sollen die Beispiele nur einige von vielen möglichen Aspekten veranschaulichen.