-
ALLGEMEINER STAND DER TECHNIK
-
1. GEBIET
-
Die Offenbarung betrifft ein Verfahren, System, und Programm zur Ausfallsicherung und zum Lastausgleich.
-
2. BESCHREIBUNG DES STANDS DER TECHNIK
-
Eine I_T-Verknüpfung ist ein Paar aus einer Initiator-Vorrichtung und einer Target-(Ziel)-Vorrichtung. Die Vorrichtungen, die Eingabe/Ausgabe-(I/O)-Operationen anfordern, werden als Initiatoren bezeichnet, und die Vorrichtungen, die diese Operationen durchführen, werden als Targets bezeichnet. Beispielsweise kann ein Host-Computer ein Initiator sein, und eine Speichervorrichtung kann ein Target sein. Das Target kann eine oder mehrere separate Speichervorrichtungen aufweisen.
-
Ein Host-Bus-Adapter (HBA) ist eine Hardware-Vorrichtung, die das Betriebssystem und einen SCSI-(Small Computer System Interface)-Bus verbindet. Der HBA verwaltet die Übertragung von Daten zwischen dem Host-Computer und dem Kommunikationspfad. HBA-Gruppierung bezeichnet das Gruppieren von mehreren HBAs zu einer „Gruppe”, wobei jeder HBA in einer Gruppe mit einem bestimmten Target verbunden ist und Daten an dieses lenken kann. HBA-Gruppen können auf einem iSCSI-(Internet Small Computer System Interface)-(IETF RFC 3347, veröffentlich im Februar 2003)-Portalgruppenkonzept aufbauen. iSCSI wurde im Februar 2003 von der IETF als Standard definiert. Ein Portalgruppenkonzept kann als eine Sammlung von Netzwerkportalen in einer iSCSI-Netzwerkeinheit beschrieben werden, die kollektiv die Fähigkeit zur Koordination einer Sitzung mit Verbindungen unterstützt, die diese Portale umspannen.
-
HBA-Gruppierung kann mit SCSI-(Small Computer System Interface) (American National Standards Institute (ANSI) SCSI Controller Commands-2 (SCC-2) NCITS.318:1998)-Initiatoren benutzt werden, die auf den Betriebssystemen Windows®2000, Windows®XP, oder Windows®.NET laufen. Die Strategie der Verbindungswiederherstellung einer I_T-Verknüpfung kann auf mehreren TCP-(Transmission Control Protocoll)-Verbindungen beruhen (Internet Engineering Task Force (IETF) Request for Comments (RFC) 793, veröffentlicht September 1981). Das heißt, Pakete von iSCSI-Initiatoren, die auf Windows®-Betriebssystemen laufen, werden über eine Vielzahl von Verbindungen zwischen einem Initiator und einem Target übertragen und/oder empfangen. Wenn in einem HBA eine Vielzahl von Verbindungen zu demselben Target hergestellt wird, kann ein Miniport-Treiber die Ausfallsicherung (d. h. das Umlenken von Paketen zu einer anderen Verbindung, wenn eine Verbindung ausfällt) und Lastausgleich (d. h. Ausgleichen der Last zwischen den HBA-Verbindungen) übernehmen.
-
Allerdings besteht im Stand der Technik ein Bedarf an Ausfallsicherung und Lastausgleich für mehrere HBAs, von denen jeder eine oder mehrere Verbindungen zu demselben Target aufweisen kann.
-
In
US 6 658 018 B1 ist Vergleichen einer Adapter-ID mit einer höchsten Adapter-ID offenbart, um festzustellen, ob die Adapter-ID betriebsfähig ist. Unter bestimmten Umständen wird der entsprechende Adapter mit der höchsten Adapter-ID versehen und ein primärer Adapter als nicht funktionsfähig gekennzeichnet.
-
US 6 381 218 B1 offenbart Umschalten zu einem alternativen NIC und entsprechendem Link, falls ein aktiver Link nicht funktioniert.
-
Der Erfindung liegt somit die Aufgabe zugrunde, die Auslastung von Datenpfaden in einem Computersystem zu optimieren.
-
Diese Aufgabe wird durch den Patentanspruch 1 und die nebengeordneten Ansprüche gelöst.
-
KURZE BESCHREIBUNG DER FIGUREN
-
Bezugnehmend auf die Figuren, wobei gleiche Bezugszeichen jeweils entsprechende Bauteile bezeichnen, zeigt:
-
1A eine Rechnerumgebung, in der bestimmte Ausführungsformen implementiert sind;
-
1B eine Rechnerumgebung, in der bestimmte spezifische Ausführungsformen implementiert sind;
-
2A in einem Blockdiagramm Windows®-Speichervorrichtungs-Treiber mit einem optionalen Class-Lower-Filtertreiber;
-
2B in einem Blockdiagramm einen Speichergerätetreiberstapel mit Fähigkeiten zur Ausfallsicherung und zum Lastausgleich, der in einer SCSI-Umgebung gemäß bestimmten Ausführungsformen benutzt werden kann;
-
3 in einem Blockdiagramm ein Beispiel einer Anordnung eines Initiators mit Fähigkeiten zur Ausfallsicherung und zum Lastausgleich gemäß bestimmten Ausführungsformen;
-
4A und 4B Operationen zum Verbergen eines sekundären Speichergerätestapels gemäß bestimmten Ausführungsformen;
-
5A, 5B und 5C Operationen für einen Benachrichtigungsmechanismus gemäß bestimmten Ausführungsformen; und
-
6A und 6B Operationen zum Lastausgleich gemäß bestimmten Ausführungsformen.
-
GENAUE BESCHREIBUNG DER AUSFÜHRUNGSFORMEN
-
In der folgenden Beschreibung wird Bezug genommen auf die begleitenden Figuren, die einen Teil der Beschreibung bilden, und die mehrere Ausführungsformen illustrieren. Es versteht sich, daß andere Ausführungsformen benutzt und strukturelle sowie operative Änderungen durchgeführt werden können, ohne von dem Umfang der Ausführungsformen abzuweichen.
-
1A zeigt eine Rechnerumgebung, in der Ausführungsformen implementiert werden können. Ein Computer 102 dient als ein Initiator, während Datenspeicher 104 als ein Target dient, um eine I_T-Verknüpfung zu bilden. Computer 102 weist eine oder mehrere Zentraleinheiten (CPUs) 104, einen flüchtigen Speicher 106, einen nicht flüchtigen Speicher 108 (z. B. Magnetplattenlaufwerke, optische Laufwerke, ein Bandlaufwerk usw.), ein Betriebssystem 110 (z. B. Windows®2000, Windows®XP, oder Windows®.NET), und einen oder mehrere Netzwerkadapter 128 auf. In bestimmten Ausführungsformen ist jeder Netzwerkadapter ein Host-Bus-Adapter (HBA). Ein Filtertreiber 112, ein Miniport-Treiber 114, und ein Applikationsprogramm 124 laufen außerdem in Speicher 106 ab.
-
Der Computer 102 kann eine im Stand der Technik bekannte Rechnervorrichtung aufweisen, wie z. B. einen Hauptrechner, Server, Personalcomputer, Arbeitsplatzrechner, Laptop, Handheld-Computer usw. Jede CPU 104 und jedes Betriebssystem 110 können benutzt werden. Programme und Daten in Speicher 106 können als Teil von Speicherverwaltungsoperationen in Speicher 108 umgelagert werden.
-
Der Datenspeicher 140 weist eine oder mehrere logische Einheiten auf (d. h. „n” logische Einheiten, wobei „n” eine positive ganze Zahl sein kann, die in einigen Ausführungsformen unter 128 liegt). Nur zum erleichterten Verständnis sind eine logische Einheit 0, eine logische Einheit 1, und eine logische Einheit „n” dargestellt. Jede logische Einheit kann als eine separate Speichervorrichtung beschrieben werden. Zusätzlich ist jeder logischen Einheit eine logische Einheitsnummer (Logical Unit Number – LUN) zugeordnet. In bestimmten Ausführungsformen ist eine HBA-Gruppe nach Target und LUN geordnet (d. h. jeder HBA, der Daten zu einer bestimmten LUN eines Targets lenken kann, ist einer HBA-Gruppe zugeordnet), und ein HBA kann verschiedenen HBA-Gruppen angehören.
-
Jeder Netzwerkadapter 128 weist mehrere Komponenten auf, die in der Hardware des Netzwerkadapters 128 implementiert sind. Jeder Netzwerkadapter 128 ist dazu in der Lage, Datenpakete über Netzwerk 176 zu übertragen und zu empfangen, das ein lokales Netzwerk (Local Area Network – LAN), das Internet, ein Weitverkehrsnetzwerk (Wide Area Network – WAN), ein Speichernetzwerk (Storage Area Network – SAN), WiFi (Institute of Electrical and Electronics Engineers (IEEE) 802.11b, veröffentlicht am 16. September 1999), Funk-LAN (IEEE 802.11b, veröffentlicht am 16. September 1999) usw. umfassen kann.
-
Speichertreiber 120 laufen in Speicher 106 ab und weisen für Netzwerkadapter 128 spezifische Befehle auf, um mit dem Netzwerkadapter 128 zu kommunizieren, und um eine Schnittstelle zwischen dem Betriebssystem 110 und jedem Netzwerkadapter 128 zu bilden. Ein Netzwerkadapter 128 und Speichertreiber 120 implementieren Logik, um iSCSI-Pakete zu verarbeiten, wobei ein SCSI-Befehl in dem iSCSI-Paket verpackt ist, und das iSCSI-Paket in einem TCP-Paket verpackt ist. Die Transportprotokollschicht packt die Ladung des empfangenen TCP-(Transmission Control Protocol) (Internet Engineering Task Force (IETF) Request for Comments (RFC) 793, veröffentlicht September 1981)-Pakets aus, und überträgt die Daten an den Speichertreiber 120, um z. B. zu dem Applikationsprogramm 124 zurückzukehren. Außerdem überträgt ein Applikationsprogramm 124, das Daten überträgt, die Daten an den Speichertreiber 120, der die Daten dann an die Transportprotokollschicht leitet, um sie in einem TCP/IP-Paket zu verpacken, bevor sie über das Netzwerk 176 übertragen werden.
-
Eine Bus-Steuerung 134 erlaubt es jedem Netzwerkadapter 128, auf einem Computerbus 160 zu kommunizieren, der eine im Stand der Technik bekannte Busschnittstelle umfassen kann, wie z. B. einen PCI-(Peripheral Component Interconnet)-Bus, einen PCI-Expressbus, eine Industriestandardarchitektur (ISA), eine erweiterte ISA, eine Mikrokanalarchitektur (MCA) usw. Der Netzwerkadapter 128 weist eine physikalische Kommunikationsschicht 132 zum Implementieren einer MAC-(Media Access Control)-Funktion zum Senden und Empfangen von Netzwerkpaketen von und an entfernte Datenspeicher über ein Netzwerk 176. In bestimmten Ausführungsformen kann der Netzwerkadapter 128 das Ethernet-Protokoll (IEEE-Standard 802.3, veröffentlicht am 8. März 2002), Fibre Channel (IETF RFC 3643, veröffentlicht im Dezember 2003), oder jedes andere im Stand der Technik bekannte Kommunikationsprotokoll implementieren.
-
Der Speicher 108 kann eine interne Speichervorrichtung oder einen beigeordneten oder über Netzwerk zugänglichen Speicher umfassen. Programme in dem Speicher 108 werden in den Speicher 106 geladen und von der CPU 104 ausgeführt. Eine Eingabevorrichtung 150 wird benutzt, um Nutzereingaben an die CPU 104 bereitzustellen, und kann eine Tastatur, eine Maus, einen Stylus-Stift, ein Mikrophon, einen berührungsempfindlichen Bildschirm, oder jeden anderen im Stand der Technik bekannten Aktivierungs- oder Eingabemechanismus umfassen. Eine Ausgabevorrichtung 152 ist dazu in der Lage, Information, die von der CPU 104, oder einer anderen Komponente, wie z. B. einem Anzeigebildschirm, Drucker oder Speicher usw. übertragen werden, wiederzugeben.
-
In bestimmten Ausführungsformen kann der Computer neben der Speichervorrichtung 120 andere Vorrichtungen aufweisen.
-
Der Netzwerkadapter 128 kann zusätzliche Hardware-Logik zum Durchführen von zusätzlichen Operationen zum Verarbeiten von durch den Computer 102 oder das Netzwerk 176 empfangenen Paketen aufweisen. Außerdem kann der Netzwerkadapter 128 eine Transportschicht-Entladungsmaschine (Transport Layer Offload Engine – TOE) implementieren, um die Transportprotokollschicht in dem Netzwerkadapter zu implementieren, und nicht im Speichertreiber 120 des Computers, um die Arbeitslast des Computers 102 weiter zu senken. Alternativ kann die Transportschicht in dem Speichertreiber oder anderen Treibern 120 (die beispielsweise durch ein Betriebssystem bereitgestellt sind) implementiert sein.
-
Verschiedene Strukturen und/oder Puffer (nicht dargestellt) können in Speicher 106 angesiedelt sein, oder können in bestimmten Ausführungsformen in einer Speichereinheit angeordnet sein, die separat von dem Speicher 106 ist.
-
1B zeigt eine Rechnerumgebung, in der bestimmte spezifische Ausführungsformen implementiert sind. In 1B weist Computer 102 Speichertreiber 120 auf, die mit Host-Bus-Adaptern (HBAs) 128a, 128b, und 128c zusammenwirken. Jeder HBA 128a, 128b, und 128c kann als ein Netzwerkadapter 128 (1A) beschrieben werden. Der Computer 102 und die HBAs 128a, 128b, und 128c können als Initiator beschrieben werden, während der Datenspeicher 140 als ein Target beschrieben werden kann. Der Datenspeicher zeigt logische Einheitsnummern (LUNs), die logische Einheiten darstellen.
-
2A zeigt in einem Blockdiagramm einen Windows®-Speichergerätetreiberstapel 200 mit einem optionalen Class-Lower-Filtertreiber. Der Speichergerätetreiberstapel 200 weist ein Protokoll der höheren Schichten (Upper Layer Protocol – ULP) 210 auf, das Pakete an einen Speicherklassetreiber 212 überträgt und von diesem empfängt. Der Speicherklassetreiber 212 kann Pakete an einen Class-Lower-Filtertreiber 214 senden und von diesem empfangen. Der Class-Lower-Filtertreiber 214 ist in bestimmten Ausführungsformen optional. Der Class-Lower-Filtertreiber 214 kann Pakete an einen Anschlußtreiber 216 senden und von diesem empfangen. Der Anschlußtreiber 216 kommuniziert mit einem Miniport-Treiber 218. Der Miniport-Treiber 218 ist dazu in der Lage, mit dem Class-Lower-Filtertreiber 214 über Rückruf-Schnittstellen zu kommunizieren, die von Ausführungsformen vorgesehen werden.
-
Ausführungsformen sehen einen speziellen Filtertreiber vor, der auf dem Class-Lower-Filtertreiber 214 über dem Anschlußtreiber 216 basiert, um eine Ausfallsicherung und einen Lastausgleich zwischen HBA-Kreuzverbindungen bereitzustellen. Der Filtertreiber bearbeitet HBA-Zusammenhangsveränderung und -Pfadsteuerung. Der Filtertreiber stellt auch die Paketverteilung bereit. Insbesondere erfaßt der Filtertreiber SCSI-Anfrageblock-(SCSI Request Block – SRB)-Pakete, die in den Eingabe/Ausgabe-Anfragepaketen (Input/Output Request Packets – IRPs) zwischen dem Speicherklassetreiber 212 und dem Anschlußtreiber 216 enthalten sind. In bestimmten Ausführungsformen ist der Filtertreiber als ein Low-Level-Class-Filtertreiber implementiert. Der Filtertreiber wird benachrichtigt, sobald ein Speichervorrichtungsvorgang erzeugt wird, und der Filtertreiber schließt sich dann an den Speichertreiberstapel 200 unter dem Class-Lower-Filtertreiber 214 an.
-
2B zeigt in einem Blockdiagramm einen Speichervorrichtungs-Treiberstapel 250 mit Fähigkeiten zur Ausfallsicherung und zum Lastausgleich, der in einer SCSI-Umgebung gemäß bestimmten Ausführungsformen benutzt werden kann. Der Speichergerätetreiberstapel 250 kann mit einem Windows®2000-, Windows®XP-, oder Windows®.NET-Betriebssystem benutzt werden. Der Speichergerätetreiberstapel 250 weist ein Protokoll der höheren Schichten (ULP) 260 auf, das IRPs an einen SCSI-Disk-Class-Treiber 262 senden und von diesem empfangen kann. Der SCSI-Disk-Class-Treiber 262 kann SRBs/IRPs an einen Lower-Level-Class-Filtertreiber 264 senden und von diesem empfangen. Der Lower-Level-Class-Filtertreiber 264 kann SRBs/IRPs an einen SCSI-Anschlußtreiber 266 senden und von diesem empfangen. Der SCSI-Anschlußtreiber 266 kommuniziert mit einem SCSI-Miniport-Treiber 268. Der SCSI-Miniport-Treiber 268 ist dazu in der Lage, über Rückruf-Schnittstellen mit dem Lower-Level-Class-Filtertreiber 264 zu kommunizieren.
-
3 zeigt in einem Blockdiagramm ein Beispiel für die Anordnung eines Initiators mit Fähigkeiten zur Ausfallsicherung und zum Lastausgleich gemäß bestimmten Ausführungsformen. In 3 kommunizieren Speicherklassefilter mit einem Filtertreiber, der mit einem Anschluß/Miniport-Treiber kommuniziert. Beispielsweise kommuniziert ein Speicherklassetreiber mit einem Filtertreiber mit Hilfe von Speicherklassetreiber1-Geräteobjekt 310 und Filtertreiber1-Geräteobjekt 312, der Filtertreiber kommuniziert mit einem Anschluß/Miniport-Treiber mit Hilfe von Filtertreiber1-Geräteobjekt 312 und Anschluß/Miniport-Treibergeräteobjekt 316, 314. Ein Miniport-Treiber kommuniziert mit einem HBA mit vom Anschlußtreiber exportierten Programmroutinen. Jeder HBA weist Kommunikationspfade an ein oder mehrere Targets auf. Beispielsweise weist HBA1 318 Kommunikationspfade zu Target1 320 und Target2 340 auf. HBA2 338 weist Kommunikationspfade zu Target1 320 und Target2 340 auf. HBA3 358 weist Kommunikationspfade zu Target2 340 und Target3 360 auf. Ausführungsformen sehen Ausfallsicherung und Lastausgleich für HBAs 318, 338, und 358 vor, von denen einige Verbindungen zu demselben Target aufweisen. In bestimmten Ausführungsformen basieren die vorgeschlagene Ausfallsicherung und der Lastausgleich auf HBA-Gruppierung, aufbauend auf einem iSCSI-Portalgruppenkonzept.
-
Wiederum ist in bestimmten Ausführungsformen eine HBA-Gruppe nach Target und LUN geordnet (d. h. jeder HBA, der Daten zu einer bestimmten LUN eines Target lenken kann, wird einer HBA-Gruppe zugeordnet), und ein HBA kann mehreren HBA-Gruppen angehören. Beispielsweise können Daten Datenpfade, zu denen Filtertreiber1-Geräteobjekt 213, Filtertreiber4-Geräteobjekt 332, und Filtertreiber5-Geräteobjekt 352, zu derselben LUN (nicht dargestellt) in Target2 340 passieren. Jeder dieser Datenpfade passiert jeweils einen unterschiedlichen HBA (HBA1 318, HBA2 338, bzw. HBA3 358), und so sind HBA1 318, HBA2 338, und HBA3 358 in einer HBA-Gruppe. Das heißt, für jeden HBA in der HBA-Gruppe (zur Ausfallsicherung) können Daten, die zu einer LUN in Target2 340 gelenkt werden, durch jeden HBA in der HBA-Gruppe strömen (zur Ausfallsicherung) oder durch jeden der HBAs der HBA-Gruppe zugleich (zum Lastausgleich). Als ein weiteres Beispiel ist eine HBA-Gruppe aus durch HBA1 318 und HBA2 338 gebildet, da entsprechende Datenpfade durch HBA1 318 und HBA2 338 zu einer LUN (nicht dargestellt) in Target1 320 führen.
-
Ausführungsformen sehen neue Rückruf-Schnittstellen zum Implementieren von Fähigkeiten zur Ausfallsicherung und zum Lastausgleich in einem Filtertreiber bereit.
-
Die Ausfallsicherungsverfahren stellen eine hohe Verfügbarkeit von Kommunikationspfaden an ein Target bereit, wenn ein erster HBA oder Datenpfad durch den ersten HBA ausfällt (d. h., Pakete werden an einen zweiten HBA umgelenkt, der mit demselben Target verbunden ist). Zur Ausfallsicherung sehen Ausführungsformen ein Verbergen eines sekundären Speichergerätestapels und einen Benachrichtigungsmechanismus vor.
-
4A und 4B zeigen Operationen für das Verbergen eines sekundären Speichergerätestapels gemäß bestimmten Ausführungsformen. Die Steuerung beginnt bei Block 400 mit einem Speichergerätestapel, der für eine logische Einheit aufgebaut ist. In Block 402 wird bestimmt, ob es sich um den ersten Speichergerätestapel für diese logische Einheit handelt. Wenn ja, geht die Verarbeitung auf Block 404 über, und wenn nicht, geht die Verarbeitung auf Block 406 über. Das heißt, wenn mehrere HBAs mit demselben Target verbunden sind, wird für jede SCSI-LUN des Targets für jeden der HBAs ein Speichergerätestapel erzeugt, um es dem Filtertreiber zu ermöglichen, SRBs für jeden HBA zu bearbeiten und umzuleiten. Wenn das Dateisystem auf jedem Speichergerätestapel angeordnet ist, der für dasselbe Target aufgebaut wird, könnte dies zu Synchronisierungsproblemen aufgrund mehrfacher Zugriffe auf denselben Speichergerätevorgang führen. Deshalb wird ein erster Speichergerätestapel, der für jede LUN aufgebaut wird, ein „primärer” Speichergerätestapel. Danach werden alle anderen Speichergerätestapel, die für die LUN gebaut werden, als „sekundäre” Speichergerätestapel behandelt. So ist in Block 404 der Speichergerätestapel als ein primärer Speichergerätestapel ausgewiesen. In Block 406 ist der Speichergerätestapel als ein sekundärer Speichergerätestapel ausgewiesen.
-
Beispielsweise ist in diesem Beispiel der Speichergerätestapel von Speicherklassetreiber1-Vorrichtungsobjekt 310, Filtertreiber1-Geräteobjekt 312, Anschluß/Miniport-Geräteobjekt 314, 316 als ein primärer Speichergerätestapel ausgewiesen. Der Speichergerätestapel von Speicherklasse1a-Geräteobjekt 330, Filtertreiber4-Geräteobjekt 332, Anschluß/Miniport-Geräteobjekt 334, 336 ist in diesem Beispiel als sekundärer Speichergerätestapel ausgewiesen. In diesem Beispiel ist der Speichergerätestapel von Speicherklasse1a-Geräteobjekt 350, Filtertreiber4-Geräteobjekt 352, Anschluß/Miniport-Geräteobjekt 354, 356 als sekundärer Speichergerätestapel ausgewiesen. Der Filtertreiber ermöglicht den Dateisystemaufbau auf einem primären Speichergerätestapel (d. h. Speichergerätestapel 310, 213, 314, und 316), und verhindert, daß das Dateisystem auf den anderen sekundären Speichergerätestapeln aufbaut (z. B. Speichergerätestapel 330, 332, 334, und 336, und Speichergerätestapel 350, 352, 354, und 356). Ebenso ist der Speichergerätestapel, der mit dem Speicherklassetreiber2-Geräteobjekt startet, ein primärer Speichergerätestapel, während der Speichergerätestapel, der mit dem Speicherklassetreiber2a-Geräteobjekt startet, ein sekundärer Speichergerätestapel ist. Durch das Verbergen des sekundären Speichergerätestapels werden Daten durch die primären Speichergerätestapel gelenkt, und nicht durch die sekundären Speichergerätestapel.
-
In 4B beginnt die Steuerung bei Block 420 mit einem Paket, das mit Erfolgsstatus von einem sekundären Speichergerätestapel abgeschlossen wurde. In Block 422 ändert der Filtertreiber den Erfolgsstatus in einen Fehlerstatus ab. In Block 424 stellt der Filtertreiber den Sense-Key-Wert auf nicht bereit ein. In Block 426 stellt der Filtertreiber den Sense-Code ein, um anzuzeigen, daß kein Medium in der Speichervorrichtung vorhanden ist. Um also zu verhindern, daß das Dateisystem auf den sekundären Speichergerätestapel aufbaut, ändert der Filtertreiber in einigen Ausführungsformen den Status von abgeschlossenen SRBs von den sekundären Speichergerätestapeln mit Erfolgsstatus auf Fehlerstatus (z. B. SRB_STATUS_FEHLER), stellt einen Sense-Key-Wert auf SCSI_SENSE_NICHT_BEREIT, und stellt einen zusätzlichen Sense-Code auf SCSI_ADSENSE_KEIN_MEDIUM_IN_VORRICHTUNG um.
-
5A, 5B, und 5C zeigen Operationen für einen Benachrichtigungsmechanismus gemäß bestimmten Ausführungsformen. Der Filtertreiber und der Miniport-Treiber implementieren ein Protokoll zum gegenseitigen Zusammenwirken.
-
5A zeigt Operationen für eine Ausfallsicherungsverarbeitung, die in einem Miniport-Treiber implementiert ist, gemäß bestimmten Ausführungsformen. In 5A beginnt die Steuerung bei Block 500 mit dem Empfang eines Pakets für einen bestimmten HBA-Datenpfad an dem Miniport-Treiber. Der Begriff „HBA-Datenpfad” kann als ein Datenpfad von einem Miniport über einen HBA zu einem Target beschrieben werden. Ein Typ von Paket kann ein SRB sein. In Block 502 geht dann, wen der HBA-Datenpfad ausgefallen ist, die Verarbeitung auf Block 504 über, und anderenfalls auf Block 508.
-
In Block 504 benutzt der Miniport-Treiber das Benachrichtigungsrückrufverfahren, um den Filtertreiber zu benachrichtigen, daß der HBA-Datenpfad ausgefallen ist. Optional stellt der Miniport-Treiber einen neuen HBA-Datenpfadbezeichner an den Filtertreiber bereit, und der Filtertreiber leitet Pakete auf den neuen HBA-Datenpfad um. Beispielsweise kann der Miniport für die HBA-Gruppe, die durch HBA1 318, HBA2 338, und HBA3 358 gebildet wird, bei Ausfall von HBA1 318 einen neuen HBA-Datenpfad spezifizieren, der entweder HBA2 338 oder HBA3 358 enthält. In bestimmten Ausführungsformen kann ein Zeiger für das Benachrichtigungsrückrufverfahren, und ein Zeiger für die Filtervorrichtungserweiterung für einen aktuellen HBA-Datenpfad über eine I/O-Steuerung (IOCTL) in einem Gerätehinzufügungsverfahren des Filtertreibers an den Miniport-Treiber gesendet werden. In bestimmten Ausführungsformen benachrichtigt der Miniport-Treiber, wenn ein HBA-Datenpfad ausfällt, den Filtertreiber von dem Ausfall des HBA-Datenpfads, indem das Benachrichtigungsrückrufverfahren mit einem Statusparameter und mit einem Zeigerparameter aufgerufen wird, wobei der Zeiger auf die Geräteerweiterung des Filtertreibers zeigt, die dem aktuellen Pfad entspricht.
-
Der Miniport-Treiber schließt keine Pakete mit Fehlerstatus ab, da dies den Anschlußtreiber dazu veranlassen kann, eine SRB-Warteschlange einzufrieren, oder eine Bus-Rücksetzung zu initiieren. Statt dessen schließt in Block 506 der Miniport-Treiber die ausstehenden (d. h. nicht abgeschlossenen) und neu empfangenen Pakete für den ausgefallenen HBA-Datenpfad mit einem Erfolgsstatus ab. In Block 508 sendet der Miniport-Treiber das Paket über den HBA-Datenpfad an das Target, da der HBA-Datenpfad nicht ausgefallen ist.
-
Wenn beispielsweise ein SRB an Miniport 316 empfangen wird, um an HBA1 318 gelenkt zu werden, und wenn HBA1 318 ausgefallen ist, schließt der Miniport-Treiber 316 alle ausstehenden SRBs für HBA1 318 als Teil des Protokolls ab, um den Filtertreiber 312 zu benachrichtigen, die SRBs an einen anderen HBA umzuleiten. Der Filtertreiber 312 kann die SRBs beispielsweise an HBA2 338 oder HBA3 358 umleiten.
-
5B zeigt Operationen, die in einem Filtertreiber zur Ausfallsicherungsverarbeitung implementiert sind, gemäß bestimmten Ausführungsformen. Die Steuerung beginnt bei Block 510, wobei der Filtertreiber eine Benachrichtigung zum Ausfall eines HBA-Datenpfads empfängt. In Block 512 geht, wenn ein neuer HBA-Datenpfadbezeichner von dem Miniport-Treiber spezifiziert wird, die Verarbeitung auf Block 514 über, und anderenfalls auf Block 518. In Block 514 ändert der Filtertreiber den Status jedes Pakets von dem ausgefallenen Pfad, das abgeschlossen wird, vom Erfolgsstatus zum Beschäftigungsstatus ab. Diese Statusänderung veranlaßt den Klassetreiber dazu, die Pakete erneut auszustellen. Wenn die Pakete neu ausgestellt werden, behandelt der Filtertreiber sie als neue Anfragen, und leitet sie, wenn möglich, zu einem neuen Pfad um.
-
In Block 516 sendet der Filtertreiber Pakete, die von dem Klassetreiber nicht erfaßt wurden an den spezifizierten HBA-Datenpfad. In Block 518 wählt der Filtertreiber einen neuen Pfad, da kein neuer Pfadbezeichner spezifiziert wurde. In bestimmten Ausführungsformen fährt der Filtertreiber, wenn nur ein Pfad in einer HBA-Gruppe vorhanden ist, fort, neue Pakete an den ausgefallenen HBA-Datenpfad zu senden (z. B. Arbeit im PATH_THROUGH-Modus).
-
5C zeigt Operationen, die in einem Miniport-Treiber implementiert sind, wenn ein HBA gemäß bestimmten Ausführungsformen wiederhergestellt ist. Die Steuerung beginnt bei Block 520 mit einem wiederhergestellten HBA-Datenpfad (z. B. wird ein HBA ans Netz gebracht, oder ein HBA oder Datenpfad durch diesen HBA, der zuvor ausgefallen war, ist wiederhergestellt). Wenn ein HBA-Datenpfad wiederhergestellt ist, benachrichtigt der Miniport-Treiber den Filtertreiber durch Aufrufen des Benachrichtigungsrückrufverfahrens (Block 522). In bestimmten Ausführungsformen benachrichtigt der Miniport-Treiber den Filtertreiber von der HBA-Datenpfad-Wiederherstellung, indem er das Benachrichtigungsrückrufverfahren mit einem Statusparameter und mit einem Zeigerparameter aufruft, wobei der Zeiger auf die Geräteerweiterung des Filters zeigt, die dem aktuellen Pfad entspricht. Der Miniport-Treiber kann auch einen neuen Pfadbezeichner an den Filtertreiber leiten, an den der Filtertreiber neue Pakete umleiten soll. In Block 524 geht, wenn ein neuer HBA-Datenpfad spezifiziert wurde, die Verarbeitung auf Block 526 über, und anderenfalls auf Block 528.
-
Nach der Benachrichtigung zur Wiederherstellung sendet der Filtertreiber, wenn ein neuer HBA-Datenpfad spezifiziert wurde, die neuen Pakete an den neuen HBA-Datenpfad (Block 526). Wenn kein neuer HBA-Datenpfad spezifiziert wurde, fährt der Filtertreiber fort, die Datenpakete auf dem gegenwärtig aktiven Pfad zu senden.
-
Zusätzlich zur Ausfallsicherungsverarbeitung sehen Ausführungsformen einen Filtertreiber zum Ausgleich der I/O-Arbeitslast für eine Vielzahl von HBa-Datenpfaden vor, die eine Vielzahl von HBAs umspannen. Ausführungsformen stehen einen statischen Lastausgleich und einen dynamischen Lastausgleich vor.
-
6A und 6B zeigen Operationen zum Lastausgleich gemäß bestimmten Ausführungsformen. Für den Lastausgleich weist jeder HBA-Datenpfad in einer HBA-Gruppe einen zugeordneten Wert auf, der als Lastausgleichanteil bezeichnet wird, und der einen Prozentsatz einer gesamten I/O-Arbeitslast darstellt, die der jeweilige HBA-Datenpfad bearbeiten kann.
-
6A zeigt Operationen für einen statischen Lastausgleich gemäß bestimmten Ausführungsformen. Die Steuerung beginnt bei Block 600 mit dem Empfang eines Datenpakets, das an den Filtertreiber übertragen werden soll. In Block 602 bestimmt der Filtertreiber den Lastausgleichanteil, der jedem HBA-Datenpfad in der HBA-Gruppe zugeordnet ist. Für den statischen Lastausgleich können die Lastausgleichanteile manuell festgelegt werden, und beispielsweise in einem Windows®-Register gespeichert werden. Der Miniport-Treiber empfängt die Lastausgleichanteilswerte, und leitet diese mit Hilfe des Benachrichtigungsrückrufverfahrens an den Filtertreiber weiter. Beim Empfang der ermittelten Lastausgleichanteilswerte aktualisiert der Filtertreiber die Lastausgleichanteile mit neuen Werten.
-
In Block 604 bestimmt der Filtertreiber die gleitende Mittelwert-Datenlänge (MDL) der übertragenen Pakete für jeden HBA-Datenpfad (z. B. SCSI-Übertragungslänge der Pakete). In bestimmten Ausführungsformen kann der Lastausgleich auf der tatsächlichen Datenlänge übertragener Pakete basieren, und nicht auf der Anzahl von Paketen. In Block 606 bestimmt der Filtertreiber eine Datenquote für jeden HBA-Datenpfad. In bestimmten Ausführungsformen ist die Datenquote für einen HBA-Datenpfad die MDL für den HBA-Datenpfad, multipliziert mit einem Verhältnis des Lastausgleichanteils für den HBA-Datenpfad und einem minimalen Wert eines Lastausgleichanteils in der HBA-Gruppe (d. h. Datenquote = MDL·(Lastausgleichanteil/minimaler Lastausgleichanteil in der Gruppe).
-
In bestimmten Ausführungsformen wird MDL für jedes Paket oder jede Paketgruppe neu berechnet, während Datenquoten regelmäßig neu berechnet werden (z. B. nachdem eine bestimmte Anzahl von Paketen übertragen wurde). Die regelmäßigen Intervalle können durch ein Produkt der Zahl von HBA-Datenpfaden in der HBA-Gruppe, und durch einen einstellbaren Häufigkeits-Aktualisierungsfaktor bestimmt werden. Der Lastausgleichhäufigkeits-Aktualisierungsfaktor erlaubt das Einstellen des Lastausgleichs und erhöht die Leistung. Der Lastausgleichhäufigkeits-Aktualisierungsfaktor kann beispielsweise durch einen Systemadministrator eingestellt werden. Je höher die Häufigkeit der Aktualisierung von Datenquoten, desto niedriger die Differenz zwischen spezifizierten und tatsächlichen Lastausgleichanteilen. Auch können häufigere Aktualisierungen mehr Prozessorzeit in Anspruch nehmen.
-
In Block 608 bestimmt der Filtertreiber eine maximale Anzahl von Kommandos für eine logische Einheit eines Target. In Block 610 wählt der Filtertreiber einen HBA-Datenpfad, auf dem die Pakete gesendet werden, mit Hilfe eines Rundlaufverfahrens, wobei Pakete auf einem HBA-Datenpfad verschickt werden, bis eine Datenquote erreicht ist, oder eine maximale Anzahl von Kommandos für die logische Einheit eines Target erreicht ist.
-
Das heißt, für den statischen Lastausgleich kann ein Rundlaufverfahren benutzt werden. In bestimmten Ausführungsformen werden gültige HBA-Datenpfade für eine aktuelle HBA-Gruppe in einer doppelt verlinkten Liste für die Rundlaufoperation gesammelt. Dann werden die HBA-Datenpfade während der Lastausgleichsoperation mit Hilfe dieser Listen vertauscht. Das heißt, in bestimmten Ausführungsformen dauert das Senden von Paketen für einen bestimmten Pfad an, bis die Menge an übertragenen Daten die zuvor berechnete Datenquote für diesen HBA-Datenpfad erreicht, oder mit eine maximale Anzahl von SCSI-Kommandos für eine Target-LUN erreicht ist.
-
Bei dem statischen Lastausgleich kann die tatsächliche Verteilung von Paketen auf den HBA-Datenpfaden von einer festgelegten Verteilung abweichen (d. h. von Lastausgleichanteilen, die z. B. durch einen Systemadministrator festgelegt wurden). Je kleiner die Differenz zwischen der tatsächlichen und der festgelegten Verteilung, desto höher die Qualität des statischen Lastausgleichs. Die festgelegten Lastausgleichanteilswerte beeinflussen die Leistung des statischen Lastausgleichs.
-
6B zeigt Operationen für einen dynamischen Lastausgleich gemäß bestimmten Ausführungsformen. Ein dynamischer Lastausgleich vermeidet Stauungen auf einem einzelnen HBA-Datenpfad, solange auf anderen Pfaden Bandbreite verfügbar ist, idem die I/O-Arbeitslast zwischen den Pfaden dynamisch angepaßt wird. Auf diese Weise bemüht sich der dynamische Lastausgleich um eine effizientere Nutzung einer verfügbaren Speicher/Netzwerk-Bandbreite.
-
Die Steuerung beginnt bei Block 620, wobei der Filtertreiber ein Datenpaket empfängt. In Block 622 bestimmt der Filtertreiber eine Datenübertragungsgeschwindigkeit für jeden HBA-Datenpfad in der HBA-Gruppe. In bestimmten Ausführungsformen wird die Datenübertragungsgeschwindigkeit für jeden HBA-Datenpfad als ein Verhältnis der insgesamt übertragenen Daten und der zum Übertragen der Daten verwendeten Gesamtzeit berechnet. Eine Aktualisierungsprogrammroutine bestimmt, wie oft die Übertragungsgeschwindigkeiten aktualisiert werden sollen. Ein einstellbarer Parameter für den dynamischen Lastausgleich ist ein Übertragungsgeschwindigkeits-Aktualisierungshäufigkeitsfaktor, der festlegt, wie oft die Aktualisierungsprogrammroutine aufgerufen werden soll. Der Übertragungsgeschwindigkeits-Aktualisierungshäufigkeitsfaktor kann anhand des spezifischen Verhaltens des Zustell-Subsystems eingestellt werden.
-
In Block 624 aktualisiert der Filtertreiber den Lastausgleichanteil für jeden HBA-Datenpfad. Lastausgleichanteile für jeden Pfad in der HBA-Gruppe können proportional zu ihrer Datenübertragungsgeschwindigkeit aktualisiert werden (d. h. die Datenübertragungsgeschwindigkeit für den ausgewählten HBA-Datenpfad geteilt durch die Datenübertragungsgeschwindigkeit der HBA-Gruppe). In Block 626 wählt der Filtertreiber einen HBA-Datenpfad anhand der Lastausgleichanteile aus, auf dem das Paket gesendet werden soll.
-
Während der Arbeit im Ausfallsicherungs- und Lastausgleichsmodus deaktivieren HBA-Ausfälle ein oder mehrere HBA-Gruppenmitglieder. In Ausführungsformen arbeiten die verbleibenden HBA-Gruppenmitglieder weiter, und halten dasselbe Verhältnis zwischen Lastausgleichanteilen aufrecht, das festgelegt wurde.
-
So sehen Ausführungsformen eine Kombination aus hoher Verfügbarkeit und statischem und dynamischem Lastausgleich vor. Ein Software-Modul, das die Lösung implementiert, ist relativ klein, und verursacht minimale Kosten für das System. Ausführungsformen sehen die Fähigkeit vor, die Funktion, die von Ausführungsformen der Lösung bereitgestellt wird, schnell und leicht ein- und auszuschalten, indem der Filtertreiber in den Gerätestapel eingeführt wird bzw. wieder aus diesem entfernt wird. Ausführungsformen sind mit verschiedenen Plattformen kompatibel (z. B. Windows-Plattformen, entweder 32-Bit oder 64-Bit). Auch sind Ausführungsformen auf jedes SCSI- und/oder iSCSI-basierte SAN- und/oder NAS-(Network Attached Storage, am Netzwerk angeschlossene Speicher)-Systeme anwendbar. Außerdem unterstützen Ausführungsformen für Ausfallsicherung und Lastausgleich mehrere (zwei oder mehr) HBAs.
-
Zusätzliche Ausführungsformdetails
-
Die beschriebenen Verfahren für Ausfallsicherung und Lastausgleich können als ein Verfahren, eine Vorrichtung oder ein Herstellungsgegenstand implementiert sein, unter Benutzung von üblichen Programmier- und/oder Ingenieursverfahren zur Herstellung von Software, Firmware, Hardware, oder einer Kombination derselben. Der Begriff „Herstellungsgegenstand”, wie hier benutzt, bezeichnet Code oder Logik, der oder die in Hardwarelogik implementiert ist (z. B. ein integrierter Schaltkreischip, ein programmierbares Gate-Array (PGA), ein applikationsspezifischer integrierter Schaltkreis (ASIC) usw.), oder ein computerlesbares Medium, wie z. B. ein Magnetspeichermedium (z. B. Festplattenlaufwerke, Disketten, Band usw.), optische Speicher (CD-ROMs, optische Laufwerke usw.), flüchtige und nicht flüchtige Speichervorrichtungen (z. B. EEPROMs, ROMs, RAM, DRAMs, SRAMs, Firmware, programmierbare Logik usw.). Ein Prozessor greift auf Code in dem computerlesbaren Medium zu und verarbeitet ihn. Der Code, in dem bevorzugte Ausführungsformen implementiert sind, kann ein Übertragungsmedium, Signale, die sich durch den Raum fortpflanzen, Radiowellen, Infrarotsignale usw. umfassen. So kann der „Herstellungsgegenstand” das Medium umfassen, auf dem der Code verkörpert ist. Außerdem kann der Herstellungsgegenstand eine Kombination aus Hardware- und Softwarekomponenten umfassen, in der der Code verkörpert ist, verarbeitet und ausgeführt wird. Fachleute werden verstehen, daß viele Modifikationen an dieser Anordnung vorgenommen werden können, ohne von dem Umfang der Ausführungsformen abzuweichen, und daß der Herstellungsgegenstand jedes Information tragende Medium umfassen kann, das im Stand der Technik bekannt ist.
-
In den beschriebenen Ausführungsformen wurde eine bestimmte Logik in einem Treiber implementiert. In alternativen Ausführungsformen kann die Logik, die in dem Treiber und/oder Netzwerkadapter implementiert ist, ganz oder teilweise in Netzwerk-Hardware implementiert sein.
-
In bestimmten Ausführungsformen kann der Netzwerkadapter als eine PCI-Karte implementiert sein. In alternativen Ausführungsformen kann der Netzwerkadapter integrierte Schaltkreiskomponenten umfassen, die an dem Mutterbord des Computers 203 angeordnet sind.
-
In bestimmten Ausführungsformen kann der Netzwerkadapter dazu konfiguriert sein, Daten über ein Kabel zu übertragen, das mit einem Anschluß an dem Netzwerkadapter verbunden ist. In alternativen Ausführungsformen können die Netzwerkadapter-Ausführungsformen dazu konfiguriert sein, Daten über ein Funknetzwerk oder eine Funkverbindung zu übertragen, wie z. B. ein Funk-LAN.
-
Die dargestellte Logik aus 4A, 4B, 5A, 5B, 5C, 6A, und 6C zeigt, daß bestimmte Vorgänge in einer bestimmten Abfolge auftreten. In alternativen Ausführungsformen können bestimmte Operationen in einer anderen Abfolge ausgeführt, modifiziert, oder entfernt werden. Außerdem können der oben beschriebenen Logik Operationen hinzugefügt werden, und trotzdem den beschriebenen Ausführungsformen entsprechen. Auch können hier beschriebene Operationen sequentiell ablaufen, oder bestimmte Operationen können parallel verarbeitet werden. Außerdem können Operationen von einer einzelnen Verarbeitungseinheit oder von verteilten Verarbeitungseinheiten verarbeitet werden.
-
Die vorangehende Beschreibung verschiedener Ausführungsformen erfolgte zu Zwecken der Erläuterung und Beschreibung. Sie soll nicht umfassend sein oder die Ausführungsformen auf die genauen offenbarten Formen beschränken. Angesichts der aufgeführten Lehren sind viele Modifikationen und Variationen möglich. Es ist vorgesehen, daß der Umfang der Ausführungsformen nicht durch diese genaue Beschreibung beschränkt ist, sondern vielmehr durch die beiliegenden Ansprüche. Die vorangehenden Ausführungen, Beispiele und Daten stellen eine vollständige Beschreibung der Herstellung und Benutzung der Zusammensetzung der Ausführungsformen dar. Da viele Ausführungsformen ohne Abweichung von dem Geist und Umfang der Ausführungsformen durchgeführt werden können, liegen die Ausführungsformen in den beiliegenden Ansprüchen vor.