-
HINTERGRUND
-
Ein
Betriebssystem inkludiert im allgemeinen einen Kern (kernel), der
das Kernstück
des Betriebssystems vom Computer ist. Die Dienste vom Kern können durch
andere Teile des Betriebssystems oder durch eine Anwendung durch
eine Systemabrufroutine angefordert werden.
-
Oben
auf dem Netzprotokollstapel sind üblich Anwendungen geschrieben,
um durch die Verwendung eines spezifischen Netzprotokolls zu funktionieren.
Der Anwendungsentwickler muss dann eine unterschiedliche Version
der Anwendung schreiben, damit sie unter Verwendung unterschiedlicher
Netzprotokolle arbeitet. Viele Entwickler haben diese Probleme durch
Schreiben von Anwendungen basierend auf einer gemeinsamen oder Standardschnittstelle, wie
etwa NetBIOS, WinSock oder BSD-Sockets überwunden.
Im allgemeinen kommunizieren diese Schnittstellen direkt mit der
Socket-Schicht des Kerns. Die Socket-Schicht wurde gestaltet, um
Unabhängigkeit
von der Netzkommunikationsschicht vorzusehen und verbindet sich
mit Systemabrufroutinen, die sich mit dem Kern verbinden.
-
Der
Kern inkludiert die Socket-Schicht und den Netzprotokollstapel.
Außerdem
befindet sich ein Netzschnittstellenkarten- (NIC, Network Interface Card) Treiber,
der zum Kommunizieren mit einer NIC fähig ist, in Kommunikation mit
dem Kern über
eine Standardschnittstelle, wie etwa eine Datenverknüpfungs-Anbieterschnittstelle.
-
Wenn
eine NIC ein Paket über
das Netz empfängt,
erteilt die NIC traditionell einen Interrupt (Unterbrechung). Der
Treiber benachrichtigt den Betriebssystemkern über den Interrupt. Der Kern
verarbeitet den Interrupt und erhält das Paket von der NIC über den
Treiber. Wie jedes Paket anschließend durch die NIC empfangen
wird, generiert die NIC einen Interrupt. Somit erhält der Betriebssystemkern jedes
Paket von der NIC, wie Interrupts generiert werden. Entsprechend
werden Pakete, die durch die NIC empfangen werden, unverzüglich durch
den Betriebssystemkern verarbeitet.
-
Ein
Server wird typischerweise durch einen Client kontaktiert, wenn
Daten von dem Server angefordert werden. Somit ist es die hauptsächliche
Verantwortlichkeit des Servers, auf jede Serveranforderung mit den
angeforderten Daten zu antworten. Da der Server aufgefordert ist,
unverzüglich
auf Interrupts zu antworten, die generiert werden, wenn Pakete empfangen
werden, wird diesen empfangenen Daten unglücklicherweise eine höhere Priorität als die gegeben,
die Paketen gegeben wird, die durch den Server übertragen werden. Entsprechend
kann ein Client, der Pakete von einem Server empfängt, eine beträchtliche
Verzögerung
wahrnehmen, während Pakete
durch den Server übertragen
werden.
-
ZUSAMMENFASSUNG
-
Die
vorliegende Erfindung ermöglicht
einer Netzschnittstellenkarte, in vielfachen Modi betrieben zu werden,
was ihre Fähigkeit
aktiviert, eine zu steuernde CPU zu unterbrechen. Speziell können die Modi
der Netzschnittstellenkarte durch einen Betriebssystemkern gesteuert
werden. Auf diese Art und Weise kann der Betriebssystemkern Interruptverarbeitung
der Netzschnittstellenkarte deaktivieren oder aktivieren, wobei
dadurch ermöglicht
wird, das Leistungsverhalten des Servers zu optimieren.
-
In Übereinstimmung
mit einem Aspekt der Erfindung werden Verfahren und Vorrichtung
zum Verarbeiten von Paketen in einem Computersystem inkludierend
ein Betriebssystem und eine Netzschnittstellenkarte offengelegt.
Wenn die Netzschnittstellenkarte in einem Abfragemodus ist, fragt
der Betriebssystemkern die Netzschnittstellenkarte ab um zu bestimmen,
ob ein oder mehr Pakete empfangen wurden. Wenn die Netzschnittstellenkarte
in einem Interruptmodus ist, ist die CPU zum Empfangen eines Interrupts
von der Netzschnittstellenkarte fähig, der anzeigt, dass die
Netzschnittstellenkarte ein oder mehr Pakete empfangen hat. Pakete,
die durch die Netzschnittstellenkarte empfangen wurden, können dann
von der Netzschnittstellenkarte erhalten und verarbeitet werden.
-
In Übereinstimmung
mit einem anderen Aspekt der Erfindung ist das Betriebssystem konfiguriert,
die Netzschnittstellenkarte zu instruieren, in dem Abfragemodus
oder dem Interruptmodus zu arbeiten. In Übereinstimmung mit einer Ausführungsform
steuert das Betriebssystem den Betriebsmodus der Netzschnittstellenkarte
derart, dass die Netzschnittstellenkarte in dem Abfragemodus während Perioden
von starkem Netzverkehr und in dem Interruptmodus während Perioden
von leichtem bis mäßigem Netzverkehr
ist. Speziell instruiert das Betriebssystem die Netzschnittstellenkarte
dynamisch, in einem ersten Modus zu arbeiten, wenn Pakete durch die
Netzschnittstellenkarte bei weniger als einer vordefinierten Rate
empfangen werden, wobei die Netzschnittstellenkarte in dem ersten
Modus zum Unterbrechen einer CPU fähig ist, wenn ein Paket durch die
Netzschnittstellenkarte empfangen wird. Ähnlich instruiert das Betriebssystem
die Netzschnittstellenkarte, in einem zweiten Modus zu arbeiten,
wenn Pakete durch die Netzschnittstellenkarte bei einer größeren als
einer vordefinierten Rate empfangen werden, wobei die Netzschnittstellenkarte
in dem zweiten Modus deaktiviert wird, die CPU zu unterbrechen, wenn
ein Paket durch die Netzschnittstellenkarte empfangen wird. Entsprechend
wird das System für eine
netzintensive Arbeitslast wahrscheinlich in dem Abfragemodus bleiben.
-
In Übereinstimmung
mit noch einem anderen Aspekt der Erfindung inkludiert ein Computersystem ein
Betriebssystem und eine Netzschnittstellenkarte, die mit dem Betriebssystem
gekoppelt ist, wobei die Netzschnittstellenkarte konfiguriert ist,
im Interruptmodus zu arbeiten, wenn sie in einem ersten Zustand ist,
und im Abfragemodus zu arbeiten, wenn sie in einem zweiten Zustand
ist, wobei die Netzschnittstellenkarte, wenn sie in dem Interruptmodus
ist, konfiguriert ist, das Betriebssystem zu unterbrechen, wenn ein
Paket durch die Netzschnittstellenkarte über ein Netz empfangen wird.
Wenn sie in dem Abfragemodus ist, kann die Netzschnittstellenkarte
gänzlich oder
unter speziellen Umständen
(z.B. für
Pakete, die eine normale bis geringe Priorität haben) deaktiviert sein,
einen Interrupt zu erteilen.
-
In Übereinstimmung
mit einer Ausführungsform
inkludiert das Computersystem eine CPU mit einer zugehörigen Schlange
und eine Netzschnittstellenkarte mit einem zugehörigen Puffer. Wenn ein Interrupt
von der Netzschnittstellenkarte empfangen wird, wird eine Menge
von einem oder mehr Paketen von dem Puffer, der zu der Netzschnittstellenkarte gehört, zu der
Schlange, die zu der CPU gehört, transferiert. Ähnlich werden
beim Abfragen der Netzschnittstellenkarte, falls bestimmt wird,
dass ein oder mehr Pakete durch die Netzschnittstellenkarte empfangen
wurden, das eine oder mehr Pakete in dem Puffer, der zu der Netzschnittstellenkarte
gehört,
zu der Schlange, die zu der CPU gehört, transferiert. Jedes der
Pakete in der Schlange, die zu der CPU gehört, wird dann verarbeitet.
Da die Menge von Paketen gleichzeitig als eine Kette von Paketen
(d.h. eine verknüpfte
Liste) transferiert werden kann, wird das Leistungsverhalten des
Servers verbessert.
-
In Übereinstimmung
mit einer Ausführungsform
der Erfindung wird die Fähigkeit
einer Netzschnittstellenkarte, eine spezifische CPU zu unterbrechen,
dargelegt. Außerdem
können
die Pakete in dem Puffer der Netzschnittstellenkarte durch das Betriebssystem
zu der Schlange, die zu der spezifischen CPU gehört, transferiert werden. Dies
wird durch Zuweisen eines einzelnen Netzschnittstellenkartenidentifikators,
um die CPU und ihre zugehörigen
Schlange zu einer Netzschnittstellenkarte und ihrem zugehörigen Puffer
abzubilden, bewerkstelligt. Auf diese Art und Weise können Pakete
von der Netzschnittstellenkarte zu der Schlange für eine Verarbeitung
durch die CPU effizient transferiert werden.
-
Die
Ausführungsformen
der Erfindung können
durch Software, Hardware oder eine Kombination von Hardware und
Software implementiert werden. Die Erfindung kann auch als ein computerlesbarer
Code auf einem computerlesbaren Medium verkörpert sein. Außerdem sind
auch Datenstrukturen, die offengelegt werden, Teil der Erfindung.
-
KURZE BESCHREIBUNG
DER ZEICHNUNGEN
-
Ausführungsformen
der Erfindung können am
besten durch Verweis auf die folgende Beschreibung, aufgenommen
in Verbindung mit den begleitenden Zeichnungen, verstanden werden,
in denen:
-
1 ein
Blockdiagramm ist, das ein Computersystem inkludierend eine Netzschnittstellenkarte
(NIC) vom Stand der Technik veranschaulicht;
-
2 ein
Blockdiagramm ist, das ein System veranschaulicht, in dem die vorliegende
Erfindung in Übereinstimmung
mit einer Ausführungsform
der Erfindung implementiert sein kann;
-
3 ein
Prozessflussdiagramm ist, das ein allgemeines Verfahren zum Durchführen von
Abfragen, um Netzverkehr zu handhaben, in Übereinstimmung mit einer Ausführungsform
der Erfindung veranschaulicht;
-
4 ein
Prozessflussdiagramm ist, das ein Verfahren zum Durchführen von
Abfragen, um Netzverkehr zu handhaben, in Übereinstimmung mit einer Ausführungsform
der Erfindung veranschaulicht;
-
5 ein
Prozessflussdiagramm ist, das ein Verfahren zum Initialisieren der
NIC, wie in Block 404 von 4 gezeigt,
um dynamisches Abfragen zu unterstützen, in Übereinstimmung mit einer Ausführungsform
der Erfindung veranschaulicht;
-
6 ein
Blockdiagramm ist, das ein typisches Mehrzweck-Computersystem veranschaulicht, das
zum Implementieren der vorliegenden Erfindung geeignet ist.
-
DETAILLIERTE
BESCHREIBUNG
-
In
der folgenden Beschreibung für
Ausführungsformen
der Erfindung werden zahlreiche spezifischen Details dargelegt,
um ein gründliches
Verständnis
der vorliegenden Erfindung vorzusehen. Es wird jedoch einem Durchschnittsfachmann
offensichtlich sein, dass die vorliegende Erfindung ohne einige
oder alle dieser spezifischen Details praktiziert werden kann. In anderen
Fällen
wurden gut bekannte Prozessschritte nicht detailliert beschrieben,
um die vorliegende Erfindung nicht unnötig zu verwirren.
-
Wie
in 1 gezeigt, inkludiert ein beispielhaftes Betriebssystem
einen Kern 102. Der Kern ist das Kernstück des Computerbetriebssystems.
Die Dienste des Kerns können
durch andere Teile des Betriebssystems oder durch eine Anwendung 103 durch
eine Systemabrufroutine angefordert werden.
-
Oben
auf dem Netzprotokollstapel 107 sind Anwendungen 103 üblich geschrieben,
um durch die Verwendung eines spezifischen Netzprotokolls zu funktionieren.
Der Anwendungsentwickler muss dann eine unterschiedliche Version
der Anwendung schreiben, damit sie unter Verwendung unterschiedlicher
Netzprotokolle arbeitet. Viele Entwickler haben diese Probleme durch
Schreiben von Anwendungen basierend auf einer gemeinsamen oder Standardschnittstelle,
wie etwa NetBIOS, WinSock oder BSD-Sockets, überwunden. Im allgemeinen kommunizieren
diese Schnittstellen direkt mit der Socket-Schicht 104 des
Kerns. Die Socket-Schicht wurde gestaltet, Unabhängigkeit von der Netzkommunikationsschicht
vorzusehen und verbindet sich mit Systemabrufroutinen, die sich
mit dem Kern 102 verbinden.
-
Der
Kern 102 inkludiert die Socket-Schicht 104 und
den Netzprotokollstapel 107, der eine TCP-Schicht 106 und
eine IP-Schicht 108 inkludiert. Speziell
ist die TCP-Schicht 106 zum Durchführen eines TCP-Drei-Weg-Handshake
fähig,
um eine TCP-Verbindung
herzustellen, und managt den Zusammenbau einer Nachricht oder Datei
in Pakete, die über
das Internet während
der TCP-Verbindung übertragen
werden können.
Die IP-Schicht 108 handhabt die Adressierung für jedes
Paket. Außerdem
ist ein Netzschnittstellenkarten- (NIC) Treiber 110, der zum
Kommunizieren mit einer NIC 112 fähig ist, in Verbindung mit
dem Kern 102 über
eine Standardschnittstelle, wie etwa eine Da tenverknüpfungs-Anbieterschnittstelle
(Data Link Provider Interface).
-
Wenn
eine NIC 112 ein Paket über
das Netz empfängt,
erteilt die NIC 112 traditionell einen Interrupt. Der Treiber 110 benachrichtigt
den Betriebssystemkern 102 über den Interrupt. Der Kern 102 verarbeitet
den Interrupt und erhält
das Paket von der NIC 112 über den Treiber 110.
Wie jedes Paket anschließend
durch die NIC 112 empfangen wird, generiert die NIC 112 einen
Interrupt. Somit erhält
der Betriebssystemkern 102 jedes Paket von der NIC 112, wie
Interrupts generiert werden. Entsprechend werden Pakete, die durch
die NIC 112 empfangen werden, unverzüglich durch den Betriebssystemkern 102 verarbeitet.
-
Wie
eine NIC Pakete über
das Netz empfängt,
generiert sie typischerweise Interrupts. Während ein Interrupt in Situationen
mit hoher Priorität, die
selten auftreten, praktisch ist, ist ein Interrupt für Situationen
mit geringer Priorität,
die häufig
auftreten, nicht praktisch.
-
In
elektronischer Kommunikation ist "Abfragen" die periodische Prüfung von anderen Programmen
oder Einrichtungen durch ein Programm oder eine Einrichtung um zu
sehen, in welchem Zustand sie sind, gewöhnlich um zu sehen, ob sie
noch verbunden sind oder zu kommunizieren wünschen. Speziell sendet eine
steuernde Einrichtung, die zu einer anderen Einrichtung angebracht
ist, periodisch der Einrichtung eine Nachricht, die nachfragt, ob
irgendetwas zu kommunizieren ist.
-
Abfragen
ist eine brauchbare Option für
eine Verwendung in Situationen, die Situationen geringer Priorität sind,
die häufig
auftreten. Z.B. könnte
die NIC in einen Abfragemodus platziert werden, und beliebige Pakete,
die durch die NIC empfangen werden, könnten periodisch von der NIC
erhalten werden. Permanentes Platzieren der NIC in einen Abfragemodus
würde jedoch
potenziell zu einer beträchtlichen
Verzögerung
für jene
Pakete führen,
die durch die NIC empfangen werden.
-
In Übereinstimmung
mit einer Ausführungsform
der Erfindung ist die NIC zum Arbeiten in zwei Modi konfiguriert:
Abfragemodus und Interruptmodus. Wenn die NIC in dem Abfragemodus
ist, fragt der Betriebssystemkern speziell die NIC periodisch ab
um zu bestimmen, ob ein oder mehr Pakete empfangen wurden. Wenn
die NIC in dem Interruptmodus ist, erteilt die NIC einen Interrupt,
wenn die NIC ein oder mehr Pakete empfangen hat, die durch den Betriebssystemkern
gehandhabt werden müssen.
-
In Übereinstimmung
mit einer anderen Ausführungsform
der Erfindung ist das Betriebssystem zum Instruieren der NIC fähig, in
entweder dem Abfragemodus oder dem Interruptmodus zu arbeiten. Speziell
wird die Netzschnittstellenkarte instruiert, in dem Abfragemodus
zu arbeiten, wenn Pakete durch die Netzschnittstellenkarte häufig empfangen
werden, während
die Netzschnittstellenkarte instruiert wird, in dem Interruptmodus
zu arbeiten, wenn Pakete durch Netzschnittstellenkarte selten empfangen werden.
Die Häufigkeit
kann durch Festsetzen eines vordefinierten numerischen Schwellwertes
festgesetzt werden, wie etwa die Zahl von Paketen, die pro Sekunde
durch die NIC empfangen werden. Wenn z.B. die Zahl von Paketen,
die durch die Netzschnittstellenkarte pro Sekunde empfangen werden,
kleiner als eine vorbestimmte Zahl von Paketen ist, dann kann die
Netzschnittstellenkarte instruiert werden, in dem Interruptmodus
zu arbeiten. Wenn die Zahl von Paketen, die pro Sekunde durch die
Netzschnittstellenkarte empfangen werden, größer oder gleich einer vordefinierten
Zahl von Paketen ist, kann dann die Netzschnittstellenkarte ähnlich instruiert
werden, in dem Abfragemodus zu arbeiten. In einer anderen Ausführungsform
der Erfindung wird, falls das Betriebssystem bereits ein Paket verarbeitet,
das früher empfangen
wird oder zu übertragen
ist und es mehr in einer Schlange eingereihte Pakete in der Schlange der
CPU gibt, die NIC instruiert, im Abfragemodus zu arbeiten.
-
2 ist
ein Blockdiagramm, das ein System veranschaulicht, in dem die vorliegende
Erfindung in Übereinstimmung
mit einer Ausführungsform
der Erfindung implementiert werden kann. Wie gezeigt, kann das Computersystem
eine oder mehr zentrale Verarbeitungseinheiten (CPUs) inkludieren,
die als CPU0 202, CPU1 204 und CPUn 206 gezeigt
werden. Außerdem
kann das System eine oder mehr Netzschnittstellenkarten (NICs) inkludieren,
die als NIC0 208, NIC1 210 und NICn 212 gezeigt
werden. In Übereinstimmung
mit einer Ausführungsform
wird der Modus (z.B. Interrupt, Abfragen) einer bestimmten NIC in
Verbindung mit einer oder mehr der CPUs festgesetzt. Auf diese Art
und Weise ist es möglich, eine
NIC zu instruieren, ob ihr gestattet ist, eine bestimmte CPU zu
unterbrechen, während
der NIC noch ermöglicht
wird, andere CPUs zu unterbrechen.
-
Betriebssystem 214 inkludiert
einen Betriebssystemkern mit einem Netzprotokollstapel. Z.B. kann
der Netzprotokollstapel ein TCP/IP-Stapel sein. Das Betriebssystem
inkludiert auch ein Interrupt-Steuerungsprogramm (interrupt handler).
Allgemein priorisiert ein Interrupt-Steuerungsprogramm Interrupts,
die durch das Betriebssystem empfangen werden, und sichert sie in
einer Schlange, falls mehr als einer darauf wartet, gehandhabt zu
werden. Wenn ein Interrupt von einer der NICs 208, 210, 212 empfangen
wird, wird der Interrupt in der Schlange priorisiert. Ein Zeitplanungsprogramm
(scheduler) des Betriebssystems plant den Betrieb von unterschiedlichen
Programmen, wie die Interrupts empfangen werden.
-
Wenn
eine Hardware-Einrichtung einen Interrupt generiert, hat im allgemeinen
der Interrupt einen Wert, der ihn mit einer bestimmten Einrichtung
in Verbindung bringt. Somit identifi ziert der Interruptwert die
eine der NICs. In Übereinstimmung
mit einer Ausführungsform
identifiziert der Interruptwert auch die eine der CPUs, die gerade
unterbrochen wird. Z.B. kann ein einzelner Interruptidentifikator
(d.h. NIC- oder Interruptidentifikator) verwendet werden, um eine
bestimmte NIC auf eine bestimmte CPU abzubilden. Somit können durch
die Verwendung dieses Identifikators sowohl die NIC als auch die
CPU, die gerade unterbrochen wird, durch den Betriebssystemkern
identifiziert werden, der den Interrupt empfängt.
-
Wie
in 2 gezeigt, hat in Übereinstimmung mit einer Ausführungsform
jede der CPUs 202, 204, 206 eine zugehörige Schlange
Squeue0 216, Squeuel 218 bzw. Squeuen 220 zum
Speichern von Paketen. Die Schlange kann eingehende (inbound) und/oder
ausgehende (outbound) Pakete speichern. Außerdem hat jede der NICs 208, 210, 212 einen
zugehörigen
Speicher (z.B. einen Ringpuffer) zum Speichern eingehender Pakete,
wie sie über
ein Netz empfangen werden. Wie gezeigt hat somit jede der NICs 208, 210, 212 einen
zugehörigen
Ringpuffer 222, 224 bzw. 226.
-
In Übereinstimmung
mit einer Ausführungsform
ist jede der Schlangen Squeue0 216, Squeuel 218,
Squeuen 220, die mit einer der CPUs 202, 204, 206 in
Verbindung steht, zum Speichern von sowohl eingehenden Paketen als
auch ausgehenden Paketen fähig.
Als ein Ergebnis wird sowohl eingehenden Paketen als auch ausgehenden
Paketen gleiche Priorität
gegeben. Z.B. kann jede der Schlangen Squeue0 216, Squeuel 218,
Squeuen 220 eine Serialisierungsschlange sein, wie etwa
die, die in der Patentanmeldung mit dem Titel "A System and Method for Vertical Perimeter
Protection" offengelegt
wird, die Sunay Tripathi und Bruce Curtis als Erfinder benennt,
eingereicht am 10. Oktober 2003, die hierin durch Verweis für alle Zwecke
einbezogen ist.
-
Wie
oben beschrieben, kann der Interruptwert (d.h. NIC- oder Interruptidentifikator)
verwendet werden, um sowohl eine der CPUs 202, 204, 206 als auch
eine der NICs 208, 210, 212 zu identifizieren. Außerdem kann
der Identifikator ferner auf eine der Schlangen 216, 218, 220,
die mit einer der CPUs 202, 204, 206 in
Verbindung steht, abgebildet werden. Außerdem kann der Identifikator
weiter verwendet werden, um den Identifikator auf einen der Ringpuffer 222, 224, 226 abzubilden.
Z.B. kann es wünschenswert
sein, eine der Schlangen 216, 218, 220 auf
einen der Ringpuffer 222, 224, 226 abzubilden, um
den Transfer von Paketen von einem der Ringpuffer zu einer der Schlangen
zu erleichtern. In Übereinstimmung
mit einer Ausführungsform
wird ein einzelner Identifikator verwendet, um eine der CPUs 202, 204, 206 und
ihre zugehörige
Schlange 216, 218 oder 220 mit einer
der NICs 208, 210, 212 und ihrem zugehörigen Puffer 222, 224 oder 226 abzubilden.
-
Kommunikation
zwischen den CPUs 202, 204, 206 und den
NICs 208, 210, 212 kann durch die Verwendung
eines Treibers 228 erreicht werden. In Übereinstimmung mit einer Ausführungsform
inkludiert der Treiber einer oder mehr Anwendungsprogrammierschnittstellen
(APIs, application programming interface) (z.B. CHANGE INTERRUPT
(ÄNDERE
INTERRUPT)), um dem Betriebssystemkern zu ermöglichen, eine der NICs 208, 210, 212 zu
instruieren, ihren Modus von dem Interruptmodus zu dem Abfragemodus
oder vom Abfragemodus zum Interruptmodus zu ändern.
-
Außerdem kann
eine API (z.B. GET PACKETS (ERHALTE PAKETE)) vorgesehen sein, die dem
Betriebssystemkern ermöglicht,
eine Menge von Paketen von einem der Puffer 222, 224, 226,
die mit einer der NICs 208, 210, 212 in
Verbindung stehen, zu einer der Schlangen 216, 218, 220,
die mit einer der CPUs 202, 204, 206 in
Verbindung stehen, zu verschieben. Somit kann der Betriebssystemkern eine
NIC instruieren, ihren Modus vom Interruptmodus zum Abfragemodus
oder vom Abfragemodus zum Inter ruptmodus zu ändern. Als Reaktion tritt die NIC
in den Abfragemodus oder den Interruptmodus ein, wie instruiert.
-
Außerdem kann
das für
das Betriebssystem wünschenswert
sein herauszufinden, ob die Netzschnittstellenkarte in einem Interruptmodus
oder einem Abfragemodus ist. Sobald das Betriebssystem den Zustand
der Netzschnittstellenkarte kennt, kann es dann entsprechend handeln.
Wenn die NIC in dem Abfragemodus ist, fragt das Betriebssystem speziell die
NIC periodisch nach Paketen ab, die empfangen worden sein können. Wenn
die NIC in dem Interruptmodus ist, arbeitet das Betriebssystem,
Pakete abzufragen, wenn ein Interrupt von der NIC empfangen wird.
-
Wie
oben beschrieben, ist die NIC zum Arbeiten in zwei unterschiedlichen
Modi fähig.
Dieses Beispiel ist jedoch lediglich veranschaulichend, und es können auch
andere zusätzliche
Modi implementiert werden. Außerdem
ist es auch möglich,
dass der Interruptmodus und der Abfragemodus auf unterschiedliche
Art und Weise implementiert sind. Allgemein generiert die NIC einen
Interrupt, wenn ein Paket empfangen wird, während sie in dem Interruptmodus
arbeitet, kann aber nicht einen Interrupt generieren, wenn ein Paket
empfangen wird, während
sie in dem Abfragemodus arbeitet. Wenn die NIC alternativ in dem
Abfragemodus ist, kann die NIC einen Interrupt generieren, wenn
ein Paket empfangen wird, aber nur für Pakete, von denen erachtet
wird, dass sie eine hohe Priorität
haben (nicht für
Pakete, von denen erachtet wird, dass sie eine geringe Priorität haben).
Hohe Priorität
kann auf eine einzelne Priorität
verweisen, oder kann auf einen Bereich von Prioritäten von
Paketen verweisen.
-
Speziell
ist in Übereinstimmung
mit einer Ausführungsform
die Netzschnittstellenkarte, wenn sie in dem Interruptmodus ist,
konfiguriert, das Betriebssystem zu unterbrechen, wenn ein Paket
durch die Netzschnittstellenkarte über ein Netz empfangen wird.
Wenn die Netzschnittstellenkarte in dem Abfragemodus ist, ist die
NIC nicht in der Lage, das Betriebssystem zu unterbrechen, wobei
dadurch dem Betriebssystem ermöglicht
wird, die Netzschnittstellenkarte abzufragen, um Pakete von der
Netzschnittstellenkarte zu erhalten. In Übereinstimmung mit einer anderen
Ausführungsform
ist die Netzschnittstellenkarte nicht in der Lage, das Betriebssystem,
wenn sie indem Abfragemodus ist, für Pakete mit geringer Priorität zu unterbrechen,
sondern setzt fort in der Lage zu sein, das System für Pakete
mit hoher Priorität
zu unterbrechen, wenn sie in dem Abfragemodus ist.
-
Wie
oben beschrieben, ist eine NIC zum Arbeiten in zwei unterschiedlichen
Modi fähig.
In diese Modi kann bei Initialisierung (z.B. Hochfahren), bei Instruktion
von einer externen Quelle (z.B. CPU oder Treiber, der mit der NIC
in Verbindung steht) oder bei interner Instruktion von innerhalb
der NIC eingetreten werden. Z.B. kann die NIC wählen, ihren Betriebsmodus wegen
einem externen (z.B. beschäftigter
(busy) oder nicht-beschäftigter
Zustand) oder internen Faktor (z.B. Hardwarefehler) zu ändern. Es
wird auch betrachtet, dass die NIC in einen Betriebsmodus permanent
(z.B. bis zu einer weiteren Instruktion) oder zeitweilig (z.B. für eine spezifizierte
Zeitperiode) eintreten kann. Somit kann die CPU die NIC instruieren, in
den Abfragemodus oder den Interruptmodus für eine spezifizierte Zeitperiode
einzutreten, wonach sie zu ihrem vorherigen Betriebsmodus zurückkehrt.
Alternativ kann die CPU die NIC instruieren, in einen Betriebsmodus
durch die Verwendung einer spezifischen Instruktion, um in diesen
Modus einzutreten, oder durch die Verwendung einer Umschalteroperation,
um die NIC zu veranlassen, in den Betriebsmodus einzutreten, der
ihrem gegenwärtigen
Betriebsmodus entgegengesetzt ist, einzutreten.
-
3 ist
ein Prozessflussdiagramm, das ein allgemeines Verfahren zum Durchführen von
Anfragen veranschaulicht, um Netzverkehr in Übereinstimmung mit einer Ausführungsform
der Erfindung zu handhaben. Wie oben beschrieben, können eine
NIC und ihr zugehöriger
Puffer auf eine CPU und ihre zugehörige Schlange abgebildet werden.
In Übereinstimmung
mit einer Ausführungsform
wird diese Abbildung während
Initialisierung des Computersystems durchgeführt. Wenn das Computersystem
in Block 302 hochgefahren wird, wird die NIC somit in Block 304 derart
initialisiert, dass die NIC auf eine spezifische CPU abgebildet
wird, wobei dadurch die Schlange der CPU mit dem Ringpuffer der
NIC in Verbindung gebracht wird. Dies kann durch die Verwendung
eines NIC-Identifikators bewerkstelligt werden, wie oben mit Bezug
auf 2 beschrieben wurde. Ein Verfahren zum Initialisieren
des Systems, um eine derartige Abbildung zu bewerkstelligen, wird
detaillierter nachstehend mit Bezug auf 5 beschrieben.
Da der NIC-Identifikator eine bestimmte CPU identifiziert, wird
die NIC darüber
in Kenntnis gesetzt, welche CPU sie unterbrechen wird. Bei Empfang
des NIC-Identifikators speichert der Betriebssystemkern den NIC-Identifikator
(z.B. während
Initialisierung oder bei Empfang eines Interrupts) derart, dass
der NIC-Identifikator mit einer unterbrochenen CPU und ihrer zugehörigen Schlange
in Verbindung gebracht wird. Wie oben beschrieben, kann der NIC-Identifikator
auch den Empfangspuffer (ebenso wie eine Interruptleitung) für die NIC
identifizieren. Außerdem
kann die NIC derart initialisiert werden, dass sie anfangs im Interruptmodus
arbeitet.
-
Angenommen,
dass die NIC im Interruptmodus arbeitet, unterbricht die NIC die
CPU in Block 306, um ein empfangenes Paket zu bearbeiten. Wenn
ein Interrupt von der NIC empfangen wird, wird eine Menge von einem
oder mehr Paketen von dem Ringpuffer, der zu der NIC gehört, zu der
Schlange, die zu der CPU gehört,
in Block 308 transferiert. In Übereinstimmung mit ei ner Ausführungsform
wird eine Menge von Paketen gleichzeitig transferiert. Z.B. kann
ein Zeiger zu einer verknüpften
Liste von Paketen der Schlange von Paketen, die zu der CPU gehört, hinzugefügt werden.
-
Die
NIC schaltet dann zu dem Abfragemodus in Block 310 um.
Z.B. kann die NIC zu dem Abfragemodus umgeschaltet werden, wenn
der Interrupt von der NIC empfangen wird (oder kurz danach), oder
vor einer Verarbeitung der Pakete in der Schlange. Speziell instruiert
der Kern des Betriebssystems in Übereinstimmung
mit einer Ausführungsform
die NIC, in den Abfragemodus einzutreten. Z.B. kann die NIC, die
durch den NIC-Identifikator
identifiziert wird, instruiert werden, in den Abfragemodus von dem
Interruptmodus einzutreten. Danach arbeitet der Kern des Betriebssystems,
die NIC periodisch abzufragen.
-
Nachdem
die Pakete von dem Ringpuffer der NIC empfangen sind, verarbeitet
der Betriebssystemkern jedes der Pakete in der Schlange der CPU
in Block 312. Da die Schlange sowohl eingehende als auch
ausgehende Pakete enthält,
priorisiert die CPU gleichmäßig eingehende
und ausgehende Pakete.
-
Sobald
alle Pakete in der Schlange der CPU verarbeitet wurden, fragt der
Betriebssystemkern in Block 314 die NIC ab um zu bestimmen,
ob die NIC ein oder mehr Pakete empfangen hat. Z.B können der
Betriebssystemkern, der Treiber und/oder die NIC herausfinden, ob
es irgendwelche Pakete in dem Ringpuffer gibt, der zu der NIC gehört. Die
kann z.B. durch Abfragen der NIC, die durch einen spezifischen NIC-Identifikator
identifiziert wird, bewerkstelligt werden.
-
Falls
ein oder mehr Pakete durch die Netzschnittstellenkarte empfangen
wurden, wie in Block 316 gezeigt (z.B. falls beliebige
Pakete in dem Ringpuffer der NIC sind), werden das eine oder mehr
Pakete in dem Puffer, der zu der Netzschnittstellenkarte gehört, zu der
Schlange transferiert, die zu der CPU gehört, wie in Block 318 gezeigt.
Das Betriebssystem setzt in Block 312 fort, jedes der Pakete
in der Schlange, die zu der CPU gehört, zu verarbeiten.
-
Falls
keine Pakete mehr durch die Netzschnittstellenkarte in Block 316 empfangen
wurden (z.B. keine Pakete in dem Ringpuffer sind, der zu der NIC
gehört),
wird die Netzschnittstelle instruiert, von dem Abfragemodus zu dem
Interruptmodus in Block 320 umzuschalten. Wie oben beschrieben
kann z.B. die NIC, die durch einen speziellen NIC-Identifikator identifiziert
wird, instruiert sein, von dem Abfragemodus zu dem Interruptmodus
umzuschalten. Der Prozess setzt dann in Block 306 fort,
Interrupts zu verarbeiten, wie sie empfangen werden.
-
Wie
oben beschrieben, werden sowohl eingehende als auch ausgehende Pakete,
die in der Schlange vorhanden sind, die mit der CPU in Verbindung
steht, verarbeitet. Diese Pakete können mit vielen Netzverbindungen
ebenso wie einer einzelnen Netzverbindung in Verbindung stehen.
-
Die
beschriebenen Ausführungsformen
können
in einer Vielfalt von Programmiersprachen implementiert werden.
In Übereinstimmung
mit einer Ausführungsform
werden die beschriebenen Ausführungsformen
in einer objektorientierten Programmiersprache implementiert. Sprachen,
die objektorientierte Programmierung unterstützen, bringen auch Multithreading
auf verschiedenen Wegen unter und fördern es. Z.B. unterstützt JavaTM Multithreading durch Einschließen von
Synchronisationsmodifikatoren in der Sprachsyntax, durch Vorsehen
von Klassen, die für
Multithreading entwickelt sind, die durch andere Klassen geerbt
werden können,
und durch Durchführen
von Hintergrund"Ausschussdatensammlung" (Wiedergewinnen
von Datenbereichen, die nicht länger
verwendet werden) für
viele Threads. Somit werden in Übereinstimmung
mit einer Ausführungsform ein
oder mehr Threads für
eine Ausführung
der beschriebenen Ausführungsformen
instantiiert.
-
4 ist
ein Prozessflussdiagramm, das ein Verfahren zum Durchführen von
Abfragen veranschaulicht, um Netzverkehr in Übereinstimmung mit einer Ausführungsform
der Erfindung zu handhaben. Speziell werden ein oder mehr Arbeitsthreads
(worker threads) zur Ausführung
des oben beschriebenen Verfahrens instantiiert. Wie in Block 402 gezeigt,
wird das Computersystem erneut hochgefahren. Zu dieser Zeit werden
in Block 404 ein oder mehr Arbeitsthreads instantiiert.
In Übereinstimmung
mit einer Ausführungsform
sind die Arbeitsthreads einer bestimmten CPU gewidmet.
-
Zu
der Zeit, zu der das System wieder hochgefahren wird, wird das System
in Block 406 derart initialisiert, dass die NIC auf eine
spezielle CPU abgebildet wird, wobei dadurch die Schlange der CPU mit
dem Ringpuffer der NIC in Verbindung gebracht wird. Dies kann durch
die Verwendung eines gemeinsamen Identifikators bewerkstelligt werden,
wie oben beschrieben wird. Außerdem
wird das System derart initialisiert, dass die NIC im Interruptmodus
ist.
-
Wenn
die NIC die CPU in Block 408 unterbricht, um ein Paket
zu verarbeiten, signalisiert die CPU einem Arbeitsthread (z.B. der
CPU gewidmet) in Block 410, Pakete zu verarbeiten. Der
Arbeitsthread kann einer Verarbeitung aller Pakete für die CPU
gewidmet sein, oder lediglich einer Verarbeitung von Paketen in
der Schlange gewidmet sein, die zu der CPU gehört. Speziell transferiert der
Arbeitsthread eine Menge von Paketen in dem Ringpuffer der NIC zu
der Schlange der CPU in Block 412. In Übereinstimmung mit einer Ausführungsform
ruft der Arbeitsthread eine Prozedur GET PACKETS mit dem NIC-Iden tifikator
als einen Parameter ab, um die Pakete von dem Ringpuffer der NIC
zu der Schlange der CPU zu transferieren. Wie oben beschrieben,
bildet der NIC-Identifikator die CPU und ihre zugehörige Schlange
zu der NIC und ihren zugehörigen
Ringpuffer ab. Der Arbeitsthread ruft dann eine Prozedur CHANGE
INTERRUPT in Block 414 mit dem NIC-Identifikator als einen
Parameter und einem boolschen Wert, um Interruptverarbeitung für die NIC,
die durch den NIC-Identifikator (und ihre zugehörige CPU) identifiziert wird,
abzuschalten. Auf diese Art und Weise wird die NIC instruiert, in
den Abfragemodus einzutreten. Z.B. kann die NIC instruiert werden,
in den Abfragemodus einzutreten, wenn der Interrupt empfangen wird
oder kurz danach. Außerdem
verarbeitet der Arbeitsthread jedes der Pakete in der Schlange der
CPU in Block 416.
-
Wenn
der Arbeitsthread die Verarbeitung aller Pakete in der Schlange
der CPU erledigt hat, findet er in Block 418 heraus, ob
die NIC beliebige zusätzliche
Pakete empfangen hat. Z.B. kann der Ringpuffer, der zu der NIC gehört, in Block 418 geprüft werden
um zu bestimmen, ob es beliebige Pakete in dem Ringpuffer gibt.
-
Falls
in Block 420 mehr Pakete durch die NIC empfangen wurden
(z.B. gibt es zusätzliche
Pakete in dem Ringpuffer), ruft der Arbeitsthread in Block 422 erneut
die Prozedur GET PACKETS ab, um die Menge von Paketen in dem Ringpuffer
der NIC zu der Schlange, die zu der CPU gehört, zu transferieren, wie oben
beschrieben wird. Der Prozess setzt dann fort, wie in Block 416 gezeigt,
und der Arbeitsthread verarbeitet jedes der Pakete in der Schlange
der CPU.
-
Sobald
bestimmt ist, dass die NIC keinerlei zusätzliche Pakete empfangen hat
(z.B. gibt es keine zusätzlichen
Pakete in dem Ringpuffer), ruft der Arbeitsthread in Block 424 die
Prozedur CHANGE INTERRUPT mit dem NIC-Identifikator und einem boolschen
Wert als einen Parameter ab, um Interruptverarbeitung für die NIC,
die durch den NIC-Identifikator identifiziert wird (und ihre zugehörige CPU),
einzuschalten. Auf diese Art und Weise wird die NIC instruiert,
in den Interruptmodus einzutreten. Somit wird die NIC instruiert,
zu dem Interruptmodus umzuschalten, wenn keine Pakete in der Schlange,
die zu der CPU gehört,
oder dem Puffer, der zu der NIC gehört, sind. Der Prozess setzt
dann in Block 408 fort, wie Interrupts durch die CPU empfangen
werden.
-
In Übereinstimmung
mit einer anderen Ausführungsform
ist der Arbeitsthread lediglich für eine Verarbeitung von Paketen
in der Schlange der CPU verantwortlich. Somit wird ein zweiter Arbeitsthread für den Zweck
eines Transfers der Pakete von dem Ringpuffer der NIC zu der Schlange
der CPU über
die Prozedur GET PACKETS instantiiert. Dieser zweite Arbeitsthread
ist auch für
TCP/IP-Verarbeitung der Pakete verantwortlich. Sobald die Kette
von Paketen zu der Schlange der CPU transferiert wurde, verarbeitet
der ursprüngliche
Arbeitsthread die Pakete.
-
5 ist
ein Prozessflussdiagramm, das ein Verfahren zum Initialisieren der
NIC, wie in Block 406 von 4 gezeigt,
veranschaulicht, um dynamisches Abfragen in Übereinstimmung mit einer Ausführungsform
der Erfindung zu unterstützen.
Wie oben beschrieben, wird in Übereinstimmung
mit einer Ausführungsform
ein NIC-Identifikator verwendet, um eine CPU und ihre zugehörige Schlange
auf eine NIC und ihren zugehörigen
Ringpuffer abzubilden. Somit wird ein NIC-Identifikator in Block 502 zugeordnet. Der
NIC-Identifikator wird einer NIC und einem zugehörigen Ringpuffer 504 zugewiesen.
Außerdem
wird der NIC-Identifikator einer CPU und ihrer zugehörigen Schlange
in Block 506 zugewiesen. Auf diese Art und Weise wird ein
einzelner NIC-Identifikator mit einer CPU und ihrer zugehörigen Schlange
in Verbindung gebracht, ebenso wie mit einer NIC und ihrem zugehörigen Ringpuffer
in Verbindung gebracht. Der NIC-Identifikator wird dann dem Netzprotokollstapel des
Betriebssystemkerns in Block 508 ebenso wie die NIC bereitgestellt.
Auf diese Art und Weise können
der Betriebssystemkern und die NIC miteinander unter Verwendung
des NIC-Identifikators
kommunizieren. Es wird dann in Block 510 Interruptverarbeitung
derart initiiert, dass die NIC im Interruptmodus ist.
-
Die
oben beschriebenen Ausführungsformen ermöglichen,
dass eine NIC und ihr Betriebsmodus durch einen Betriebssystemkern
gesteuert werden. Speziell kann die Fähigkeit einer NIC, eine CPU
zu unterbrechen, aktiviert oder deaktiviert werden. Dieser Betriebsmodus
kann ein allgemeiner Betriebsmodus sein. Alternativ kann dieser
Betriebsmodus für die
Handhabung von Paketen, die durch die NIC empfangen werden, spezifisch
sein. Mit anderen Worten kann in Übereinstimmung mit einer Ausführungsform
ein Interrupt durch die NIC für
Zwecke außer
einer Benachrichtigung des Betriebssystemkerns, dass ein Paket empfangen
wurde, generiert werden, selbst wenn die NIC in den Abfragemodus ist.
-
Die
vorliegende Erfindung kann in einem beliebigen geeigneten Computersystem
implementiert werden. 6 veranschaulicht ein typisches
Mehrzweck-Computersystem 1502, das zum Implementieren der
vorliegenden Erfindung geeignet ist. Das Computersystem kann eine
beliebige geeignete Form annehmen.
-
Computersystem 1530,
oder genauer CPUs 1532, kann angeordnet sein, eine virtuelle
Maschine zu unterstützen,
wie durch einen Durchschnittsfachmann erkannt wird. Das Computersystem 1502 inkludiert
eine beliebige Zahl von Prozessoren 1504 (auch als zentrale
Verarbeitungseinheiten oder CPUs bezeichnet), die mit Speichereinrichtungen
gekoppelt sein können,
inkludierend eine primäre
Speichereinrichtung 1506 (typi scherweise ein Nur-Lese-Speicher oder
ROM) und eine primäre
Speichereinrichtung 1508 (typischerweise ein Speicher mit
wahlfreiem Zugriff oder RAM). Wie in der Technik gut bekannt ist, agiert
ein ROM, um Daten und Instruktionen unidirektional zu den CPUs 1504 zu
transferieren, während RAM
typischerweise verwendet wird, um Daten und Instruktionen auf eine
bidirektionale Art und Weise zu transferieren. Beide primäre Speichereinrichtungen 1506, 1508 können beliebige
geeignete computerlesbare Medien inkludieren. Die CPUs 1504 kann
im allgemeinen eine beliebige Zahl von Prozessoren inkludieren.
-
Es
kann auch ein sekundäres
Speichermedium 1510, das typischerweise eine Massenspeichereinrichtung
ist, bidirektional mit CPUs 1504 gekoppelt sein, und sieht
zusätzliche
Datenspeicherkapazität
vor. Die Massenspeichereinrichtung 1510 ist ein computerlesbares
Medium, das verwendet werden kann, um Programme, inkludierend Computercode, Daten
und dergleichen, zu speichern. Typischerweise ist die Massenspeichereinrichtung 1510 ein
Speichermedium, wie etwa eine Festplatte, die typischerweise langsamer
als primäre
Speichereinrichtungen 1506, 1508 ist.
-
Die
CPUs 1504 können
auch mit einer oder mehr Eingabe-/Ausgabeeinrichtungen 1512 gekoppelt
sein, die Einrichtungen inkludieren können, aber nicht darauf begrenzt,
wie etwa Videomonitore, Track-Balls (Rollkugeln), Mäuse, Tastaturen,
Mikrofone, berührungsempfindliche
Anzeigen, Tranducer-Kartenleser, magnetische oder Papierbandleser, Tabletts,
Griffel, Sprach- oder
Handschrifterkennungseinrichtungen oder andere gut bekannte Eingabeeinrichtungen,
wie etwa natürlich
andere Computer. Schließlich
können
die CPUs 1504 optional mit einem Computer oder einem Telekommunikationsnetz,
wie etwa einem Internet-Netz oder einem Intranet-Netz, unter Verwendung
einer Netzverbindung, wie allgemein bei 1514 gezeigt, gekoppelt
sein. Mit einer derartigen Netzverbindung wird erachtet, dass die
CPUs 1504 Information von dem Netz empfangen können, oder
Information zu dem Netz im Verlauf einer Durchführung der oben beschriebenen
Verfahrensschritte ausgeben können.
Derartige Information, die häufig
als eine Sequenz von Instruktionen dargestellt wird, um unter Verwendung
der CPUs 1504 ausgeführt
zu werden, kann von/zu dem Netz z.B. in der Form eines Computerdatensignals,
das in einer Trägerwelle
verkörpert
ist, empfangen und ausgegeben werden.
-
Obwohl
veranschaulichende Ausführungsformen
und Anwendungen dieser Erfindung hierin gezeigt und beschrieben
werden, sind viele Variationen und Modifikationen möglich, die
innerhalb des Konzepts, Bereichs und Geistes der Erfindung bleiben,
und diese Variationen würden
einem Durchschnittsfachmann nach Durchsicht dieser Anmeldung klar
werden. Obwohl z.B. die oben beschriebenen Ausführungsformen in Bezug auf die
Verwendung eines einzelnen NIC-Treibers dargelegt werden, sind diese
Ausführungsformen
lediglich veranschaulichend. Entsprechend können die beschriebenen Ausführungsformen
bezüglich
einer Vielfalt von Systemen implementiert werden, und können deshalb
mit einer größeren Anzahl
von Treibern implementiert werden. Z.B. kann ein Treiber in Verbindung mit
jeder NIC implementiert werden. Außerdem sind die oben beschriebenen
Prozessblöcke
lediglich veranschaulichend. Deshalb kann die Kommunikation zwischen
dem Computerbetriebssystem und jeder NIC unter Verwendung alternativer
Prozessblöcke ebenso
wie alternativer Datenstrukturen durchgeführt werden. Entsprechend sind
die vorliegenden Ausführungsformen
als veranschaulichend und nicht beschränkend zu betrachten, und die
Erfindung ist nicht auf die hierin angegebenen Details zu begrenzen,
sondern kann innerhalb des Bereichs und von Entsprechungen der angefügten Ansprüche modifiziert
werden.