-
TECHNISCHES GEBIET
-
Die vorliegende Erfindung bezieht sich allgemein auf ein Speichersystem, und insbesondere auf das Zuweisen von Dienstgüteniveaus zu den mehreren Funktionen in Speichervorrichtungen.
-
HINTERGRUND
-
Ein Speicher-Untersystem kann eine oder mehrere Speicherkomponenten enthalten, um Daten zu speichern. Bei den Speicherkomponenten kann es sich zum Beispiel um nichtflüchtige Speicherkomponenten und flüchtige Speicherkomponenten handeln. Allgemein kann ein Host-System ein Speicher-Untersystem verwenden, um Daten in den Speicherkomponenten zu speichern und um Daten aus den Speicherkomponenten abzurufen.
-
Figurenliste
-
Die vorliegende Erfindung wird anhand der nachfolgenden detaillierten Beschreibung und der beigefügten Zeichnungen verschiedener Ausführungsformen der Erfindung vollständiger verstanden.
- 1 zeigt eine beispielhafte Computerumgebung für das Zuweisen von Dienstgüteniveaus zu den mehreren Funktionen in Speichervorrichtungen gemäß einigen Ausführungsformen der vorliegenden Erfindung.
- 2 zeigt das Zuweisen von Funktionsgewichtung und Operationsgewichtung in einem Speicher-Untersystem 110 für das Verwalten von Dienstgüteniveaus (Service-of-Quality-Level = QoS-Niveaus) gemäß einigen Ausführungsformen der vorliegenden Erfindung.
- 3 zeigt ein Beispiel einer Programmieren/Löschen-Halten/Fortsetzen-Richtlinien-Zeitachse (P/E-Halten/Fortsetzen-Richtlinien-Zeitachse) zum Unterstützen der Verwaltung von QoS-Niveaus gemäß einigen Ausführungsformen der vorliegenden Erfindung.
- 4 ist ein Flussdiagramm eines beispielhaften Verfahrens zum Zuweisen von Funktionsgewichtungen und Operationsgewichtungen zum Unterstützen der Verwaltung von QoS-Niveaus in einem Speicher-Untersystem gemäß einigen Ausführungsformen der vorliegenden Erfindung.
- 5 ist ein Flussdiagramm eines beispielhaften Verfahrens eines Ausführungszyklus von I/O-Operationen, die das Verwalten von QoS-Niveaus in einem Speicher-Untersystem unterstützen, gemäß einigen Ausführungsformen der vorliegenden Erfindung.
- 6 ist ein Flussdiagramm eines beispielhaften Verfahrens einer Halten/Fortsetzen-Richtlinie zum Unterstützen der Verwaltung von QoS-Niveaus in einem Speicher-Untersystem gemäß einigen Ausführungsformen der vorliegenden Erfindung.
- 7 ist ein Flussdiagramm eines beispielhaften Verfahrens zum Zuweisen von Funktionsgewichtungen zum Unterstützen der Verwaltung von QoS-Niveaus in einem Speicher-Untersystem gemäß einigen Ausführungsformen der vorliegenden Erfindung.
- 8 ist ein Blockdiagramm eines beispielhaften-Computersystems, in dem Ausführungsformen der vorliegenden Erfindung funktionieren können.
-
DETAILLIERTE BESCHREIBUNG
-
Aspekte der vorliegenden Erfindung sind auf das Zuweisen von Dienstgüteniveaus zu den mehreren Funktionen in Speichervorrichtungen eines Speicher-Untersystems gerichtet. Ein Speicher-Untersystem kann eine Speichervorrichtung, ein Speichermodul oder ein Hybrid aus einer Speichervorrichtung und einem Speichermodul sein. Beispiele für Speichervorrichtungen und Speichermodule werden nachfolgend in Verbindung mit 1 beschrieben. Allgemein kann ein Host-System ein Speicher-Untersystem verwenden, das eine oder mehrere Speicherkomponenten enthält, wie zum Beispiel Speichervorrichtungen, die Daten speichern. Das Host-System kann Daten zur Verfügung stellen, die in dem Speicher-Untersystem gespeichert werden sollen, und kann Daten anfordern, die aus dem Speicher-Untersystem abgerufen werden sollen.
-
Die Entwicklung der Server-Architektur und die Verfügbarkeit von Mehrkern-Prozessoren haben zu erheblichen Veränderungen hinsichtlich des Server-Designs geführt. Vor allem wurden Server, auf denen ein einziges Betriebssystem (OS) läuft, durch Multi-Tenant-Server ersetzt, bei denen eine Reihe von „Eigentümern“ (z.B. Gast-Betriebssysteme, die in virtuellen Maschinen (VMs), Containern oder Micro-Services laufen) dieselbe physische Server-Plattform nutzen, ohne von der Existenz der anderen zu wissen.
-
Das Verbinden von Eingabe/Ausgabevorrichtungen (I/O-Vorrichtungen) mit jeder VM kann problematisch und ressourcenintensiv sein, weshalb spezielle Architekturen entwickelt wurden, um den Verbindungsprozess zu vereinfachen und um die Leistung zu maximieren. Bestimmte herkömmliche Speicher-Untersysteme nutzen die Spezifikation der Single-Root-Input/Output-Virtualisierung (SR-IOV). SR-IOV ist eine Spezifikation, die das Isolieren von Peripheral-Component-Interconnect-Express-Ressourcen (Peripheral-Component-Interconnect = PCI und Peripheral-Component-Interconnect-Express = PCle) unter verschiedenen Hardwarefunktionen aus Gründen der Verwaltbarkeit und der Leistung ermöglicht, während gleichzeitig einzelne physische PCIe-Vorrichtungen in einer virtuellen Umgebung gemeinsam genutzt werden können. SR-IOV bietet verschiedene virtuelle Funktionen (VFs) für verschiedene virtuelle Komponenten (z.B. einen Netzwerk-Adapter) auf einer physischen Server-Maschine. SR-IOV ermöglicht auch, dass verschiedene virtuelle Maschinen in einer virtuellen Umgebung eine einzige PCIe-Hardware-Schnittstelle gemeinsam nutzen. Alternativ kann eine gleichwertige Fähigkeit durch eine Reihe von parallelen physischen Funktionen, genannt „Multi-PF“, angeboten werden. Die Multi-PF-Architektur ordnet jede physikalische Funktion (PF) einer VM zu. Eine physische Funktion ermöglicht die Aufzählung einer Reihe von physischen Funktionen, und ein Hypervisor kann diese physischen Funktionen dann einer oder mehreren virtuellen Maschinen zuweisen. Diese Lösungen erfordern sowohl ein Host-Betriebssystem (Host-OS), das für die Aufzählung und die Ressourcen-Zuweisung zuständig ist, als auch eine Reihe von Gast-Betriebssystemen (Gast-OSs), die auf virtuellen Maschinen laufen und für den regulären Datenfluss zuständig sind. Das Host-OS kann sich solcher Fähigkeiten bewusst sein und spezielle Funktionen identifizieren, die dem Host-OS hinzugefügt werden müssen. Darüber hinaus unterstützen die meisten Hypervisor-Umgebungen kein SR-IOV, so dass diese Lösung in vielen Situationen nicht anwendbar ist. Darüber hinaus kann in vielen Fällen für jede VM ein Service-Level-Agreement (SLA) gelten, in dem ein bestimmtes Dienstniveau, einschließlich Qualität, Verfügbarkeit, Verantwortlichkeiten usw., festgelegt ist. Unter bestimmten Umständen kann es eine Herausforderung sein, das SLA des Speicher-Untersystems zu erfüllen, wenn von jeder VF und/oder PF erwartet wird, dass sie die gleiche Maß an Dienstgüte bietet.
-
Aspekte der vorliegenden Erfindung überwinden die obigen und andere Nachteile durch ein Speicher-Untersystem, das einen Mechanismus zur Verfügung stellt, so dass jede Funktion (VF und/oder PF) mit einem anderen Dienstgüteniveau (QoS-Niveau) bedient werden kann, um die Bedingungen des System-SLA zu erfüllen. Bei der Bereitstellung solcher QoS-Niveaus in einem Speicher-Untersystem, das NAND-basierten Speicher und ähnliche Vorrichtungen verwendet, müssen bestimmte Überlegungen angestellt werden. Zum Beispiel sind NAND-Schreiboperationen (Programme) langsam und asynchron und können eingehende System-IOs stören, was sich möglicherweise auf die QoS auswirkt. Außerdem werden auf NAND-Vorrichtungen im Rahmen von Abnutzungsausgleichsoperationen häufig Daten verschoben, und Konflikte mit eingehenden Daten sind allgemein nicht vorhersehbar. Außerdem kann das Speicher-Untersystem bestimmte Hintergrundoperationen durchführen (z.B. Speicherbereinigung, Medien-Scans, Abnutzungsausgleich), die I/O in unvorhersehbarem Maße beeinflussen können. NAND-Lösch- und NAND-Programmieroperationen sind beides Vorgänge mit hoher Auswirkung, da sie den gesamten Chip sperren, wenn sie aktiv sind, und außerdem sehr langsam sind (z.B. 10- bis 30-mal langsamer als Leseoperationen), so dass I/Os, die sich auf einen solchen Chip auswirken, erheblich verzögert werden können. Darüber hinaus haben NAND-Lösch- und NAND-Programmieroperationen eine Halten/Fortsetzen-Fähigkeit (Suspend/Resume-Capability), die sich jedoch auf alle anderen lOs auswirkt. Daher kann ein Schema verwendet werden, um die verschiedenen Funktionen sowie die verschiedenen Typen von I/O- und Hintergrundoperationen jeder Funktion zu priorisieren, um eine vorhersehbare QoS des Speicher-Untersystems zu unterstützen.
-
In einer Implementierung definiert das Speicher-Untersystem eine Funktionsgewichtung, die ein Dienstgüteniveau darstellt, das jeder Funktion in dem Speicher-Untersystem zugewiesen wird. Das Speicher-Untersystem kann ferner eine bestimmte Operationsgewichtung für Leseoperationen und eine andere Operationsgewichtung für Schreiboperationen, die an der Funktion eingehen, definieren, so dass Lese- und Schreiboperationen unterschiedliche QoS-Fähigkeiten zugewiesen werden können. Das Speicher-Untersystem kann auch eine Richtlinie für Programmieren/Löschen-Halten/Fortsetzen-Operationen definieren, die die Operationsgewichtung der P/E-Operation sowie die Operationsgewichtung einer Warte-Operation (d.h. einer nachfolgenden Operation, die ausgeführt werden soll) umfasst, wie nachfolgend näher erläutert wird.
-
Die hier beschriebenen Techniken zum Zuweisen von Dienstgüteniveaus zu mehreren Funktionen ermöglichen es einem Speicher-Untersystem, jeder Funktion (VF oder PF) des Speicher-Untersystems ein anderes Dienstgüteniveau (QoS) zuzuweisen, indem Funktionsgewichtungen, Operationsgewichtungen und Halten/Fortsetzen-Richtlinienmerkmale zur Verfügung gestellt werden. Das Verwenden einer Funktionsgewichtung, die jeder Funktion zugewiesen wird, ermöglicht ein besser vorhersehbares QoS-Niveau für jede Funktion, da jede Funktion eine vorhersehbare Verarbeitungszeit haben kann, die auf ihrer Funktionsgewichtung basiert. Die Funktionsgewichtung von jeder Funktion kann auch für eine deterministischere Latenz der Funktion sorgen, da das Speicher-Untersystem die Latenz von jeder Funktion relativ zu ihrer Funktionsgewichtung einstellen kann (z.B. je höher die Funktionsgewichtung, desto niedriger deren durchschnittliche Latenz). Durch das Zuweisen von Funktionsgewichtungen zu jedem I/O-Operationstyp kann das Speicher-Untersystem außerdem die schnellen I/O-Operationen (z.B. Leseoperationen) gegenüber den langsamen I/O-Operationen (z.B. Schreiboperationen) priorisieren, so dass die schnellen Operationen durch die Ausführung zahlreicher langwieriger Operationen nicht übermäßig verzögert werden. Darüber hinaus kann die Möglichkeit, langwierige Operationen zu unterbrechen, um schnelle I/O-Operationen nach einer berechneten Zeitverzögerung auszuführen, eine besser vorhersehbare Auswirkung von Hintergrundoperationen (Löschen, Speicherbereinigung, Abnutzungsausgleich usw.) auf die Ausführungszeit von I/O-Operationen bewirken. Auf diese Weise kann die erhebliche Verzögerung, die sich auf I/O-Operationen aufgrund der Ausführung von Hintergrundoperationen auswirken kann, verringert und auf Basis der Halten/Fortsetzen-Richtlinie des Speicher-Untersystems, die definieren kann, wie I/O-Operationen zu handhaben sind, die an der Speichervorrichtung ankommen, während eine Hintergrundoperation ausgeführt wird, weiter vorhergesagt werden. Weitere Einzelheiten zu diesen Techniken werden nachfolgend unter Bezugnahme auf die 1-7 beschrieben.
-
1 zeigt eine beispielhafte Computerumgebung 100, die ein Speicher-Untersystem 110 gemäß einigen Ausführungsformen der vorliegenden Erfindung enthält. Das Speicher-Untersystem 110 kann Medien enthalten, wie zum Beispiel eine oder mehrere flüchtige Speichervorrichtungen (z.B. Speichervorrichtung 140), eine oder mehrere nichtflüchtige Speichervorrichtungen (z.B. Speichervorrichtung 130) oder eine Kombination davon.
-
Ein Speicher-Untersystem 110 kann eine Speichervorrichtung, ein Speichermodul oder eine Mischung aus einer Speichervorrichtung und einem Speichermodul sein. Beispiele einer Speichervorrichtung umfassen ein Solid-State-Laufwerk (SSD), ein Flash-Laufwerk, ein USB-Flash-Laufwerk (Universal-Serial-Bus-Laufwerk), ein eMMC-Laufwerk (Embedded Multi-Media-Controller-Laufwerk), ein UFS-Laufwerk (Universal-Flash-Storage-Laufwerk) und ein Festplattenlaufwerk (HDD). Beispiele für Speichermodule umfassen ein Dual-Inline-Speichermodul (DIMM), ein Small-Outline-DIMM (SO-DIMM) und ein nichtflüchtiges Dual-Inline-Speichermodul (NVDIMM).
-
Die Computerumgebung 100 kann ein Host-System 120 umfassen, das mit einem oder mehreren Speicher-Untersystemen 110 gekoppelt ist. In einigen Ausführungsformen ist das Host-System 120 mit verschiedenen Typen von Speicher-Untersystemen 110 gekoppelt. 1 zeigt ein Beispiel eines Host-Systems 120, das mit einem Speicher-Untersystem 110 gekoppelt ist. Das Host-System 120 verwendet das Speicher-Untersystem 110, um beispielsweise Daten in das Speicher-Untersystem 110 zu schreiben und um Daten aus dem Speicher-Untersystem 110 zu lesen. Wie hier verwendet, bezieht sich „gekoppelt mit“ allgemein auf eine Verbindung zwischen Komponenten, bei der es sich um eine indirekte kommunikative Verbindung oder eine direkte kommunikative Verbindung (z.B. ohne dazwischenliegende Komponenten) handeln kann, unabhängig davon, ob verdrahtet oder drahtlos, einschließlich Verbindungen, wie zum Beispiel elektrische, optische, magnetische usw. Verbindungen.
-
Das Host-System 120 kann eine Computervorrichtung sein, wie zum Beispiel ein Desktop-Computer, ein Laptop-Computer, ein Netzwerk-Server, eine mobile Vorrichtung, ein eingebetteter Computer (z.B. in einem Fahrzeug, einer Industrieanlage oder einer vernetzten kommerziellen Vorrichtung) oder eine solche Computervorrichtung, die einen Speicher und eine Verarbeitungsvorrichtung enthält. Das Host-System 120 kann über eine physische Host-Schnittstelle mit dem Speicher-Untersystem 110 verbunden sein. Beispiele für eine physische Host-Schnittstelle sind unter anderem eine SATA-Schnittstelle (Serial Advanced Technology Attachment Schnittstelle), eine PCIe-Schnittstelle (Peripheral Component Interconnect Express Schnittstelle), eine USB-Schnittstelle (Universal Serial Bus Schnittstelle), ein Fibre Channel, ein SAS (Serial Attached SCSI) usw. Die physische Host-Schnittstelle kann zur Datenübertragung zwischen dem Host-System 120 und dem Speicher-Untersystem 110 verwendet werden. Das Host-System 120 kann außerdem eine NVMe-Schnittstelle (NVM Express-Schnittstelle) verwenden, um auf die Speicherkomponenten (z.B. Speichervorrichtungen 130) zuzugreifen, wenn das Speicher-Untersystem 110 über die PCIe-Schnittstelle mit dem Host-System 120 gekoppelt ist. Die physische Host-Schnittstelle kann eine Schnittstelle für die Weitergabe von Steuersignalen, Adresssignalen, Datensignalen und anderen Signalen zwischen dem Speicher-Untersystem 110 und dem Host-System 120 bereitstellen.
-
Die Speichervorrichtungen können eine beliebige Kombination der verschiedenen Typen von nichtflüchtigen Speichervorrichtungen und/oder flüchtigen Speichervorrichtungen umfassen. Die flüchtigen Speichervorrichtungen (z.B. Speichervorrichtung 140) können Direktzugriffsspeicher (RAM) sein, wie zum Beispiel dynamische Direktzugriffsspeicher (DRAM) und synchrone dynamische Direktzugriffsspeicher (SDRAM), aber nicht darauf beschränkt.
-
Einige Beispiele für nichtflüchtige Speichervorrichtungen (z.B. Speichervorrichtung 130) umfassen Flash-Speicher vom Negativ-Und-Typ (NAND-Typ) und Write-in-Place-Speicher, wie z.B. dreidimensionaler Kreuzpunktspeicher („3D-Cross-Point“-Speicher). Bei einem 3D-Kreuzpunktspeicher handelt es sich um ein Kreuzpunkt-Array aus nichtflüchtiger Speicherzellen, die in Verbindung mit einer stapelbaren Kreuzgitter-Datenzugriffs-Array eine Bitspeicherung auf Basis einer Änderung des Bahnwiderstands vornehmen kann. Darüber hinaus kann ein nichtflüchtiger Kreuzpunktspeicher im Gegensatz zu vielen Flash-Speichern eine Write-in-Place-Operation durchführen, bei der eine nichtflüchtige Speicherzelle programmiert werden kann, ohne dass die nichtflüchtige Speicherzelle zuvor gelöscht wurde.
-
Jede der Speichervorrichtungen 130 kann ein oder mehrere Arrays aus Speicherzellen enthalten, wie zum Beispiel Single-Level-Zellen (SLCs), Multi-Level-Zellen (MLCs), Triple-Level-Zellen (TLCs) oder Quad-Level-Zellen (QLCs). In einigen Ausführungsformen kann eine bestimmte Speicherkomponente einen SLC-Bereich und einen MLC-Bereich, einen TLC-Bereich oder einen QLC-Bereich von Speicherzellen enthalten. Jede der Speicherzellen kann ein oder mehrere Datenbits speichern, die von dem Host-System 120 verwendet werden. Darüber hinaus können die Speicherzellen der Speichervorrichtungen 130 gruppiert werden, um Seiten zu bilden, die sich auf eine Einheit der zum Speichern von Daten verwendeten Speicherkomponente beziehen können. Bei einigen Speichertypen (z.B. NAND) können Seiten gruppiert werden, um Blöcke zu bilden. Bei einigen Speichertypen, wie z.B. 3D-Cross-Point, können Seiten über Chips und Kanäle gruppiert werden, um Verwaltungseinheiten (MUs) zu bilden.
-
Obwohl nichtflüchtige Speicherkomponenten, wie zum Beispiel Flash-Speicher vom Typ NAND und 3D-Kreuzpunkt beschrieben werden, kann die Speichervorrichtung 130 auf jedem anderen Typ nichtflüchtiger Speicher basieren, wie zum Beispiel Festwertspeicher (ROM), Phasenänderungsspeicher (PCM), Magneto-Random-Access-Speicher (MRAM), Negative-Or-Flash-Speicher (NOR-Flash-Speicher), elektrisch löschbare programmierbare Festwertspeicher (EEPROM).
-
Der Speicher-Untersystem-Controller 115 kann mit den Speichervorrichtungen 130 kommunizieren, um Operationen, wie zum Beispiel Lesen von Daten, Schreiben von Daten oder Löschen von Daten und andere solche Operationen, in den Speichervorrichtungen 130 durchzuführen. Der Speicher-Untersystem-Controller 115 kann Hardware enthalten, wie zum Beispiel eine oder mehrere integrierte Schaltungen und/oder diskrete Komponenten, einen Pufferspeicher oder eine Kombination davon. Die Hardware kann eine digitale Schaltung mit dedizierter (d.h. hartkodierter) Logik enthalten, um die hier beschriebenen Operationen durchzuführen. Der Controller des Speicher-Untersystems 115 kann ein Mikro-Controller, eine spezielle Logikschaltung (z.B. ein feldprogrammierbares Gate-Array (FPGA), eine anwendungsspezifische integrierte Schaltung (ASIC), usw.) oder ein anderer geeigneter Prozessor sein.
-
Der Speicher-Untersystem-Controller 115 kann einen Prozessor (Verarbeitungsvorrichtung) 117 enthalten, der ausgestaltet ist, um in dem lokalen Speicher 119 gespeicherte Instruktionen auszuführen. Im dargestellten Beispiel umfasst der lokale Speicher 119 des Speicher-Untersystem-Controllers 115 einen eingebetteten Speicher, der ausgestaltet ist, um Instruktionen zur Durchführung verschiedener Prozesse, Operationen, logischer Abläufe und Routinen zu speichern, die die Operation des Speicher-Untersystems 110 steuern, einschließlich der Handhabung von Kommunikation zwischen dem Speicher-Untersystem 110 und dem Host-System 120.
-
In einigen Ausführungsformen kann der lokale Speicher 119 Speicherregister zum Speichern von Speicherzeigern, abgerufenen Daten usw. enthalten. Der lokale Speicher 119 kann auch einen Nur-Lese-Speicher (ROM) zum Speichern von Mikro-Code enthalten. Obwohl das beispielhafte Speicher-Untersystem 110 aus 1 so dargestellt wurde, dass es den Speicher-Untersystem-Controller 115 enthält, kann ein Speicher-Untersystem 110 in einer anderen Ausführungsform der vorliegenden Erfindung keinen Speicher-Untersystem-Controller 115 enthalten und sich stattdessen auf eine externe Steuerung verlassen (zur Verfügung gestellt z.B. durch einen externen Host oder durch einen vom Speicher-Untersystem getrennten Prozessor oder Controller).
-
Allgemein kann der Speicher-Untersystem-Controller 115 Befehle oder Operationen vom Host-System 120 empfangen und kann die Befehle oder Operationen in Instruktionen oder geeignete Befehle umwandeln, um den gewünschten Zugriff auf die Speichervorrichtungen 130 zu erreichen. Der Speicher-Untersystem-Controller 115 kann für andere Operationen verantwortlich sein, wie zum Beispiel Abnutzungsausgleichsoperationen, Speicherbereinigungs-Operationen, Fehlererfassungs- und Fehlerkorrekturcode-Operationen (ECC-Operationen), Verschlüsselungsoperationen, Cache-Operationen und Adressenübersetzungen zwischen einer logischen Blockadresse und einer physischen Blockadresse, die mit den Speichervorrichtungen 130 in Beziehung stehen. Der Speicher-Untersystem-Controller 115 kann ferner eine Host-Schnittstellenschaltung enthalten, um über die physische Host-Schnittstelle mit dem Host-System 120 zu kommunizieren. Die Host-Schnittstellenschaltung kann die vom Host-System empfangenen Befehle in Befehlsinstruktionen umwandeln, um auf die Speichervorrichtungen 130 zuzugreifen, und die mit den Speichervorrichtungen 130 in Beziehung stehenden Antworten in Informationen für das Host-System 120 umwandeln.
-
Das Speicher-Untersystem 110 kann auch zusätzliche Schaltungen oder Komponenten enthalten, die nicht dargestellt sind. In einigen Ausführungsformen kann das Speicher-Untersystem 110 einen Cache oder Puffer (z.B. DRAM) und Adressenschaltungen (z.B. einen Zeilen-Dekodierer und einen Spalten-Dekodierer) enthalten, die eine Adresse von dem Speicher-Untersystem-Controller 115 empfangen und die Adresse dekodieren können, um auf die Speichervorrichtungen 130 zuzugreifen.
-
In einigen Ausführungsformen umfassen die Speichervorrichtungen 130 lokale Medien-Controller 135, die in Verbindung mit dem Speicher-Untersystem-Controller 115 arbeiten, um Operationen hinsichtlich einer oder mehrerer Speicherzellen der Speichervorrichtungen 130 auszuführen. In einigen Ausführungsformen sind die Speichervorrichtungen 130 verwaltete Speichervorrichtungen, d.h. eine Roh-Speichervorrichtung, die mit einem lokalen Controller (z.B. dem lokalen Controller 135) für eine Speicherverwaltung innerhalb desselben Speichervorrichtungsbausteins kombiniert ist. Ein Beispiel für eine verwaltete Speichervorrichtung ist eine verwaltete NAND-Vorrichtung (MNAND).
-
Das Speicher-Untersystem 110 umfasst ein QoS-Niveau-Verwaltungs-Modul 113, das dazu verwendet werden kann, jeder Funktion in dem Speicher-Untersystem ein QoS-Niveau zuzuweisen. In bestimmten Implementierungen kann das QoS-Niveau-Verwaltungs-Modul 113 jeder Funktion der mehreren vom Speicher-Untersystem bereitgestellten Funktionen eine entsprechende Funktionsgewichtung zuweisen, die ein mit der Funktion in Beziehung stehendes QoS-Niveau darstellt. In einer Implementierung kann die Funktionsgewichtung ein Wert relativ zur durchschnittlichen Latenz der Speichervorrichtung sein, so dass beispielsweise eine bestimmte Funktion mit einer geringeren Latenz als der durchschnittlichen Latenz der Speichervorrichtung bedient werden kann (und somit ein hohes QoS-Niveau bietet). In einem anderen Beispiel kann die Funktionsgewichtung einer anderen Funktion anzeigen, dass die andere Funktion mit einer höheren Latenzrate als der durchschnittlichen Latenz der Speichervorrichtung bedient werden kann (und somit ein niedriges QoS-Niveau bietet). In bestimmten Implementierungen kann das mit einer Funktion in Beziehung stehende Dienstgüteniveau über Parameter, die an der Funktion empfangene Eingabe/Ausgabe-Operationen pro Sekunde (IOPS) und einen der Funktion zugeordneten Durchsatz, konfiguriert und angepasst werden. Das Speicher-Untersystem kann diese Parameter konfigurieren, wodurch das QoS-Niveau modifiziert wird, indem für jeden Parameter ein Minimum (d.h. „Reserve“) und ein Maximum (d.h. „Limit“) festgelegt wird.
-
Das QoS-Niveau-Verwaltungs-Modul 113 kann dann jede Funktion auf Basis der entsprechenden Funktionsgewichtung, die mit der Funktion in Beziehung steht, sowie Operationsgewichtungen, die jedem I/O-Operationstyp der an der Funktion empfangenen Operationen zugewiesen sind, bedienen. In Implementierungen kann das QoS-Niveau-Verwaltungs-Modul 113 eine erste Operationsgewichtung den Leseoperationen der Funktion und eine zweite Operationsgewichtung den Schreiboperationen der Funktion zuweisen. Die Funktionsgewichtung und die Operationsgewichtung können dann zusammen verwendet werden, um die Anzahl der Operationen jedes Typs zu bestimmen, die pro Zeiteinheit ausgeführt werden können. So kann beispielsweise die einer bestimmten Funktion zugewiesene Funktionsgewichtung in eine Anzahl von I/O-Operationen übersetzt werden, die pro Zeiteinheit ausgeführt werden können. Die Anzahl der Operationen kann eine Teilmenge der I/O-Operationen sein, die an der Funktion empfangen werden. Zusätzlich kann die erste Operationsgewichtung angeben, wie viele der Anzahl der Operationen den Operationen vom Typ Lesen zugeordnet werden können, und die zweite Operationsgewichtung kann angeben, wie viele der Anzahl der Operationen den Operationen vom Typ Schreiben zugeordnet werden können.
-
Wenn eine Operation zur Ausführung ausgewählt wird, unterstützt das QoS-Niveau-Verwaltungs-Modul 113 außerdem das QoS-Niveau, das der Operation zugewiesen ist (z.B. in der Form einer Operationsgewichtung), indem eine Halten/Fortsetzen-Richtlinie entsprechend der Operationsgewichtung der Operation ausgeführt wird. In einigen Implementierungen, wenn eine Leseoperation zur Ausführung an der Speichervorrichtung empfangen wird, kann das QoS-Niveau-Verwaltung-Modul 113 prüfen, ob eine Schreiboperation gerade von der Speichervorrichtung ausgeführt wird. Wenn dies der Fall ist, kann das QoS-Niveau-Verwaltungs-Modul 113 die Schreiboperation nach einer berechneten Verzögerungszeitdauer aussetzen, die proportional zur Operationsgewichtung der Leseoperation und der Operationsgewichtung der Schreiboperation ist. Je höher das Verhältnis zwischen der Operationsgewichtung der Leseoperation und der Operationsgewichtung der Schreiboperation ist, desto länger kann die Verzögerungszeit sein. Nach Ablauf der Verzögerungszeitdauer kann das QoS-Niveau-Verwaltungs-Modul 113 die Leseoperation ausführen und dann, nach Abschluss der Leseoperation, die Schreiboperation fortsetzen. Weitere Details bezüglich der Operationen des QoS-Niveau-Verwaltungs-Moduls 113 werden nachfolgenden beschrieben.
-
2 zeigt das Zuweisen von Funktionsgewichtungen und Operationsgewichtungen in dem Speicher-Untersystem 110 für das Verwalten von Dienstgüteniveaus gemäß einigen Ausführungsformen der vorliegenden Erfindung. Das Speicher-Untersystem 110 kann mehrere virtuelle und physische Funktionen F 210-230 für Zugriffe auf die Speichervorrichtung 130 zur Verfügung stellen. In bestimmten Implementierungen stellt das Speicher-Untersystem 110 mehrere Funktionen zur Verfügung, um mehrere virtuelle Maschinen (VMs) in einer virtualisierten Umgebung zu bedienen, wobei jede VM eine oder mehrere Funktionen für Zugriffe auf die Speichervorrichtung 130 verwendet. Die Funktionen F 210-230 können I/O-Operationen (z.B. Leseoperationen, Schreiboperationen) vom Host-Computersystem für Zugriffe auf die Speichervorrichtung 130 empfangen. Da alle diese I/O-Operationen von den verschiedenen Funktionen auf die Speichervorrichtung 130 zugreifen müssen und da die Funktionen hinsichtlich des ihnen vom Speicher-Untersystem 110 zugewiesenen QoS-Niveaus variieren können, kann jede Funktion eine andere Priorität für Zugriffe auf die Speichervorrichtung 130 haben, die mit ihrem QoS-Niveau übereinstimmt. Die Priorität jeder Funktion kann durch Funktionsgewichtungen 211-231 dargestellt werden. Darüber hinaus kann für eine gegebene Funktion jeder Operationstyp (z.B. Leseoperationstyp, Schreiboperationstyp) eine andere Priorität für Zugriffe auf die Speichervorrichtung 130 haben, die als Lesegewichtungen 216-236 und Schreibgewichtungen 218-238 ausgedrückt werden können.
-
Das Speicher-Untersystem 110 kann jeder Funktion 210-230 eine entsprechende Funktionsgewichtung zuweisen, die ein mit der Funktion in Beziehung stehendes Dienstgüteniveau darstellt. Zum Beispiel kann F 210 eine Funktionsgewichtung 211 zugewiesen werden, F 220 kann eine Funktionsgewichtung 221 zugewiesen werden, und F 230 kann eine Funktionsgewichtung 231 zugewiesen werden. In einer Implementierung kann die Funktionsgewichtung ein Wert relativ zur durchschnittlichen Latenz der Speichervorrichtung 130 sein. Die durchschnittliche Latenz der Speichervorrichtung 130 kann sich auf die durchschnittliche Zeitdauer zwischen dem Zeitpunkt des Empfangs einer I/O-Operation und dem Zeitpunkt des Abschlusses der Ausführung der I/O-Operation beziehen. In Implementierungen kann die durchschnittliche Latenz unter Verwendung von Timern berechnet werden, um den Zeitpunkt von Leseoperationen, die in einer Zeiteinheit (z.B. einer Sekunde) abgearbeitet wurden, und den Zeitpunkt von Schreiboperationen, die in derselben Zeiteinheit abgearbeitet wurden, zu messen. Die durchschnittliche Leselatenz der Speichervorrichtung 130 kann dann als der Durchschnitt der gemessenen Zeiten der Leseoperationen berechnet werden. Die durchschnittliche Schreiblatenz der Speichervorrichtung 130 kann als der Durchschnitt der gemessenen Zeiten der Schreiboperationen berechnet werden. Die durchschnittliche Gesamtlatenz der Speichervorrichtung 130 kann auch aus der durchschnittlichen Leselatenz und der durchschnittlichen Schreiblatenz ermittelt werden.
-
Angesichts der durchschnittlichen Latenz der Speichervorrichtung 130 können die Funktionsgewichtungen 211-231 relativ zur durchschnittlichen Latenz der Speichervorrichtung 130 bestimmt werden. In einer Implementierung kann die Funktionsgewichtung ein Wert zwischen 0 und 1000 sein. 0 kann die geringstmögliche Latenz angeben, und 1000 kann die 10-fache Latenz der durchschnittlichen Latenz der Speichervorrichtung 130 angeben. Zwischenwerte zwischen 0 und 1000 können einen entsprechenden Prozentsatz der durchschnittlichen Latenz der Speichervorrichtung 130 angeben. Wenn beispielsweise die Funktionsgewichtung 211 gleich 50 ist, dann bedeutet dies, dass F 210 mit einer Latenz bedient werden soll, die doppelt so schnell ist wie die durchschnittliche Latenz der Speichervorrichtung 130 (d.h. 0,5 x durchschnittliche Latenz), wodurch ein überdurchschnittliches QoS-Niveau geboten wird. Wenn andererseits die Funktionsgewichtung 221 gleich 500 ist, bedeutet dies, dass F 220 mit einer Latenz bedient werden soll, die fünfmal so langsam ist wie die durchschnittliche Latenz der Speichervorrichtung 130 (d.h. 5 x durchschnittliche Latenz), wodurch ein unterdurchschnittliches QoS-Niveau bereitgestellt wird. In bestimmten Implementierungen kann die Funktionsgewichtung in eine Anzahl von I/O-Operationen übersetzt werden, die an der Funktion empfangen werden und in einem bestimmten Ausführungszyklus ausgeführt werden können. Wenn die Speichervorrichtung 130 in einem darstellenden Beispiel in der Lage ist, 12 Operationen während eines Ausführungszyklus zu verarbeiten, dann können die 12 Operationen unter den Funktionen entsprechend der Gewichtung jeder Funktion relativ zu den Gewichtungen der anderen Funktionen aufgeteilt werden. Wenn also die Funktionsgewichtung 211 den Wert 50 hat, die Funktionsgewichtung 221 den Wert 500 hat und die Funktionsgewichtung 231 den Wert 150 hat, können die 12 Operationen pro Zyklus als 8 Operationen der Funktion F 210, 3 Operationen der Funktion F 220 und 1 Operation der Funktion F 230 während jedes Ausführungszyklus zugewiesen werden. Das Speicher-Untersystem 110 kann dann bestimmen, wie viele der Operationen, die jeder Funktion zugewiesen sind, Leseoperationen gegenüber Schreiboperationen sein können, und zwar basierend auf der Operationsgewichtung von jedem Typ.
-
Die Lesegewichtungen 216-236 können die Priorität der Leseoperationen, die an der jeweiligen Funktion empfangen werden, in Relation zur Priorität der entsprechenden Schreiboperationen bestimmen, die an derselben Funktion empfangen werden. Die Priorität von Operationstypen kann eine besser vorhersehbare QoS der Funktion erleichtern, da sie es beispielsweise ermöglichen kann, schnelle Operationen gegenüber zeitaufwändigen Operationen zu priorisieren, wodurch die zufällige Reihenfolge der Verarbeitung von Operationen verschiedener Typen weiter eliminieren kann. Wenn in einem darstellenden Beispiel die Lesegewichtung 216 den Wert 3 hat und die Schreibgewichtung den Wert 1 hat, können gemäß dem obigen Beispiel, wenn F 210 pro Ausführungszyklus 8 Operationen zugewiesen werden, die 8 Operationen im Verhältnis 3:1 zwischen Lese- und Schreiboperationen aufgeteilt werden. Somit können die 8 Operationen als 6 Operationen des Typs Leseoperationen und 2 Operationen des Typs Schreiboperation zugewiesen werden. In Implementierungen können die 6 Leseoperationen aus der Lesewarteschlange 212 abgerufen werden, und die beiden Schreiboperationen können aus der Schreibwarteschlange 214 abgerufen werden.
-
Die Lesewarteschlangen 212-232 sind Operationswarteschlangen zum Speichern von Leseoperationen, die an den Funktionen 210-230 empfangen werden. Schreibwarteschlangen 214-234 sind Operationswarteschlangen zum Speichern von Schreiboperationen, die an den Funktionen 210-230 empfangen werden. Obwohl die Lesewarteschlangen 212-232 und die Schreibwarteschlangen 214-234 als eine Lesewarteschlange und eine Schreibwarteschlange pro Funktion dargestellt sind, kann jede Funktion ihre eigene(n) eine oder mehrere Lesewarteschlange(n) und eine oder mehrere Schreibwarteschlange(n) zum Speichern der an der Funktion empfangenen I/O-Operationen haben. Die I/O-Operationen werden je nach Operationstyp (z.B. Lesen oder Schreiben) in einer bestimmten Warteschlange gespeichert. Die I/O-Operationen können in den Warteschlangen gespeichert werden, bis sie zur Ausführung während eines oder mehrerer Ausführungszyklen abgerufen werden. Während eines Ausführungszyklus können Leseoperationen aus einer Lesewarteschlange 212-232 der Funktion 210-230 entsprechend der Funktion einer Lesegewichtung 216-236 und einer Funktionsgewichtung 211-231 abgerufen werden. In ähnlicher Weise können Schreiboperationen aus einer Schreibwarteschlange 214-234 der Funktion 210-230 entsprechend der Funktion einer Schreibgewichtung 218-238 und einer Funktionsgewichtung 211-231 abgerufen werden. Wenn beispielsweise F 220 eine Funktionsgewichtung 221 von 3, eine Lesegewichtung 226 von 2 und eine Schreibgewichtung 228 von 1 hat, kann das Speicher-Untersystem 110 bei der Verarbeitung von I/O-Operationen der Funktion 230 zwei Leseoperationen aus der Lesewarteschlange 226 und einen Schreiboperation aus der Schreibwarteschlange 228 abrufen. Wenn in Implementierungen die Schreibwarteschlange 228 keine I/O-Operationen enthält, dann kann das Speicher-Untersystem 110 alle drei Operationen aus der Lesewarteschlange 226 abrufen, falls verfügbar. Auf ähnliche Weise, wenn die Lesewarteschlange 226 keine I/O-Operationen enthält, dann kann das Speicher-Untersystem 110 alle drei Operationen aus der Schreibwarteschlange 228 zur Verarbeitung abrufen, sofern verfügbar.
-
3 zeigt ein Beispiel für eine Zeitleiste einer Programmieren/ Löschen-Halten/Fortsetzen-Richtlinie (PE-Halten/Fortsetzen-Richtlinie) zum Unterstützen der Verwaltung von QoS-Niveaus gemäß einigen Ausführungsformen der vorliegenden Erfindung. Eine P/E-Halten/Fortsetzen-Richtlinie kann bestimmte Typen von I/O-Operationen gegenüber einer aktuell ausgeführten Operation eines anderen Operationstyps priorisieren, wie nachfolgend erläutert. Wenn eine Operation zur Ausführung ausgewählt wird, kann das Speicher-Untersystem 110 das der Operation zugewiesene QoS-Niveau (z.B. in Form einer Operationsgewichtung) weiter unterstützen, indem eine Richtlinie für das Halten und Fortsetzen entsprechend der Operationsgewichtung der Operation ausgeführt wird.
-
In Block 310 kann eine Schreiboperation in der Speichervorrichtung 130 zum Zeitpunkt T0 ausgeführt werden. Die Schreiboperation kann eine zugewiesene Schreibgewichtung haben, die die Priorität der Schreiboperation angibt. In Implementierungen kann die Schreibgewichtung eine Funktion der Operationsgewichtung der Schreiboperation und der Funktionsgewichtung der Funktion sein, in der die Schreiboperation empfangen wurde. In anderen Implementierungen kann die Schreibgewichtung eine Funktion eines Dienstgüteniveaus sein, das dem Typ Schreiboperationen zugewiesen ist (z.B. ein bestimmter Bandbreitenwert, der dem Typ Schreiboperationen zugewiesen ist). In Block 312 kann zum Zeitpunkt T1 eine Leseoperation an der Speichervorrichtung 130 eintreffen. Die Leseoperation kann eine zugewiesene Lesegewichtung haben, die die Priorität der Leseoperation angibt. In Implementierungen kann die Lesegewichtung eine Funktion der Operationsgewichtung der Leseoperation und der Funktionsgewichtung der Funktion sein, in der die Leseoperation empfangen wurde. In anderen Implementierungen kann die Lesegewichtung eine Funktion des Dienstgüteniveaus sein, das dem Typ Leseoperationen zugewiesen ist (z.B. ein bestimmter Bandbreitenwert, der dem Typ Leseoperationen zugewiesen ist).
-
In einigen Implementierungen kann das Speicher-Untersystem 110 die Schreiboperation nach einer berechneten Verzögerungszeit 320 aussetzen, wenn eine Leseoperation an der Speichervorrichtung 130 empfangen wird, während eine Schreiboperation ausgeführt wird, um die Leseoperation auszuführen. Dies geschieht, damit die schnelle Leseoperation ausgeführt werden kann, ohne dass auf eine langwierige Schreiboperation gewartet werden muss, um die Ausführung vollständig abzuschließen, wie vorstehend erläutert.
-
Die Verzögerungszeit 320 entspricht der Operationsgewichtung der eingehenden Leseoperation und der Operationsgewichtung der laufenden Schreiboperation, so dass die Verzögerungszeit umso länger sein kann, je höher das Verhältnis zwischen der Operationsgewichtung der Leseoperation und der Operationsgewichtung der Schreiboperation ist. Die Verzögerungszeit 320 kann eine Möglichkeit bieten, Leseoperationen mit hoher Priorität auszuführen, während es ermöglicht wird, dass die Schreiboperation mit einer minimalen Anzahl von Halten/Fortsetzen-Unterbrechungen abgeschlossen werden kann, wenn mehr Leseoperationen zur Ausführung ankommen. Ferner kann die Verzögerungszeit 320 als Inkremente einer vorbestimmten Zeitspanne Tr definiert werden. Tr kann als die durchschnittliche Lesezeit der Speichervorrichtung 130 (z.B. 100 Millisekunden) definiert werden. Wenn zum Beispiel die Operationsgewichtung der Schreiboperation als 200 definiert ist und die Operationsgewichtung der Leseoperation 50 beträgt, dann beträgt das Verhältnis der Lesegewichtung zur Schreibgewichtung 1:4, was bedeutet, dass die Verzögerungszeit 320 1/4 (ein Viertel) x Tr betragen kann. Wenn andererseits die Operationsgewichtung der Schreiboperation 300 statt 200 beträgt, dann beträgt das Verhältnis 1/6, was bedeutet, dass der Schreiboperation eine noch niedrigere Priorität im Vergleich zur Leseoperation hat, dann kann die Leseoperation nur 1/6 (ein Sechstel) x Tr warten, bevor sie ausgeführt wird, und so weiter.
-
Nachdem die Periode der Verzögerungszeit verstrichen ist, setzt das Speicher-Untersystem 110 in Block 314 bei T2 die Schreiboperation aus. Wenn die ausgesetzte Operation abgeschlossen ist, kann das Speicher-Untersystem 110 in Block 316 die Leseoperation ausführen, indem es der Operation ermöglicht wird, bei T3 auf die Speichervorrichtung 130 zuzugreifen. Anschließend, wenn die Leseoperation abgeschlossen ist, kann das Speicher-Untersystem in Block 318 die ausgesetzte Schreiboperation wieder fortsetzen. In Implementierungen kann die hier erläuterte Halten/Fortsetzen-Richtlinie auch angewendet werden, wenn eine Hintergrundoperation (z.B. Löschen) in der Speichervorrichtung 130 ausgeführt wird und eine Leseoperation zur Ausführung in der Speichervorrichtung 130 eintrifft.
-
4 ist ein Flussdiagramm eines beispielhaften Verfahrens zum Zuweisen von Funktionsgewichtungen und Operationsgewichtungen zum Unterstützen der Verwaltung von QoS-Niveaus in einem Speicher-Untersystem gemäß einigen Ausführungsformen der vorliegenden Erfindung. Das Verfahren 400 kann von einer Verarbeitungslogik durchgeführt werden, die Hardware (z.B. Verarbeitungsvorrichtungen, Schaltungen, dedizierte Logik, programmierbare Logik, Mikro-Code, Hardware einer Vorrichtung, integrierte Schaltungen, usw.), Software (z.B. Instruktionen, die auf einer Verarbeitungsvorrichtung ausgeführt werden) oder eine Kombination davon umfassen kann. In einigen Ausführungsformen wird das Verfahren 400 von dem QoS-Niveau-Verwaltungs-Modul 113 aus 1 durchgeführt. Obwohl in einer bestimmten Abfolge oder Reihenfolge dargestellt, kann die Reihenfolge der Prozesse, sofern nicht anders angegeben, geändert werden. Daher sind die dargestellten Ausführungsformen nur als Beispiele zu verstehen, und die dargestellten Prozesse können in einer anderen Reihenfolge ausgeführt werden, und einige Prozesse können parallel ausgeführt werden. Außerdem können in verschiedenen Ausführungsformen ein oder mehrere Prozesse weggelassen werden. Es sind also nicht alle Prozesse in jeder Ausführungsform erforderlich. Andere Prozessabläufe sind möglich.
-
Bei Operation 410 stellt die Verarbeitungslogik eine Mehrzahl von Funktionen Zugriffe auf die Speichervorrichtung 130 bereit. Die Vielzahl von Funktionen empfängt I/O-Operationen von einem Host-Computersystem zur Verarbeitung, wie vorstehend näher erläutert. Bei der Mehrzahl von Funktionen kann es sich um virtuelle Funktionen und/oder physische Funktionen handeln, die Leseoperationen und Schreiboperationen der Speichervorrichtung 130 empfangen können. Bei Operation 420 kann die Verarbeitungslogik jeder Funktion der Mehrzahl von Funktionen eine entsprechende Funktionsgewichtung zuweisen. Wie vorstehend erläutert, kann eine Funktionsgewichtung ein Dienstgüteniveau darstellen, das mit der Funktion in Beziehung steht, und kann ein Wert relativ zur durchschnittlichen Latenz der Speichervorrichtung 130 sein.
-
Bei Operation 430 kann die Verarbeitungslogik eine Funktion aus der Mehrzahl der zu bedienenden Funktionen auf Basis der entsprechenden Funktionsgewichtung auswählen, die der Funktion zugewiesen ist. In bestimmten Implementierungen kann die Funktionsgewichtung in eine Anzahl von I/O-Operationen übersetzt werden, die von jeder Funktion während eines Ausführungszyklus bedient werden können, wie vorstehend erläutert. Bei Operation 440 kann die Verarbeitungslogik einem ersten I/O-Operationstyp der Funktion eine erste Operationsgewichtung und einem zweiten I/O-Operationstyp der ersten Funktion eine zweite Operationsgewichtung zuweisen. Zum Beispiel kann der erste I/O-Operationstyp ein Leseoperationstyp sein, und die erste Operationsgewichtung kann eine Lesegewichtung sein. In ähnlicher Weise kann der zweite I/O-Operationstyp ein Schreiboperationstyp sein, und die zweite Operationsgewichtung kann eine Schreibgewichtung sein.
-
Bei Operation 450 wählt die Verarbeitungslogik zur Ausführung eine erste Anzahl von Operationen des ersten I/O-Operationstyps der ersten Funktion gemäß der ersten Operationsgewichtung und eine zweite Anzahl von Operationen des zweiten I/O-Operationstyps der ersten Funktion gemäß der zweiten Operationsgewichtung aus. In Implementierungen kann die erste Anzahl von Operationen aus einer ersten Warteschlange ausgewählt werden, die mit der Funktion in Beziehung steht, und die zweite Anzahl von Operationen kann aus einer zweiten Warteschlange ausgewählt werden, die mit der Funktion in Beziehung steht, wie hier weiter oben näher erläutert wurde.
-
5 ist ein Flussdiagramm eines beispielhaften Verfahrens eines Ausführungszyklus von I/O-Operationen zum Unterstützen der Verwaltung von QoS-Niveaus in einem Speicher-Untersystem gemäß einigen Ausführungsformen der vorliegenden Erfindung. Das Verfahren 500 kann von einer Verarbeitungslogik ausgeführt werden, die Hardware (z.B. Verarbeitungsvorrichtungen, Schaltungen, dedizierte Logik, programmierbare Logik, Mikro-Code, Hardware einer Vorrichtung, integrierte Schaltungen, usw.), Software (z.B. Instruktionen, die auf einer Verarbeitungsvorrichtung ausgeführt werden) oder eine Kombination davon umfassen kann. In einigen Ausführungsformen wird das Verfahren 500 von dem QoS-Niveau-Verwaltungs-Modul 113 aus 1 durchgeführt. Obwohl in einer bestimmten Abfolge oder Reihenfolge dargestellt, kann die Reihenfolge der Prozesse, sofern nicht anders angegeben, geändert werden. Daher sind die dargestellten Ausführungsformen nur als Beispiele zu verstehen, und die dargestellten Prozesse können in einer anderen Reihenfolge ausgeführt werden, und einige Prozesse können parallel ausgeführt werden. Außerdem können in verschiedenen Ausführungsformen ein oder mehrere Prozesse weggelassen werden. Es sind also nicht alle Prozesse in jeder Ausführungsform erforderlich. Andere Prozessabläufe sind möglich.
-
Bei Operation 510 startet die Verarbeitungslogik ein gewichtetes Round-Robin-Auswahlschema, um I/O-Operationen zur Ausführung auszuwählen. Gängige Auswahlschemata umfassen Round-Robin und gewichtetes Round-Robin. Bei der Round-Robin-Auswahl besucht das Speicher-Untersystem der Reihe nach jede Warteschlange und führt bei jedem Besuch einen einzelnen Befehl aus dieser Warteschlange aus (obwohl leere Warteschlangen übersprungen werden können). Gibt es beispielsweise zwei Warteschlangen, so kann das Speichersystem einen Befehl aus der ersten Warteschlange, dann einen Befehl aus der zweiten Warteschlange, und dann wieder einen Befehl aus der ersten Warteschlange ausführen, und so weiter. Bei gewichteter Round-Robin-Auswahl kann einer Befehlswarteschlange eine größere Bandbreite als einer anderen Befehlswarteschlange zugewiesen werden, so dass eine Gruppe von zwei oder mehr Befehlen jedes Mal ausgeführt werden kann, wenn die Befehlswarteschlange mit höherer Gewichtung besucht wird. Beispielsweise kann das Speichersystem fünf Befehle aus der ersten Warteschlange ausführen, bevor es zur zweiten Warteschlange wechselt, und dann zwei Befehle aus der zweiten Warteschlange ausführen, bevor es wieder zur ersten Warteschlange wechselt.
-
Bei Operation 520 wählt die Verarbeitungseinrichtung eine Funktion der mehreren Funktionen der Speichervorrichtung aus, die zu bedienen ist, indem I/O-Operationen, die an der Funktion empfangen werden, gemäß der Funktionsgewichtung ausgeführt werden. In Implementierungen kann die Funktionsgewichtung ein Wert relativ zur durchschnittlichen Latenz der Speichervorrichtung 130 sein, wie vorstehend näher erläutert ist. In bestimmten Implementierungen kann die Funktionsgewichtung in eine Anzahl von I/O-Operationen der Funktion übersetzt werden, die in einem bestimmten Ausführungszyklus ausgeführt werden können. Daher bestimmt die Verarbeitungslogik bei Operation 530 die Anzahl der Operationen, die der Funktion zugewiesen sind, basierend auf der Funktionsgewichtung.
-
Bei Operation 540 kann die Verarbeitungslogik aus einer mit der Funktion in Beziehung stehenden Lesewarteschlange eine Anzahl von Leseoperationen abrufen, basierend auf der Gewichtung der Leseoperation und der Anzahl der Operationen, der Funktion zugewiesen sind. Bei Operation 550 kann die Verarbeitungslogik aus einer mit der Funktion in Beziehung stehenden Schreibwarteschlange eine Anzahl von Schreiboperationen abrufen, basierend auf der Gewichtung der Schreiboperation und der Anzahl von Operationen, die der Funktion zugewiesen sind. In bestimmten Implementierungen kann die Gewichtung der Schreiboperation ein Wert relativ zur durchschnittlichen Latenz der Speichervorrichtung sein (z.B. bestimmt durch das Dienstgüteniveau, das den Operationen vom Schreib-Typ zugewiesen ist). In ähnlicher Weise kann die Gewichtung der Leseoperationen ein Wert relativ zur durchschnittlichen Latenz der Speichervorrichtung sein (z.B. bestimmt durch das Dienstgüteniveau, das den Operationen vom Lese-Typ zugewiesen ist).
-
In bestimmten Implementierungen kann die Verarbeitungsvorrichtung, wenn die Lesewarteschlange keine I/O-Operationen enthält, alle I/O-Operationen, die der Funktion zugewiesen sind, aus der Schreibwarteschlange abrufen, um sie, sofern verfügbar, zu verarbeiten. In ähnlicher Weise kann die Verarbeitungsvorrichtung, wenn die Schreibwarteschlange keine I/O-Operationen enthält, alle I/O-Operationen, die der Funktion zugewiesen sind, aus der Lesewarteschlange abrufen, um sie, falls verfügbar, zu verarbeiten.
-
Die Verarbeitungslogik fährt fort, um in einer Schleife jede Funktion der mehreren Funktionen des Speicher-Untersystems zu durchlaufen, um I/O-Operationen von jeder Funktion entsprechend der Funktionsgewichtung jeder Funktion auszuführen. Somit wird bei Operation 555 eine Entscheidung darüber getroffen, ob alle Funktionen bedient worden sind. Wenn alle Funktionen bedient worden sind, kann die Verarbeitungslogik bei Operation 560 den gewichteten Round-Robin-Algorithmus verlassen, da alle I/O-Operationen für den aktuellen Ausführungszyklus ausgewählt worden sind. Stellt die Verarbeitungslogik hingegen fest, dass einige Funktionen noch nicht bedient worden sind, kann die Verarbeitungslogik zu Operation 520 zurückkehren, um I/O-Operationen auszuwählen, die bei der nächsten Funktion empfangen wurden, um ausgeführt zu werden.
-
6 ist ein Flussdiagramm eines beispielhaften Verfahrens einer Halten/Fortsetzen-Richtlinie zum Unterstützen der Verwaltung von QoS-Niveaus in einem Speicher-Untersystem gemäß einigen Ausführungsformen der vorliegenden Erfindung. Das Verfahren 600 kann von einer Verarbeitungslogik durchgeführt werden, die Hardware (z.B. Verarbeitungsvorrichtungen, Schaltungen, dedizierte Logik, programmierbare Logik, Mikro-Code, Hardware einer Vorrichtung, integrierte Schaltungen, usw.), Software (z.B. Instruktionen, die auf einer Verarbeitungsvorrichtung ausgeführt werden) oder eine Kombination davon umfassen kann. In einigen Ausführungsformen wird das Verfahren 600 von dem QoS-Niveau-Verwaltungs-Modul 113 aus 1 durchgeführt. Obwohl in einer bestimmten Abfolge oder Reihenfolge dargestellt, kann die Reihenfolge der Prozesse, sofern nicht anders angegeben, geändert werden. Daher sind die dargestellten Ausführungsformen nur als Beispiele zu verstehen, und die dargestellten Prozesse können in einer anderen Reihenfolge ausgeführt werden, und einige Prozesse können parallel ausgeführt werden. Außerdem können in verschiedenen Ausführungsformen ein oder mehrere Prozesse weggelassen werden. Es sind also nicht alle Prozesse in jeder Ausführungsform erforderlich. Andere Prozessabläufe sind möglich.
-
Bei Operation 610 empfängt die Verarbeitungslogik, zwecks Ausführung in der Speichervorrichtung 130, eine erste Operation des ersten I/O-Operationstyps. In Implementierungen kann der erste Operationstyp eine Operation vom Lesen-Typ sein. Wie vorstehend erläutert, kann der erste Operationstyp eine zugewiesene Operationsgewichtung haben, die die Priorität der Operation angibt. Bei Operation 620 bestimmt die Verarbeitungslogik, ob eine zweite Operation eines zweiten I/O-Operationstyps in der Speichervorrichtung 130 ausgeführt wird. Der zweite I/O-Operationstyp kann eine Operation vom Schreiben-Typ sein. Der zweite Operationstyp kann eine zugewiesene Operationsgewichtung haben, die die Priorität der Operation angibt.
-
Wenn die Verarbeitungslogik bestimmt, dass aktuell keine I/O-Operation verarbeitet wird, kann die Verarbeitungslogik die erste I/O-Operation bei Operation 650 ausführen. Wenn andererseits die Verarbeitungslogik bestimmt, dass eine zweite Operation des zweiten I/O-Operationstyps in der Speichervorrichtung 130 ausgeführt wird, kann die Verarbeitungslogik bei Operation 625 eine Grenzwertbedingung auswerten, um zu bestimmen, ob die zweite Operation ausgesetzt werden soll oder nicht. In Implementierungen kann die Verarbeitungslogik bestimmen, dass, wenn die zweite Operation, die gerade ausgeführt wird, einen Prozentsatz der Ausführung erreicht hat, der unter einem bestimmten Grenzwert liegt (z.B. weniger als 90% bis zur Beendigung), die Verarbeitungslogik entscheiden kann, dass die zweite Operation ausgesetzt werden soll, damit die erste Operation ausgeführt werden kann. In anderen Implementierungen kann die Verarbeitungslogik feststellen, dass die verbleibende Ausführungszeit der zweiten Operation länger ist als die Ausführungszeit der ersten Operation, und die Verarbeitungslogik kann entscheiden, dass die zweite Operation ausgesetzt werden soll.
-
Bei Operation 644 kann die Verarbeitungslogik bestimmen, dass die zweite Operation ausgesetzt werden kann, und kann bewirken, dass die erste Operation für eine Verzögerungszeitdauer warten soll, bevor sie ausgeführt wird. Wie vorstehend erläutert, entspricht die Verzögerungszeitperiode der Operationsgewichtung der eingehenden ersten Operation und der Operationsgewichtung der laufenden zweiten Operation, so dass die Verzögerungszeitperiode umso länger sein kann, je höher das Verhältnis zwischen der Operationsgewichtung der ersten Operation und der Operationsgewichtung der zweiten Operation ist. Die Verzögerungszeitperiode kann als Inkremente einer vorbestimmten Zeitperiode Tr (z.B. der durchschnittlichen Lesezeit der Speichervorrichtung 130) definiert werden.
-
Nachdem die Verzögerungszeitperiode verstrichen ist, kann die Verarbeitungslogik bei Operation 646 die zweite Operation aussetzen, um die Speichervorrichtung 130 für die Ausführung einer anderen Operation freizugeben. Wenn die ausgesetzte Operation abgeschlossen ist, kann die Verarbeitungslogik bei Operation 648 die erste Operation durchführen, indem sie der Operation erlaubt, auf die Speichervorrichtung 130 zuzugreifen. Anschließend, wenn die erste Operation abgeschlossen ist, kann die Verarbeitungslogik die ausgesetzte zweite Operation bei 660 fortsetzen.
-
Wenn die Verarbeitungslogik bei Operation 632 bestimmt, dass die Grenzwertbedingung nicht erfüllt wurde, kann die Verarbeitungslogik entscheiden, ob es der zweiten Operation ermöglicht werden soll, ihre Durchführung zu beenden. In einer Implementierung kann das Grenzwertkriterium darin bestehen, dass die Ausführung der zweiten Operation zu weniger als 90% abgeschlossen ist. In anderen Implementierungen kann das Grenzwertkriterium darin bestehen, dass die verbleibende Ausführungszeit der zweiten Operation länger ist als die Ausführungszeit der ersten Operation. Die Verarbeitungslogik kann dann veranlassen, dass die erste Operation wartet, bis die zweite Operation vollständig ausgeführt ist. Bei Operation 650, wenn die zweite Operation ihre Ausführung beendet hat, kann die Verarbeitungslogik die erste Operation durchführen. In diesem Fall wurde die Halten/Fortsetzen-Richtlinie vermieden, weil die zweite Operation kurz vor dem Abschluss stand, so dass ihre Unterbrechung für die Gesamtsystemleistung nicht von Vorteil sein muss. 7 ist ein Flussdiagramm eines beispielhaften Verfahrens zum Zuweisen von Funktionsgewichtungen und zum Unterstützen der Verwaltung von QoS-Niveaus in einem Speicher-Untersystem gemäß einigen Ausführungsformen der vorliegenden Erfindung. Das Verfahren 700 kann von einer Verarbeitungslogik durchgeführt werden, die Hardware (z.B. Verarbeitungsvorrichtungen, Schaltungen, dedizierte Logik, programmierbare Logik, Mikro-Code, Hardware einer Vorrichtung, integrierte Schaltungen, usw.), Software (z.B. Instruktionen, die von einer Verarbeitungsvorrichtung ausgeführt werden) oder eine Kombination davon umfassen kann. In einigen Ausführungsformen wird das Verfahren 700 von dem QoS-Niveau-Verwaltungs-Modul 113 aus 1 durchgeführt. Obwohl in einer bestimmten Abfolge oder Reihenfolge dargestellt, kann die Reihenfolge der Prozesse, sofern nicht anders angegeben, geändert werden. Daher sind die dargestellten Ausführungsformen nur als Beispiele zu verstehen, und die dargestellten Prozesse können in einer anderen Reihenfolge ausgeführt werden, und einige Prozesse können parallel ausgeführt werden. Außerdem können in verschiedenen Ausführungsformen ein oder mehrere Prozesse weggelassen werden. Es sind also nicht alle Prozesse in jeder Ausführungsform erforderlich. Andere Prozessabläufe sind möglich.
-
Bei Operation 710 stellt die Verarbeitungslogik eine Mehrzahl von Funktionen für Zugriffe auf die Speichervorrichtung 130 bereit. Die Mehrzahl von Funktionen empfängt I/O-Operationen von einem Host-Computersystem zur Verarbeitung, wie vorstehend näher erläutert. Bei der Mehrzahl von Funktionen kann es sich um virtuelle Funktionen und/oder physische Funktionen handeln, die Lese- und Schreiboperationen der Speichervorrichtung 130 empfangen können. Bei Operation 720 kann die Verarbeitungslogik für jede Funktion der Mehrzahl von Funktionen ein Dienstgüteniveau bestimmen. In Implementierungen kann durch das Dienstgüteniveau einer Funktion die Dienstgüte bestimmt werden, die die Funktion erhalten kann, um die Bedingungen der Dienstgüteniveau-Richtlinie des Speicher-Untersystems zu erfüllen (z.B. Qualität, Verfügbarkeit, Verantwortlichkeiten, usw. des Speicher-Untersystems).
-
Bei Operation 730 kann die Verarbeitungslogik jeder Funktion der Mehrzahl von Funktionen eine entsprechende Funktionsgewichtung zuweisen. Wie vorstehend erläutert, kann eine Funktionsgewichtung ein mit der Funktion in Beziehung stehendes Dienstgüteniveau darstellen und kann ein Wert relativ zur durchschnittlichen Latenz der Speichervorrichtung 130 sein.
-
Bei Operation 740 kann die Verarbeitungslogik einen Satz von I/O-Operationen für die Ausführung in der Speichervorrichtung 130 auswählen. In Implementierungen kann die Verarbeitungslogik eine Teilmenge der I/O-Operationen auswählen, die an den Funktionen der Speichervorrichtung 130 empfangen werden, entsprechend der Funktionsgewichtung jeder Funktion. Zum Beispiel kann die Verarbeitungslogik eine Anzahl von I/O-Operationen auswählen, die an jeder Funktion der mehreren Funktionen der Speichervorrichtung 130 empfangen werden. Die Anzahl der I/O-Operationen, die bei jeder Funktion ausgewählt werden, wird gemäß der entsprechenden Funktionsgewichtung von jeder Funktion bestimmt, um das Dienstgüteniveau von jeder Funktion zu erfüllen, wie hier vorstehend näher erläutert wurde.
-
Bei Operation 750 führt die Verarbeitungslogik die ausgewählte Teilmenge von I/O-Operationen in dem nächsten Ausführungszyklus der Speichervorrichtung 130 aus, wie hier vorstehend näher erläutert wurde. In bestimmten Implementierungen kann die Teilmenge der I/O-Operationen gemäß dem Verfahren 600 aus 6 ausgeführt werden. 8 zeigt eine beispielhafte Maschine eines Computersystems 800, in dem ein Satz von Instruktionen ausgeführt werden kann, um die Maschine zu veranlassen, ein oder mehrere der hier besprochenen Verfahren auszuführen. In einigen Ausführungsformen kann das Computersystem 800 einem Host-System entsprechen (z.B. dem Host-System 120 aus 1), das ein Speicher-Untersystem (z.B. das Speicher-Untersystem 110 aus 1) enthält, mit diesem gekoppelt ist oder dieses nutzt, oder es kann verwendet werden, um die Operationen eines Controllers auszuführen (z.B. um ein Betriebssystem auszuführen, um Operationen auszuführen, die dem QoS-Niveau-Verwaltungs-Modul 113 aus 1 entsprechen). In alternativen Ausführungsformen kann die Maschine mit anderen Maschinen in einem LAN, einem Intranet, einem Extranet und/oder dem Internet verbunden (z.B. vernetzt) sein. Die Maschine kann in der Funktion eines Servers oder einer Client-Maschine in einer Client-Server-Netzwerkumgebung, als Peer-Maschine in einer Peer-to-Peer-Netzwerkumgebung (oder in einer verteilten Netzwerkumgebung) oder als ein Server oder einer Client-Maschine in einer Cloud-Computer-Infrastruktur oder Cloud-Computer-Umgebung arbeiten.
-
Die Maschine kann ein Personal Computer (PC), ein Tablet-PC, eine Set-Top-Box (STB), ein Personal Digital Assistant (PDA), ein Mobiltelefon, eine Web-Anwendung, ein Server, ein Netzwerk-Router, ein Switch oder Bridge oder eine beliebige Maschine sein, die in der Lage ist, eine Reihe von Instruktionen (sequenziell oder anderweitig) auszuführen, die die von dieser Maschine auszuführenden Aktionen spezifizieren. Auch wenn eine einzelne Maschine abgebildet ist, umfasst der Begriff „Maschine“ auch eine beliebige Sammlung von Maschinen, die einzeln oder gemeinsam eine Reihe (oder mehrere Reihen) von Instruktionen ausführen, um ein oder mehrere der hier erörterten Verfahren durchzuführen.
-
Das beispielhafte Computersystem 800 umfasst eine Verarbeitungsvorrichtung 802, einen Hauptspeicher 804 (z.B. Festwertspeicher (ROM), Flash-Speicher, dynamischer Direktzugriffsspeicher (DRAM), wie zum Beispiel synchroner DRAM (SDRAM) oder Rambus DRAM (RDRAM), usw.), einen statischen Speicher 806 (z.B. Flash-Speicher, statischer Direktzugriffsspeicher (SRAM), usw.) und ein Datenspeichersystem 818, die über einen Bus 830 miteinander kommunizieren.
-
Die Verarbeitungsvorrichtung 802 stellt eine oder mehrere Mehrzweck-Verarbeitungsvorrichtungen dar, wie zum Beispiel ein Mikroprozessor, eine zentrale Verarbeitungseinheit oder ähnliches. Insbesondere kann die Verarbeitungsvorrichtung ein CISC-Mikroprozessor (Complex Instruction Set Computing Mikroprozessor), ein RISC-Mikroprozessor (Reduced Instruction Set Computing Mikroprozessor), ein VLIW-Mikroprozessor (Very Long Instruction Word Mikroprozessor) oder ein Prozessor sein, der andere Instruktionssätze implementiert, oder Prozessoren, die eine Kombination von Instruktionssätzen implementieren. Bei der Verarbeitungsvorrichtung 802 kann es sich auch um eine oder mehrere spezielle Verarbeitungsvorrichtungen handeln, wie zum Beispiel eine anwendungsspezifische integrierte Schaltung (ASIC), ein feldprogrammierbares Gate-Array (FPGA), ein digitaler Signalprozessor (DSP), ein Netzwerk-Prozessor oder ähnliches. Die Verarbeitungsvorrichtung 802 ist ausgestaltet, um Befehle 826 zur Durchführung der hier besprochenen Operationen und Schritte auszuführen. Das Computersystem 800 kann außerdem eine Netzwerk-Schnittstellenvorrichtung 808 zur Kommunikation über das Netzwerk 820 enthalten.
-
Das Datenspeichersystem 818 kann ein maschinenlesbares Speichermedium 824 (auch als computerlesbares Medium bekannt) enthalten, auf dem ein oder mehrere Sätze von Instruktionen 826 oder Software gespeichert sind, die ein oder mehrere der hier beschriebenen Verfahren oder Funktionen verkörpern. Die Instruktionen 826 können sich auch vollständig oder zumindest teilweise in dem Hauptspeicher 804 und/oder in der Verarbeitungsvorrichtung 802 befinden, während sie von dem Computersystem 800 ausgeführt werden, wobei der Hauptspeicher 804 und die Verarbeitungsvorrichtung 802 ebenfalls maschinenlesbare Speichermedien darstellen. Das maschinenlesbare Speichermedium 824, das Datenspeichersystem 818 und/oder der Hauptspeicher 804 können dem Speicher-Untersystem 110 aus 1 entsprechen.
-
In einer Ausführungsform enthalten die Instruktionen 826 Instruktionen zum Implementieren einer Funktionalität, die dem QoS-Niveau-Verwaltungs-Modul 113 aus 1 entsprechen. Obwohl das maschinenlesbare Speichermedium 824 in einer beispielhaften Ausführungsform als einzelnes Medium dargestellt ist, soll der Begriff „maschinenlesbares Speichermedium“ so verstanden werden, dass er ein einzelnes Medium oder mehrere Medien umfasst, um den einen oder mehrere Sätze von Instruktionen zu speichern. Der Begriff „maschinenlesbares Speichermedium“ soll auch jedes Medium umfassen, das in der Lage ist, einen Satz von Instruktionen zur Ausführung durch die Maschine zu speichern oder zu kodieren, und die Maschine veranlasst, ein oder mehrere der Verfahren der vorliegenden Erfindung durchzuführen. Der Begriff „maschinenlesbares Speichermedium“ soll folglich auch Festkörperspeicher, optische Medien und magnetische Medien umfassen, aber nicht darauf beschränkt.
-
Einige Teile der vorangehenden detaillierten Beschreibungen wurden in Form von Algorithmen und symbolischen Darstellungen von Operationen bezüglich Datenbits in einem Computerspeicher dargestellt. Diese algorithmischen Beschreibungen und Darstellungen werden von einem Fachmann auf dem Gebiet der Datenverarbeitung verwendet, um anderen Fachleuten den Inhalt ihrer Arbeit am effektivsten zu vermitteln. Ein Algorithmus wird hier und allgemein als eine in sich konsistente Folge von Operationen verstanden, die zu einem gewünschten Ergebnis führt. Bei den Operationen handelt es sich um solche, die physikalische Manipulationen von physikalischen Größen erfordern. Normalerweise, wenn auch nicht notwendigerweise, haben diese Größen die Form von elektrischen oder magnetischen Signalen, die gespeichert, kombiniert, verglichen und anderweitig manipuliert werden können. Zuweilen hat es sich als zweckmäßig erwiesen, diese Signale vor allem aus Gründen des allgemeinen Sprachgebrauchs als Bits, Werte, Elemente, Symbole, Zeichen, Begriffe, Zahlen oder dergleichen zu bezeichnen.
-
Es sollte jedoch bedacht werden, dass alle diese und ähnliche Begriffe mit den entsprechenden physikalischen Größen in Verbindung gebracht werden müssen und lediglich praktische Bezeichnungen für diese Größen sind. Die vorliegende Erfindung kann sich auf die Aktionen und Prozesse eines Computersystems oder einer ähnlichen elektronischen Computervorrichtung beziehen, die Daten, die als physikalische (elektronische) Größen in den Registern und Speichern des Computersystems dargestellt werden, manipuliert und in andere Daten umwandelt, die in ähnlicher Weise als physikalische Größen in den Speichern oder Registern des Computersystems oder in anderen derartigen Informationsspeichersystemen dargestellt werden.
-
Die vorliegende Erfindung bezieht sich auch auf eine Vorrichtung zur Durchführung der hier beschriebenen Operationen. Diese Vorrichtung kann speziell für die beabsichtigten Zwecke konstruiert sein, oder sie kann einen Mehrzweckcomputer umfassen, der durch ein im Computer gespeichertes Computerprogramm selektiv aktiviert oder neu konfiguriert wird. Ein solches Computerprogramm kann in einem computerlesbaren Speichermedium gespeichert werden, wie zum Beispiel, aber nicht hierauf beschränkt, jede Art von Disketten, einschließlich Disketten, optische Disketten, CD-ROMs und magnetisch-optische Disketten, Festwertspeicher (ROMs), Speicher mit wahlfreiem Zugriff (RAMs), EPROMs, EEPROMs, magnetische oder optische Karten oder jede Art von Medien, die zum Speichern von elektronischen Instruktionen geeignet und jeweils mit einem Computersystembus verbunden sind.
-
Die hier vorgestellten Algorithmen und Anzeigen sind nicht inhärent an einen bestimmten Computer oder ein anderes Gerät gebunden. Verschiedene Mehrzwecksysteme können mit Programmen gemäß den hier dargelegten Lehren verwendet werden, oder es kann sich als zweckmäßig erweisen, ein spezielleres Gerät zur Durchführung der Verfahren zu konstruieren. Die Struktur für eine Mehrzahl dieser Systeme wird in der folgenden Beschreibung dargestellt. Darüber hinaus wird die vorliegende Erfindung nicht unter Bezugnahme auf eine bestimmte Programmiersprache beschrieben. Es soll verstanden werden, dass eine Vielzahl von Programmiersprachen verwendet werden kann, um die Lehren der Erfindung, wie hier beschrieben, zu implementieren.
-
Die vorliegende Erfindung kann als Computerprogrammprodukt oder als Software zur Verfügung gestellt werden, die ein maschinenlesbares Medium mit darauf gespeicherten Instruktionen umfassen kann, die zum Programmieren eines Computersystems (oder anderer elektronischer Vorrichtungen) zur Durchführung eines Verfahrens gemäß der vorliegenden Erfindung verwendet werden können. Ein maschinenlesbares Medium umfasst irgendeinen Mechanismus zum Speichern von Informationen in einer Form, die von einer Maschine (z.B. einem Computer) gelesen werden kann. In einigen Ausführungsformen umfasst ein maschinenlesbares (z.B. computerlesbares) Medium ein maschinenlesbares (z.B. computerlesbares) Speichermedium, wie zum Beispiel einen Festwertspeicher („ROM“), einen Direktzugriffsspeicher („RAM“), Magnetplatten-Speichermedien, optische Speichermedien, Flash-Speicherkomponenten usw.
-
In der vorangehenden Beschreibung wurden Ausführungsformen der Erfindung unter Bezugnahme auf spezifische Ausführungsbeispiele beschrieben. Es ist offensichtlich, dass verschiedene Modifikationen daran vorgenommen werden können, ohne vom Grundgedanken und Umfang der Ausführungsformen der Erfindung, wie sie in den folgenden Ansprüchen dargelegt sind, abzuweichen. Die Beschreibung und die Zeichnungen sind folglich eher in einem illustrativen als in einem einschränkenden Sinne zu verstehen.