-
Hintergrund der Erfindung
-
Gebiet der Erfindung
-
Die
vorliegende Erfindung bezieht sich allgemein auf ein Computersystem.
Speziell bezieht die vorliegende Erfindung sich auf einen Host-Adapter, der
die Anzahl von Interrupts für
die Vervollständigung
von Eingaben/Ausgaben (I/O) reduziert, die von dem Host-Adapter
zu einem Host-Mikroprozessor erzeugt werden.
-
Kurze Beschreibung des verwandten Standes
der Technik
-
In
einem Computersystem holt sich ein Host-Mikroprozessor (Host-System)
oder eine zentrale Verarbeitungseinheit (CPU) Informationen von einer
Anzahl peripherer I/O-Geräte,
wie z. B. Plattenlaufwerke, indem er bzw. sie eine I/O-Anforderung
an eine I/O-Steuerung oder -adapter absendet. Die I/O-Steuerung
verarbeitet die I/O-Anforderungen, die für die peripheren I/O-Einrichtungen vorgesehen sind.
Die meisten I/O-Steuerungen können
gleichzeitig mehrere I/O-Anforderungen
von dem Host-Mikroprozessor handhaben. Die I/O-Steuerung verarbeitet mehrere
Befehle auf niedriger Ebene, die zu jeder I/O-Anforderung gehören. Beispielsweise
kann für I/O-Geräte, die
an den Bus einer kleinen Computersystemschnittstelle (SCSI) angeschlossen
sind, eine einzelne I/O-Anforderung Befehle für die Vermittlung des SCSI-Busses
enthalten, Befehle, die I/O-Zieleinrichtung auszuwählen, Befehle
um eine Datenübertragung
anzufordern, Befehle, das I/O-Gerät von dem SCSI-Bus zu trennen
und wieder mit diesem zu verbinden, sowie andere Befehle, um den
SCSI-Bus-Zustand zu verändern.
-
In
früheren
Computersystemen hat die I/O-Steuerung sich über eine Hardwareunterbrechung
an den Host-Mikroprozessor angepasst, nachdem ein I/O-Gerät eine I/O-Anforderung
oder einen der Befehle auf niedriger Ebene abgeschlossen hatte.
Der Interrupt bewirkt, dass der Host-Mikroprozessor feststellt, welche I/O-Anforderung
abgeschlossen wurde und ob die I/O-Anforderung korrekt ausgeführt wurde.
Der Host-Mikroprozessor muss andere Vorgänge aussetzen, um den Interrupt
von der I/O-Steuerung zu bedienen. Außerdem erfährt der Host-Mikroprozessor, wenn
er jeden Interrupt bedient, eine zusätzliche Belastung. Diese Zusatzlast
wird bewirkt durch den Interrupt, während er in den Host-Prozessor
ein- und wieder aus diesem austritt.
-
Wenn
der Host-Mikroprozessor eine große Anzahl von I/O-Anforderungen
absendet, d.h. wenn die I/O-Arbeitslast hoch ist, so empfängt der
Host-Mikroprozessor eine entsprechend große Anzahl von Interrupts, was
zu einer beträchtlichen
Menge an Zusatzlast führt,
die mit den Interrupts verknüpft
ist. In einem Computersystem mit mehreren Benutzern oder paralleler
Verarbeitung (Multitasking) senkt diese Zusatzlast die für die Verarbeitung
anderer Anwendungen zur Verfügung
stehende Host-Mikroprozessor-Zeit und die Ressourcen (z. B. die
Leistung). Dies führt
zu einer Verlangsamung bzw. einem Absenken der Leistungsfähigkeit
des Systems. Da die existierenden Host-Mikroprozessoren so ausgelegt sind,
dass sie schneller sind, wird das Verlang samen der Systemleistungsfähigkeit
aufgrund der Bedienung von Interrupts durch den Host sogar noch
deutlicher spürbar.
-
Im
Verlaufe der Jahre hat sich zusätzlich
zu den schnelleren Host-Mikroprozessoren auch die Geschwindigkeit
der peripheren I/O-Geräte
bei der Verarbeitung von I/O-Anforderungen verbessert. Diese höhere Geschwindigkeit
hat die Frequenz von Interrupts des Host-Mikroprozessors für I/O-Abschlüsse noch
gesteigert. Zusätzlich
erfordern Programmanwendungen, die auf dem Host-Mikroprozessor laufen,
mehr Verarbeitungsleistung. Es besteht also eine höhere Anforderung
an die Verarbeitungsleistung, die gebraucht wird, um I/O-Anforderungen
und -antworten zu erfüllen.
-
Zusammenfassung der Erfindung
-
Die
vorliegende Erfindung bezieht sich auf einen Host-Adapter, der ein
adaptives Verfahren zum Kombinieren von Abschlussberichten von I/O-Anforderungen
verwendet und zum beträchtlichen
Reduzieren der Anzahl von Interrupts eines Host-Mikroprozessors.
Speziell erhöht
der Adapter das Verhältnis
von I/O-Abschlussberichten pro Sekunde (IOPS) zu Interrupts.
-
Durch
Kombinieren erfolgreicher I/O-Abschlussberichte und Reduzieren der
Anzahl von Interrupts reduziert der Hostadapter die Zusatzlast,
die mit dem Bedienen von Interrupts für erfolgreich abgeschlossene
I/O-Anforderungen auftritt. Dies reduziert die Menge an Verarbeitungszeit
(„I/O-gebundene" Zeit) und Leistungskapazität, die durch
den Host-Mikroprozessor bei der Verarbeitung von Interrupts von dem
Adapter aufgebracht wird, und erzeugt zusätzliche Zeit und Leistungskapazität für den Hostmikroprozessor
für die
Verarbeitung von Benutzeranwendungen. In einer Ausführungsform
der vorliegenden Erfindung wird der Umfang an Zeit und/oder Ressourcen
(z. B. Leistung), die durch den Host-Mikroprozessor für das Bedienen
von Interrupts (CPU-Ausnutzung)
verbraucht wird, um 20 % vermindert.
-
Ein
Vorteil der vorliegenden Erfindung liegt darin, dass sie sich an
die Belastung des Host-Mikroprozessors durch I/O-Anforderungen anpasst.
Je stärker
der Host-Mikroprozessor beschäftigt
ist, desto mehr I/O-Abschlussberichte werden mit einem einzelnen
Interrupt durch den Adapter geliefert. Insbesondere wird, je höher die
Belastung durch I/O-Anforderungen ist, desto höher auch das Verhältnis der I/O-Abschlussberichte
pro Sekunde (IOPS) zu Interrupts gemacht. z. B. können in
einer Ausführungsform,
wenn die Belastung relativ niedrig ist, beispielsweise nur etwa
5 bis 10 I/O-Anforderungen gleichzeitig erzeugt werden, 3 bis 5
I/O-Abschlussberichte mit einem einzigen Interrupt an den Host-Mikroprozessor berichtet
werden. Wenn die Belastung relativ groß ist, z. B. 30 bis 60 I/O-Anforderungen
gleichzeitig erzeugt werden, so können bis zu 30 I/O-Abschlussberichte mit
einem einzigen Interrupt an den Host-Mikroprozessor berichtet werden.
Dies stellt einen beträchtlichen
Vorteil dar, da nämlich,
je stärker
der Mikroprozessor beschäftigt
ist, desto weniger der Mikroprozessor sich die Zeit und Ressourcen
für das
Bedienen von Interrupts und die Zusatzbelastung, die mit Interrupts
verbunden ist, leisten, kann.
-
Zusätzlich zu
der Reduzierung der Anzahl von Interrupts für den Host liegt ein weiterer
Vorteil des Adapters darin, dass er ausreichend Arbeit für die I/O-Geräte hält, indem
er einen Zeitgeber startet, wenn ein I/O-Gerät keine weiteren I/O-Anforderungen
für die
Verarbeitung mehr hat, d.h. wenn ein I/O-Gerät in den Leerlauf gerät. Wenn
der Zeitgeber abläuft,
werden alle erfolgreich abgeschlossenen, jedoch noch nicht berichteten
I/O-Anforderungen von allen I/O-Geräten dem
Host-Mikroprozessor mit einem Interrupt gemeldet. Bei einigen Host-Anwendungen
wartet der Host-Mikroprozessor darauf, dass I/O-Anforderungen abgeschlossen
werden und darüber
berichtet wird, bevor er weitere I/O-Anforderungen aussendet. Nach
der Verarbeitung dieser abgeschlossenen I/O-Anforderungen kann der
Host-Mikroprozessor neue I/O-Anforderungen an die I/O-Geräte schicken.
Dies erhöht
die Wahrscheinlichkeit, dass eine oder mehrere neue I/O-Anforderungen an das
I/O-Gerät
gesendet werden, welches sich im Leerlauf befindet. Im Ergebnis
vermindert der Adapter die Latenzzeit und verbessert die Gesamtleistungsfähigkeit
des Computersystems.
-
Aufgrund
der adaptiven bzw. anpassungsfähigen
Natur der vorliegenden Erfindung verbessert sie die Systemleistungsfähigkeit
unabhängig
von der I/O-Anforderungsbelastung (entweder hohe Belastung oder
niedrige Belastung), der Art des Zugriffs (entweder der Reihe nach
oder wahlfrei), der Art der Systemkonfiguration, der Anzahl von
I/O-Geräten, der
Art von I/O-Anforderungen
und der Tatsache, ob die I/O-Anforderungen in einer Schlange angeordnet werden
oder nicht.
-
Ein
Aspekt der vorliegenden Erfindung bezieht sich auf ein Verfahren
zum Verarbeiten abgefertigter I/O-Anforderungen in einem Computersystem, in
welchem ein Host-Mikroprozessor eines Host-Computers I/O-Anforderungen
an eine I/O-Steuerung absendet, um Übertragungen von Daten zwischen
dem Host-Computer und einer Mehrzahl von peripheren I/O-Geräten auszulösen. Das Verfahren
der Verarbeitung abgesandter I/O-Anforderungen weist auf: (a) das
Verarbeiten der abgesandten I/O-Anforderungen durch Übertragen
von Daten zwischen den peripheren I/O-Geräten und einem Speicher des
Host-Computers, (b) gleichzeitig mit (a) das Feststellen, und zwar
auf Basis zumindest einer Anzahl nicht berichteter, abgeschlossener I/O-Anforderungen
und einer Anzahl von anhängigen I/O-Anforderungen,
ob der Host-Mikroprozessor einen Interrupt erfahren soll, (c), wenn
in dem Vorgang (b) festgestellt wird, dass der Host-Mikroprozessor
einen Interrupt erfahren soll, unterbrechen (Interrupt) des Host-Mikroprozessors
und Berichten der bis dahin noch nicht berichteten abgeschlossenen
I/O-Anforderungen an den Host-Mikroprozessor und (d) das Variieren
der Anzahl von nicht berichteten abgeschlossenen I/O-Anforderungen,
die an den Host-Mikroprozessor in Vorgang (c) beichtet werden, entsprechend
einer aktuellen Belastung der I/O-Steuerung.
-
In
einer Ausführungsform
weist der Vorgang (b) das Vergleichen der Anzahl nicht berichteter,
abgeschlossener I/O-Anforderungen mit der Anzahl anhängiger I/O-Anforderungen
auf. In einer Konfiguration weist das Verfahren das Unterbrechen
(Interrupt) des Host-Mikroprozessors auf, wenn die Anzahl nicht berichteter,
abgeschlossener I/O-Anforderungen größer oder gleich der Anzahl
der anhängigen
I/O-Anforderungen ist.
-
In
einer Ausführungsform
beruht der Vorgang (b) des Feststellens, ob der Host-Mikroprozessor einen
Interrupt erfahren soll, weiterhin auf der Anzahl anhängiger I/O-Anforderungen, welche
jedem peripheren I/O-Gerät
entsprechen. In einer Konfiguration weist das Verfahren das Unterbrechen
des Host-Mikroprozessors auf, wenn die Anzahl anhängiger I/O-Anforderungen für eines
der peripheren I/O-Geräte
null erreicht. In einer anderen Konfiguration weist das Verfahren
das Unterbrechen des Host-Mikroprozessors auf, wenn die Anzahl anhängiger I/O-Anforderungen
für eines
der peripheren I/O-Geräte
eine vorbestimmte, programmierbare Anzahl erreicht. In einer Konfiguration
hat jedes periphere I/O-Geräte
eine entsprechend programmierbare Anzahl anhängiger I/O-Anforderungen, welche
ein Interrupt des Host-Mikroprozessors
auslöst.
-
In
einer Konfiguration weist der Vorgang des Unterbrechens des Host-Mikroprozessors,
wenn die Anzahl anhängiger
I/O-Anforderungen für
ein peripheres I/O-Gerät
null erreicht, das Warten für
eine vorbestimmte Zeitdauer auf, bevor der Host-Mikroprozessor unterbrochen
wird. Die vorbestimmte Zeitdauer wird so ausgewählt, dass sie die Wahrscheinlichkeit,
dass eines oder mehrere andere periphere I/O-Geräte entsprechende anhängige I/O-Anforderungen
abschließen,
bevor der Host-Mikroprozessor unterbrochen wird, beträchtlich
erhöht.
In einer Konfiguration beträgt
die vorbestimmte Zeitdauer zwischen etwa 5 Mikrosekunden und etwa
8 Millisekunden. In einer anderen Konfiguration beträgt die vorbestimmte
Zeitdauer zwischen 25 Mikrosekunden und etwa 1.000 Mikrosekunden.
In einer weiteren Konfiguration wird eine entsprechend vorbestimmte Zeitdauer
für jedes
periphere I/O-Gerät
ausgewählt. In
einer Konfiguration ist die vorbestimmte Zeitdauer programmierbar.
-
Ein
weiterer Aspekt der vorliegenden Erfindung bezieht sich auf eine
I/O-Steuerung in einem Computersystem, in welchem ein Host-Mikroprozessor
eines Host-Computers Eingabe/Ausgabe (I/O)-Anforderungen an die
I/O-Steuerung ausgibt, um Übertragungen
von Daten zwischen dem Hostcomputer und einer Mehrzahl peripherer
I/O-Geräte auszulösen, und
in welchen die I/O-Steuerung den Host-Mikroprozessor unterbricht,
um über
abgeschlossene I/O-Anforderungen
zu berichten. Die I/O-Steuerung weist auf: einen ersten Zähler, der
so ausgestaltet ist, dass er eine Gesamtzahl verbleibender I/O-Anforderungen
von dem Host-Mikroprozessor zählt,
und einen zweiten Zähler,
der so ausgelegt ist, dass er eine Gesamtzahl nicht berichteter
I/O-Anforderungen zählt,
die durch die I/O-Geräte
abgeschlossen wurden. Die I/O-Steuerung vergleicht die Anzahl in
dem ersten Zähler
mit der Anzahl in dem zweiten Zähler.
Die I/O-Steuerung
unterbricht den Host-Mikroprozessor, wenn die Anzahl in dem zweiten
Zähler
größer ist
als oder gleich ist wie die Anzahl in dem ersten Zähler und
berichtet alle nicht berichteten I/O-Anforderungen, die durch die I/O-Geräte abgeschlossen
worden sind.
-
In
einer Ausführungsform
weist die I/O-Steuerung weiterhin eine Mehrzahl von I/O-Gerätezählern auf,
wobei jeder so ausgestaltet ist, dass er die Anzahl verbleibender
I/O-Anforderungen
für eines
der I/O-Geräte
zählt,
und einen Zeitgeber mit einer vorbestimmten Zeitdauer. Der Zeitgeber
wird so ausgelegt, dass er die Zeitmessung startet, wenn eines aus der
Mehrzahl von I/O-Geräten
ihre letzte I/O-Anforderung abgeschlossen hat, wenn der I/O-Gerätezähler einen Übergang
von eins zu null macht. Wenn der Zeitgeber seine vorbestimmte Zeitdauer
erreicht hat, unterbricht die I/O-Steuerung den Host-Mikroprozessor
und berichtet alle nicht berichteten Anforderungen, die durch die
I/O-Geräte
abgeschlossen wurden. In einer Ausführungsform sind alle Zähler Variablen,
die in einem Speicher mit wahlfreiem Zugriff (RAM), der zu der I/O-Steuerung
gehört,
gespeichert und aktualisiert werden.
-
In
einer Ausführungsform
weist der Vorgang des Bestimmens, ob der Host-Mikroprozessor unterbrochen werden soll,
um die abgeschlossenen I/O-Anforderungen zu berichten, das Vergleichen
der Anzahl nicht berichteter, abgeschlossener I/O-Anforderungen
mit der Anzahl peripherer I/O-Geräte aus der Mehrzahl mit anhängigen I/O-Anforderungen
auf. In einer Ausführungsform
weist das Verfahren das Unterbrechen des Host-Mikroprozessors auf,
wenn die Anzahl der nicht berichteten, abgeschlossenen I/O-Anforderungen
größer ist
als oder gleich ist wie die Anzahl der peripheren I/O-Geräte mit anhängigen I/O-Anforderungen.
-
Kurze Beschreibung der Figuren
-
1 zeigt
ein Computersystem, das ein Host-Rechnersystem, eine Anzahl peripherer I/O-Geräte und eine
Host-Adapterplatine gemäß einer
Ausführungsform
der vorliegenden Erfindung aufweist.
-
2A zeigt
eine Konfiguration einer vollen Anforderungsschlange in dem Hostsystem
nach 1.
-
2B zeigt
eine Konfiguration einer leeren Anforderungsschlange innerhalb des
Hostsystems nach 1.
-
3A veranschaulicht
eine Konfiguration eines Befehlseingabetyps, der durch das Computersystem
nach 1 verwendet wird.
-
3B zeigt
eine Konfiguration eines erweiterten Befehlseingabetyps, der durch
das Computersystem nach 1 verwendet wird.
-
3C veranschaulicht
eine Konfiguration eines Eingabetyps für einen erfolgreichen/nicht
erfolgreichen Zustand, der durch das Computersystem nach 1 verwendet
wird.
-
4 zeigt
eine Konfiguration zweier Sätze von
Mailbox-Registern und -Variablen, die in der Host-Adapterplatine
nach 1 gespeichert werden.
-
5 zeigt
eine Ausführungsform
eines Verfahrens, welches durch die Host-Adapterplatine nach 1 verwendet
wird, um I/O-Anforderungsabschlussberichte zu kombinieren und die
Anzahl von Interrupts des Host-Systems zu reduzieren.
-
6A veranschaulicht
eine Konfiguration eines Eingabetyps über einen erfolgreichen Zustand mit
16 Bit-Handhabungen, die durch das Computersystem nach 1 verwendet
werden.
-
6B zeigt
eine Ausführungsform
eines Eintragstyps für
einen erfolgreichen Zustand mit 32 Bit-Handhabungen, die durch das
Computersystem nach 1 verwendet werden.
-
7 veranschaulicht
eine weitere Ausführungsform
eines Verfahrens, welches durch die Host-Adapterplatine nach 1 verwendet
wird, um I/O-Anforderungsabschlussberichte zu kombinieren und die
Anzahl von Interrupts des Host-Systems zu reduzieren.
-
8 zeigt
eine weitere Ausführungsform
eines Verfahrens, welches durch die Host-Adapterplatine nach 1 verwendet
wird, um I/O-Anforderungsabschlussberichte zu kombinieren und die
Anzahl von Interrupts des Host-Systems zu reduzieren.
-
Genaue Beschreibung der bevorzugten
Ausführungsform
-
Die
vorliegende Erfindung bezieht sich auf einen Host-Adapter, der ein
adaptives Verfahren verwendet, um Abschlussberichte von I/O-Anforderungen
zu kombinieren und die Anzahl von Interrupts eines Host-Mikroprozessors
beträchtlich
zu reduzieren.
-
1 zeigt
ein Computersystem 10 gemäß einer Ausführungsform
der vorliegenden Erfindung. Aufgrund der adaptiven Natur der vorliegenden
Erfindung können
alternative Ausführungsformen
des Computersystems 10 Systemkonfigurationen haben, die
sich von den in 1 dargestellten unterscheiden.
Zusätzlich
können
alternative Ausführungsformen
eine hohe oder niedrige Arbeitslast an I/O-Anforderungen, einen
sequentiellen oder wahlfreien I/O-Zugriff, eine unterschiedliche
Anzahl von I/O-Geräten
und in Schlangen oder nicht in Schlangen angeordnete I/Os haben.
-
In 1 weist
das Computersystem 10 ein Host-System 15, einen
ersten Bus 35, eine Host-Adapterplatine 40, einen
zweiten Bus 70 und eine Anzahl peripherer I/O-Geräte 80-86 auf.
Fachleute auf diesem Gebiet erkennen, dass es verschiedene Namen
und Konfigurationen für
das Host-System 15, die Host-Adapterplatine 40,
den ersten Bus 35 und den zweiten Bus 70 gibt.
Beispielsweise kann das Host-System 15 auch eine zentrale
Verarbeitungseinheit (CPU), ein Hauptmikroprozessor, ein Hauptprozessor,
eine Hauptverarbeitungseinheit oder einfach ein Host genannt werden.
-
HOST-SYSTEM
-
In
einer Ausführungsform
weist das Host-System 15 nach 1 einen
Host-Mikroprozessor 20 und
einen Speicher 25 auf. Der Speicher 25 weist einen
Softwaretreiber 30, einen Interrupt-Bearbeiter 32,
eine Anforderungsschlange 26, eine Antwortschlange 27,
eine in die Anforderungsschlange weisende Zeigervariable 50,
eine aus der Anforderungsschlange weisende Zeigervariable 352, eine
in die Antwortschlange weisende Zeigervariable 354 und
eine aus der Antwortschlange weisende Zeigervariable 356 auf.
Der Softwaretreiber und der Interrupt-Bearbeiter 32 werden durch
den Host-Mikroprozessor 20 aus dem Speicher 25 ausgeführt. In einer
Konfiguration weist der Softwaretreiber 30 eine Hauptanwendung,
eine Dateisystemverwaltung, zumindest einen Gerätetreiber für die peripheren I/O-Geräte 80-86 und
einen Host-Adaptertreiber (nicht
dargestellt) auf.
-
Zumindest
ein Teil des Speichers 25, wie z. B. die Anforderungsschlange 26 und
die Antwortschlange 27 können in Form eines von dem
Host-Mikroprozessor 20 und der Host-Adapterplatine 40 gemeinsam
verwendeten Speichers vorliegen. Die Anforderungsschlange 26 und
die Antwortschlange 27 speichern Befehls- und Zustandsinformationen,
die sich auf I/O-Anforderungen
und I/O-Antworten beziehen.
-
PCI-BUS UND SCSI-BUS
-
Die
ersten und zweiten Busse 35, 70 können ein
Systembus, ein I/O-Bus oder ein Netzwerkbus genannt werden. In einer
Konfiguration ist der erste Bus 35 ein Verbindungsbus peripherer
Komponenten (PCI-Bus). In einer Konfiguration ist der zweite Bus (70)
ein Bus für
eine Kleincomputerstandardschnittstelle (SCSI-Bus). Der zweite Bus 70 kann
irgendeine Art von SCSI-Bus sein. Beispielsweise kann der SCSI-Bus
in einer Konfiguration ein Bus mit einem einzelnen Anschluss sein,
der bis zu 15 Ziele bzw. Bestimmungsorte unterstützt. Jedes Ziel kann eine bis 32
logische Einheiten (LUNs) unterstützen. Demnach kann ein SCSI-Bus
mit einem einzelnen Anschluss von 15 bis 480 (15 × 32 = 480)
periphere I/O-Geräte 80-86 unterstützen. In
einer anderen Konfiguration kann der SCSI-Bus ein Bus mit zwei Anschlüssen sein,
der bis zu 31 Zielobjekte unterstützt. In einer weiteren Konfiguration
ist der zweite Bus 70 ein schneller, ultrabreiter SCSI-Bus.
In einer weiteren Konfiguration ist der zweite Bus ein Faserkanal.
In einer Konfiguration ist der Faserkanal so ausgestaltet, dass
er ein SCSI-Befehlsformat oder ein SCSI-Paketformat verwendet oder
diesem folgt. Der erste Bus 35 stellt die Kommunikation
zwischen dem Host-System 15 und
der Host-Adapterplatine 40 bereit. Der zweite Bus bietet
eine Kombination zwischen der Host-Adapterplatine 40 und
den I/O-Geräte 80-86.
-
HOST ADAPTER-PLATINE
-
Die
Host-Adapterplatine 40 und/oder der Host-Adapter 45 können eine
I/O-Steuerung, einen I/O-Steuerungsschaltkreis, ein I/O-Steuersystem,
ein I/O-Prozessor, ein I/O-Unterprozessor,
ein Kommunikationsadapter oder einfach ein Host-Adapter genannt
werden. Die Host-Adapterplatine 40 kann so ausgestaltet
sein, dass sie eine differentielle Adapterplatine, eine nur ein
Ende aufweisende SCSI-Adapterplatine oder eine Faserkanaladapterplatine
ist. In einer Ausführungsform
weist die Host-Adapterplatine 40 einen Host-Adapter 45,
einen Nur-Lese-Speicher ROM 60 und
einen wahlfreien Speicher (RAM) 65 auf. In einer Konfiguration
ist der ROM ein Flash-programmierbarer ROM (PROM), der einen startfähigen Code 61 speichert.
-
In
einer Konfiguration weist der Host-Adapter 45 einen Mikroprozessor 50,
Schnittstellenregister 52 und eine Maschine 55 zur
Ausführung
eines SCSI-Ausführungsprotokolls
(SXP-Maschine) auf.
In einer Konfiguration ist der Mikroprozessor 50 ein Computer
mit einem reduzierten Befehlssatz (RISC).
-
Der
RAM 65 speichert einen RISC-Code oder Firmware 62,
die durch den Softwaretreiber 30 oder den startfähigen (Flash-)Code 61 beim
Herauffahren in den RAM 65 heruntergeladen wird (d.h. initialisiert
und geladen oder konfiguriert wird). Die Firmware 62 wird
durch den Host-Adapter 45 ausgeführt, um
I/O-Anforderungen und -Befehle von dem Host-Mikroprozessor 20 zu
verarbeiten. Die SXP-Maschine 55 bearbeitet Befehle auf
niedriger Ebene, die zu den I/O-Anforderungen
gehören
und ermöglicht
es dem Mikroprozessor 50, andere Vorgänge auszuführen, wie z. B. die Verarbeitung
anderer eingehender I/O-Anforderungen.
-
I/O-Geräte
-
Die
peripheren I/O-Geräte 80-86 können Bandlaufwerke,
Plattenlaufwerke, Videoplattenlaufwerke (VDD), digitale Videoplatten
(DVD), redundante Arrays preiswerter/unabhängiger Platten (RAID), CD-ROMs,
Scanner, Drucker etc. sein. Für
Zwecke der Veranschaulichung sind sieben periphere I/O-Geräte 80-86 in 1 dargestellt.
Das Computersystem 10 kann aber auch weniger oder mehr
als sieben I/O-Geräte 80-86 aufweisen.
Jede Anzahl und/oder Kombination von I/O-Geräten kann gemäß der vorliegenden
Erfindung verwendet werden.
-
GENERELLE ARBEITSWEISE
-
Die
generelle Verwendung und der Betrieb des Computersystems 10 werden
unter Bezug auf 1 beschrieben. Der Host-Mikroprozessor 20 und/oder
der Softwaretreiber 30 speichern I/O-Anforderungen, die
für periphere
I/O-Geräte 80-86 vorgesehen
sind, in der Anforderungsschlange 26. Der Adapter 45 und/oder
die Firmware 62 holen I/O-Anforderungen aus der Anforderungsschlange 26 über den
PCI-Bus 35. In einer Konfiguration liest der Host-Adapter 45 die
I/O-Anforderungen aus dem Host-Speicher 25 über einen
direkten Speicherzugriff (DMA). Der Adapter 45 kann mehrfache
I/O-Operationen und Datenübertragungen
ohne Eingriff durch den Host-Mikroprozessor 20 verwalten.
-
Der
Adapter 45 verarbeitet die I/O-Anforderungen und sendet
Befehle über
den SCSI-Bus 70 an die peripheren I/O-Geräte 80-86,
um die angeforderten Daten zu holen oder zu speichern. Der Host-Adapter 45 sendet
oder holt angeforderte Daten zu oder von dem Host-Speicher 25 über direkten
Speicherzugriff (DMA). Gemäß einem
unten beschriebenen adaptiven Verfahren erzeugt der Adapter 45 einen
Interrupt für
den Host-Mikroprozessor 20, wenn eine Anzahl oder ein Verhältnis von
I/O-Anforderungen erreicht worden ist oder wenn eine gewisse Zeitdauer verstrichen
ist, nachdem ein I/O-Gerät 80-86 keine weiteren
Befehle zum Verarbeiten mehr hatte.
-
ANFORDERUNGS- UND ANTWORTSCHLANGEN
-
Die 2A-2B veranschaulichen
Beispiele der Anforderungsschlange 26 innerhalb des Host-Speichers 25.
Die Struktur der Antwortschlange 27 ist der Struktur der
Anforderungsschlange 26, die in den 2A-2B dargestellt
ist, im Wesentlichen ähnlich,
mit Ausnahme der Tatsache, dass die Antwortschlange 27 dafür ausgelegt
ist, die I/O-Statusblöcke
(IOSBs) zu enthalten, während
die Anforderungsschlange 26 dafür ausgelegt ist, I/O-Befehlsblöcke (IOCBs)
zu enthalten. In einer Konfiguration sind die Anforderungsschlange 26 und
die Antwortschlange 27 als umlaufende Listen fester Länge von 64
Byte in Form von First-In-First-Out (FIFO)-Einträgen organisiert. In einer Konfiguration
gibt es 128 Einträge
in jeder Schlange 26, 27. In anderen Ausführungsformen
der vorliegenden Erfindung wird die Befehls- und Zustandsinformation
in anderen Arten von Datenstrukturen (beispielsweise Stapeln) anstatt von
kreisförmigen
oder umlaufenden Schlangen gespeichert.
-
Jede
Schlange 26, 27 hat einen hineinweisenden und
einen hinausweisenden Zeiger, die als Indizes implementiert sind.
Der Speicher 25 speichert einen Satz von einwärts und
auswärts
weisenden Zeigervariablen 350-356 (1),
und die Firmware 62 der Host-Adapterplatine 40 verwendet
einen Satz ihrer eigenen einwärts
und auswärts
weisenden Zeigervariablen 360-366 (4),
die in dem RAM 65 gespeichert sind. Jede einwärts weisende
und auswärts
weisende Zeigervariable 350-356, die in dem Speicher 25 gespeichert
ist (1), kann in eine Adresse umgewandelt werden, die
zu der Adresse eines der 128 Einträge in einer der Schlangen 26, 27 gehört.
-
Der
einwärts
weisende Zeiger und der auswärts
weisende Zeiger einer Schlange 26, 27 legen fest,
ob die Schlange 26, 27 voll, leer oder teilweise gefüllt ist.
Wenn der einwärts
weisende Zeiger einer Schlange 26, 27 um eins
(eine Position) geringer als der auswärts weisende Zeiger dieser
Schlange 26, 27 ist (wobei ein Überrundungszustand
einer umlaufenden Schlange zu berücksichtigen ist), so ist die Schlange 26, 27 voll. 2A veranschaulicht
eine Konfiguration einer vollen Anforderungsschlange 26. Eine
volle Schlange 26, 27 enthält einen Eintrag weniger als
es der Gesamtlänge
der Schlange 26, 27 entspricht. Wenn der einwärts weisende
Zeiger 87 und der auswärts
weisende Zeiger 88 gleich sind, so ist die Schlange 26, 27 leer. 2B veranschaulicht eine
Konfiguration einer leeren Anforderungsschlange 26. Die
Anzahl von leeren (verfügbaren)
Schlangeneinträgen
in einer bestimmten Schlange 26, 27 wird berechnet
durch Subtrahieren des einwärts
zeigenden Zeigers von dem auswärts
zeigenden Zeiger (wobei ein Überrundungszustand
zu berücksichtigen ist).
-
Die
Anforderungsschlange 26 ist eine Schnittstelle zu dem Host-Adapter 45 (und/oder
der Firmware 62), durch welchen der Host-Mikroprozessor 20 I/O-Anforderungen
für den
Transport von I/O-Befehlsblöcken
(IOCBs), welche verschiedene Befehle und Daten aufweisen, weiterleitet.
Die Einträge
der Anforderungsschlange 26 werden nur durch den Host-Mikroprozessor 20 in
einer Schlange angeordnet, der den einwärts weisenden Zeiger 87 der
Anforderungsschlange steuert bzw. kontrolliert. Die Einträge der Anforderungsschlange 26 werden nur
durch den Host-Adapter 45 (und/oder
die Firmware 62) herausgenommen, welcher den auswärts weisenden
Zeiger 88 der Anforderungsschlange steuert bzw. kontrolliert.
-
Die
Antwortschlange 27 ist eine Schnittstelle zu dem Host-Mikroprozessor 20,
durch welche der Host-Adapter 45 (und/oder die Firmware 62)
I/O-Antworten für
den Transport von I/O-Statusplatten (IOSB)
weiterleitet, welche SCSI-Status- und sonstige Statusinformationen
bezüglich
der I/O-Anforderung aufweisen. Die Einträge der Antwortschlange 27 werden
nur durch den Adapter 45 (und/oder die Firmware 62)
aufgereiht, welcher den einwärts
weisenden Zeiger der Antwortschlange (nicht dargestellt), steuert.
Die Einträge
der Antwortschlange 27 werden nur durch den Host-Mikroprozessor 20 aus
der Schlange herausgenommen, welcher den auswärts weisenden Zeiger der Antwortschlange
(nicht dargestellt), steuert.
-
EINTRAGSTYPEN-ANFORDERUNGSSCHLANGE
-
Jeder
Eintrag in der Anforderungsschlange 26 kann einen IOCB
halten. Ein IOCB enthält
Befehle und Daten, die der Host-Adapterprozessor 50 aus dem
Host-Speicher 25 holt und ausführt. Es kann verschiedene Typen
von IOCBs geben. In einer Konfiguration hat die Anforderungsschlange 26 zumindest
zwei IOCB-Eintragstypen: COMMAND und EXTENDED COMMAND (Befehl und
erweiterter Befehl). 3A veranschaulicht eine Konfiguration
eines Eintragstyps 100 COMMAND und 3B veranschaulicht
eine Konfiguration eines Eintragstyps 120 EXTENDED COMMAND.
Die Anforderungsschlange 26 kann auch andere Typen auweisen,
wie z. B. CONTINUATION, MARKER und SCAM OPERATION (nicht dargestellt).
-
Der
Eintragstyp 100 COMMAND (3A) fordert
den Transport eines SCSI-Befehls an ein angegebenes I/O-Gerät 80-86 an.
In 3A weist der Eintragstyp 100 COMMAND
zumindest sieben Datenstrukturen auf: einen Eintragstyp 102,
eine Handhabung 104, ein Ziel 106, Steuerflags 108,
einen SCSI-Befehlsbeschreibungsblock (CDB) 118, eine oder mehrere
Datensegmentadressen 110, 114 und eine oder mehrere
Datensegmentlängen 112, 116.
-
In 3A identifiziert
der Eintragstyp 102 den Eintrag als einen Eintragstyp 100 COMMAND, im
Gegensatz zu irgendeinem anderen Eintragstyp, wie z. B. EXTENDED
COMMAND. In einer Konfiguration ist die Nummer des Eintragstyps
für einen COMMAND-Eintrag „01H". Die Handhabung 104 ist eine
Kennung, die durch den Softwaretreiber 30 (1)
als Teil eines Abschlussverarbeitungsvorgangs verwendet wird, um
dem Mikroprozessor 20 zu melden, dass ein IOCB, der zu
einer bestimmten Handhabung 104 gehört, abgeschlossen ist. In einer Konfiguration
ist die Handhabe 16 Bit lang. In einer anderen Konfiguration ist
die Handhabe 104 32 Bits lang. Das Ziel 106 kennzeichnet
ein bestimmtes Ziel- oder I/O-Gerät 80-86,
das den I/O-Befehl empfängt. In
einer Konfiguration ist das Ziel 106 eine SCSI-ID einer
Brückensteuerung
(nicht dargestellt), oder ein I/O-Gerät 80-86.
-
Die
Steuerflags 108 geben der Firmware 62 Weisung,
wie der COMMAND-Eintrag 100 ausgeführt werden soll. Der SCSI-CDB 118 enthält CDB-Bytes,
die während
einer COMMAND-Phase
an das Ziel- oder das I/O-Gerät 80-86 gesendet
werden. Die Datensegmentadresse(n) 110, 114 ist
eine Startadresse eines Datensegmentes, die in dem Speicher 25 gespeichert
wird, der zu einer bestimmten Lese- oder Schreib-I/O-Adresse gehört. Das
Datensegment 112, 116 gibt die Anzahl von Datenbytes
an, die zu oder von der Datensegmentadresse übertragen werden sollen, die
in dem Speicher 25 gespeichert sind und zu der betreffende
Lese- oder Schreib-I/O-Anforderung
gehört.
-
Der
Eintragstyp 120 EXTENDED COMMAND gibt einen SCSI-Befehl
an ein angegebenes I/O-Gerät 80-86 aus.
In einer Konfiguration enthält der
Eintragstyp 120 EXTENDED COMMAND einen Eintragstyp 122,
eine Handhabe 124, ein Ziel 126, Steuerflags 128 und
ein SCSI-CDB 130, ebenso wie der Eintragstyp 100.
In einer Konfiguration ist die Nummer des Eintragstyps für einen
Eintrag EXTENDED COMMAND „05H".
-
EINTRAGSTYPEN-ANTWORTSCHLANGE
-
Jeder
Eintrag in der Antwortschlange 27 kann einen IOSB erhalten.
Ein IOSB enthält
Statusinformationen, welche den Host-Mikroprozessor 20 informiert,
dass eine I/O-Anforderung abgeschlossen ist und ob die I/O-Anforderung
erfolgreich war oder nicht. Es kann unterschiedliche Typen von IOSBs
geben. In einer Konfiguration hat die Antwortschlange 27 zumindest
3 IOSB-Eintragstypen:
STATUS, SUCCESSFUL STATUS mit 16 Bit Handhabung und SUCCESSFUL STATUS
mit 32 Bit Handhabung. 3C veranschaulicht eine Konfiguration
eines Eintragstyps 140 STATUS. 6A zeigt
eine Konfiguration eines Eintragstyps 370 SUCCESSFUL STATUS
mit 16 Bit-Handhabungen. 6B zeigt
einen Eintragstyp 380 SUCCESSFUL STATUS mit 32 Bit-Handhabungen.
Die Antwortschlange 27 kann andere Eintragstypen, wie z.
B. EXTENDED STATUS („erweiterter
Status") – (nicht
dargestellt), haben.
-
Der
Eintragstyp 140 STATUS (3C) meldet
den Abschluss eines Eintrages 100 COMMAND oder eines Eintrages 120 EXTENDED
COMMAND und meldet auch, ob die I/O-Anforderung erfolgreich war oder nicht.
Die Eintragstypen 370, 380 SUCCESSFUL STATUS melden
die Handhabungen von mehrfachen IOCBs, welche erfolgreich waren.
Jeder Eintrag 100 COMMAND kann zu einem entsprechenden
Status-Eintrag 140 oder einem Eintrag 370, 380 SUCCESSFUL
STATUS in der Antwortschlange 27 führen, um den Host-Mikroprozessor 20 von
dem Abschluss des Befehls zu unterrichten. Die Handhabung 104 eines
Eintrags 100 COMMAND oder eines Eintrags 120 EXTENDED
COMMAND wird in einem entsprechenden Eintrag 140 STATUS
oder 370, 380 SUCCESSFUL STATUS in der Antwortschlange 27 unverändert zurückgeliefert.
-
In 3C enthält der Eintragstyp 140 STATUS
einen Eintragstyp 142 und eine Handhabe 144, ebenso
wie der Eintragstyp 100 COMMAND. In einer Konfiguration
ist die Nummer des Eintragstyps für einen Statuseintrag 140 „03H". Der Status-Eintragstyp 140 enthält weiterhin
zwei weitere Datenstrukturen: ein Abschlussstatusfeld 146 und
ein Anforderungsdatenfeld 152. Das Abschlussstatusfeld 146 meldet, ob
ein Transportfehler aufgetreten ist und gibt eine Beschreibung des
Fehlers, falls einer aufgetreten ist. Das Anforderungsdatenfeld 152 enthält jegliche
Daten, die durch den Host-Mikroprozessor von einem bestimmten I/O-Gerät 80-86 angefordert
wurden.
-
In 6A enthält der Eintragstyp 370 SUCCESSFUL
STATUS einen Eintragstyp 372 und eine Handhabungszahl 374 und
eine Anzahl von 16 Bit-Handhabungen, welche bestimmten IOCBs entsprechen,
die erfolgreich abgeschlossen wurden. In einer Konfiguration ist
die Nummer des Eintragstyps für
einen Eintrag 370 SUCCESSFUL STATUS mit 16 Bit-Handhabungen „22H". In 6B enthält der Eintragstyp
von 80 SUCCESSFUL STATUS einen Eintragstyp 382, eine Handhabungszahl 384 und
eine Anzahl von 32 Bit-Handhabungen, welche den betreffenden IOCBs
entsprechen, die erfolgreich abgeschlossen wurden. In einer Konfiguration
ist die Nummer des Eintragstyps für einen Eintrag 380 SUCCESSFUL
STATUS mit 32 Bit-Handhabungen „21H". In einer Konfiguration ist die Reihenfolge
der Handhabungen in den Eintragstypen 370, 380 SUCCESSFUL
STATUS dieselbe wie dann, wenn jeder IOCB erfolgreich abgeschlossen
wurde.
-
Die
in den 3A-3C und 6A-6B dargestellten
Eintragstypen werden gemäß einer
Ausführungsform
des Computersystems 10 verwendet. Andere Ausführungsformen
des Computersystems 10 können unterschiedliche Eintragstypen
als die hier beschriebenen (COMMAND 100, EXTENDED COMMAND 120,
STATUS 140, SUCCESSFUL STATUS 370, 380)
sein, oder sie können
dieselben Eintragstypen mit anderen Datenstrukturen sein.
-
MAILBOXES
-
4 veranschaulicht
eine Konfiguration zweier Sätze
(160, 165) interner Mailboxregister 180-187, 190-197 mit
Schnittstellenregistern 52 nach 1. Der Adapter 45 weist
weiterhin einen Zeitgeber 245 auf, wie er in 4 dargestellt
ist. In einer Ausgestaltung weisen die Schnittstellenregister 250 weiterhin
ein Host-Befehls- und Steuerregister 170 und ein PCI-Steuerregister 175 auf.
-
4 veranschaulicht
auch einen Satz von Variablen, die in dem RAM 65 der Hostadapterplatine 40 gespeichert
und durch den RISC-Code oder Firmware 62 verwendet werden.
Diese Variablen umfassen TOTAL_REMAIN 220, TOTAL_COMPLETE 225, DEV_1_COUNT 230,
DEV_2_COUNT 231, DEV_3_COUNT 232 etc. Nur drei DEV_n_COUNT-Variablen 230, 231, 232 sind
für Zwecke
der Veranschaulichung in 4 dargestellt worden, jedoch
gibt es in einer bevorzugten Konfiguration zumindest eine DEV_n_COUNT-Variable
für jedes
periphere I/O-Gerät 80-86.
In einer anderen Ausführungsform
sind die Variablen TOTAL_REMAIN, TOTAL_COMPLETE, DEV_1_COUNT, DEV_2_COUNT,
DEV_3_COUNT etc. Register unter den Schnittstellenregistern 52 in dem
Adapter 45.
-
In
einer Konfiguration sind die Mailboxregister 180-187, 190-197 physikalische
Hardwareregister, auf welche der Host-Mikroprozessor 20 und
der Adapterprozessor 50 zugreifen können. In einer Konfiguration
ist jedes Mailboxregister 180-187, 190-197 16
Bit lang. Der erste Satz 160 von Mailboxregistern 180-187 weist
eingehende Mailboxregister auf, in welche der Host-Mikroprozessor 20 schreiben
kann und welche durch die Adapter-Firmware 62 lesbar sind
(1). Die eingehenden Mailboxregister 180-187 werden
verwendet, um Informationen von dem Host-Mikroprozessor 20 zu
dem Adapterprozessor 50 und/oder zu der Firmware 62 zu übertragen.
-
Der
zweite Satz 165 von Mailboxregistern 190-197 besteht
aus ausgehenden Mailboxregistern, in welche durch die Adapter-Firmware 62 geschrieben
werden kann und welche durch den Host-Mikroprozessor 20 lesbar
sind. Die Ausgangsmailboxregister 190-197 werden
verwendet, um Status- bzw. Zustandsinformationen von dem Adapterprozessor 50 und/oder
der Firmware 62 an den Hostmikroprozessor 20 zu übertragen.
-
In
beiden Mailboxregistersätzen 160, 165 nach 4 enthält das Register
4 Zeiger, die zu der Anforderungsschlange 26 gehören und
das Register 5 enthält
Zeiger, die zu der Antwortschlange 27 gehören. Das
Register 4 des Eingangsmailboxregistersatzes 160 enthält den Eingangszeiger 87 für die Anforderungsschlange 26 (1-2B),
in welchen der Host-Mikroprozessor 20 schreiben
kann, welcher durch den Adapterprozessor 50 (oder die Firmware 62)
lesbar ist. Das Register 5 des Ausgangsmailboxregistersatzes 165 enthält den Ausgangszeiger 88 für die Anforderungsschlange 26,
in welche der Adapterprozessor 50 (oder die Firmware 62)
beschreiben kann, und welcher durch den Host-Mikroprozessor 20 gelesen
werden kann.
-
Das
Register 4 des Eingangsmailboxregistersatzes 160 enthält den Ausgangszeiger
der Antwortschlange 27 (1), in welchem
der Host-Mikroprozessor 20 schreiben kann und welcher durch
den Adapterprozessor 50 (oder die Firmware 62)
gelesen werden kann. Das Register 5 für den Ausgangsmailboxregistersatz 165 enthält den Eingangszeiger
der Antwortschlange 27, in welchem der Adapterprozessor 50 (oder
die Firmware 62) schreiben kann und welcher durch den Host-Mikroprozessor 20 lesbar
ist.
-
In 4 können die
Register 0-3, 6-7 des Eingangsmailboxregistersatzes 160 Befehlsinformationen
von dem Host-Mikroprozessor an den Adapeterprozessor 50 (oder
die Firmware 62) enthalten. Die Register 1-3, 6-7 des Ausgangsmailboxregistersatzes
sind so ausgestaltet, dass sie I/O-Statusinformationen von der Adapterfirmware 62 an
den Hostmikroprozessor 20 enthalten.
-
In
einer Ausgestaltung können
die Register 1-3, 6-7 des Ausgangsmailboxregistersatzes 165 eine
oder mehrere Handhabungen von STATUS-Einträgen 140 (3C)
in der Antwortschlange 27 (1) enthalten,
oder Handhabungen von erfolgreich abgeschlossenen COMMAND-Einträgen 100 (3A)
oder EXTENDED COMMAND-Einträgen 120 (3B)
in der Anforderungsschlange 26 (2A-2B)
des Host-Speichers 25. In einer Konfiguration wird die
Reihenfolge der Handhabungen in den Registern 1-3, 6-7 des Ausgangsmailboxregistersatzes 165 durch
den Zeitpunkt festgelegt, wann jeder IOCB erfolgreich abgeschlossen
ist.
-
In
einer bevorzugten Ausführungsform
erhält das
Register 0 des Ausgangsmailboxregistersatzes 165 einen
eindeutigen Code, welcher den Host-Mikroprozessor 20 über ein
Ereignis informiert, das zu einem Interrupt gehört, der durch die Adapter-Firmware 62 an
den Host-Mikroprozessor 20 gesendet wurde.
In einer Konfiguration ist das Mailboxregister 0 des Ausgangsmailboxregistersatzes 165 dafür reserviert,
anzuzeigen, welcher Informationstyp sich in den fünf verfügbaren Mailboxausgangsregistern
1-3, 6-7 befindet. In einer bevorzugten Ausgestaltung informiert
die Mailbox 0 des Ausgangsmailboxregistersatzes 165 den
Host-Mikroprozessor 20 über
die Anzahl von Ausgangsmailboxregistern 1-3, 6-7, welche aktuell
Handhabungen von IOSBs in der Antwortschlange 27 enthalten
(oder erfolgreich abgeschlossene IOCBs in der Anforderungsschlange 26)
und die Größe der IOSB
(oder IOCB-)Handhabungen, beispielsweise 16 Bit oder 32 Bit.
-
Beispielsweise
kann die Mailbox 0 in einer Ausgestaltung eine Nummer „802x" oder „803x", enthalten, so dass „803x" bedeutet, dass eine
Anzahl x von 16 Bit IOSBs oder erfolgreich abgeschlossenen IOCB-Handhabungen
in den verfügbaren
Ausgangsmailboxregistern 1-3, 6-7 vorhanden ist. „802x" bedeutet, dass es
eine Anzahl x von 32 Bit IOSB oder erfolgreich abgeschlossenen IOCB-Handhabungen in
den verfügbaren
Ausgangsmailboxregistern 1-2, 6-7 gibt. Die Mailbox 0 des Ausgangsmailboxregistersatzes 165 kann
also Informationen enthalten, welche bis zu fünf 16 Bit-Handhabungen oder
bis zu zwei 32 Bit-Handhabungen in den fünf verfügbaren Ausgangsmailboxregistern
1-3 und 6-7 beschreibt.
-
BETRIEB DER MAILBOXES UND DER ANFORDERUNGS-
UND ANTWORTSCHLANGE
-
Die
Verwendung und die Arbeitsweise der Anforderungs- und Antwortschlangen 26, 27 und
der Mailboxregister 180-187, 190-197 wird
unter Bezug auf die 1-4 beschrieben.
Der Host-Mikroprozessor 20 lädt einen oder mehrere IOCBs
(Eintragstypen 100, 120 COMMAND oder EXTENDED COMMAND
nach den 3A-3B) in
die als nächste
verfügbaren
Einträge
der Anforderungsschlange 26 (2A-2B),
beginnend mit dem ersten verfügbaren
Eintrag, der durch die Eingangszeigervariable 350 der Anforderungsschlange
angegeben wird (1). Der Host-Mikroprozessor 20 setzt
die Eingangszeigervariable 350 der Anforderungsschlange
um die Anzahl der neuen Einträge, die
in die Anforderungsschlange 26 geladen wurden, herauf.
Die heraufgesetzte Eingangszeigervariable 350 der Anforderungsschlange
wird zur Adresse des nächsten
verfügbaren
Eintrages in der Anforderungsschlange 26.
-
Der
Host-Mikroprozessor 20 schreibt dann den neuen Wert der
heraufgesetzten Eingangszeigervariable 350 der Anforderungsschlange
in das Mailboxregister 4 184 des Eingangsmailboxregistersatzes 160 (4).
Die Firmware 62 der Host-Adapterplatine 40 (1)
fragt das Mailboxregister 4 des Eingangsmailboxregistersatzes 160 ab
und vergleicht den Wert in dem Mailboxregister 4 mit der Zeigereingangsvariablen 360 der
Anforderungsschlange, der in dem RAM 65 gespeichert ist.
Wenn der Wert in dem Mailboxregister 4 des Eingangsmailboxregistersatzes 160 von
dem der internen Eingangszeigervariablen 360 der Anforderungsschlange,
welche in dem Speicher 65 gespeichert ist, verschieden ist,
so bestätigt
die Firmware 62, dass der Host-Mikroprozessor 20 einen
oder mehrere neue Einträge der
Anforderungsschlange 26 hinzugefügt hat. Die Firmware 62 verändert die
Zeigereingangsvariable 360 der Anforderungsschlange, die
in RAM 65 gespeichert ist, so dass sie gleich den neuen
in dem Mailboxregister 4 des Eingangsmailboxregistersatzes 160 gespeicherten
Wert ist.
-
Wenn
die Host-Adapter-Firmware 62 bereit ist, in der Anforderungsschlange 26 einen
oder mehrere IOCBs zu verarbeiten, holt die Host-Adapter-Firmware 62 die
IOCBs aus der Anforderungsschlange 26 (und/oder speichert
diese zeitweise), beginnen mit dem Eintrag, der durch die Ausgangszeigervariable 362 der
Anforderungsschlange, welche in dem Speicher 65 gespeichert
ist, bezeichnet wird (4). Die Firmware 62 setzt
dann die Ausgangszeigervariable 362 der Anforderungsschlange um
die Anzahl der geholten IOCBs herauf. Die Firmware 62 schreibt
die heraufgesetzte Ausgangszeigervariable 362 der Anforderungsschlange
in das Mailboxregister 4 194 des Ausgangsmailboxregistersatzes 165.
Der Host-Mikroprozessor 20 kann das Mailboxregister 4 des
Ausgangsmailboxregistersatzes 165 lesen, um die Position
des Ausgangszeigers 88 der Anforderungsschlange 26 zu
bestimmen.
-
Der
Hostadapter 45 verarbeitet die IOCB(s) aus der Antwortschlange 26,
indem er auf den zweiten Bus 70 zugreift und die angeforderte
Information in die peripheren I/O-Geräte 80-86 schreibt
oder aus diesen holt. In einer bevorzugten Ausführungsform beginnt der Host-Adapter 45 während einer
I/O-Leseanforderung, die geholten Daten aus dem angegebenen I/O-Gerät 80-86 direkt
an Speicherpositionen in dem Speicher 25 zu übertragen
(1), welche durch die Datensequenzadressen 110, 114 eines COMMAND-Eintrags
(3A, 3B) bezeichnet sind.
-
BERICHTEN VON I/O-ABSCHLÜSSEN
-
Wenn
die Information über
den Abschluss eines I/O-Befehls für die Verarbeitung bereit ist
(innerhalb des Ausgangsmailboxregistersatzes 165 oder der
Antwortschlange 27) und wenn die geholten Daten für die Verarbeitung
bereit sind (in dem Speicher 25), so meldet der Host-Adapter 45 dies
dem Host-Mikroprozessor 20. Es gibt drei Verfahren für den Adapter 45 über abgeschlossene
I/O-Anforderungen zu berichten: (1) durch Anordnen der Handhabungen
erfolgreich abgeschlossener IOCBs in den Ausgangsmailboxregistern
1-3, 6-7, 191-193, 196-197 (4),
(2) durch Erzeugen von STATUS-Eintragstypen 140 (3C)
und Übertragen derselben
an die Antwortschlange 27 und/oder Anordnen der Handhabungen
der STATUS-Einträge 140 in
den Ausgangsmailboxregistern 1-3, 6-7, 191-193, 196-197 oder
(3) durch Erzeugen von SUCCESSFUL STATUS-Eintragstypen 370, 380 und Übertragen
derselben in die Antwortschlange 27 (1).
-
Jedes
der drei Verfahren, welche im Folgenden beschrieben werden, ist
in der Lage, mit einem einzelnen Interrupt für den Mikroprozessor 20 und das
Interrupt-Handhabungsprogramm 32 (1) mehrere
I/O-Abschlüsse
an den Host-Mikroprozessor 20 zu melden. Das Verfahren
zum Melden mehrerer abgeschlossener I/O-Anforderungen an den Hostmikroprozessor 20 mit
einem einzelnen Interrupt wird „schnelle Bekanntmachung" genannt. Die schnelle
Bekanntmachung oder Bekanntmachung kann sich auch auf das Anordnen
einer oder mehrerer Handhabungen erfolgreich abgeschlossener IOCBs
in den Ausgangsmeldungsregistern 1-3, 6-7, 191-193, 196-197 (4)
beziehen, ohne Eintragstypen 140, 370, 380 STATUS
oder SUCCESSFUL STATUS zu erzeugen und zu übertragen.
-
Ein
erstes Verfahren zum Melden von I/O-Abschlüssen an den Host-Mikroprozessor 20 besteht
für die
Adapter-Firmware 62 darin, die Handhabungen erfolgreich
abgeschlossener IOCBs in den Ausgangsmailboxregistern 1-3, 6-7, 191-193, 196-197 (4)
anzuordnen. Wenn die abgeschlossenen I/O-Anforderungen irgendwelche
Lesevorgänge
enthalten haben, so kann der Host-Mikroprozessor 20 dann
die Daten verarbeiten, die aus den I/O-Geräten 80-86 geholt
und in dem Speicher 25 gespeichert wurden. Der Host-Mikroprozessor 20 kann die
Mailbox 0 aus dem ausgehenden Mailboxregistersatz 165 lesen,
um die Anzahl der Ausgangsmailboxregister 1-3, 6-7 festzustellen, welche Handhabungen
von erfolgreich abgeschlossenen IOCBs die Größe der IOCB-Handhabungen, beispielsweise
16 Bit oder 32 Bit, enthalten.
-
Ein
zweites Verfahren zum Melden von I/O-Abschlüssen an den Host-Mikroprozessor 20 besteht
für die
Adapter-Firmware 62 darin, Statuseintragstypen 140 (3C)
in dem RAM 65 zu erzeugen und die STATUS-Eintragstypen 140 über einen direkten
Speicherzugriff (DMA) an die Antwortschlange 27 zu übertragen.
Insbesondere überträgt die Firmware 62 die
STATUS-Eintragstypen 140 in
einen oder mehrere verfügbare
Einträge
in der Antwortschlange 27 (1), beginnend
mit einem Eintrag, der durch die Eingangszeigervariable 364 der
Antwortschlange gekennzeichnet ist, welche in dem RAM 65 gespeichert
ist. Die STATUS-Eintragstypen 140 ermöglichen es der Firmware 62, über erfolgreiche
ebenso wie über
nicht erfolgreiche, abgeschlossene I/O-Anforderungen zu berichten.
-
Nach
dem Übertragen
eines oder mehrerer Eintragstypen 140 STATUS, setzt die
Firmware 62 die Eingangszeigervariable 364 der
Antwortschlange um die Anzahl der Eintragstypen 140 STATUS
herauf, welche an die Antwortschlange 27 übertragen wurden.
Die Firmware 62 schreibt dann den Wert der heraufgesetzten
Eingangszeigervariablen 364 der Antwortschlange in das
Mailboxregister 5 195 des Ausgangsmailboxregistersatzes 165 für das Lesen durch
den Host-Mikroprozessor 20. In einer Ausgestaltung ordnet
die Firmware 62 auch die Handhabung 144 der STATUS-Eintragstypen 140 in
den verfügbaren
Ausgangsmailboxregistern 1-3, 6-7, 191-193, 196-197 (4)
für das
Lesen durch den Host-Mikroprozessor 20 an.
-
Eine
dritte Methode zum Melden von I/O-Abschlüssen an den Host-Mikroprozessor 20 besteht für die Adapter-Firmware 62 darin,
Eintragstypen 370, 380 SUCCESSFUL STATUS in dem
RAM 65 zu erzeugen und diese (370, 380)
an die Antwortschlange 27 (1) über einen
DMA zu übertragen.
Wie oben beschrieben, kann jeder Eintragstyp 370, 380 SUCCESSFUL
STATUS (6A und 6B) Handhabungen
für mehrere
erfolgreich abgeschlossene I/O-Anforderungen
enthalten. Die Firmware 62 setzt dann die Eingangszeigervariable 364 der
Antwortschlange um die Anzahl der Eintragstypen 370, 380 SUCCESSFUL
STATUS herauf, die an die Antwortschlange 27 übertragen
wurden. Die Firmware 62 schreibt dann den Wert der heraufgesetzten
Eingangszeigervariablen 364 der Antwortschlange in das
Mailboxregister 5 195 des Ausgangsmailboxregistersatzes 165 für das Lesen
durch den Host-Mikroprozessor 20.
-
In
einer Konfiguration ist es schneller, die Handhabungen erfolgreich
abgeschlossener IOCBs über
den Ausgangsmailboxregistersatz 165 zu melden anstatt Eintragstypen 140, 370, 380 STATUS oder
SUCCESSFUL zu erzeugen und diese Eintragstypen 140, 370, 380 an
die Antwortschlange 27 zu übertragen. Anderseits kann
die Anzahl von erfolgreichen I/O- Anforderungen,
welche über
die Ausgangsmailboxregister 1-3, 6-7 berichtet werden, auf die Anzahl
der verfügbaren
Register 1-3, 6-7 begrenzt sein, die in der in 4 dargestellten
Konfiguration 5 beträgt.
-
Außerdem liefert
das Berichten erfolgreicher IOCBs über die Ausgangsmailboxregister
1-3, 6-7 dem Host-Mikroprozessor 20 keine
Informationen darüber,
welche I/O-Anforderungen nicht erfolgreich waren. In einer bevorzugten
Ausführungsform
geht jedoch der Host-Mikroprozessor 20 und/oder der Softwaretreiber 30 davon
aus, dass eine I/O-Anforderung nicht erfolgreich war, wenn der Host-Adapter 45 nicht
innerhalb einer vorbestimmten Zeitdauer einen erfolgreichen I/O-Abschluss liefert.
Der Softwaretreiber 30 kann dann mit einem Fehlerreparaturvorgang
beginnen oder die I/O-Anforderung erneut senden.
-
In
einer bevorzugten Ausführungsform
kann der Host-Adapter 45 entweder die Antwortschlange 27 oder
die Ausgangsmailboxregister 1-3, 6-7, 191-193, 196-197 verwenden,
um abgeschlossene I/O-Anforderungen zu berichten, je nach der Anzahl (mehr
als oder gleich 5) und dem Zustand (erfolgreich/nicht erfolgreich)
der abgeschlossenen I/O-Anforderungen.
-
INTERRUPT
-
Es
gibt zwei Verfahren bzw. Methoden, mit welchen der Host-Adapter 45 oder
die Firmware 62 dem Host-Mikroprozessor 20 oder
dem Interrupt-Handhabungsprogramm 32 melden können, dass
I/O-Anforderungen abgeschlossen worden sind. In einer bevorzugten
Ausführungsform
macht der Host-Adapter 45 den Host-Mikroprozessor 20 aufmerksam
durch Erzeugen eines Hardware-Interrupts und Berichten der abgeschlossenen
I/O-Anforderungen. Alternativ kann der Host-Mikroprozessor 20 ein
Bit in einem Statusregister (nicht dargestellt), welches zu dem
ersten Bus 35 gehört,
abfragen. Das Verfahren des Erzeugens eines Interrupts an dem Host-Mikroprozessor 20 wird
nachstehend beschrieben.
-
In
einer Konfiguration liest der Host-Mikroprozessor 20, wenn
er einen Interrupt erhält,
das Register 0 des Ausgangsmailboxregistersatzes 165, um festzustellen,
welche der drei zuvor erwähnten
Methoden der Meldung von I/O-Abschlüssen durch die Adapter-Firmware 62 verwendet
wird. Ein eindeutiger Code oder eine Sequenz, welche in der Lage
ist, in dem Mailboxregister 0 190 gespeichert zu werden, wird
verwendet, um jeweils eine der drei zuvor erwähnten Methoden zu kennzeichnen.
-
Wenn
die Firmware 62 die erste Methode verwendet, informiert
das Register 0 des Ausgangsmailboxregistersatzes 165 (4)
den Host-Mikroprozessor 20 darüber, wie viele erfolgreich
abgeschlossene IOCB-Handhabungen sich in den Mailboxregistern 1-3,
6-7 des Ausgangsmailboxregistersatzes 165 befinden. Der
Host-Mikroprozessor 20 liest dann die Mailboxregister 1-3,
6-7 des Ausgangsmailboxregistersatzes 165, um festzustellen,
welche IOCBs erfolgreich abgeschlossen wurden.
-
Wenn
die Firmware 62 die zweite oder dritte Methode verwenden,
so liest der Host-Mikroprozessor 20 das
Mailboxregister 5 des Ausgangsmailboxregistersatzes 165 (4),
um den Eingangszeiger der Antwortschlange zu bestimmen. Der Host-Mikroprozessor 20 schreibt
den in dem Ausgangsmailboxregister 5 gefundenen Wert in die Eingangszeigervariable 356 der
Antwortschlange, welche in dem Speicher 25 gespeichert
ist (1). Der Host-Mikroprozessor 20 liest
dann die IOSB-Einträge
in der Antwortschlange 27 (1), beginnend
mit der Ausgangszeigervariablen 56 der Antwortschlange,
die in dem Speicher 25 gespeichert ist, bis zu dem Eingangszeigerwert
der Antwortschlange in dem Mailboxregister 5 des Ausgangsmailboxregistersatzes 165.
Der Host-Mikroprozessor 20 verarbeitet die IOSB(s) in der
Antwortschlange 27, setzt die Ausgangszeigervariable 356 der
Ausgangsschlange um die Anzahl der verarbeiteten IOSBs herauf und schreibt
den Wert der heraufgesetzten Ausgangszeigervariablen 356 der
Antwortschlange in das Mailboxregister 5 185 des Eingangsmailboxregistersatzes 160 (4).
-
EINE AUSFÜHRUNGSFORM DES ADAPTIVEN ALGORITHMUS
-
In 4 werden
die Variablen TOTAL_REMAIN 220, TOTAL_COMPLETE 225, DEV_1_COUNT 230,
DEV_2_COUNT 231, DEV_3_COUNT 232 etc. bestimmt
und durch die Firmware 62 aktualisiert. DEV_1_COUNT 230, DEV_2_COUNT 231 und
DEV_3_COUNT 232 sind Zahlvariable für das I/O-Gerät 1 80 (1)
bzw. das I/O-Gerät
2 81 bzw. I/O-Gerät
3 82. Es gibt zumindest eine Zahl- bzw. Zählervariable
(nicht dargestellt) für jedes
I/O-Gerät 80-86.
Wenn es beispielsweise 15 I/O-Geräte gibt, so gibt es zumindest
15 Zählervariablen.
-
Die
Variable 220 TOTAL_REMAIN zählt die Anzahl der gesamten
I/O-Anforderungen, die durch die I/O-Geräte 80-86 noch
nicht verarbeitet worden sind. Die Variable 225 TOTAL_COMPLETE
zählt die Anzahl
der gesamten I/O-Anforderungen, welche durch die I/O_Geräte 80-86 abgeschlossen
worden sind, jedoch noch nicht an den Host-Mikroprozessor 20 gemeldet
worden sind.
-
Die
Variable 230 DEV_1_COUNT zählt die Anzahl der verbleibenden
I/O-Anforderungen, welche empfangen, jedoch noch nicht durch das
erste I/O-Gerät 80 abgeschlossen
wurden. Die DEV_2_COUNT- und DEV_3_COUNT-Variablen 231, 232 geben
die Anzahl der verbleibenden I/O-Anforderungen an, die durch die
zweiten bzw. dritten I/O-Geräte 81 bzw. 82 empfangen,
jedoch noch nicht abgeschlossen wurden. Entsprechende DEV_n_COUNT-Variablen
geben die Anzahl der übrigen
I/O-Anforderungen an, die jeweils durch die 4. bis 7. I/O-Geräte 83-86 empfangen,
jedoch noch nicht abgeschlossen wurden.
-
5 veranschaulicht
eine Ausführungsform
eines Verfahrens, welches durch die Host-Adapterplatine 40 verwendet
wird, um die Abschlussberichte über
I/O-Anforderungen zu kombinieren und die Anzahl von Interrupts für den Host-Mikroprozessor 20 zu
reduzieren. In einer Ausgestaltung ist das Verfahren nach 5 Teil
des RISC-Codes oder der Firmware 62.
-
Die
Verwendung und die Arbeitsweise des Verfahrens nach 5 wird
unter Bezug auf die 1 und 4 beschrieben.
In 5 initialisiert in einem Start-/Fortsetzungsblock
der Softwaretreiber 30 des Host-Systems 15 (1)
den Adapterprozessor 50 und lädt den RISC- Code oder die Firmware 62.
Nach der Initialisierung ist der Adapter 45 bereit für die Verarbeitung
eingehender I/O-Anforderungen von dem Host-Mikroprozessor 20.
-
In
einem Prozessblock 305 setzt die Firmware 62 (1)
die Variable 220 TOTAL_REMAIN für jede neue I/O-Anforderung
oder jeden Befehl (IOCB), der durch den Host-Mikroprozessor 20 in der Anforderungsschlange 26 platziert
wird, um eins herauf. TOTAL_REMAIN behält bzw. speichert den Wert der
Zahl der I/O-Befehle, die für
die I/O-Geräte 80-86 für die Verarbeitung
verblieben sind. Die Firmware 62 zählt außerdem die Variable 220 TOTAL_REMAIN um
die Anzahl der I/O-Anforderungen herab, die durch den Adapter 45 und
die I/O-Geräte 80-86 verarbeitet
wurden.
-
In
einem Verarbeitungsblock 310 setzt die Firmware die Variable 225 TOTAL_COMPLETE
für jede
I/O-Anforderung, die durch die I/O-Geräte 80-86 abgeschlossen,
jedoch noch nicht an den Host-Mikroprozessor 20 berichtet
wurde, um eins herauf. In einem Entscheidungsblock 315 stellt
die Firmware 62 fest, ob die Anzahl nicht berechtigter
I/O-Abschlüsse (TOTAL_COMPLETE 225)
größer ist
als oder gleich groß ist
wie die Anzahl der verbleibenden I/O-Anforderungen TOTAL_REMAIN 220.
Dies wird ein „erster Auslöser" genannt, da nämlich dann,
wenn TOTAL_COMPLETE 225 größer ist als oder gleich groß ist wie
TOTAL_REMAIN 220, die Firmware 62 einen Interrupt
für den
Host-Mikroprozessor 20 erzeugt und alle abgeschlossenen,
jedoch bis dahin noch nicht berichteten I/O-Anforderungen in einem Prozessblock 340 meldet.
Die Firmware 62 kehrt dann zu dem Prozessblock 300 zurück und fährt fort, TOTAL_REMAIN 220 und
TOTAL_COMPLETE 225 entsprechend herauf- und herabzusetzen.
-
Wenn
TOTAL_COMPLETE 225 geringer ist als TOTAL_REMAIN 220,
so stellt die Firmware 62 in einem Entscheidungsblock fest,
ob der Zeitgeber 245 (4) gestartet
worden ist. Wenn der Zeitgeber 245 gestartet worden ist,
so stellt die Firmware 62 in einem Entscheidungsblock 325 fest,
ob der Zeitgeber 225 abgelaufen ist. Dies wird ein „zweiter
Auslöser" genannt, da nämlich dann,
wenn der Zeitgeber 245 abgelaufen ist, die Firmware 62 einen
Interrupt für den
Host-Mikroprozessor 20 erzeugt und in dem Prozessblock 340 alle
abgeschlossenen, jedoch noch nicht berichteten I/O-Anforderungen
für alle
I/O-Geräte 80-86 berichtet.
Die Firmware 62 löscht
auch die Variable 225 TOTAL_COMPLETE auf null. Die Firmware 62 kehrt
dann zu dem Prozessblock 300 zurück und fährt fort, TOTAL_REMAIN 220 und TOTAL_COMPLETE 225 entsprechend
herauf- und herabzusetzen. Wenn der Zeitgeber 245 noch
nicht abgelaufen ist, so kehrt die Firmware 62 zu dem Prozessblock 300 zurück und fährt fort,
TOTAL_REMAIN und TOTAL_COMPLETE entsprechend herauf- und herabzusetzen.
-
In
einem Entscheidungsblock 330 stellt die Firmware 62,
wenn der Zeitgeber 245 noch nicht gestartet ist, fest,
ob die Anzahl der verbleibenden (nicht abgeschlossenen) I/O-Anforderungen oder
Befehle, die noch für
die Verarbeitung durch irgendeines der einzelnen I/O-Geräte 80-86 verblieben
sind, von eins auf null herabgesetzt worden ist. Insbesondere stellt
die Firmware 62 fest, ob irgendeine der Variablen DEV_1_COUNT 230,
DEV_2_COUNT 231 etc. einen Übergang von eins nach null
durchgeführt
hat. Wenn DEV_n_COUNT für
irgendeines der I/O-Geräte 80-86 gleich
null ist, so hat dieses I/O-Gerät 80-86 keine
weiteren Befehle zu verarbeiten. Wenn eine der Variablen DEV_1_COUNT 230,
DEV_2_COUNT 231 etc. einen Übergang von eins nach null
durchgeführt
hat, startet die Firmware 62 in einem Prozessblock 335 den
Zeitgeber 245. Dann kehrt die Firmware 42 zu dem
Prozessblock 300 zurück
und fährt fort,
TOTAL_REMAIN 220 und TOTAL_COMPLETE 225 entsprechend
herauf- und herabzusetzen. Wenn keine der Variablen DEV_1_COUNT 230, DEV_2_COUNT 231 etc.
einen Übergang
von eins nach null durchgeführt
hat, so kehrt die Firmware 62 zu dem Prozessblock 300 zurück und fährt fort, TOTAL_REMAIN 220 und
TOTAL_COMPLETE 225 entsprechend herauf- und herabzusetzen.
-
In
einer bevorzugten Ausführungsform
startet der Zeitgeber 245 nicht, falls ein I/O-Gerät 80-86 untätig ist
und für
eine längere
Zeitdauer keine I/O-Befehle zu verarbeiten hat (beispielsweise DEV_1_COUNT
= 0). Der Zeitgeber 245 startet, wenn die Anzahl von für die Verarbeitung
für ein I/O-Gerät 80-86 verbliebenen
Befehle von eins auf null übergeht
(wenn beispielsweise DEV_1_COUNT sich von eins auf null verändert).
-
ANDERE VERHÄLTNISSE, DIE VERWENDET WERDEN
KÖNNEN
-
In
dem oben unter Bezug auf 5 beschriebenen Verfahren berichten
der Adapter 45 und die Firmware 62, wenn zumindest
die Hälfte
der verbleibenden I/O-Anforderungen abgeschlossen sind (TOTAL_COMPLETE 225 ist
größer als
oder gleich wie TOTAL_REMAIN 220), sämtliche abgeschlossenen, jedoch
noch nicht berichteten I/O-Anforderungen und unterbricht den Host-Mikroprozessor 20. Dies
stellt sicher, dass der Adapter 45 und die I/O-Geräte 80-86 noch
immer eine beträchtliche
Anzahl von I/O-Anforderungen (die Hälfte der gesamten I/O-Anforderungen) zu
verarbeiten haben, während der
Host-Mikroprozessor 20 die berichteten I/O-Abschlüsse (die
Hälfte
der gesamten I/O-Anforderungen) verarbeitet.
-
In
anderen Ausführungsformen
verwendet der Adapter 45 ein anderes Verhältnis der
Anzahl nicht berichteter I/O-Abschlüsse (TOTAL_COMPLETE 225)
und der Anzahl der verbleibenden I/O-Anforderungen (TOTAL_REMAIN 220),
um einen Interrupt für
den Host-Mikroprozessor 20 auszulösen und
um alle abgeschlossenen, jedoch noch nicht berichteten I/O-Anforderungen zu
berichten. Beispielsweise verwendet der Adapter 45 in einer
Ausführungsform
ein 3/2-Verhältnis
von TOTAL_COMPLETE 225 zu TOTAL_REMAIN 220. Wenn
TOTAL_COMPLETE 225 TOTAL_REMAIN 220 um ein Verhältnis von
zumindest 3:2 übersteigt, so
erzeugt der Adapter 45 einen Interrupt für den Host-Mikroprozessor 20 und
berichtet alle abgeschlossenen, jedoch noch nicht berichteten I/O-Anforderungen
an das Host-System 15. Andere Verhältnisse, wie z. B. 2:1, 3:1,
4:1, 4:3, 1:2, 1:3, 1:4, 2:3 und 3:4 können gemäß der vorliegenden Erfindung
implementiert werden.
-
Das
betreffende Verhältnis
von TOTAL_COMPLETE 225 zu TOTAL_REMAIN 220 kann
durch den Hersteller oder durch den Benutzer in Abhängigkeit
von einer Vielfalt von Faktoren eingestellt werden, wie z. B. in
Abhängigkeit
von der Belastung des Host-Mikroprozessors 20 durch die
I/O-Anforderungen (entweder hohe Belastung oder niedrige Belastung),
der Art des Zugriffs (entweder sequentiell oder wahlfrei), der Art
der Konfiguration oder der Komponenten des Systems 10,
der Anzahl von I/O-Geräten 80-86 und
der Art von I/O-Anforderungen.
-
I/O-GERÄT KANN WEITERHIN ANFORDERUNGEN
EMPFANGEN; ZEITGEBER STARTET NICHT WIEDER
-
Nachdem
der Zeitgeber 245 gestartet ist, können eine oder auch mehrere
I/O-Anforderungen noch
immer durch das betreffende I/O-Gerät 80-86 empfangen
und verarbeitet werden, welches bewirkt hatte, dass der Zeitgeber 245 gestartet
ist. Wenn beispielsweise die Anzahl der verbleibenden I/O-Anforderungen,
die für
das I/O-Gerät
1 80 zur Verarbeitung verblieben war, einen Übergang
von eins nach null durchführt
(DEV_1_COUNT 230 zählt
von eins auf null herab), so bestätigt die Firmware 62 diesen Eins-zu-Null-Übergang
und startet den Zeitgeber 245 (wenn das I/O-Gerät 1 80 das
erste I/O-Gerät 80-86 ist,
welches einen Eins-zu-Null-Übergang
durchführt),
wie es in dem Prozessblock 335 in 5 dargestellt
ist. Wenn das I/O-Gerät
1 80 eine neue I/O-Anforderung empfängt, so verarbeitet es diese neue
I/O-Anforderung.
Wenn das I/O-Gerät
1 80 die I/O-Anforderung abgeschlossen hat, erfolgt ein
weiterer Eins-zu-Null-Übergang
durch DEV_1_COUNT 230, jedoch wird der Zeitgeber 245 nicht
erneut gestartet. In ähnlicher
Weise wird, wenn ein anderes I/O-Gerät 81-86 die
Verarbeitung seiner sämtlichen I/O-Anforderungen
beendet, beispielsweise DEV_2_COUNT 231 einen Übergang
von eins nach null macht, der Zeitgeber 245 nicht erneut
gestartet. Das erste I/O-Gerät 80-86,
welches all seine I/O-Anordnungen beendet hat, wartet typischerweise
am längsten
von allen I/O-Geräten 80-86 darauf,
dass seine abgeschlossenen I/O-Anforderungen an das Host-System 15 berichtet
werden. Wenn der Zeitgeber 245 startet, wird er nicht zurückgesetzt
(gelöscht),
bis er abgelaufen ist, oder bis der erste Auslöser (TOTAL_COMPLETE 225 ist
größer als
oder gleich wie TOTAL_REMAIN 220) bewirkt, dass der Adapter 45 den
Host-Mikroprozessor 20 unterbricht und alle abgeschlossenen,
jedoch noch nicht berichteten I/O-Anforderungen berichtet bzw. meldet.
-
In
einer Ausführungsform
ist es, wenn die Anzahl von I/O-Anforderungen, die für alle I/O-Geräte 80-86 für die Verarbeitung
verblieben sind, niemals einen Übergang
von eins nach null durchführt
und wenn der erste Auslöser
(TOTAL_COMPLETE 225 ist größer als oder gleich wie TOTAL_REMAIN 220) weiterhin
bewirkt, dass der Adapter 45 den Host-Mikroprozessor 20 unterbricht
und I/O-Abschlüsse
berichtet, möglich,
dass der Zeitgeber 245 für eine längere Zeitdauer nicht gestartet
wird. Mit anderen Worten, die Firmware 62 führt den
Prozessblock 335 in 5 für eine längere Zeitdauer
nicht aus. Die Situation tritt typischerweise auf, wenn die Arbeitsbelastung
hoch ist (große
Anzahl von I/O-Anforderungen) und jedes I/O-Gerät 80-86 durch
den Host-Mikroprozessor 20 intensiv
beansprucht wird.
-
LAUFZEIT DES ZEITGEBERS
-
Die
Laufzeit oder Verzögerungsdauer
des Zeitgebers 245 kann entsprechend der Konfiguration und
den Komponenten des Computersystems 10, insbesondere den
I/O-Geräten 80-86,
variieren. Die Laufzeit des Zeitgebers 245 kann entsprechend
einer Reaktionszeit von einem der I/O-Geräte 80-86,
der längsten
Reaktionszeit aller I/O-Geräte 80-86,
der Reaktionszeit des I/O-Gerätes 80-86,
welches am häufigsten
verwendet wird, oder eines Durchschnittes aller Reaktionszeiten
der I/O-Geräte 80-86 eingestellt
werden. Andere Faktoren können
beim Einstellen der Laufzeit des Zeitgebers 245 berücksichtigt werden.
-
In
einer Ausführungsform
wird die Laufzeit des Zeitgebers 245 auf einen Wert zwischen
etwa 5 Mikrosekunden und etwa 8 Millisekunden eingestellt. In einer
anderen Ausführungsform
wird die Laufzeit des Zeitgebers auf einen Wert zwischen etwa 25
Mikrosekunden und etwa 1.000 Mikrosekunden festgesetzt. In einer
weiteren Ausführungsform
wird die Laufzeit des Zeitgebers 245 auf einen Wert zwischen etwa
600 Mikrosekunden und 1.000 Mikrosekunden festgesetzt.
-
In
einer bevorzugten Ausführungsform
wird die Laufzeit des Zeitgebers auf einen Wert von etwa 800 Mikrosekunden
festgelegt. Dies deshalb, weil die typische Reaktionszeit für ein I/O-Gerät 80-86 etwa 50
Mikrosekunden beträgt.
Wenn die Laufzeit des Zeitgebers 245 zu kurz ist, so setzt
die Adapter-Firmware 62 den Zeitgeber 245 zurück und erzeugt
einen Interrupt für
den Mikroprozessor 20, kurz nachdem ein I/O-Gerät 80-86 eine
Anzahl von null I/O-Anforderungen erreicht hat, woraufhin ein weiterer
Interrupt folgt, kurz nachdem ein anderes I/O-Gerät 80-86 den Wert
von null I/O-Anforderungen erreicht hat. Je kürzer die Laufzeit des Zeitgebers 245 ist,
desto weniger I/O-Abschlüsse
werden pro Interrupt an den Mikroprozessor 20 berichtet.
Es ist ineffizient, wenn der Host-Adapter 45 den Host-Mikroprozessor 20 innerhalb
einer kurzen Zeitdauer wiederholt unterbricht.
-
Insbesondere
ist es durch Verzögern
des Meldens von I/O-Abschlüssen
für eine
vorbestimmte Zeitdauer, nachdem ein erstes I/O-Gerät 80-86 seinen
Satz von I/O-Anforderungen abgeschlossen hat, wahrscheinlich, dass
eines oder mehrere zusätzliche I/O-Geräte 80-86 ebenfalls
ihren Satz von I/O-Anforderungen während der vorbestimmten Zeitdauer
abschließen.
Es ist vorteilhaft, über
die zwei oder mehr Sätze
von I/O-Abschlüssen
gemeinsam in einem einzelnen Interrupt zu berichten, anstatt die
zwei oder mehr Sätze
von Abschlüssen
getrennt bei zwei oder mehr getrennten Interrupts zu berichten.
Der Host-Mikroprozessor 20 muss dann nur einen Interrupt
durch den Host-Adapter 45 anstelle von zwei oder mehr Interrupts
bedienen.
-
Beispielsweise
schließt
das I/O-Gerät
1 80 alle seine I/O-Anforderungen in 50 Mikrosekunden ab.
Die Firmware 62 startet den Zeitgeber 245. Dann schließt das I/O-Gerät 4 83 seine
I/O-Anforderungen 50 Mikrosekunden später ab und dann schließt danach
das I/O-Gerät
2 81 seine I/O-Anforderungen 50 Mikrosekunden danach ab.
Wenn der Zeitgeber 245 eine Laufzeit von 75 Mikrosekunden
hätte,
würde der Adapter 45 einen
Interrupt für
den Host-Mikroprozessor 20 erzeugen und alle I/O-Abschlüsse der
I/O-Geräte
1 80 und des I/O-Gerätes
4 83 berichten. Der Adapter 45 würde einen
zweiten Interrupt zum Berichten der I/O-Abschlüsse des I/O-Gerätes 2 81 erzeugen. Wenn
jedoch die Laufzeit des Zeitgebers 245 länger wäre, beispielsweise
125 Mikrosekunden, so würde der
Adapter 50 für
den Host-Mikroprozessor 20 einen einzigen Interrupt erzeugen
und die I/O-Abschlüsse der
I/O-Geräte
1 80, 4 83 und 2 81 berichten.
-
Wenn
andererseits die Laufzeit des Zeitgebers 245 zu lang ist,
so kann es sein, dass der Host-Mikroprozessor 20 auf I/O-Abschlüsse von
den I/O-Geräten 80-86 wartet,
bevor er neue I/O-Anforderungen aussendet, und eines oder mehrere
I/O-Geräte 80-86 können im
Leerlauf sein, während
sie auf weitere I/O-Anforderungen von dem Host-Mikroprozessor warten.
Demnach ist in einer bevorzugten Ausführungsform die Laufzeit des
Zeitgebers 245 ausreichend lang, um mehrere Interrupts
innerhalb eines kurzen Zeitabschnitts zu vermeiden, aber dennoch
ausreichend kurz, um eine übermäßige Leerlaufzeit
zu vermeiden.
-
In
einer Ausführungsform
kann die Laufzeit des Zeitgebers 245 in Abhängigkeit
davon variieren, welches I/O-Gerät 80-86 den
Zeitgeber 245 ausgelöst
hat. Ein I/O-Gerät 80-86,
welches häufig
verwendet wird, kann eine relativ kurze Zeitgeberlaufzeit haben.
Ein I/O-Gerät,
welches weniger häufig
verwendet wird, kann eine relativ längere Zeitgeberlaufzeit haben.
In einer anderen Ausführungsform
ist die Laufzeit des Zeitgebers 245 null für eines
oder mehrere der I/O-Geräte 80-86.
In dieser Ausführungsform erzeugt
die Firmware 62, wenn ein I/O-Gerät 80-86, das
eine auf null gesetzte Laufzeit hat, alle seine I/O-Anforderungen
beendet hat, unmittelbar einen Interrupt für den Host-Mikroprozessor und
berichtet alle abgeschlossenen, jedoch noch nicht berichteten Anforderungen.
-
In
einer Weiteren Ausführungsform
startet der Zeitgeber 245, wenn die Anzahl von I/O-Anforderungen für irgendeine
I/O-Gerät 80-86 unter
eine vorbestimmte Anzahl, wie z. B. drei anstelle von null fällt, wie
es oben unter Bezug auf 5 beschrieben wurde.
-
Die
Laufzeit des Zeitgebers 245 kann durch den Host-Mikroprozessor 20 eingestellt
werden. In einer Ausführungsform
kann der Endbenutzer die Laufzeit des Zeitgebers 245 einstellen.
In einer weiteren Ausführungsform
kann ein Systementwickler (Hersteller des Host-Computers oder des
Adapters) oder ein Programmierer die Laufzeit des Zeitgebers 245 einstellen.
-
VORTEILE DES SCHWELLWERTAUSLÖSERS
-
Das
oben beschriebene Verfahren ist adaptiv: Es passt die Belastung
des Hostmikroprozessors 20 durch I/O-Anforderungen an.
Je höher
die Belastung durch I/O-Anforderungen ist, desto größer wird das
Verhältnis
oder die Anzahl von I/O-Abschlussberichten pro Sekunde (IOPS) pro
Interrupt. Wenn beispielsweise die Belastung relativ niedrig ist,
z. B. nur 5-10 I/O-Anforderungen
gleichzeitig erzeugt werden, so werden mit einem Interrupt nur 3-6
abgeschlossene I/O-Anforderungen an den Host-Mikroprozessor 20 berichtet.
Wenn die Belastung relativ hoch ist, beispielsweise 30 bis 60 I/O-Anforderungen
gleichzeitig erzeugt werden, so werden mit einem Interrupt 15-30 abgeschlossene
I/O-Anforderungen an den Host-Mikroprozessor berichtet.
-
Je
stärker
also der Host-Mikroprozessor 20 beschäftigt ist, desto mehr I/O-Abschlussberichte werden
durch den Adapter 45 mit jedem Interrupt geliefert. Dies
ist ein beträchtlicher
Vorteil, da der Host-Mikroprozessor 20, je stärker er
beansprucht wird, er umso weniger die Zeit und die Ressourcen zur
Verfügung
hat, um Interrupts und die mit den Interrupts verbundene Zusatzlast
zu bedienen.
-
VORTEILE DES ZEITGEBERAUSLÖSERS
-
Der
Zeitgeber 245 bietet ebenfalls einen beträchtlichen
Vorteil. Der Zeitgeber 245 vermindert die Leerlaufzeit
(Latenz) eines bestimmten I/O-Gerätes 80-86,
das seine sämtlichen
I/O-Anforderrungen
abgeschlossen hat, während
andere I/O-Geräte 80-86 immer
noch beschäftigt
sind.
-
Beispielsweise
kann das I/O-Geräte
1 80 all seine I/O-Anforderungen beendet haben (DEV_1_COUNT
= 0), während
die anderen I/O-Geräte 81-86 immer
noch einige I/O-Anforderungen
abschließen
müssen.
Wenn TOTAL_REMAIN 220 beträchtlich größer ist als TOTAL_COMPLETE 225,
berichtet der Adapter 245 nicht die abgeschlossenen, aber
noch nicht gemeldeten I/O-Anforderungen für eine beträchtliche Zeit. Es gibt einige
Softwareanwendungen oder Unterprogramme, die der Host-Mikroprozessor 20 laufen
lässt,
welche keine neue Anforderung an eines oder mehrere I/O-Geräte 80-86, wie
z. B. das I/O-Gerät
1 80 senden, bis nicht eine oder mehrere vorherige I/O-Anforderungen
abgeschlossen und berichtet worden sind. Dies bewirkt eine Verzögerung und
begrenzt die Leistungsfähigkeit
des Systems. Es wäre
ineffizient, wenn das I/O-Gerät
1 80 für
eine längere
Zeitdauer im Leerlauf bliebe, während
die anderen I/O-Geräte 81-86 mehrere
I/O-Anforderungen zu verarbeiten haben und aktiv ihre I/O-Anforderungen
verarbeiten.
-
Der
Zeitgeber 245 versucht, die Leerlaufzeit des I/O-Gerätes 1 80 zu
reduzieren, indem er bewirkt, dass die Firmware 62, nach
Ablauf (der Laufzeit) des Zeitgebers 245 einen Interrupt
für den Host-Mikroprozessor 20 erzeugt
und alle abgeschlossenen, jedoch noch nicht gemeldeten I/O-Anforderungen
an das Host-System meldet. Dies umgeht den ersten Auslöser (den
Schwellwert des gesamten I/O-Abschlusses, der TOTAL_REMAIN und TOTAL_COMPLETE
vergleicht). Nachdem der Host-Mikroprozessor 20 die abgeschlossenen I/O-Anforderungen
verarbeitet hat, kann der Host-Mikroprozessor 20 einen
oder mehrere neue I/O-Anforderungen für die Verarbeitung durch das
leerlaufende I/O-Gerät
1 80 absenden. Der Zeitgeber 245 (zweiter Auslöser) ergänzt damit
den Schwellwertzähler
für den
I/O-Abschluss, TOTAL_COMPLETE (erster Auslöser), indem er die Leerlaufzeit
des ersten der I/O-Geräte 80-86 verkürzt, das
zu irgendeinem gegebenen Zeitpunkt seine sämtlichen I/O-Anforderungen
beendet hat.
-
JEDER AUSLÖSER ALLEIN ODER MIT ANDEREN AUSLÖSERN
-
In
der in 5 dargestellten Ausführungsform gibt es zwei Auslöser (Block 315 und
Blöcke 320-335)
zum Erzeugen eines Interrupts für
den Host-Mikroprozessor 20. Alternativ verwenden andere
Ausführungsformen
der vorliegenden Erfindung nur einen der beiden Auslöser.
-
Entweder
die beiden Auslöser
oder Variationen derselben können
unabhängig
von dem anderen verwendet werden, um festzulegen, wann der Host-Mikroprozessor 20 zu
unterbrechen ist. Beispielsweise führt in einer Ausführungsform
der Adapter 45 nur das in den Blöcken 300 bis 315 und 340 dargestellte
Verfahren aus. In dieser Ausführungsform
kehrt die Firmware 62, wenn in dem Entscheidungsblock 315 TOTAL_COMPLETE 225 nicht
größer ist
als oder gleich groß ist
wie TOTAL_REMAIN 220, zu dem Start-/Fortsetzungsblock zurück.
-
Auch
wenn andere Ausführungsformen
der vorliegenden Erfindung nur einen der beiden Auslöser verwenden,
erzielt man doch eine bessere Leistungsfähigkeit, wenn die beiden oben
beschriebenen Auslöser
in Kombination miteinander verwendet werden. Auch zusätzliche
Auslöser
könnten
in Kombination mit einem oder beiden der oben beschriebenen Auslöser verwendet
werden. Beispielsweise könnte ein
alternativer Auslöser
die Belastung des Host-Mikroprozessors 20 ohne Verwendung
der Variablen TOTAL_REMAIN 220 bestimmen. Ein anderer Auslöser könnte einen
Interrupt für
den Host-Mikroprozessor 20 erzeugen, wenn die Anzahl von
I/O-Anforderungen
für zwei
oder mehr I/O-Geräte 80-86 auf
irgendeine vorbestimmte Zahl anstatt auf null abfällt.
-
EINE WEITERE AUSFÜHRUNGSFORM DES ADAPTIVEN ALGORITHMUS
-
7 veranschaulicht
eine weitere Ausführungsform
eines Verfahrens, welches durch die Host-Adapterplatine 40 nach 1 verwendet
wird, um Abschlussmeldungen über
I/O-Anforderungen
zu kombinieren und die Anzahl von Interrupts für den Host-Mikroprozessor 20 zu
reduzieren. In einer Konfiguration ist das Verfahren nach 7 Teil
des RISC-Codes oder der Firmware 62.
-
Die
Verwendung und die Arbeitsweise des Verfahrens nach 7 wird
unter Bezug auf die 1, 4 und 5 beschrieben.
In 7 sind die Vorgänge, die in einem Start-/Fortsetzungsblock 400,
einem Prozessblock 405 und einem Prozessblock 410 dargestellt
sind, im Wesentlichen dieselben wie die Vorgänge, die oben unter Bezug auf
den Start-/Fortsetzungsblock,
den Prozessblock 305 und den Prozessblock 310 nach 5 beschrieben
wurden. In 7 wird jedoch in dem Prozessblock 405 die
Variable 220 TOTAL_REMAIN zuerst (für jede neue I/O-Anforderung,
die in der Anforderungsschlange 26 empfangen wurde) heraufgesetzt.
Nachdem die Variable 220 TOTAL_REMAIN heraufgesetzt worden
ist, wird die Variable 220 TOTAL_REMAIN herabgesetzt (für jede I/O-Anforderung,
die durch den Adapter 45 abgeschlossen wurde), und die
Variable TOTAL_COMPLETE wird, wie es in dem Prozessblock 410 dargestellt
ist, heraufgesetzt (für
jede durch den Adapter 45 abgeschlossene, aber noch nicht
berichtete I/O-Anforderung).
-
In
einem Entscheidungsblock 415 legt die Firmware 62 fest,
ob die Anzahl der verbleibenden I/O-Anforderungen für irgendein
individuelles I/O-Gerät 80-86 von
eins auf null abgesunken ist (d.h. irgendeine der DEV_n_COUNT-Variablen 220-232 einen Übergang
von eins nach null durchgeführt
hat). Wenn die Anzahl verbleibender I/O-Anforderungen für irgendein
individuel les I/O-Gerät 80-86 von
eins nach null abgenommen hat, so setzt die Firmware 62 ein
Flag für
den Start des Zeitgebers in dem Prozessor 50, wie es in
einem Prozessblock 420 dargestellt ist. In Reaktion darauf
startet der Prozessor 50 den Zeitgeber 245 (4).
Dann vergleicht die Firmware 62 die Variable 225 TOTAL_COMPLETE
mit der Variablen 220 TOTAL_REMAIN, wie es in einem Entscheidungsblock 425 dargestellt
ist. In dem Entscheidungsblock 415 vergleicht die Firmware 62 dann, wenn
die Anzahl der verbleibenden I/O-Anforderungen für irgendein einzelnes I/O-Gerät 80-86 nicht
von eins auf null abgesunken ist, die Variable 225 TOTAL_COMPLETE
mit der Variablen 220 TOTAL_REMAIN, wie es in dem Entscheidungsblock 425 dargestellt
ist.
-
In
dem Entscheidungsblock 425 erzeugt dann die Firmware 62,
wenn die Variable 225 TOTAL_COMPLETE größer ist als oder gleich ist
wie die Variable 220 TOTAL_REMAIN, einen Interrupt für den Host-Mikroprozessor 220 und
berichtet alle abgeschlossenen, jedoch noch nicht gemeldeten I/O-Anforderungen,
wie es in einem Prozessblock 430 dargestellt ist. In dem
Prozessblock 430 löscht die
Firmware 62 auch die Variable 225 TOTAL_COMPLETE
auf null und löscht
auch das Flag für
den Start des Zeitgebers. In einem Entscheidungsblock 435 bestimmt
die Firmware 62 dann, ob der Zeitgeber 245 gestartet
worden ist. Wenn in dem Entscheidungsblock 425 die Variable 225 TOTAL_COMPLETE
kleiner ist als die Variable 220 TOTAL_REMAIN, so geht
die Firmware 62 direkt zu dem Entscheidungsblock 435,
um zu bestimmen, ob der Zeitgeber 245 gestartet worden
ist und umgeht damit den Prozessblock 430.
-
Wenn
in dem Entscheidungsblock 435 der Zeitgeber 245 noch
nicht gestartet worden ist, fährt die
Firmware 62 entsprechend fort, die Variable 220 TOTAL_RENAIM
herauf- und herabzusetzen und die Variable 225 TOTAL_COMPLETE
heraufzusetzen, wie es in den Prozessblöcken 400-410 dargestellt
ist. Wenn der Zeitgeber gestartet worden ist, so stellt die Firmware 62 in
einem Entscheidungsblock 440 fest, ob der Zeitgeber 245 abgelaufen
ist. Wenn der Zeitgeber 245 noch nicht abgelaufen ist,
kehrt die Firmware 62 zu den Prozessblöcken 400-410 zurück und fährt entsprechend
fort, die Variable 220 TOTAL_REMAIN herauf- und herabzuzählen und
die Variable 225 TOTAL_COMPLETE heraufzuzählen. Wenn
der Zeitgeber 245 abgelaufen ist, erzeugt die Firmware 62 einen
Interrupt für
den Host-Mikroprozessor 220 und meldet alle abgeschlossenen,
aber noch nicht berichteten I/O-Anforderungen, wie es in einem Prozessblock 445 dargestellt
ist. In dem Prozessblock 445 löscht die Firmware 62 auch
die Variable 225 TOTAL_COMPLETE auf null und löscht auch
das Flag für
den Start des Zeitgebers. Die Firmware 62 kehrt dann zu
den Prozessblöcken 400-410 zurück und fährt entsprechend
fort, die Variable 220 TOTAL_REMAIN herauf- und herabzuzählen und
die Variable 225 TOTAL_COMPLETE heraufzuzählen.
-
SCHWELLWERT DURCH GERÄT – 8
-
8 veranschaulicht
eine weitere Ausführungsform
eines Verfahrens, welches durch die Host-Adapterplatine nach 1 verwendet
wird, um Abschlussberichte von I/O- Anforderungen zu kombinieren und die
Anzahl von Interrupts für
den Host-Mikroprozessor 20 zu reduzieren. Die oben unter
Bezug auf die 1 bis 7 beschriebenen
Ausführungsformen
können
für Host-Rechnersysteme 15 ideal geeignet
sein, welche aufeinanderfolgende (sequentielle) I/O-Zugriffe verwenden.
Die nachstehend unter Bezug auf 8 beschriebene
Ausführungsform kann
für Host-Computersysteme 15 ideal
geeignet sein, die einen wahlfreien I/O-Zugriff verwenden. Sequentielle I/O-Zugriffe
und wahlfreie I/O-Zugriffe sind Fachleuten auf diesem Gebiet ein
Begriff.
-
Das
in 8 dargestellte Verfahren ist dem in 7 dargestellten
im Wesentlichen ähnlich,
abgesehen davon, dass ein Entscheidungsblock 485 in 8 sich
von dem Entscheidungsblock 425 in 7 unterscheidet.
Insbesondere stellt in dem Entscheidungsblock 485 in 8 die
Firmware 62 (1) fest, ob die Anzahl nicht
berichteter I/O-Abschlüsse
(TOTAL_REMAIN 220) gleich der Anzahl aktuell aktiver I/O-Geräte 80-86 ist.
Eine „aktive" I/O-Einrichtung 80-86 bzw.
I/O-Gerät 80-86 ist
ein I/O-Gerät 80-86,
das zumindest eine anhängige (nicht
abgeschlossene) I/O-Anforderung hat. Wenn ein I/O-Gerät 80-86 seine
letzte I/O-Anforderung
abgeschlossen hat, wird dieses I/O-Gerät 80-86 über die
Zwecke dieser Ausführungsform
nicht mehr als aktiv angesehen und die Anzahl aktiver I/O-Geräte 80-86 nimmt
um eins ab. Wenn andererseits der Adapter 45 eine neue
(anhängige)
I/O-Anforderung empfängt,
die für
ein zuvor inaktives I/O-Gerät 80-86 vorgesehen
ist, so nimmt die Zahl der aktiven I/O-Geräte 80-86 um
eins zu. Die Anzahl der aktiven I/O-Geräte 80-86 ist
also eine dynamische Variable, die zunehmen oder abnehmen kann,
wenn eines oder mehrere I/O-Geräte 80-86 ihre
letzten anhängigen I/O-Anforderungen
abschließen
oder eine erste (anhängige)
I/O-Anforderung bzw. -Anforderungen empfangen.
-
Wenn
beispielsweise die ersten drei I/O-Geräte 80-82 anhängige I/O-Anforderungen
haben, d.h. DEV_1_COUNT 230, DEV_2_COUNT 231 und DEV_3_COUNT 232 sind
nicht gleich null, so ist die Anzahl aktuell aktiver I/O-Geräte 80-82 drei.
Die ersten drei I/O-Geräte 80-82 sind
für die
Zwecke dieses Beispiels aktiv, jedoch könnte irgendeine beliebige Anzahl
oder Nummer der I/O-Geräte 80-86 zu
irgendeinem gegebenen Zeitpunkt aktiv sein. In dem Entscheidungsblock 485 nach 8 ist
der Schwellwert für
die Auslösung
eines Interrupts für
den Host-Prozessor 20 (und
den Bericht über
alle abgeschlossenen I/O-Anforderungen) aktuell drei. Wenn TOTAL_COMPLETE 225 gleich
eins ist, so ist TOTAL_COMPLETE 225 noch nicht gleich dem Schwellwert
(Anzahl der aktuell aktiven I/O-Geräte 80-82),
der drei ist.
-
Der
Schwellwert für
das Auslösen
eines Interrupts steigt an oder nimmt ab je nach der Anzahl aktuell
aktiver I/O-Geräte 80-86,
wie es im Block 485 von 8 dargestellt
ist. Wenn die aktiven I/O-Geräte 80-82 ihre
zugewiesenen I/O-Anforderungen abgeschlossen haben, so nimmt TOTAL_COMPLETE 225 zu
und der Schwellwert (Anzahl der aktuell aktiven I/O-Geräte 80-82)
nimmt möglicherweise
ab. Wenn zuvor inaktive I/O-Geräte 83-86 aktiv
werden, können
die Anzahl aktiver I/O-Geräte
und der Schwellwert ansteigen. Wenn TOTAL_COMPLETE 225 gleich der
Anzahl aktuell aktiver I/O-Geräte
ist, wenn das Verfahren nach 8 zu dem
Entscheidungsblock 485 kommt, so erzeugt die Firmware 62 einen
Interrupt für
den Host-Mikroprozessor 20 und berichtet alle abgeschlossenen,
aber noch nicht berichteten I/O-Anforderungen in einem Prozessblock 490.
-
In
dem Verfahren nach 8 ist der Zeitgeberbetrieb,
d.h. der zweite Auslöser,
dem Zeitgeberbetrieb des oben unter Bezug auf 7 beschriebenen
Verfahrens weitgehend ähnlich.
-
Der
variable Schwellwert bei dem Verfahren nach 8 ermöglicht es,
dass der Host-Adapter 45 und
die Firmware 62 sich an die Belastung des Host-Mikroprozessors 20 anpassen.
Wenn der Host-Mikroprozessor 20 eine hohe I/O-Belastung
hat und wenn mehrere I/O-Geräte 80-86 aktiv
sind, so ist der Schwellwert zum Auslösen eines Interrupts ebenfalls
hoch. Ein hoher Schwellwert produziert die Anzahl von Interrupts
pro Sekunde (IPS) und erhöht
die Anzahl berichteter I/O-Abschlüsse pro Interrupt. Wenn der
Host eine niedrige I/O-Arbeitslast hat und eine geringe Anzahl von
I/O-Geräten 80-86 aktiv
ist, so ist der Schwellwert zum Auslösen eines Interrupts ebenfalls
niedrig.
-
Die
Verfahren nach den 5, 7 und 8 und
ihre Schwellwerte für
das Auslösen
von Interrupts für
den Host-Mikroprozessor 20 passen sich also an die Belastung
des Host-Mikroprozessors 20 durch
I/O-Anforderungen an. Je stärker
der Host-Mikroprozessor belastet bzw. beschäftigt ist, desto mehr I/O-Abschlussberichte
werden mit einem einzigen Interrupt durch den Adapter 45 geliefert.
Speziell wird, je größer die
Belastung durch I/O-Anforderungen ist, desto größer auch das Verhältnis der
I/O-Abschlussberichte pro Sekunde (IOPS) und pro Interrupt.
-
Wenn
beispielsweise in den Ausführungsformen,
die oben unter Bezug auf die 5 bis 7 beschrieben
wurden, die Belastung relativ niedrig ist, z. B. nur 5 bis 10 I/O-Anforderungen
gleichzeitig erzeugt werden, so können 3 bis 5 I/O-Abschlussberichte
mit einem einzigen Interrupt an den Host-Mikroprozessor 20 berichtet
werden. Wenn die Belastung relativ hoch ist, beispielsweise 50 bis
100 I/O-Anforderungen gleichzeitig erzeugt werden, so können mit
einem einzelnen Interrupt 25 bis 50 I/O-Abschlussberichte
an den Host-Mikroprozessor 20 gemeldet werden. Dies bietet
einen beträchtlichen Vorteil,
da, je stärker
der Host-Mikroprozessor 20 beschäftigt ist, desto weniger der
Host-Mikroprozessor sich Zeit und Ressourcen leisten kann, um Interrupts und
die mit Interrupts verbundene Zusatzlast zu bedienen.
-
Aufgrund
ihrer adaptiven Natur kann also die vorliegende Erfindung unabhängig von
der Belastung durch I/O-Anforderungen (entweder hohe Belastung oder
niedrige Belastung), der Art des Zugriffs (sei er sequentiell oder
wahlfrei), der Art der Systemkonfiguration, der Anzahl von I/O-Geräten und
der Art der I/O-Anforderungen, seien sie in einer Schlange oder nicht
in einer Schlange angeordnete I/O-Anforderungen, eingesetzt werden.
-
Während Ausführungsformen
und Anwendungen der vorliegenden Erfindung dargestellt und beschrieben
worden sind, liegt es für
Fachleute auf der Hand, dass verschiedene Modifikati onen möglich sind,
ohne vom Schutzumfang der Erfindung abzuweichen. Es versteht sich
daher, dass die Erfindung innerhalb des Schutzumfangs der anhängenden
Ansprüche
die Erfindung auf andere Weise ausgeführt werden kann als speziell
beschrieben.