-
HINTERGRUND
-
Technisches Gebiet
-
Ausführungsformen
der Erfindung beziehen sich allgemein auf Interrupts für Prozessoren.
-
Technischer Hintergrund
-
Ein
Advanced Programmable Interrupt Controller (APIC) ist ein programmierbarer
Interrupt-Controller (PIC),
der Interrupt-Anfragen erhält
und Interrupt-Ausgaben gemäß programmierbaren
Prozeduren und Prioritäten
bereitstellt. Lokale APICs werden in Prozessoren (z. B. Mikroprozessoren)
benutzt. I/O-APICs werden in Chipsatz-Vorrichtungen (wie z. B. ein
Input/Output-(I/O)-Controllerhub (ICH)) und Peripherievorrichtungen verwendet.
Beispiele von Peripherievorrichtungen umfassen mit dem ICH gekoppelte
Vorrichtungen, die mit den Peripheral Component Interconnect(PCI)-Standards
oder einem der PCI-Express(PCIe)-Standards,
wie z. B. der PCI Express® Base Specification Revision
2.0, 20. Dezember 2006, die von PCI-SIG® bereitgestellt
werden, kompatibel sind. Ein xAPIC ist ein erweiterter APIC, der ähnlich ist
zu den früheren
APICs jedoch mit einigen zusätzlichen
Merkmalen, und in einer xAPIC-Architektur kommunizieren lokale und
I/O-APICs über
einen Systembus anstelle eines APCI-Bus. Ein weiterer erweiterter
xAPIC umfasst zusätzliche
Erweiterungen und Merkmale.
-
Prozessorbaugruppen
können
mehr als einen Kerne aufweisen, von denen jeder mehr als einen Prozessor
aufweist. Physical Mode Interrupts sind Interrupts, für die eine
unterbrechende Vorrichtung einen Prozessor durch eine physikalische
Identifikationsnummer bezeichnet oder für die eine Rundsendung an alle
Prozessoren gesendet wird. Logical Mode Interrupts sind Interrupts,
für die
eine unterbrechende Vorrichtung einen Prozessor oder Prozessoren
durch eine logische Identifikationsnummer oder -nummern bezeichnet.
Zuführungen
von APIC- Interrupts
umfassen gerichtete Interrupts (Einzelprozessorziel), Multi-Cast
(Mehrfachprozessorziel) und Broadcast (alle Prozessoren). In einem
Interrupt niedrigster Priorität
wird eine Prozedur verwendet, um einen Prozessor auszuwählen, der
sich in der niedrigsten Prozessorpriorität befindet, um auf den Interrupt zu
antworten. Die niedrigste Priorität kann in dem Chipsatz entschieden
werden – oftmals
in einer adhoc Weise oder mit alten Daten einer Prozessorpriorität. Da die
Prioritätsinformationen
oftmals nicht zuverlässig
sind, wählen
einige Chipsätze
lediglich einen bestimmten Prozessor aus (beispielsweise durch eine
Ringtechnik) und liefern den Interrupt an diesen Prozessor mittels
eines Broadcasts (Rundsendung), bei welcher die anderen Prozessoren
ebenfalls die Interrupts erhalten, auf die sie jedoch nicht antworten.
-
Der
logische Modus bietet eine erheblich größere Flexibilität beim Lenken
der Interrupts und ist der Modus, der von Microsoft Windows und
einigen Linux Shrink-Wrap Betriebssystem verwendet wird. Der logische
Modus der xAPIC-Architektur bietet einem Betriebssystem Software
mit Flexibilität
beim Initialisieren der logischen APIC-Identifikationsnummer (ID),
welche die eindeutige Kennung für
jeden Prozessor in dem System ist. (Die Prozessoren besitzen außerdem physikalische
APIC IDs.) Andere Prozessoren sowie andere Vorrichtungen oder IOxAPICs
benutzen diese ID, um Interrupts an diesen Prozessor zu senden.
Durch die Flexibilität
beim Initialisieren der logischen xAPIC ID gibt es keine Beziehung
zwischen der tatsächlichen
physikalischen Topologie der Plattform und wie die IDs zugewiesen
sind. Obgleich eine Initialisierung von Betriebssystemen dem Betriebssystem
eine größere Flexibilität beim Gruppieren
der Prozessoren ermöglichen,
kompliziert dies das Routing von gerichteten Logical Modus Interrupts
auf einem Plattformlevel. Das Routing von Interrupts in logischem
Modus erfolgt durch Rundsenden der Interrupts, wobei die lokale
Prozessorlogik den Interrupt akzeptiert, wenn er zu der lokalen
APIC ID passt.
-
Wenn
jeder Prozessor jeden Interrupt prüft, führt dies zur Ineffizienz sowohl
in der Leistung als auch in dem Energieverbrauch. Bei dem Broadcast-Ansatz
beispielsweise überprüft jeder
Prozessor, um zu sehen, ob der Interrupt für diesen Prozessor bestimmt
ist, obgleich der Prozessor sich in einem Low-Power-Zustand befindet.
Da Interrupts recht oft auftreten, ist es schwierig für den Prozessor,
in einem tiefen Low-Power-Zustand zu verbleiben. Weiterhin ist die
Leistungsfähigkeit
verringert, weil Verkehr auf Verbindungen beim Senden von Interrupts
an Baugruppen gibt, für
die die Interrupts nicht bestimmt sind. Nach einem Ansatz versucht ein
Betriebssystem ein logisches Cluster von Prozessoren für Prozessoren
in der gleichen Baugruppe zu bilden durch Zuordnen von logischen
IDs in der Reihenfolge, in der die Prozessoren gestartet werden.
Dieser Ansatz liefert nur eine Teillösung, wenn man sich darauf
verlässt
und Broadcasting immer noch verwendet wird. Es besteht daher immer
noch ein Bedarf zum Erzeugen logischer APICs, die zu Prozessoren
in einer effizienten Weise geroutet werden können.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Die
Erfindungen sind vollständiger
aus der nachfolgend gegebenen detaillierten Beschreibung und aus
den beigefügten
Zeichnungen von Ausführungsformen
der Erfindungen zu verstehen, die jedoch nicht als eine Beschränkung der
Erfindungen auf spezielle beschriebene Ausführungsformen zu verstehen sind,
sondern nur zur Erläuterung
und zum Verständnis
dienen.
-
1 ist
eine Darstellung eines Blockdiagramms eines Systems, das Multi-Core-Prozessor-Baugruppen,
eines Input/Output-Hub und einer Vorrichtung gemäß einiger Ausführungsformen
der Erfindungen umfasst.
-
2 ist
eine Darstellung eines Blockdiagramms eines Systems, das Multi-Core-Prozessor-Baugruppen,
einen Input/Output-Hub und eine Vorrichtung gemäß einiger Ausführungsformen
der Erfindungen umfasst.
-
3 ist
eine Darstellung eines Blockdiagramms von Sockeln auf einer Schaltungsplatine
zur Verwendung in einigen Ausführungsformen
der Erfindungen.
-
4 ist
eine Darstellung eines Blockdiagramms eines Registers einer physikalischen
APIC ID zur Verwendung in einigen Ausführungsformen der Erfindungen.
-
5 ist
eine Darstellung eines Blockdiagramms eines Registers einer logischen
APIC ID zur Verwendung in einigen Ausführungsformen der Erfindungen.
-
6 ist
eine Darstellung eines Blockdiagramms einer Erzeugungslogik einer
logischen APIC ID.
-
7 stellt
die Generierung einer logischen APIC ID aus einer physikalischen
APIC ID zur Verwendung in einigen Ausführungsformen der Erfindungen
dar.
-
8 stellt
physikalische und logische APIC IDs für ein Zweisockelsystem mit
vier Kernen pro Baugruppe und zwei logischen Prozessoren pro Kern
gemäß einigen
Ausführungsformen
der Erfindungen dar.
-
9 ist
eine Darstellung eines Blockdiagramms einer APIC-Umleitungstabelle
mit mehreren Einträgen
zur Verwendung in einigen Ausführungsformen
der Erfindungen.
-
10 ist
eine Darstellung eines Blockdiagramms eines Eintrags einer APIC-Umleitungstabelle
zur Verwendung in einigen Ausführungsformen
der Erfindungen.
-
DETAILLIERTE BESCHREIBUNG
-
In
einigen Ausführungsformen
erzeugt ein System logische APIC IDs für jeden Prozessor aus physikalischen
IDs der Prozessoren. Die logischen APIC IDs umfassen eine Prozessorcluster
ID und eine Prozessornummer innerhalb des Clusters (Intra-Cluster
ID). Die logischen APIC IDs werden so erzeugt, dass alle Prozessoren
innerhalb eines Clusters in der gleichen Prozessorbaugruppe enthalten
sind. Dies dient dazu, den Verkehr auf Verbindungen zu reduzieren,
weil Interrupts nur zu einer Prozessorbaugruppe gelenkt werden können anstatt
auf alle Prozessorbaugruppen durch eine Broadcasting verteilt zu
werden. Dies verringert den Energieverbrauch, weil Prozessoren in
anderen Prozessorbaugruppen (oder in einigen Fällen andere Cluster innerhalb
der gleichen Prozessorbaugruppe) die Interrupts nicht erhalten und
dadurch nicht ermitteln müssen, ob
der Interrupt für
sie bestimmt ist. In einigen Fällen
wird dadurch vermieden, dass Prozessoren aus einem Ruhezustand austreten
müssen.
-
In
einigen Ausführungsformen
kann eine logische Zielidentifikationsnummer Prozessoren umfassen, die
verfügbar
sind, um auf einen Interrupt zu antworten. Eine Prozessorauswahllogik
wählt einen
der verfügbaren
Prozessoren aus, um auf den Interrupt zu antworten.
-
In
der nachfolgenden Diskussion sind physikalische APIC IDs Beispiele
von physikalischen Prozessoridentifikationsnummern und logische
APIC IDs sind Beispiele von logischen Prozessoridentifikationsnummern.
Eine Erzeugungslogik von logischen APIC IDs ist am Beispiel einer
Erzeugungslogik von logischen Identifikationsnummern gezeigt.
-
1. Überblick über das System
-
1 stellt
ein System dar, das in einigen Ausführungsformen der Erfindungen
benutzt werden kann, wobei jedoch andere Ausführungsformen Systeme umfassen
können,
die andere Details aufweisen. Bezug nehmend auf 1 umfasst
ein System mehrere Prozessorbaugruppen, die wenigstens eine Prozessorbaugruppe
0 und eine Prozessorbaugruppe 1 umfassen, die an ein Input/Output-Hub
(IOH) 12 gekoppelt sind. Das IOH 12 umfasst einen
IOH I/O APIC 14, eine Umlenkungslogik 18 und eine
Prozessorauswahllogik 20. Eine PCIe Vorrichtung 26,
welche einen PCIe I/O APIC 28 umfasst, ist mit dem IOH 12 durch
eine Interrupt Interface Schaltung 30 gekoppelt. Vorrichtungen 36 (wie
z. B. eine Tastatur und eine Maus) liefern Interrupts über den IOH
I/O APIC 14. IOH I/O APIC 14, I/O PCIe APIC 28 und
lokale APICs 72-1...72-4 und 78-1...78-4 können verschiedene
Arten von APICs sein, wie z. B. xAPICs oder erweiterte xAPICs. Alternativ
können
andere Interrupt Controller als APCIs verwendet werden.
-
Die
Baugruppe 0 umfasst Kerne 0 und 1 und eine zusätzliche Schaltung, die hierin
als Nichtkern 42 bezeichnet wird. Der Kern 0 umfasst die
Prozessoren 70-1 und 70-2, welche lokale APICs 72-1 bzw. 72-2 aufweisen,
und der Kern 1 umfasst die Prozessoren 70-3 und 70-4,
die lokale APICs 72-3 bzw. 72-4 aufweisen. Die
Baugruppe 1 umfasst die Kerne 2 und 3 und eine zusätzliche
Schaltung, die als Nichtkern 52 bezeichnet wird. Der Kern
1 umfasst Prozessoren 76-1 und 76-2, welche lokale
APICs 78-1 bzw. 78-2 aufweisen, und der Kern 3
umfasst die Prozessoren 76-3 und 76-4, die lokale
APICs 78-3 bzw. 78-4 aufweisen. Die Baugruppen 0
und 1 umfassen verschiedene Komponenten, die nicht getrennt dargestellt
sind. Ein Speicher 64 (wie z. B. ein Hauptspeicher DRAM)
ist mit dem Nichtkern 42 gekoppelt und ein Speicher 66 ist
mit dem Nichtkern 52 gekoppelt. Ein Speicher 60 (der
eine Festplatte aufweist, die ein Betriebssystem (OS) speichert)
ist mit dem IOH 12 gekoppelt. Es kann Zwischenkomponenten
zwischen dem Speicher 60 und dem IOH 12 geben.
Ein BIOS-Speicher 62 ist mit dem IOH 12 gekoppelt.
-
Die
Prozessoren 70-1, 70-2, 70-3 und 70-4 besitzen
physikalische APIC IDs P0, P1, P2 bzw. P3. Die Prozessoren 70-1, 70-2, 70-3 und 70-4 besitzen
physikalische APIC IDs P0, P1, P2 bzw. P3. Die Erzeugungslogik für logische
APIC IDs (in 6) liefert logische APIC IDs
L0, L1, L2 und L3 und L16, L17, L18 und L19 aufgrund der physikalischen
IDs P0, P1, P2 und P3 und P16, P17, P18 bzw. P19. (Selbstverständlich stellen P0...P4
und P16...P19 und L0...L3 und L16...L19 ID-Bits dar und nicht die
Buchstaben „P” oder „L” und eine Zahl.)
In einigen Ausführungsformen
umfassen die Baugruppen 0 und 1 mehr als zwei Kerne (siehe z. B. 8)
und ein Kern kann mehr als zwei Prozessoren aufweisen. In der dargestellten
Ausführungsform
befindet sich eine Lücke
in den physikalischen IDs zwischen P3 und P16 und in den entsprechenden
logischen IDs zwischen L3 und L16. Der Grund dafür ist, dass in diesen Ausführungsformen
ein Cluster IDs für
sechzehn Prozessoren umfasst unabhängig davon, ob tatsächlich sechzehn
Prozessoren vorhanden sind. Eine Prozessorbaugruppe kann einen Chip
(Halbleiterplättchen)
oder mehr als einen Chip umfassen. Eine Prozessorbaugruppe kann
keinen, einen oder mehr als einen Speicherchip aufweisen.
-
Die
Umlenkungslogik 18 empfängt
einen Wert (z. B. einen 16-Bit-Wert) von der Vorrichtung 26 und
liefert einen Interrupt an die Baugruppe 0 oder die Baugruppe 1.
Die Entscheidung, welcher Prozessor verwendet wird, um auf den Interrupt
zu antworten, kann an verschiedenen Orten stattfinden. Beispielsweise
kann abhängig
von der Ausführungsform
die Entscheidung in der Prozessorauswahllogik 20 in dem
IOH 12 vorgenommen werden und/oder in einer Prozessorauswahlsublogik
in einem Nichtkern (wie z. B. der Prozessorauswahlsublogik 46 im
Nichtkern 42 oder der Prozessorauswahlsublogik 56 in
einem Nichtkern 52). Ein Filter 48 in der Unterlogik 48 und
ein Filter 58 in der Sublogik 56 können benutzt
werden, um die Berücksichtigung
von Prozessoren auszufiltern aufgrund von beispielsweise Leistungszuständen (c-Zuständen) und/oder
einer Prozessorpriorität.
Ein ähnliches
Filter kann in der Prozessorauswahllogik 20 verwendet werden.
In einigen Ausführungsformen
gibt es keine Prozessorauswahllogik 20 sondern nur eine
Prozessorauswahlsublogik.
-
2 ist ähnlich zur 1 und
stellt ein IOH 112 mit einem IOH APIC 114, einer
Umlenkungslogik 118, einer Prozessorauswahllogik 120 und
einer Interrupt-Interfaceschaltung 130 dar, die ähnlich oder
identisch zum dem IOH APIC 14, der Umlenkungslogik 18,
der Prozessorauswahllogik 20 und der Interrupt-Interfaceschaltung 30 in 1 sein
können. 2 stellt
außerdem
eine Prozessorbaugruppe 0 dar, die ein Cluster von Prozessoren 0
und ein Cluster von Prozessoren 1 umfasst, eine Prozessorbaugruppe
1, die ein Cluster von Prozesso ren 2 und ein Cluster von Prozessoren
3 umfasst, eine Prozessorbaugruppe N – 1, die ein Cluster von Prozessoren
2 (N – 1)
und ein Cluster von Prozessoren 2 (N – 1) + 1 umfasst. Die Prozessorpakete
0, 1,...N – 1
sind mit dem IOH 112 durch Verbindungen 142-0, 142-1...142-N – 1 gekoppelt.
In einigen Ausführungsformen
sind separate Verbindungen zu separaten Prozessoren vorhanden und
in einigen Ausführungsformen
wird ein Satz von Verbindungen für
jede Prozessorbaugruppe oder ein Satz von Interrupts für jedes Cluster
verwendet. Die Cluster ID eines Interrupts zeigt an, welches der
Cluster dafür
bestimmt ist, das Interrupt zu erhalten.
-
Beispielsweise
wird angenommen, dass die Cluster ID 0000000000000010b (wobei b
binär anzeigt) ist.
Dies würde
anzeigen, dass das Cluster 2 zum Empfangen des Interrupts bestimmt
ist. Dies benötigt
weniger Energie und benötigt
weniger Verkehr auf den Verbindungen im Vergleich zu einem Ansatz,
bei dem Interrupt an alle Prozessoren durch Broadcasting verteilt
wird. Das Interrupt wird nicht an die Verbindungen 142-0 und 142-N – 1 gesendet,
so dass weniger Verkehr an diesen Verbindungen vorliegt, was für die Bandbreite nützlich ist
und den Energieverbrauch reduziert. Außerdem brauchen die Prozessoren
in den Cluster 0, 1, 3, 2 (N – 1)
und 2(N – 1)
+ 1 nicht zu überprüfen, ob
das Interrupt für
sie bestimmt ist, was den Energieverbrauch reduziert (insbesondere,
wenn ein Prozessor aus einem tiefen Low-Power-Zustand austreten
muss, um zu bestimmen, ob das Interrupt für ihn bestimmt ist). Außerdem kann
weniger Cache-Line-Verkehr zwischen den Prozessoren in den verschiedenen
Clustern aufgrund der Orte vorhanden sein. Andere Ausführungsformen können sogar
mehr Cluster von Prozessoren in Prozessorbaugruppen aufweisen. Andere
Komponenten (wie z. B. Nichtkerne, falls vorhanden) sind in 2 nicht
gezeigt. Es kann zusätzliche
Komponenten geben, wie z. B. Brücken
zwischen dem IOH und den Prozessorpaketen. Ferner können mehr
als ein IOH in dem System vorhanden sein.
-
3 zeigt
eine Schaltungsplatine 190 (z. B. eine gedruckte Schaltungsplatine),
die Sockel umfasst, einschließlich
eines Sockels 0 zum Aufnehmen einer Prozessorbaugruppe 0, eines
Sockels N – 1
zum Aufnehmen einer Prozessorbaugruppe N – 1, und eines Sockels 194 zum
Aufnehmen eines IOH-Chips. In einigen Implementierungen kann die
Schaltungsplatine 190 außerdem Sockel für Prozessorbaugruppen
und für
verschiedene andere Chips aufweisen, wobei jedoch in anderen Implementierungen
die Schaltungsplatine 190 nur zwei Sockel umfasst. Der
Begriff „Sockel”, wie er
hier benutzt wird, deckt verschiedene Arten von Techniken zum Verbinden
von einem oder mehreren Chips mit einer Schaltungsplatine ab.
-
2. Initialisierung einer APIC
ID
-
In
einigen Ausführungsformen
sind die physikalischen APIC IDs durch Hardware und/oder durch Micro-Code
statisch initialisiert/eingebunden, beispielsweise beim Herauskommen
aus einem Reset, und besteht bis zum nächsten Leistungszyklus. 4 stellt
ein Register 110 dar, um eine physikalische APCI ID mit
32 Bit zu halten, die in einigen Ausführungsformen in einer entsprechenden
lokalen APIC enthalten ist.
-
Die
logische APIC ID, die im logischen Modus verwendet wird, ist in
zwei Felder aufgeteilt, eine 32-Bit breite Cluster ID und eine 16-Bit
breite logische ID innerhalb des Clusters der Prozessoren. Die sechzehn
signifikantesten Bits der logischen ID enthalten die Adresse oder
eine Identifikationsnummer des Zielclusters, während die tieferen 16 Bits
eine individuelle lokale APIC-Einheit des Clusters identifizieren.
Der Teil der logischen ID kann eine Bit-Maske mit einem Bit pro Prozessor in
dem Cluster sein – beispielsweise
würde Bit
0 für einen
Prozessor 0 in einem Prozessorcluster gesetzt werden, Bit 1 für einen
Prozessor 1 in dem Prozessorcluster usw. 5 stellt
ein Register 112 dar, um eine logische APIC ID von 32 Bit
zu halten, wobei die Bits 16 bis 31 eine Cluster ID halten und die
Bits 0 bis 15 eine logische Intra-Cluster ID halten. In der Praxis
werden viele Systeme eine kleine Anzahl von Prozessorclustern aufweisen,
so dass beispielsweise nur ein oder zwei Bits benötigt werden,
um die Cluster ID zu identifizieren. In verschiedenen Ausführungsformen
können
die übrigen
Bits unterschiedlich behandelt werden. Beispielsweise können einige
der Bits ignoriert werden in einigen Systemen und in anderen Systemen
benutzt werden.
-
Durch
den Initialisierungsalgorithmus kann eine etablierte vorhandene
Beziehung zwischen der logischen APIC ID und der physikalischen
APIC ID aufgrund der Plattformtopologie vorhanden sein. Dies liefert dem
Weiterleitungsnetzwerk das Wissen um die speziellen Prozessorbaugruppen
(Sockel), um Interrupts weiterzuleiten im Gegensatz zum Vornehmen
eines Broadcast.
-
In
dem Fall, in dem ein Prozessorcluster eine Grenze von bis zu sechzehn
Prozessoren halten kann, werden mehrere Cluster pro Baugruppe vorhanden
sein, wenn mehr als sechzehn Prozessoren in einer Prozessorbaugruppe
sind. Wenn weniger als sechzehn Prozessoren in einem Cluster sind,
kann ein Auffüllen
von APIC IDs verwendet werden.
-
Eine
Erzeugungslogik 216 der logischen APIC ID erzeugt logische
APIC IDs aus den physikalischen APIC IDs. Die Erzeugungslogik 216 der
logischen APIC ID kann als Hardware, Software oder Micro-Code oder als
eine Kombination von diesen implementiert sein. Die Hardware kann
in dem Nichtkern oder der logischen APIC oder woanders sein. In
einigen Ausführungsformen
wird die logische APIC ID so erlangt, dass die unteren vier Bits
der physikalischen APIC ID „dekodiert” werden
(d. h. 1<<Physical APIC ID[3:0]),
um eine logische ID von 16 Bit in dem Cluster zu liefern. Die übrigen 16
Bits der physikalischen APIC ID bilden dann den Cluster ID-Teil
der logischen xAPIC ID. Die logische xAPIC ID wird somit aus der
logischen xAPIC ID gebildet unter Verwendung der folgenden Formel:
Logical
APIC ID = [Physical APCI ID[19:4]<<16) || (1<<Physical APIC ID[3:0])]
-
In
der Formel bedeutet das Symbol || „oder”, könnte jedoch auch durch Addition
ersetzt werden und das gleiche Ergebnis würde erzielt werden.
-
Diese
Formel kann in gleicher Weise wie folgt angegeben werden:
Logical
ID = (1<<Local xAPIC ID[3:0]) | //Intra-cluster
Logical ID |
||(Local
xAPIC ID[19:4]<<16) | //Cluster
ID |
-
7 stellt
ein Beispiel des Vorgangs zum Erlangen der logischen APICs dar durch
Konvertieren einer physikalischen APIC ID in einem Register 210 zu
einer logischen APIC ID in einem Register 212. Die Bits 20–31 können ignoriert
werden oder für
verschiedene Zwecke verwendet werden.
-
8 zeigt
ein Beispiel zum Erlangen der logischen APIC ID durch die physikalische
APIC ID in den Prozessorbaugruppen 0 und 1, von denen jede vier
Kerne mit jeweils zwei Prozessoren aufweist. Da weniger als sechzehn
Prozessoren pro Baugruppe vorhanden sind, gibt es nur ein Cluster
pro Baugruppe. Bezug nehmend auf die Baugruppe 0 ist die physikalische
APIC ID für
den Prozessor P0 als 00000b dargestellt. Das „b” steht für binär. Die erste 0 ist aus der
Cluster ID und zeigt an, dass das Cluster in der Baugruppe 0 ist.
Um in der Figur Platz zu sparen, sind andere Bits aus der Cluster
ID in der 8 nicht dargestellt. Die vier
unterstrichenen 0-en sind in der Intra-Cluster ID und zeigen an,
dass die physikalische APIC ID gleich 0 ist (ohne alle Nullen aufzulisten).
Der oben beschriebenen Prozedur folgend wird die logische APIC ID
erzeugt beginnend mit einer „1” in dem
kleinsten signifikanten Bit (LSB) in einer logischen Intra-Cluster
ID, die sonst Nullen enthält, und
durch anschließendes
Verschieben der „1” durch
den Wert, der in den ersten vier Bits der physikalischen ID zu finden
ist. Da die ersten vier Bits in der physikalischen ID des Prozessors
P0 0000 ist, wird die „1” nicht verschoben.
Somit ist die logische ID 0001h (wobei „h” sich auf Hexadezimalcode
bezieht). Hexadezimalcode wird verwendet, um es zu ermöglichen,
große
Zahlen in 8 darzustellen. Die Cluster
ID (0) bleibt die gleiche in den Bits 4–19 der physikalischen ID.
Im Fall des Prozessors P1 sind die vier LSBs der physikalischen
ID 0001, so dass die „1” um ein
Bit verschoben wird, so dass die Cluster ID 0 für das Cluster 0 ist und die
logische ID 0002h ist, die dadurch hervorgerufen wird, dass eine
1 um ein Bit verschoben wird. Im Fall des Prozessors P5 beispielsweise
wird die „1” um vier
Bits nach links verschoben, was 32 im Dezimalcode oder 20 im Hexadezimalcode
entspricht. Das gleiche folgt für
die Baugruppe 1 außer,
dass die Cluster ID in sowohl der physikalischen als auch der logischen
APIC ID 1 ist.
-
Die
Initialisierung kann zu mehreren Zeitpunkten stattfinden, beispielsweise
abhängig
von der Einfachheit der Implementierung. Beispiele, zu denen die
Initialisierung stattfinden kann, umfassen die Zeit, wenn ein Reset
auftritt, wenn die physikalische APIC ID initialisiert wird, oder
die Zeit, zu der das Betriebssystem zum ersten die Mal die logische
APIC ID liest. Der obige Algorithmus zum Auffüllen der APIC IDs kann, falls
notwendig, sicherstellen, dass jedes APIC-Cluster zu einer einzelnen
Prozessorbaugruppe konfiguriert wird.
-
3. Prozessorauswahllogik und
Umlenkung
-
Eine
Prozessorauswahllogik wählt
einen Prozessor aus, um ein Interrupt aus verfügbaren Wahlmöglichkeiten
zu empfangen. Ein lokaler APIC-Empfang eines Interrupts ist ein
Beispiel für
einen Prozessor, der ein Interrupt empfängt. Im Stand der Technik wurden
Prozessoren für
Interrupts ausgewählt
durch ein Schema mit geringster Priorität. Wie jedoch nachfolgend erklärt wird,
können
andere Faktoren oder zusätzliche
Faktoren zu der Prozessorpriorität
bei der Entscheidung berücksichtigt
werden, welcher Prozessor den Interrupt empfangen soll.
-
Das
Betriebssystem kann einen Cluster und wenigstens einen Prozessor
innerhalb des Clusters als für
den Interrupt verfügbar
auswählen.
Diese Information kann direkt oder indirekt in dem Interrupt, der
durch eine Vorrichtung, wie die Vorrichtung 26 in 1,
bereitgestellt wird, vorhanden sein. Beispielsweise kann bei einer
direkten Implementierung das Inter rupt ein Feld von 16 Bit aufweisen,
eines für
jeden Prozessor in dem Cluster, in der Weise einer Bitabbildung
(obgleich weniger als sechzehn Prozessoren vorhanden sein können, in
welchem Fall einige der Bits möglicherweise
nicht verwendet werden). Ein Prozessor, der zur Verfügung steht,
besitzt eine „1” in einer
Position, die mit dem Prozessor verknüpft ist, wobei die Position
zum Liefern der logischen APIC IDs aus den physikalischen APIC IDs
in der vorhergehend diskutierten Formel und in 8 verwendet
wird. Diese kann als logische Ziel-ID bezeichnet werden. Eine logische
Ziel-ID-Bitmaske könnte
beispielsweise 00101101 sein, wodurch angezeigt wird, dass die Prozessoren
P0, P2, P3 und P5 für
den Interrupt zur Verfügung
stehen. Dabei wird davon ausgegangen, dass acht Prozessoren in dem
Cluster vorhanden sind, so dass die 8 Bits am weitesten links nicht
gezeigt werden. Selbstverständlich
kann die Rolle von „0” und „1” umgekehrt
werden, so dass eine 0 einen verfügbaren Prozessor und eine 1
einen nicht verfügbaren
Prozessor darstellt. Die vorhergehend beschriebene Prozessorauswahllogik
kann auswählen,
welcher der verfügbaren Prozessoren
das Interrupt empfangen soll. Es ist zu beachten, dass, obgleich
typischerweise nur ein Prozessor ein Interrupt empfängt, in
einigen Fällen
ein Interrupt an mehr als einem Prozessor gelenkt wird.
-
Als
eine Alternative kann das Interrupt aus der Vorrichtung 36 einen
Index (wie z. B. einen Index mit 16 Bit) umfassen, der einen Index
in einer Umlenkungstabelle zur Verfügung stellt, der in der Umlenkungslogik 19 der 1 umfasst
ist. Bezug nehmend auf 9 umfasst eine Umlenkungstabelle 230 beispielsweise
Einträge
mit 64 Bit für
verschiedene Indexwerte. Der Eintrag 234 ist ein Beispiel. 10 zeigt
Details des beispielhaften Eintrags 234 gemäß einigen
Ausführungsformen,
dies kann jedoch in anderen Ausführungsformen
unterschiedlich sein. Bezug nehmen auf 10 zeigen
die Bits 48 bis 63 eine Cluster ID, die im Beispiel
der 10 anzeigt, dass ein Cluster 2 den Interrupt empfangen
soll. Siehe das Beispiel in Verbindung mit 2. Immer
noch Bezug nehmend auf 10 listet die logische Ziel-ID
zur Verfügung
stehende Prozessoren auf, die von der Prozessorauswahllogik (oder
Sublogik) zu berücksichtigen
sind. Die Ziel-ID-Bitmaske 011b zeigt an, dass die Prozessoren P0
und P1 zur Verfügung
stehen und die anderen Prozessoren nicht zur Verfügung stehen.
In 10 sind zur Vereinfachung der Darstellung nur
drei von sechzehn Bits gezeigt. Als ein anderes Beispiel könnte die
Zielbitmaske 00101101b sein, welche anzeigt, dass die Prozessoren
P0, P2, P3 und P5 zur Verfügung
stehen und die Prozessoren P1, P4, P6 und P7 nicht zur Verfügung stehen.
In diesem Beispiel gibt es keine Prozessoren P8 bis P15. Es könnte sein,
dass nur ein Prozessor zur Verfügung
steht. Die Bits 0 bis 31 können
verschiedene Arten von Weiterleitungsinformationen geben, beispielsweise,
ob direkte Interrupts einbezogen sind. In 10 ist
die „geringste
Priorität” gezeigt,
jedoch können
wie erwähnt
andere Faktoren, wie z. B. die Leistungszustände berücksichtigt werden, so dass
genau genommen eine Auswahl geringster Priorität nicht berücksichtigt zu werden braucht.
-
Es
gibt verschiedene mögliche
Implementierungen, die verwendet werden können, um das Interrupt innerhalb
des Clusters aufgrund der Kenntnis von Prozessorleistungszuständen und
-prioritäten
weiterzuleiten. Eine mögliche
Implementierung in dem „Nichtkern” würde die
Kenntnis der Prozessorleistungszustände und der Prioritäten verwenden,
um eine Interruptweiterleitung bereitzustellen, um eine leistungsbezogene
Interruptweiterleitung zu ermöglichen,
welche Leistungsimplikationen in Betracht zieht. Der Nichtkern besitzt Kenntnis über den
c-Zustand (Energiesparzustand) des Prozessors, welche beispielsweise
als C0, C1, C2,...C6 bezeichnet werden, wobei C0 der Zustand ist,
in welchem der Prozessor (oder der Kern) Code abarbeitet, und C1,...C6
Leerlaufzustände
sind, in denen der Prozessor angehalten wird: C1 ist der geringste
Energiesparzustand und C6 ist der höchste Energiesparzustand. Auch
die Latenz (und mikroarchitektonische Seiteneffekte), die in C1
eingehen, können
die geringsten sein, während
diese für
C6 am höchsten
sind. Um den höchsten
Wert aus den tieferen C-Zuständen
(wie z. B. C6) vorzusehen, kann es wünschenswert sein, den Prozessoren,
die in einen C6-Zustand eingetreten sind, zu ermöglichen, in diesem Zustand
für das
längstmöglichste
Intervall zu verbleiben. In dieser möglichen Implementierung würde der
Nichtkern das Ziel identifizieren durch (1) Identifizieren des/der
Prozessors/en in dem C-Zustand mit geringster Zahl, und (2) durch
Auffinden der Prozessoren mit der geringsten Priorität unter
den Prozessoren als das Ziel für
den Interrupt. Es gibt verschiedene Arten, in denen diese Ansätze implementiert
werden können.
Eine Implementierung kann ein Bitmap der Prozessoren in einer Baugruppe
in verschiedenen C-Zustanden beinhalten und diese gegenüber den
eingehenden Zielbitmap, und die höchste oder die niedrigste APIC
ID in dieser Bitmap als das Ziel auswählen. Andere Implementierungsdetails
können
verwendet werden.
-
ZUSÄTZLICHE INFORMATIONEN UND AUSFÜHRUNGSFORMEN
-
Die „Logik”, auf die
hier Bezug genommen wird, kann in Schaltungen, Software, Micro-Code
oder Kombinationen von diesen implementiert sein.
-
Eine
Ausführungsform
ist eine Implementierung oder ein Beispiel der Erfindungen. Die
Bezugnahme in der Beschreibung auf „eine Ausführungsform”, „eine einzige Ausführungs form”, „einige
Ausführungsformen” oder „andere
Ausführungsformen” bedeutet,
dass ein bestimmtes Merkmal, eine Struktur oder eine Eigenschaft,
die in Verbindung mit den Ausführungsformen
beschrieben wird, in wenigstens einigen Ausführungsformen enthalten ist,
jedoch nicht notwendigerweise in allen Ausführungsformen. Das verschiedentliche
Auftreten von „einer
Ausführungsform”, „einer
einzigen Ausführungsform” oder „einigen
Ausführungsformen” bezieht
sich nicht notwendigerweise immer auf die gleichen Ausführungsformen.
-
Wenn
gesagt ist, dass das Element „A” mit dem
Element „B” gekoppelt
ist, kann das Element A direkt mit dem Element B gekoppelt sein
oder indirekt, beispielsweise durch Element C, gekoppelt sein.
-
Wenn
die Beschreibung oder die Ansprüche
besagen, dass eine Komponente, ein Merkmal, eine Struktur, einen
Vorgang oder eine Eigenschaft A eine Komponente, ein Merkmal, eine
Struktur, einen Vorgang oder eine Eigenschaft B „veranlassen”, ist damit
gemeint, dass „A” wenigstens
zum Teil „B” veranlasst,
wobei jedoch auch wenigstens eine andere Komponente, ein Merkmal,
eine Struktur, ein Vorgang oder eine Eigenschaft vorhanden sein
kann, die zur Veranlassung von „B” beiträgt. Dass A auf B reagiert bedeutet
ebenfalls nicht, dass es nicht auch auf C reagiert.
-
Wenn
in der Beschreibung behauptet wird, eine Komponente, ein Merkmal,
eine Struktur, ein Vorgang oder eine Eigenschaft „kann” oder „könnte” enthalten
sein, ist die bestimmte Komponente, das Merkmal, die Struktur, der
Vorgang oder die Eigenschaft nicht notwendigerweise umfasst. Wenn
die Beschreibung oder die Ansprüche
auf „ein” Element
Bezug nehmen, bedeutet dies nicht, dass dies nur ein einziges Element
ist.
-
Die
Erfindungen sind nicht auf die besonderen Details, die hierin beschrieben
wurden, eingeschränkt. Stattdessen
können
viele andere Variationen der vorhergehenden Beschreibung und der
Zeichnungen innerhalb des Umfangs der vorliegenden Erfindung vorgenommen
werden. Daher sind es die nachfolgenden Ansprüche, einschließlich jeglicher Änderungen
daran, die den Umfang der Erfindung definieren.
-
Zusammenfassung
-
In
einigen Ausführungsformen
umfasst eine Vorrichtung eine Erzeugungslogik für eine logische Interruptidentifikationsnummer,
um physikalische Prozessoridentifikationsnummern zu empfangen und
logische Prozessoridentifikationsnummern zu erzeugen unter Verwendung
der physikalischen Prozessoridentifikationsnummern. Jede der logischen
Prozessoridentifikationsnummern entspricht einer der physikalischen
Prozessoridentifikationsnummern und die logische Prozessoridentifikationsnummern
umfassen jeweils eine Prozessorclusteridentifikationsnummer und
eine Intra-Cluster-Identifikationsnummer. Die Prozessorclusteridentifikationsnummern
sind jeweils so gebildet, dass sie eine Gruppe von Bits aus der
entsprechenden physikalischen Prozessoridentifikationsnummer umfassen,
die in der Position verschoben ist, und die Intra-Cluster-Identifikationsnummern
sind in Reaktion auf Werte gebildet von anderen der Bits der entsprechenden
physikalischen Prozessoridentifikationsnummer gebildet. Andere Ausführungsformen
werden beschrieben.