-
GEBIET DER ERFINDUNG
-
Das
Gebiet der Erfindung betrifft im allgemeinen das Zwischenspeichern
und genauer, jedoch nicht ausschließlich, betrifft sie Techniken
für die
Verwaltung von Caches, wobei Cache-Strategien verwendet werden, die durch
Befehlsanweisungen identifiziert werden.
-
HINTERGRUNDINFORMATION
-
Eine
der wichtigsten Betrachtungen für
das Handhaben von Netzwerkverkehr ist der Durchsatz von Paketen
(d. h. die Bandbreite). Netzwerkprozessoren und dergleichen werden
so gestaltet, daß sie
in effizienter Weise sehr große
Anzahlen von Paketen pro Sekunde verarbeiten. Um ein Paket zu verarbeiten,
muß der
Netzwerkprozessor (und/oder die Schaltapparatur, die den Netzwerkprozessor
verwendet) Daten aus dem Nachrichtenkopf des Paket herausziehen,
die das Ziel des Paketes, die Diensteklasse usw. angeben, die Nutzbereichsdaten
im Speicher speichern, verschiedene allgemeine Funktionen durchführen usw.
-
Im
allgemeinen erfordern die vorstehenden Arbeitsgänge der Paketverarbeitung mehrere
Speicherzugriffe. Als ein Ergebnis ist der Paketdurchsatz inhärent mit
den Wartezeichen beim Speicher (Zugriff) verknüpft. Idealerweise bietet ein
moderner statischer Speicher mit wahlfreiem Zugriff (SRAM – Static
Random Access Memory) auf dem Chip (d. h auf dem Prozessor-Mikroplättchen)
Zugangsgeschwindigkeiten von 10 Nanosekunden oder darunter. Jedoch
ist dieser Typ eines Speichers sehr teuer (bezüglich Chipfläche und
Chipausbeute), so daß die Menge
an SRAM-Speicher auf dem Chip typischerweise sehr gering ist. Typische
moderne Netzwerkprozessoren verwenden wenig SRAM auf dem Chip als
Arbeitsspeicher und dergleichen.
-
Der
nächstschnellste
Typ eines Speichers ist ein SRAM außerhalb des Chip (d. h. extern
liegend). Da dieser Speicher außerhalb
des Chips liegt, ist er beim Zugriff langsamer (als ein Speicher
auf dem Chip), da auf ihn über
eine Schnittstelle zwischen dem Netzwerkprozessor und dem SRAM-Speicher zugegriffen
werden muß,
wobei die Schnittstelle ihre eigene Wartezeit einführt. Ein
SRAM außerhalb
des Chips wird im allgemeinen von modernen Netzwerkprozessoren zum
Speichern und Verarbeiten von Paket-Metadaten verwendet, zusammen
mit dem Speichern weiterer temporärer, verarbeitungsbezogener Information.
-
Typischerweise
werden verschiedene Typen eines dynamischen RAM (DRAM) außerhalb
des Chips für
die Verwendung als "Massen"-Speicher verwendet.
Ein dynamischer RAM ist langsamer als ein statischer RAM (aufgrund
der physikalischen Unterschiede in der Gestaltung und Arbeitsweise
von DRAM- und SRAM-Zellen) und muß immer nach einigen Taktzyklen
aufgefrischt werden, was zusätzlichen
Gemeinaufwand bedingt. Wie zuvor, da er sich außerhalb des Chips befindet,
benötigt
er auch eine Schnittstelle (z. b. einen besonderen oder gemeinsam
genutzten Bus), damit auf ihn zugegriffen werden kann. Bei den meisten
der heutigen Gestaltungen von Netzwerkprozessoren werden DRAM-Speicher
mit verbesserter Leistungsfähigkeit
genutzt, die einen RDRAM (Rambus DRAM) oder DDR DRAM (doppelte Datenrate),
einen RLDRAM (RAM mit verringerter Wartezeit – Reduced Latency) usw. umfassen.
-
Im
allgemeinen erzeugen Zugriffe auf einen DRAM-Speicher wesentliche
Wartezeiten bei der Verarbeitung in bezug auf viele weitere Verarbeitungsaktivitäten, so
wie mathematische Berechnung. Um dieses Problem anzusprechen, können verschiedene
Zwischenspeicherschemata benutzt werden. Das grundlegende Konzept
des Zwischenspeicherschemas ist es, jüngste Speicherzugriffe (oder
andere Daten basierend auf einer zuvor definierten Cache-Strategie)
in einer kleineren Speichereinheit zwischenzuspeichern, die einen
schnelleren Zugriff hat als eine größere Speichereinheit, in der
Daten üblicherweise
gespeichert sind (temporäre
Lokalität). Auch
kann eine Cache-Strategie Daten zwischenspeichern, die physikalisch
nahe an einer benötigten Cache-Zeile
liegen, da die Daten in der nahen Zukunft oftmals benötigt werden
(räumliche
Lokalität).
-
Ein
weiterer Aspekt des Zwischenspeicherns betrifft die Speicherkohärenz. Bei
einer kohärenten Speicherarchitektur
wird allen Komponenten in einem Rechensystem oder einer Vorrichtung
der Zugriff auf dieselben Datenwerte zugesichert. Speicherkohärenz stellt
sicher, daß Daten,
die in den Speicher oder aus ihm heraus bewegt werden, nicht so
erscheinen, daß sie
unterschiedliche Werte haben, wenn auf sie von Prozessoren oder
anderen Komponenten zugegriffen wird, die auf gemeinsam genutzte Speicherressourcen
zugreifen. Beim einfachsten Ansatz gibt es nur eine Kopie von irgendwelchen
bestimmten Daten zu irgendeinem Zeitpunkt in dem gesamten System,
und nur eine Komponente kann jeweils auf die Daten zugreifen. Obwohl
dieses Schema die Speicherkohärenz
garantiert, erlaubt es kein Zwischenspeichern. Da das Zwischenspeichern
das Erstellen wenigstens einer Kopie der Daten, die in dem gemeinsam
genutzten Speicherraum gespeichert sind, umfaßt und dann erlaubt, daß die Kopie außerhalb
des gemeinsam genutzten Speicherraums modifiziert wird, muß es einen
Mechanismus geben, der sicherstellt, daß nur auf eine gültige (den
jüngsten
Wert) Version eines gegebenen Datenstückes zugegriffen werden kann.
Dieses Problem wird typischerweise gelöst, indem eines aus mehreren
gut bekannten Speicher- und Cache-Kohärenzschemata verwendet wird,
die von einem Prozessor und/oder Speichercontroller verwaltet werden,
beispielsweise indem ein Speicherrückschreibeschema verwendet wird.
-
KURZBESCHREIBUNG DER ZEICHNUNGEN
-
Die
voranstehenden Aspekte und viele der begleitenden Vorteile dieser
Erfindung werden leicht verstanden, wenn dieselben durch Bezugnahme
auf die folgende genaue Beschreibung besser verständlich werden,
wenn diese zusammen mit den beigefügten Zeichnungen betrachtet
wird, in denen gleiche Bezugsziffern sich in den verschiedenen Ansichten auf
gleiche Teile beziehen, wenn dies nicht anders angegeben ist:
-
1 ist
ein schematisches Schaubild einer beispielhaften Implementierungsumgebung,
in der Aspekte der Ausführungsformen
hierin in die Praxis umgesetzt werden können;
-
2 ist
ein Ablaufdiagramm, das Arbeitsgänge
veranschaulicht, die während
der Verarbeitung eines Paketes ausgeführt werden, die in einer Eingangsvorrichtung
empfangen werden;
-
3a ist
ein Ablaufdiagramm, das Arbeitsgänge
und Logik veranschaulicht, welche während eines Speicherschreibens
gemäß einer
Ausführungsform
durchgeführt
werden, bei der temporäre Daten
in Teil-Cache-Zeilen geschrieben werden, ohne ein Speicherauslesen
und Auffüllen
des Restes der Cache-Zeile;
-
3b ist
ein Ablaufdiagramm, das eine Erweiterung des Prozesses der 3a veranschaulicht,
der weiter die Verwendung eines Zustandes des weichen Sperrens von
Cache-Zeilen umfaßt;
-
4a ist
ein Ablaufdiagramm, das Arbeitsgänge
und Logik veranschaulicht, die während
eines Speicherschreibens gemäß einer
Ausführungsform ausgeführt werden,
bei der Daten direkt aus dem Speicher gelesen werden, ohne in dem
Fall eines Cachefehlers eine Cache-Zeile zuzuweisen;
-
4b ist
ein Ablaufdiagramm, das eine Erweiterung des Prozesses der 4a zeigt,
die weiter die Verwendung des Zustands eines weichen Sperrens der
Cache-Zeilen umfaßt;
-
5 ist
ein Ablaufdiagramm, welches Arbeitsgänge veranschaulicht, die von
einem Programmierer durchgeführt
werden, um Befehle zu erzeugen, die Anweisungen zum Bewirken einer
temporären
Datencache-Strategie enthalten;
-
6 ist
eine Pseudocode-Auflistung, die die Verwendung beispielhafter Pragma-Anweisungen veranschaulicht,
um zu bewirken, daß ein
Kompilierer geänderte
Befehle austauscht, die Anweisungen zum Bewirken der temporären Datencache-Strategie
enthalten;
-
7 ist
ein schematisches Schaubild, das eine Ausführungsform einer Cache-Architektur veranschaulicht,
um eine Ausführungsform
einer temporären
Datencache-Strategie
zu bewirken;
-
8 ist
ein schematisches Schaubild einer Netzwerkverarbeitungseinheit und
einer Zeilenkarte, die weitere Einzelheiten der Implementierungsumgebung
der 1 veranschaulicht.
-
GENAUE BESCHREIBUNG
-
Ausführungsformen
von Verfahren und Vorrichtungen, die die befehlsunterstützte Cache-Verwaltung für den effizienten
Einsatz von Cache und Speicher benutzen, werden hierin beschrieben.
In der folgenden Beschreibung werden zahlreiche bestimmte Einzelheiten
aufgeführt,
um für
ein gründliches
Verständnis
der Ausführungsformen
der Erfindung zu sorgen. Ein Fachmann wird jedoch erkennen, daß die Erfindung
ohne eines oder mehrere dieser bestimmten Einzelheiten oder mit
anderen Verfahren, Komponenten, Materialien usw. in die Praxis umgesetzt
werden kann. In anderen Fällen
sind gut bekannte Strukturen, Materialien oder Arbeitsgänge weder
gezeigt noch in Einzelheiten beschrieben, um das Verschleiern von
Aspekten der Erfindung zu verhindern.
-
Der
Bezug in dieser Beschreibung auf "eine Ausführungsform" bedeutet, daß ein bestimmtes Merkmal, eine
Struktur oder eine Eigenschaft, die in Verbindung mit der Ausführungsform
beschrieben wird, in wenigstens einer Ausführungsform der vorliegenden
Erfindung enthalten ist. Somit bezieht sich das Auftreten der Ausdrücke "bei einer Ausführungsform" an verschiedenen
Stellen in dieser Beschreibung nicht notwendigerweise immer auf
dieselbe Ausführungsform.
Weiterhin können
die besonderen Merkmale, Strukturen oder Eigenschaften in irgendeiner
geeigneten Weise bei einer oder mehreren Ausführungsformen kombiniert werden.
-
Gemäß Aspekten
der Ausführungsformen, die
nun beschrieben werden, werden Techniken zum Unterstützen des
effektiven Einsatzes von Cache und Speicher über eine befehlsunterstützte Cache-Verwaltung
offenbart. Die Techniken verringern den Verbrauch an Speicherbandbreite
(indem viele Speicherlese- und -schreibvorgänge beseitigt werden, die typischer weise
im Zusammenhang mit herkömmlichen
Cache-Strategien ausgeführt
werden) und erhöhen
den Wirkungsgrad des Cache. Weiterhin ermöglichen die Techniken die Steuerung
des Cache-Einsatzes und der Zuweisung der Cache-Zeilen per Programm
in einer Weise, die es Programmierern ermöglicht, das Verhalten beim
Zwischenspeichern unter verschiedenen Einsatzszenarien maßzuschneidern.
-
Beispielhaft
gezeigt ist eine beispielhafte Implementierungsumgebung 100,
mit der Aspekte der befehlsunterstützten Techniken für die Cache-Verwaltung
in die Praxis umgesetzt werden können.
Die Umgebung 100 umfaßt
eine Netzwerk-Prozessoreinheit (NPU) 102, die auf einer
Eingangszeilenkarte 104 untergebracht ist. Aus Zwecken
der Klarheit wird nur ein ausgewählter
Teil der Komponenten und funktionalen Einheiten der NPU in 1 veranschaulicht; weitere
Einzelheiten einer NPU-Zeilenkarten-Architektur sind in 8 gezeigt
und werden hiernach diskutiert. Die veranschaulichten Komponenten
umfassen eine SRAM-Schnittstelleneinheit 106,
einen Prozessorcluster 108, der eine Vielzahl von Rechenmaschinen
(z. B. Mikromaschinen (ME – Microengines) unter
der NPU-Architektur Intel® IXP) 110, einen
Cache-Controller 112, einen Cache 114, der mehrere Cache-Zeilen 115 umfaßt, eine
DRAM-Schnittstelleneinheit 116 und eine Puffer-Verwaltungseinheit 118, die
jeweilige Sätze
von Empfangs (Rx)-Puffern 120 und Sende (Tx)-Puffern 122 enthält, umfaßt. Die SRAM-Schnittstelleneinheit 106 liefert
den Zugriff auf einen externen (bezüglich der NPU 102)
SRAM 124, der auf der Eingangszeilenkarte 104 untergebracht ist.
In ähnlicher
Weise liefert die DRAM-Schnittstelleneinheit 116 Zugriff
auf einen externen DRAM 126, der mehrere Speicherblöcke 127 umfaßt.
-
Bei
vielen modernen Architekturen von Netzwerkvorrichtungen (z. B. Router,
Switch usw.) sind mehrere Karten (im allgemeinen als Zeilenkarten
bezeichnet) in einem gemeinsamen Gestell integriert und zum Kommunizieren über eine
gemeinsam genutzte Rückwandplatine
oder Mittelplatine gekoppelt. Zum Beispiel können derartige Zeilenkarten
in einer standardisierten modularen Architektur implementiert werden,
so wie ATCA (Advanced Telecommunications Computing Architecture)
oder in einer Blade-Serverumgebung, die standardisierte Blades verwendet. Als
Option können
eine proprietäre
Kartenarchitektur und ein Chassis benutzt werde (z. B. Cisco, Nortel, 3Com,
usw.). Derartige modulare Architekturen umfassen typischerweise
Karten, die für
spezielle Zwecke gestaltet sind, so wie Eingangszeilenkarten, Ausgangszeilenkarten,
Framer und Switching Fabric (SF)-Karten. Die Eingangszeilenkarte 104 veranschaulicht
eine Eingangszeilenkarte, die bei einer derartigen modularen Architektur
verwendet werden kann. Jedoch soll angemerkt werden, daß die hierin für die Eingangszeilenkarte 104 beschriebenen
Arbeitsgänge
implementiert werden können,
indem ebensogut weitere Architekturtypen verwendet werden, einschließlich, jedoch
nicht beschränkt
auf Karten, die eine Kombination aus Funktionen bereitstellen, beispielsweise
sowohl Eingangs- als auch Ausgangsfunktionen.
-
Bei
einem typischen Einsatz-Szenario wird eine Eingangszeilenkarte von
einer Netzwerkvorrichtung oder dergleichen verwendet, um bei Netzwerkpaketen,
die an der Netzwerkvorrichtung empfangen worden sind, eine einleitende
Paketverarbeitung durchzuführen.
Dies ist in der 1 durch Pakete A1, A2... veranschaulicht,
die am Eingangs/Ausgangs(I/O – Input/Output)-Port
der Eingangszeilenkarte 104 empfangen und zeitweilig in
Rx-Puffern 120 gepuffert werden. Nach dem Abschluß derartiger einleitender
paketverarbeitender Vorgänge
können verschiedene
Pakete an andere Zeilenkarten in der Netzwerkvorrichtung über das
Switching Fabric für die
weitere Verarbeitung gesendet und/oder zu einer weiteren Netzwerkvorrichtung
in einem Netzwerk transportiert werden (d. h. Sendung nach außen), geschickt
werden. Dies wird durch die Pakete A1 und A2 veranschaulicht, die
von den Tx-Puffern 122 in das Switching Fabric überführt werden.
-
Typische
Eingangs-Arbeitsgänge
umfassen die Paket(Strom-)klassifizierung, bei der Pakete verschiedenen
Strömen
zugewiesen werden, die gemeinsame Attribute haben (z. B. Zieladresse,
Kriterien der QoS, Sicherheitsmaßnahmen usw.), wobei ein vordefiniertes
Paket-Klassifizierschema
verwendet wird, wie es von einem Regelsatz einer Zugriffssteuerliste
(ACL – Access
Control List) oder dergleichen definiert wird. Viele Regelsätze für die Paketklassifizierung
benutzen ein N-Tupel-Klassifizierschema, bei dem eine Regel der
ACL mit höchster
Priorität, die
in N Feldern (oder in Teilfeldern in dem Fall von Adressenvorsilben)
in dem Paketnachrichtenkopf übereinstimmt,
als die Klassifizierregel verwendet wird. Somit braucht während solcher
Paketklassifizierschemen nur auf die Daten des Nachrichtenkopfs des
Pakets zugegriffen zu werden. In anderen Fällen kann eine tiefe Paketüberprüfung (z.
B. das Überprüfen von
Paketinhalten zusätzliche
zu Nachrichtenköpfen)
erforderlich sein, um die Klassifizierung einiger Pakete durchzuführen.
-
In
weiteren Einzelheiten läuft
ein typischer herkömmlicher
Eingangs-Paketverarbeitungsprozeß wie folgt
ab. Bei dem Empfang eines Pakets wird das Paket zeitweilig in einem
Rx-Puffer gepuffert, ein Puffer in einem DRAM wird zugewiesen und
das Paket wird aus dem Rx-Puffer in den DRAM-Puffer kopiert. Im
Zusammenhang mit diesen Arbeitsgängen
wird ein Warteschlangen-Beschreiber in eine Warteschlangen-Elementanordnung
in einem SRAM geschrieben, wobei der Warteschlangen-Beschreiber den
Ort des DRAM-Puffers identifiziert, der mit dem Paket verknüpft ist.
Während
der paketverarbeitenden Arbeitsgänge,
so wie dem Klassifizieren, werden die Daten des Nachrichtenkopfes
des Paketes aus dem DRAM-Puffer ausgelesen und in den SRAM-Arbeitsspeicher
auf den Chip und/oder einen SRAM außerhalb des Chips (oder auf
andere Weise über
einen SRAM auf dem Chip zugegriffen) geschrieben. Die Paketklassifizierung
kann dann durchgeführt werden,
indem die N-Tupel-Werte des Nachrichtenkopfes des Pakets im Zusammenhang
mit einem oder mehreren Nachschlagewerten in der Regeltabelle/Datenbank
verwendet werden, die in dem SRAM und/oder dem DRAM gespeichert
werden, so wie weitere Arbeitsgänge,
die von der NPU ausgeführt
werden (so wie das Erzeugen eines Prüfsummen(Hash)-Index für eine Nachschlagetabelle). Nach
dem Beenden des Klassifizierens wird das Paket einem Strom zugewiesen,
wobei eine entsprechende Zielstrom-Warteschlange sich auf einer
Ausgangszeilenkarte befindet. Demgemäß wird das Paket in die Strom-Warteschlange überführt, indem
die Paketdaten aus dem DRAM in einen Tx-Puffer gelesen werden und
dann die Daten über
das Switching Fabric in die Strom-Warteschlage überführt werden.
-
Wie
oben diskutiert, wird die kürzeste
Speicherwartezeit von einem SRAM auf dem Chip geboten, gefolgt von
einem SRAM außerhalb
des Chips und dann von einem DRAM außerhalb des Chips, der wesentlich
langsamer ist als ein SRAM außerhalb des
Chips. Demgemäß führt jeder
Zugriff auf einen DRAM eine wesentliche Strafe bezüglich der
Wartezeit ein. Gleichzeitig ist das Zwischenspeichern auf dem Chip
mit DRAM-Puffern für
NPU-Architekturen im
allgemeinen auf SRAM-Arbeitsspeicher begrenzt worden, wenn sie überhaupt
benutzt wurden. Dies ist teilweise auf die Kosten (was Kosten, Ausbeute
und Platzbedarf auf dem Chip betrifft) des Speichers auf dem Chip
zurückzuführen.
-
Es
ist von den Erfindern erkannt worden, daß ein Großteil der Verarbeitung, die
von einem Eingangs-Element ausgeführt wird (z. B. einer Eingangszeilenkarte
oder einer NPU, die als Eingangs-Prozessor auf einer Zeilenkarte
verwendet wird, welche sowohl Eingangs- als auch Ausgangselemente
umfaßt),
in bezug auf die Paketdaten selbst in ihrer Art temporär ist und
keinen wiederholten Speicherzugriff und/oder wiederholte Modifikation der
Daten erfordert. Weiterhin, obwohl typischerweise ein DRAM außerhalb
des Chips verwendet wird, um größere Mengen
an Daten zu speichern, sind viele dieser Daten, so wie die ACL-Datenbanken
und Routing-Tabellen, im wesentlichen beständig (d. h. nicht temporär). Demgemäß ist ebenfalls
erkannt worden, daß das
Verwenden eines Cache auf dem Chip mit einer bevorzugten Cache-Strategie,
die das Zwischenspeichern von temporären Paketdaten begünstigt,
vorteilhaft sein würde.
Ein solches Schema ist in der 1 veranschaulicht.
-
Mit
Bezug auf das Ablaufdiagramm der 2 arbeitet
die Architektur 100, die die Eingangs-Paketverarbeitung
implementiert, wie folgt. In einem Block 200 wird ein Paket über einen
Eingangsport empfangen (oder auf andere Weise der Eingangszeilenkarte 104 über das
Switching Fabric zur Verfügung
gestellt) und zeitweilig in einem Rx-Puffer 120 gespeichert.
In einem Block 102 wird ein DRAM-Puffer im DRAM 126 zugewiesen,
und ein entsprechender Warteschlangen-Beschreiber wird in den SRAM 124 geschrieben.
Das Paket wird dann (logisch) in einem Block 204 in den
Puffer geschrieben, der im Block 202 zugewiesen worden
ist. Anstatt jedoch die Paketdaten in einen DRAM zu schreiben, werden
eine oder mehrere Cache-Zeilen 115 (wie erforderlich) im
Cache 114 zugewiesen, und die Daten werden in diese Cache-Zeilen)
geschrieben, wie es in weiteren Einzelheiten hiernach beschrieben
wird.
-
Weiter
mit einem Block 206 werden dann verschiedene paketverarbeitende
Arbeitsgänge,
so wie Klassifizieren, Messen usw. durchgeführt. Nach dem Abschluß dieser
Arbeitsgänge
werden in einem Block 208 die Paketdaten aus dem Puffer
gelesen. Wie hiernach diskutiert wird, werden in dem Fall eines
Cache-Treffers die Paketdaten aus dem Cache 114 anstatt
aus dem DRAM 126 gelesen. Die gelesenen Daten werden dann
in einen Tx-Puffer 122 kopiert und in einem Block 210 in
das Switching Fabric gesendet. Der DRAM-Puffer und die Cache-Zeile(n) werden dann
in einem Block 212 freigegeben.
-
Die
Arbeitsgänge
und die Logik, die weitere Einzelheiten eines DRAM-Speicher-Schreibprozesses
veranschaulichen, sind für
eine Ausführungsform in
der 3a gezeigt. Der Prozeß beginnt in einem Block 300 damit,
daß ein
DRAM-Schreibbefehl den Teil des DRAM 126 anspricht (z.
B. die Adresse des Speicherblocks und Versetzung, falls anwendbar)
auf den zugegriffen wird. In einem Entscheidungsblock 302 wird
eine Feststellung getroffen, ob das Speicherschreiben zu einem Cache-Treffer
führt.
Wenn eine Cache-Zeile 115, die dem angesprochenen Speicherblock
entspricht, in dem Cache 114 vorliegt, ergibt sich ein
Cache-Treffer. Demgemäß werden
die Daten in die Cache-Zeile geschrieben und die Zeile wird in einem
Block 304 als abgeändert
markiert.
-
Wenn
sich ein Cache-Fehler ergibt, geht die Logik zu einem Entscheidungsblock 306 weiter,
um festzustellen, ob die Speicheranfrage eine vollständige Cache-Zeile
füllen
wird. Zum Beispiel müssen nach
dem anfänglichen
Verarbeiten eines empfangenen Paketes, wenn der Schreibarbeitsgang
des Blocks 204 abgearbeitet wird, die entsprechenden Daten
noch zwischengespeichert werden, was zu einem Cache-Fehler führt. Mit
Bezug auf die Entscheidung, die im Entscheidungsblock 306 getroffen
worden ist, wird Cache-Platz auf einer Cache-Zeilen-Basis zugewiesen, wobei die Größe der Cache-Zeile fest
ist und typischerweise (jedoch nicht erforderlich) mit der Größe der Speicherblöcke 127 im
DRAM 126 übereinstimmt, um
eine 1:1-Beziehung zwischen einer Cache-Zeile und einem Speicherplatz
zu unterstützen.
Gleichzeitig ist die Größe eines
Pakets variabel. In dem Fall, daß die Größe eines Paketes größer als
und kein ganzzahliges Vielfaches der Größe einer Cache-Zeile ist, wird
die letzte Cache-Zeile, die den Paketdaten zugewiesen ist, von den
Paketdaten nicht "gefüllt" werden. Dasselbe
gilt für
ein Paket mit einer Größe, die
kleiner ist als die Größe der Cache-Zeile,
so wie ein Paket minimaler Größe.
-
Für jeden
Teil der Daten, der eine volle Cache-Zeile belegen wird, geht die
Logik zu einem Block 308 weiter, in dem die Daten in die
Cache-Zeile geschrieben werden, und die Zeile wird als abgeändert modifiziert.
Zusätzlich
gibt es weder eine DRAM-Lese- noch eine Schreib-Operation, die ausgeführt wird.
Wie bei einer herkömmlichen
Rückschreibe-Cache-Strategie werden
in Verbindung mit dem Leeren einer Cache-Zeile (d. h. die Cache-Zeile für das erneute
Zuweisen verfügbar
machen) die Daten in der Cache-Zeile in den entsprechenden Speicherblock 128 geschrieben.
Als ein Ergebnis gibt es zu diesem Zeitpunkt kein Erfordernis, die
Daten in dem DRAM zu speichern (in ihn zu schreiben).
-
Für jeden
Teil der Paketdaten, der eine Cache-Zeile nicht vollständig belegen
wird, geht die Logik zu einem Entscheidungsblock 310 weiter,
in dem eine Entscheidung getroffen wird, ob der Schreibbefehl einen "Paket-Daten"-Modifizierer umfaßt. Zum Beispiel
wird bei einer Ausführungsform
zu diesem Zweck ein getrennter Speicherschreibbefehl verwendet,
so wie "WRITEP". Als Option kann
das Bitmuster eines herkömmlichen
Speicherschreibbefehls modifiziert werden, um den "Paket-Daten"-Modifizierer zu erzeugen.
Im allgemeinen wird der Schreibbefehl irgendwelche Angaben enthalten,
die identifizieren, daß die
gerade durchgeführte
Cache-Strategie einer getrennten Strategie entspricht, die temporäre Daten betrifft,
so wie die Paketdaten, welche verwendet werden, um die Zwischenspeichertechniken
hierin beispielhaft zu veranschaulichen.
-
In
weiteren Einzelheiten wird der "Paket-Daten"-Modifizierer verwendet,
um Paketdaten (z. B. temporäre
Daten) von anderen Daten, die im DRAM gespeichert sind, zu unterscheiden. Durch
die Verwendung dieses Modifizierers kann eine Anweisung zur Verfügung gestellt
werden, um dem Cache-Controller 112 zu befehlen, wie die
Daten zwischengespeichert werden sollen. Gemäß einer Ausführungsform,
wenn der "Paket-Daten"-Modifizierer vorliegt, werden
die Daten in einem Block 312 in eine Teil-Cache-Zeile geschrieben
und die Cache-Zeile
wird als abgeändert
markiert. Wie bei dem Block 308 gibt es keine DRAM-Lese-
oder Schreiboperation. Wenn im Gegensatz dazu kein "Paket-Daten"-Modifizierer vorliegt,
wird in einem Block 314 eine herkömmliche Schreiboperation für eine Teil-Cache-Zeile
ausgeführt.
Bei dem herkömmlichen
Ansatz wird der Teilabschnitt der Cache-Zeile beschrieben, indem
die gelieferten Schreibdaten verwendet werden. Um jedoch die Cache-Zeile
zu füllen,
wird eine DRAM-Ablesung bei dem entsprechenden Speicherblock 127 durchgeführt, um
den verbleibenden Teil des Speicherblocks (der Daten entspricht,
welche Adressen belegen, die auf den nicht gefüllten Teil der Cache-Zeile abgebildet
werden) in die Cache-Zeile zu kopieren. Wie zuvor wird die Cache-Zeile
auch als abgeändert markiert.
-
Arbeitsschritte
und Logik, die weitere Einzelheiten eines Leseprozesses eines DRAM-Speichers bei einer
Ausführungsform
veranschaulichen, sind in der 4a gezeigt.
Der Prozeß beginnt
bei einem Block 400, bei dem ein Lesebefehl für den DRAM-Speicher
von dem Prozessorelement (z. B. der Rechenmaschine 110)
zur Ausführung
empfangen wird, wobei auf die Adresse des Speicherblockes Bezug
genommen wird, auf den zugegriffen werden soll. Als Antwort auf
das Ausführen
des Lesebefehls wird in einem Entscheidungsblock 402 eine
Feststellung getroffen, ob der Lesebefehl einen "Paket-Daten"-Modifizierer umfaßt. In einer analogen Weise
zu der, die bei dem oben diskutierten Schreibbefehl benutzt wurde,
kann dieser Modifizierer über
einen bestimmten Befehl (z. B. READP) implementiert werden, oder
das Bitmuster eines vorhandenen Lesebefehls kann abgeändert werden,
um ein ähnliches
Ergebnis zu bewirken.
-
Im
allgemeinen kann ein Lesebefehl mit dem "Paket-Daten"-Modifizierer implementiert werden, wenn
ein letztes Mal auf Daten zugegriffen wird; ansonsten wird typischerweise
ein herkömmlicher
Lesebefehl verwendet werden. Der Grund dafür liegt darin, wie Caches Fehler beim
Lesen behandeln. In dem Fall, daß auf Daten nicht mehr gegriffen
wird, gibt es kein Erfordernis, die Daten in dem Cache zu halten
(bei einem Treffer) oder die Daten zwischenzuspeichern (bei einem
Fehler). Somit wird für
solche Zugriffe ein spezieller Befehl benutzt. Jedoch wird angemerkt,
daß der "Paket-Daten"-Modifizierer nicht für jeden
Zugriff auf Paketdaten benutzt zu werden braucht (und es auch tatsächlich nicht
sollte). Zum Beispiel wird, wenn man einen Paket-Nachrichtenkopf
lesen möchte,
empfohlen, daß ein
herkömmlicher
Lesebefehl verwendet wird. Der Grund dafür wird im Hinblick auf die
folgenden Cache-Strategien deutlich.
-
In
dem Fall, daß der
Lesebefehl den "Paket-Daten"-Modifizierer nicht
enthält,
werden herkömmliche
Cache-Operationen ausgeführt.
Als erstes wird der Cache 114 geprüft, um zu sehen, ob der Speicherblock,
auf den vom Lesebefehl Bezug genommen wird, zwischengespeichert
ist, wobei das Ergebnis in einem Treffer- oder Fehler-Entscheidungsblock 404 veranschaulicht
wird. In dem Fall eines Treffers geht die Logik weiter, um die Daten
in einem Block 406 aus der Cache-Zeile wiederzugewinnen.
In dem Fall eines Fehlers werden die Daten aus dem DRAM 126 ausgelesen
und eine Cache-Zeile 115 wird in dem Cache 114 zugewiesen,
die Daten werden in die Cache-Zeile geschrieben und die Zeile wird
als "in Benutzung" markiert. Diese
Arbeitsgänge sind
in einem Block 408 gezeigt.
-
Wenn
der "Paket-Daten"-Modifizierer vorliegt,
geht die Logik zu einem Treffer- oder Fehler-Entscheidungsblock 410 weiter,
um festzustellen, ob die Daten in dem Cache vorhanden sind. Wenn dies
der Fall ist, werden die Daten aus dem Cache wiedergewonnen und
die Cache-Zeile
wird als ungültig
markiert, wie es in einem Block 412 veranschaulicht ist.
Der Grund dafür,
die Cache-Zeile als ungültig zu
markieren, liegt darin, daß Paketdaten,
die mit dem "Paket-Daten"-Modifizierer gelesen
werden, typischerweise dem Lesearbeitsgang des Blocks 208 der 2 entsprechen,
der verwendet wird, um das Paket vor dem Senden in einen Tx-Puffer zu kopieren.
Als ein Ergebnis wird es keinen nachfolgenden DRAM-Zugriff auf die
Paketdaten geben und somit keine Notwendigkeit, die Daten im DRAM
oder im Cache zu halten. Das Markieren der Cache-Zeile als ungültig ermöglicht es
weiter, daß die
Cache-Zeile im anschließenden
Einsatz neu zugewiesen wird.
-
Ein ähnliches
Straffen wird bei einem Cache-Fehler verwendet. Wie es in einem
Block 414 veranschaulicht ist, werden als Antwort auf einen
Cache-Fehler die Daten direkt aus dem DRAM 126 gelesen.
Jedoch gibt es weder eine Cache-Zeile, die im Cache 114 zugewiesen
ist, noch gibt es eine Kopie der Daten, die in den Cache geschrieben
wird. Wieder liegt der Grund dafür
darin, daß,
da es keine anschließende
Verwendung der Daten gibt, es nicht nötig ist, sie zwischenzuspeichern.
-
Ein
weiterer Aspekt mancher Ausführungsformen
ist die Möglichkeit, über das
Programm das "weiche" Sperren von Cache-Zeilen
zu definieren. Dem Schema des "weichen
Sperrens" können ausgewählte Cache-Zeilen
weich gesperrt werden, was bedeutet, daß diese Cache-Zeilen eine höhere Priorität haben
als andere Cache-Zeilen und somit nicht ausgetauscht werden müssen, solange
die anderen Cache-Zeilen verfügbar
sind. Bei einer Ausführungsform
bewirkt das Vorliegen des "Paket-Daten"-Modifizierers für eine Lese-
oder Schreibbefehl, daß ein Bit
für den
Zustand des weichen Sperrens für
die Cache-Zeile gesetzt (für
das Schreiben) oder gelöscht (für das Lesen)
wird. Dieses Zustandsbit wird verwendet, um dem Cache-Controller einen
Hinweis zu geben, daß die
entsprechende Cache-Zeile nicht für das Neuzuweisen gewählt werden
sollte. Zum Beispiel kann der folgende beispielhafte Algorithmus zum
Auswählen
einer Cache-Zeile, die zugewiesen werden soll, benutzt werden, wobei
das Zustandsbit des "weichen
Sperrens" verwendet
wird:
Priorität
beim Auswählen
einer Zeile, die bei einem Cache-Fehler erneuert werden soll:
- 1. Eine ungültige
Zeile. Wenn es keine derartigen Zeilen gibt, dann:
- 2. Irgendeine Zeile, die nicht weich gesperrt ist. Wenn es keine
derartigen Zeilen gibt, dann:
- 3. Irgendeine Zeile.
-
Die
voranstehenden Prioritätsregeln
begünstigen
das Auswählen
benutzter Zeilen gegenüber weich
gesperrten Zeilen, wobei programmgesteuerte Hinweise verwendet werden.
Dies ist vorteilhaft gegenüber
herkömmlichen
Cache-Strategien, so wie 'in letzter
Zeit am wenigsten benutzt' (LRU – Least
Recently Used), da die Programmierkenntnis, daß eine Zeile bald wieder gelesen
wird, eine bessere Heuristik ist als die Tatsache, daß sie in
jüngster
Zeit verwendet worden ist. Jedoch impliziert dieses nicht, daß die hierin
beschriebenen Techniken anstelle derartiger herkömmlicher Cache-Strategien verwendet werden
müssen,
vielmehr können
Aspekte der Techniken und herkömmliche
Cache-Strategien kombiniert werden. Zum Beispiel kombiniert das
Folgende das weiche Sperren mit einer herkömmlichen LRU-Strategie, die
ein "benutzt"-Bit implementiert, um
eine Cache-Zeile in seinem Satz als in jüngster Zeit verwendet zu markieren:
- 1. Irgendeine ungültige Zeile. Wenn keine Zeile dies
erfüllt,
dann:
- 2. Irgendeine nicht weich gesperrte Zeile UND das Bit 'nicht verwendet' ist gesetzt. Wenn
keine Zeile dies erfüllt,
dann:
- 3. Irgendeine nicht weich gesperrte Zeile. Wenn keine Zeile
dies erfüllt,
dann:
- 4. Irgendeine Zeile.
-
Ein
Beispiel von Arbeitsgängen
und Logik, die während
des Verarbeitens eines Schreibbefehls für einen DRAM-Speicher unter
Verwendung des Schemas des "weichen
Sperrens" durchgeführt wird, ist
in 3b gezeigt, in der Blöcke mit gleichen Bezugsziffern
wie denen, die in 3a gezeigt und oben diskutiert
sind, ähnliche
Arbeitsgänge
ausführen.
Demgemäß wird sich
das Folgende nur auf die Unterschiede zwischen den beiden Ablaufdiagrammen
konzentrieren.
-
Als
Antwort auf die Bestimmung beim Block 306, ob eine Cache-Zeile
gefüllt
ist, wird in einem Entscheidungsblock 316 eine Entscheidung
getroffen, ob der "Paket-Daten"-Modifizierer vorhanden ist. Wenn nicht,
werden die Arbeitsgänge
des Blocks 308B in einer Weise ähnlich der ausgeführt, die
oben mit Bezug auf den Block 308 in dem Ablaufdiagramm der 3a beschrieben
ist. Wenn jedoch der "Paket-Daten"-Modifizierer vorliegt,
wird das Bit für
das "weiche Sperren" in einem Block 309 gesetzt,
zusätzlich
zum Schreiben der Daten in die vollständige Cache-Zeile und dem Markieren
der Zeile als modifiziert in einem Block 308A. Wenn die
Cache-Zeile nicht gefüllt
wird und der "Paket-Daten"-Modifizierer vorhanden
ist, geht die Logik zum Block 312 weiter, um. die Daten
in die Teil-Cache-Zeile zu schreiben und die Zeile als modifiziert
zu markieren. Zusätzlich
wird das Statusbit für
das "weiche Sperren" in einem Block 313 gesetzt.
-
Ein
Beispiel logischer Arbeitsgänge,
die während
des Verarbeitens eines Lesebefehls eines DRAM-Speichers unter Verwendung
des Schemas des "weichen
Sperrens" ausgeführt werden,
ist in 4b gezeigt, in der Blöcke mit
gleichen Bezugsziffern wie denen, die in 4a gezeigt
und oben diskutiert sind, ähnliche
Arbeitsgänge
ausführen.
In diesem Fall betreffen die zusätzlichen
Arbeitsgänge
einen Block 407, der angesprochen wird, wenn der "Paket-Daten"-Modifizierer vorhanden
ist und sich ein Cache-Treffer ergibt. Demgemäß werden die Daten aus dem
Cache wiedergewonnen, die Cache-Zeile wird als ungültig markiert
und das Zustandsbit für das "weiche Sperren" wird gelöscht. Dies
bewirkt, daß die
Cache-Zeile für
unmittelbare Neuzuweisung verfügbar
ist. Da die Daten nicht länger
benötigt
werden, gibt es gleichermaßen
kein Erfordernis mehr, die Daten in einer Cache-Zeile zu halten,
und somit können
derartige Cache-Zeilen freigegeben werden.
-
Im
allgemeinen können
mehrere Techniken verwendet werden, um die Mechanismen des "Paket-Daten"-Modifizierers und
für die
optional damit verknüpfte "weich gesperrte" Cache-Zeilen zu bewirken.
Schließlich
werden jedoch die Angaben über
die Cache-Strategie...Code auf Maschinenebene codiert, der dazu
geeignet ist, auf dem Ziel-Prozessor zu laufen, da Prozessoren Codes
auf Quellenebene nicht ausführen.
Wie hiernach in weiteren Einzelheiten beschrieben wird, werden bei
einer Ausführungsform
bestimmte op-Codes zu einem Befehlssatz des Prozessors hinzugefügt, um dem
Prozessor zu befehlen, Lese- und Schreibarbeitsgänge mit einem geltenden "Paket-Daten"-Modifizierer zu
bewirken.
-
Bei
einer Ausführungsform
werden auf der Quellencodeebene Markierer eingebettet, was zu der Erzeugung
entsprechender Aufrufe der Cache-Strategie im Maschinencode führt. Mit
Bezug auf 5 beginnt dieser Prozeß bei einem
Block 500, in dem Markierer in den Quellencode hoher Ebene
eingesetzt werden, um Cache-Strategien für die verschiedenen Code-Teile
aufzulisten. Bei einer Ausführungsform
weist der Code hoher Ebene Programmiercode auf, der in der Sprache
C oder C++ geschrieben ist und die Markierer
werden über
entsprechende Pragma-Anweisungen implementiert. Ein Pseudocode,
der einen Satz beispielhafter Pragma-Anweisungen veranschaulicht, um eine
Cache-Strategie des Paketdaten ein/aus zu bewirken, ist in der 6 gezeigt.
Bei dieser Ausführungsform gibt
es zwei Cache-Strategien: EIN, was angibt, daß die Strategie des "Paket-Daten"-Modifizierers in
Kraft ist, und AUS, die Standardstrategie, die angibt, daß die Strategie
des "Paket-Daten"-Modifizierers nicht
in Kraft ist. Die Pragma-Anweisungen "CACHE PAKETDATEN EIN" wird verwendet, um den Beginn eines Code-Teiles
zu markieren, in dem Lese- und Schreibbefehle den "Daten-Paket"-Modifizierer bestätigen müssen, während die Pragma-Anweisungen "CACHE PAKETDATEN
AUS" verwendet wird,
um das Ende des Code-Teils zu markieren.
-
Bei
einer weiteren Ausführungsform
werden einer herkömmlichen
Sprache hoher Ebene und dem zugeordneten Kompilierer spezielle Befehle
hinzugefügt,
um es dem Programmierer zu ermöglichen,
ausdrücklich
den "Daten-Paket"-Modifizierer für den entsprechenden
Code hoher Ebene in Kraft zu setzen. Zum Beispiel könnten Befehle,
so wie Lese Paketdaten, Schreibe Paketdaten usw. in den Quellenebenencode
eingebaut werden.
-
Die
Pragma-Anweisungen, die in 6 gezeigt
sind, oder die expliziten Befehle auf Quellenebene weisen den Kompilierer
an, Maschinencode zu erzeugen, der eingebettete Aufrufe umfaßt, welche den
Prozessor und/oder den Cache-Controller anweisen, wie die Cache-Einsätze und
die Räumungsstrategien
implementiert werden sollen. Bei einer Ausführungsform wird dies bewerkstelligt,
indem herkömmliche
op-Codes für
den Speicherzugriff durch neue op-Codes ersetzt werden, die ein
Mittel bilden, um den Prozessor und/oder den Cache- Controller zu informieren,
ob der "Paket-Daten"-Modifiziert- und/oder "weiches Sperren"-Mechanismus in Kraft ist, wie es in
einem Block 502 gezeigt ist.
-
Bei
einer Ausführungsform
wird für
jeden Speicherzugriffsbefehl ein expliziter op-Code zur Verfügung gestellt.
Zum Beispiel wird bei einem üblichen Befehlssatz
der Lesebefehl verwendet, um Daten zwischen Speicher und Registern
zu bewegen. Zum Inkraftsetzen des "Paket-Daten"-Modifizierers kann ein READP(Paket
lesen – Read
Packet)-Befehl auf Assemblierer-Ebene dem mnemonischen Befehlssatz
hinzugefügt
werden. In ähnlicher
Weise könnte ein
WRITEP(Paket schreiben – Write
Packet)-Befehl auf Assemblierebene hinzugefügt werden. Dieser Ansatz würde es weiterhin
einem Programmierer ermöglichen,
Code auf der Assemblierebene zu schreiben und/oder Teile des Codes
auf Assemblierebene, der aus einem kompilierten Code auf Quellenebene abgeleitet
worden ist, zu optimieren.
-
Bei
einer weiteren Ausführungsform
werden Befehle verwendet, um explizit einen Merker für das weiche
Sperren zu setzen und zu löschen.
Bei diesem Ansatz wird ein entsprechendes Merkerregister in Zusammenhang
mit dem Decodieren ausgewählter
Speicherzugriffsbefehle überprüft, wobei
der Merker identifiziert, ob die entsprechende Cache-Zeile weich
gesperrt war.
-
Wie
es in einem Block 504 gezeigt ist, wird zur Laufzeit der
Cache-Einsatz über
richtungsweisende Aufrufe (die bestimmten op-Codes und optionale
Operanden) verwaltet, die in dem ausgeführten Maschinencode enthalten
sind. Techniken, die Hardware-Implementierungen zum Bewirken der
Cache-Räumungsstrategien
zeigen, werden hiernach diskutiert.
-
Im
allgemeinen können
unterschiedliche Typen von Gesamt-Cache-Schemata (mit verschiedenen
Techniken zum Implementieren jedes Schemas) bei den Cache-Techniken
verwendet werden, die hierin beschrieben sind. Diese umfassen den
voll assoziativen Cache und den n-fach satzassoziativen Cache. (Bei bestimmten
Implementierungen können auch
direkt abgebildete Caches verwendet werden – jedoch ist das Trefferverhältnis für direkt
abgebildete Caches im Vergleich zu anderen Gestaltungen wegen ihrer
Inflexibilität
relativ schlecht.) Bei voll assoziativen Caches kann irgendein weicher
Ort von irgendeiner Cache-Zeile zwischengespeichert werden. Dies
ist die komplexeste Technik und erfordert hoch entwickelte Suchalgorithmen,
wenn auf einen Treffer überprüft wird.
Sie kann dazu führen,
daß der gesamte
Cache deswegen verlangsamt wird, jedoch bietet sie das beste theoretische
Trefferverhältnis,
da es so viele Optionen zum Zwischenspeichern jedweder Speicheradressen
gibt. n-fach satzassoziative Caches kombinieren Aspekte der direkt
abgebildeten und voll assoziativen Caches. Bei diesem Ansatz wird
der Cache in Sätze
aus jeweils n Zeilen (z. B. n = 2, 4, 8 usw.) aufgebrochen, und
jedwede Speicheradresse kann in irgendeiner dieser n Zeilen innerhalb des
ausgewählten
Satzen zwischengespeichert werden. In effektiver Weise werden die
Sätze aus
Cache-Zeilen logisch in n Gruppen partitioniert. Dies verbessert
die Trefferverhältnisse
gegenüber
dem direkt abgebildeten Cache, ohne jedoch eine schwere Suchstrafe
mit sich zu bringen (da das n klein gehalten wird).
-
Eine
beispielhafte Cache-Architektur 700, die ein voll assoziatives
Cache-Schema implementiert, um die Steuerung des Cache-Einsatzes
und von Räumungsstrategien
unter Steuerung eines Programms zu unterstützen, ist in 7 gezeigt.
Im allgemeinen können
die Grundsätze,
die bei dieser Ausführungsform
offenbart sind, bei verschiedenen Typen gut bekannter Cache-Architekturen
implementiert werden, einschließlich
der Architekturen für n-fach
satzassoziative Caches und Architekturen für voll assoziative Caches.
Es wird weiter angemerkt, daß Einzelheiten
weiterer Cache-Komponenten, so wie Multiplexierer, Decodierlogik,
Datenports usw. aus Gründen
der Klarheit in der 7 nicht gezeigt sind. Es wird
von den Fachleuten verstanden werden, daß diese Komponenten in einer
tatsächlichen Implementierung
der Architektur vorhanden sein würden.
Die Hauptkomponenten der Architektur umfassen einen Prozessor 702,
verschiedene Cache-Steuerelemente (deren bestimmte Einzelheiten
hiernach beschrieben werden), die zusammen als ein Cache-Controller
bezeichnet werden, und den tatsächlichen
Cache-Speicherraum selbst, der aus Speicher besteht, welcher verwendet
wird, um TAG-Anordnungen und Cache-Zeilen zu speichern, die gemeinsam auch
als Blöcke
bezeichnet werden.
-
Der
allgemeine Betrieb der Cache-Architektur 700 ist ähnlich dem,
der von einem herkömmlichen
voll assoziativen Cache benutzt wird, mit der Ausnahme von Erweiterungen
für den "Paket-Daten"-Modifizierer und
den Mechanismus für
das weiche Sperren. Als Antwort auf eine Speicherzugriffsanfrage
(die über
Ausführung
eines entsprechenden Befehls oder einer Befehlsfolge geschieht)
wird eine Adresse, auf die durch die Anfrage hingewiesen wird, an
den Cache-Controller geschickt. Die Felder der Adresse werden in
ein TAG 704 und einen Block OFFSET 706 aufgeteilt.
Der TAG 704 wird üblicherweise
als die Block(oder Cache-Zeilen)-Adresse
bezeichnet. Der Block OFFSET 706 wird auch üblicherweise
als das Byte-Auswahl-
oder Wort-Auswahl-Feld bezeichnet. Der Zweck einer Byte-Wort-Auswahl
oder einer Blockversetzung besteht darin, ein angefragtes Wort (typischerweise) oder
Byte aus mehreren Wörtern
oder Bytes in einer Cache-Zeile auszuwählen. Zum Beispiel liegen die Größen typischer
Cache-Zeilen im Bereich von 8–128
Byte. Da eine Cache-Zeile die kleinste Einheit ist, auf die in einem
Cache zugegriffen werden kann, ist es notwendig, Information zur
Verfügung
zu stellen, um das weitere Analysieren der Cache-Zeile zu ermöglichen,
damit die angefragten Daten zurückgegeben
werden können.
Der Ort des gewünschten Worts
oder Bytes ist von der Basis der Cache-Zeile versetzt, daher der
Name Block "Versetzung
(Offset)". Die Auswahl
des Wortes wird von einem Wortauswahl-Multiplexierer (mux) 708 bewirkt.
-
Typischerweise
werden 1 niedrigstwertige Bits für
die Blockversetzung verwendet, wobei die Breite einer Cache-Zeile
oder eines Blockes 21 Bytes beträgt. Der
nächste
Satz der n (höchstwertigen)
Bits weist den TAG 704 auf. Diese n Bits werden verwendet,
um einen entsprechenden TAG in jeder TAG-Anordnung aufzusuchen.
Zusätzlich
umfaßt
jede Cache-Zeile
ein "gültig"-Bit.
-
Zusätzlich zu
diesen Elementen verwendet die Cache-Architektur 700 ein
Bit 710 zum weichen Sperren. Das Bit zum weichen Sperren
wird verwendet, um für
eine zugeordnete Cache-Zeile
ein weiches Sperren zu setzen oder zu löschen. Bei einer Ausführungsform
ist das Bit für
das weiche Sperren in einem 1-Bit-Register gespeichert, während die Adresse
in einem weiteren w-Bit-Register gespeichert ist, wobei w die Breite
der Adresse ist. Bei einer weiteren Ausführungsform wird die Kombination
aus dem Bit für
das weiche Sperren und der Adresse in einem Register gespeichert,
das w + 1 groß ist.
Bei der Cache-Architektur 700 sind die Cache-Zeilen in eine
TAG-Anordnung 712 und eine Cache-Zeilenanordnung 714 getrennt.
-
Als
Antwort auf eine Speicherzugriffsanfrage geht der Betrieb der Cache-Architektur 700 wie
folgt weiter. Bei der veranschaulichten Ausführungsform empfängt der
Prozessor 702 einen READP-Befehl 716, der sich
auf eine Speicheradresse bezieht. Wie oben diskutiert, instruiert
bei einer Ausführungsform ein
READP-Befehl den Prozessor/Cache-Controller, Tätigkeiten auszuführen, die
mit einem Lesebefehl verknüpft
sind, bei dem der "Daten-Paket"-Modifizierer aktiviert (gesetzt) ist.
-
Als
Antwort auf einen Cache-Fehler weist der Cache-Controller eine neue
Cache-Zeile zu, indem eine vorhandene Cache-Zeile ausgewählt wird,
die ersetzt werden soll. Bei der veranschaulichten Ausführungsform
wird die oben diskutierte Sperrstrategie für Cache-Zeilen mit weichem
Sperren implementiert, indem eine Zuweisungsstrategielogik 718 für das weiche
Sperren des Cache implementiert wird.
-
Ein
weiterer Arbeitsschritt, der im Zusammenhang mit der Cache-Zeilenzuweisung
ausgeführt wird,
ist das Wiedergewinnen der angefragten Daten aus dem DRAM 126.
Die Logik zum Implementieren der entsprechenden Speicherlese- oder
-schreibstrategie ist über
die Cache-Einsatzstrategielogik 720 implementiert. Zum
Beispiel benutzt bei Implementierungen, die das weiche Sperren der
Cache-Zeilen nicht verwendet, die Cache-Einsatzstrategie 720 die Logik,
die in den Ablaufdiagrammen der 3a und 4a veranschaulicht
ist, während
sie die Logik, die in den Ablaufdiagrammen der 3b und 4b veranschaulicht
ist, bei Implementierungen, die das weiche Sperren einsetzen, implementiert.
-
Bei
der Rückführung der
angefragten Daten zu dem Cache-Controller werden die Daten in die
zugewiesene Cache-Zeile kopiert, und der entsprechende TAG und das
gültig-Bit
werden in der TAG-Anordnung 712 aktualisiert. Anstatt lediglich
die angefragten Daten zurückzugeben,
wird eine Anzahl aufeinanderfolgender Bytes mit Daten nahe den und einschließlich den
angefragten Daten zurückgegeben,
wobei die Anzahl der Bytes gleich der Breite der Cache-Zeile ist. Bei einer
Cache-Zeilenbreite von 32 Bytes als Beispiel würden 32 Bytes Daten zurückgegeben
werden. Ein Wort (das der ursprünglichen
Anfrage entspricht), welches in der neuen Cache-Zeile enthalten
ist, wird dann aus dem Cache in ein Eingangsregister 726 für den Prozessor 702 mit
der Unterstützung
des Wortauswahl-Multiplexierers 708 gelesen.
-
Das
Schreiben eines Wertes, der einer nicht zwischengespeicherten Adresse
entspricht, und das Aktualisieren eines Wertes, der in einer Cache-Zeile für die Cache-Architektur 700 gespeichert
ist, wird auch in einer Weise ähnlich
dem herkömmlichen
Ansatz ausgeführt,
mit der Ausnahme der weiteren Verwendung des "Paket-Daten"-Modifizierers und des Bits für das weiche
Sperren. Für
nicht in Paketform vorliegende Daten umfaßt dieses ein Rückschreiben in
den Cache, bei dem Daten, die in einem Ausgangsregister 724 gespeichert
sind, (schließlich)
in den Systemspeichergeschrieben werden. Die geeignete Cache-Zeile
(sollte eine solche gegenwärtig
vorhanden sein), wird zunächst
von dem anwendbaren Cache-Nachschlagealgorithmus
gesucht. Wenn sie gefunden worden ist, wird die Cache-Zeile mit
den Daten im Ausgangsregister 724 aktualisiert, und ein entsprechendes
modifiziertes Bit (nicht gezeigt) wird aufgezeigt. Der Systemspeicher
kann anschließend mit
dem neuen Wert über
wohlbekannte Rückschreibe-Arbeitsschritte
aktualisiert werden (wenn dies angesichts der anwendbaren Cache-Strategie
erforderlich ist). Wenn die Daten, die aktualisiert werden sollen,
in dem Cache nicht gefunden werden, wird bei einer Ausführungsform
eine Cache-Zeile
in einer Weise zugewiesen, die ähnlich
der ist, die oben für
eine Leseanfrage beschrieben ist, und Daten werden in die Cache-Zeile
geschrieben, und entsprechende TAG- und gültig-Bit-Werte werden in einer
geeigneten TAG-Anordnung aktualisiert.
-
Zusätzlich zu
der Cache-Architektur, die in der 7 veranschaulicht
ist, können
andere Typen von Cache-Architekturen in einer ähnlichen Weise implementiert
werden. Zum Beispiel kann eine satzassoziative Cache-Architektur
implementiert werden. Im allgemeinen sind die Hauptkomponenten der satzassoziativen
und der voll assoziativen Architekturen ähnlich, mit der Ausnahme, daß die Elemente der
TAG-Anordnung und der zugewiesenen Cache-Zeilen in Sätze gruppiert sind und jeder
TAG-Eintrag weiterhin ein INDEX-Feld umfaßt, das verwendet wird, um
in einen anwendbaren Satz zu indexieren. Zusätzlich wird geeignete Logik
bereitgehalten, um das Indexierschema und andere Elemente der satzassoziativen
Cache-Operationen
zu implementieren; derartige Logik und Architekturelemente sind auf
dem Gebiet gut bekannt.
-
8 zeigt
weitere Einzelheiten einer Ausführungsform
einer NPU 102 und einer Eingangszeilenkarte 104.
Bei dieser Ausführungsform
weist die Eingangszeilenkarte 104 eine ATCA-Karte auf,
die so konfiguriert ist, daß sie
an eine gemeinsame Rückwandplatine
in einem ATCA-Chassis gekoppelt werden kann, das weiter andere modulare
ATCA-Karten umfassen kann. Demgemäß umfaßt die Zeilenkarte einen Satz
Verbinder zum Anschluß an
passende Verbinder auf der Rückwandplatine,
wie es durch eine Rückwandplatinen-Schnittstelle 800 veranschaulicht
wird (die aus Gründen
der Klarheit außerhalb
der Eingangszeilenkarte 102 gezeigt ist). Im allgemeinen
unterstützt
die Rückwandplatinen-Schnittstelle 800 verschiedene
Eingabe/Ausgabe (I/O)-Kommunikationskanäle, ebenso wie sie für Energie
für die
Zeilenkarte 104 sorgt. Aus Gründen der Einfachheit sind in
der 8 nur ausgewählte I/O-Schnittstellen
gezeigt, obwohl verstanden werden wird, daß auch andere I/O- und Energiezufuhrschnittstellen
vorliegen. Bei einer Ausführungsform unterstützen die
I/O-Schnittstellen
die Verwendung in einer hochentwickelten Switching(AS – Advanced Switching)-Umgebung,
wie sie durch die Spezifikation ASI (Advanced Switching Interconnect)
SIG Advance Switching V1 definiert ist.
-
Die
NPU 102 umfaßt
n Mikromaschinen 110. Bei einer Ausführungsform ist n = 8, während bei
anderen Ausführungsformen
n = 16, 24 oder 23 gilt. Andere Anzahlen Mikromaschinen 1001 können auch verwendet
werden. Bei einer Ausführungsform
sind 16 Mikromaschinen 110 in zwei Cluster aus 8 Mikromaschinen
gruppiert, die ein ME-Cluster 0 und ein ME-Cluster 1 umfassen (wobei das Letztere
aus Gründen
der Klarheit nicht gezeigt ist).
-
Bei
der veranschaulichten Ausführungsform führt jede
Mikromaschine 110 Befehle (z. B. Mikrocode) aus, die in
einem lokalen Steuerspeicher 802 gespeichert sind. Enthalten
in den Befehlen für
eine oder mehrere Mikromaschinen sind Paketverarbeitungs- und Warteschlangenverwaltungsbefehle,
die verwendet werden, um die hierin beschriebenen verschiedenen
Arbeitsschritte für
die Paketverarbeitung und Warteschlangenverwaltung zu vereinfachen.
Bei einer Ausführungsform
sind diese Befehle in der Form von Mikrocode-Makros beschrieben.
-
Jede
der Mikromaschinen 110 ist weiteren Netzwerkprozessorkomponenten über Sätze aus Bus-
und Steuerleitungen verbunden, die als das Prozessor-"Chassis" bezeichnet werden.
Aus Gründen
der Klarheit sind diese Bus-Sätze
und Steuerleitungen als eine interne Verbindung 804 veranschaulicht.
Auch verbunden mit der internen Verbindung sind eine SRAM-Schnittstelleneinheit 106,
ein DRAM-Controller 806, ein universeller Prozessor 808,
eine Medien-Switching Fabric-Schnittstelle 810, ein PCI(Peripheral
Component Interconnect)-Controller 812 und
eine Prüfsummeneinheit 814.
Andere Komponten, die nicht gezeigt sind, welche von der NPU 102 bereitgehalten
werden können,
umfassen, sind jedoch nicht beschränkt auf Verschlüsselungseinheiten,
eine CAP(Control Status Register Access Proxy)-Einheit, Arbeitsspeicher und eine Überwachungseinheit
für die
Leistung.
-
Wie
veranschaulicht sorgt der DRAM-Controller 806 insgesamt
für die
Funktionalität
von Cache-Controller 112, Cache 114 und DRAM-Schnittstelleneinheit 116.
Bei einer Ausführungsform
verwendet der DRAM 126 einen DDR(doppelte Datenrate – Double
Data Rate)-DRAM.
Bei weiteren Ausführungsformen
kann der DRAM 126 einen Rambus-DRAM (RDRAM) oder einen
DRAM mit verringerter Wartezeit (RL (Reduced Latency) DRAM) verwenden.
Andere Typen eines DRAM können
auch unterstützt
werden.
-
Ein
universeller Prozessor 808 kann für verschiedene Netzwerkprozessorarbeitsschritte
eingesetzt werden. Bei einer Ausführungsform werden Arbeitsschritte
auf der Steuerebene durch Software vereinfacht, die auf dem universellen
Prozessor 808 ausgeführt
werden, während
Arbeitsschritte auf Datenebene hauptsächlich durch Befehlsfolgen
vereinfacht werden, die auf Mikromaschinen 110 ausgeführt werden.
-
Die
Medien-Switching Fabric-Schnittstelle 810 wird verwendet,
um die Mediengeräte
oder das Switching Fabric für
das Netzwerkgerät,
in dem die Zeilenkarte installiert ist, anzuschließen. Bei
einer Ausführungsform
benutzt die Medien-Switching Fabric-Schnittstelle 810 eine
System Packet Level Interface 4 Phase 2 (SPI4-2)-Schnittstelle 816.
Als Option kann die Medien-Switching Fabric-Schnittstelle 810 eine
CSIC-, NPSI- und/oder ASI-Schnittstelle unterstützen. Im allgemeinen kann das
tatsächliche
Switching Fabric auf einer oder mehreren getrennten Zeilenkarten
untergebracht sein oder kann in die Chassis-Rückwandplatine (z. B. als ein
passives Switching Fabric) eingebaut sein. Beide Konfigurationen werden
durch das Switching Fabric 818 dargestellt. Bei einer Ausführungsform
(nicht veranschaulicht) umfaßt
die Medien-Switching Fabric-Schnittstelle Rx-Puffer 120 und
Tx-Puffer 122 und stellt Logik zur Verfügung, um die Verwaltungsarbeitsschritte
für den Empfangs-
und Sendepuffer, die hierin beschrieben sind, zu implementieren.
-
Der
PCI-Controller 812 ermöglicht
es dem Netzwerkprozessor, eine Schnittstelle zu einer oder mehreren
PCI-Vorrichtungen zu bilden, die über eine PCI-Schnittstelle 820 an
die Rückwandplatinen-Schnittstelle 800 gekoppelt
sind. Bei einer Ausführungsform
weist die PCI-Schnittstelle 820 eine PCI-Express-Schnittstelle
auf.
-
Während des
Initialisierens werden codierte Befehle (z. B. Mikrocode), die verschiedene
paketverarbeitende und andere Arbeitsschritte vereinfachen, in Steuerspeicher 802 geladen.
Bei einer Ausführungsform
werden die Befehle aus einem nicht flüchtigen Speicher 822 geladen,
der auf der Eingangszeilenkarte 104 untergebracht ist,
so wie einer Flash-Speichervorrichtung.
Weitere Beispiele nicht flüchtiger
Speicher umfassen Nur-Lese- Speicher (ROMs – Read Only
Memories), programmierbare ROMS (PROMs) und elektronisch löschbare
PROMs (EEPROMs – Electronical
ErasablePROMs). Bei einer Ausführungsform
wird über
eine Schnittstelle 824 von einem universellen Prozessor 808 auf
den nicht flüchtigen
Speicher 822 zugegriffen. Bei einer weiteren Ausführungsform
kann auf den nicht flüchtigen Speicher 822 über eine
Schnittstelle (nicht gezeigt) zugegriffen werden, die an die interne
Verbindung 804 gekoppelt ist.
-
Zusätzlich zum
Laden der Befehle aus einem lokalen (zur Zeilenkarte 104)
Speicher können
Befehle aus einer externen Quelle geladen werden. Zum Beispiel werden
bei einer Ausführungsform
die Befehle auf einem Plattenlaufwerk 826 gespeichert, das
von einer weiteren Zeilenkarte (nicht gezeigt) versorgt wird, oder
ansonsten durch Netzwerkvorrichtung, in der die Zeilenkarte 14 installiert
ist. Bei noch einer weiteren Ausführungsform werden die Befehle
von einem entfernt stehenden Server oder dergleichen über ein
Netzwerk 828 als eine Trägerwelle heruntergeladen.
-
Im
allgemeinen kann jeder der funktionalen Blöcke, die in den Figuren veranschaulicht
und hierin diskutiert sind, implementiert werden, indem programmierbare
Logik in Hardware, programmierbare Logik in Firmware/Software über das
Ausführen
entsprechender Abfolgen auf einer oder mehreren Rechenmaschinen
oder einer Kombination aus den beiden verwendet wird. Zum Beispiel
können
verschiedene paketverarbeitende Arbeitsschritte, einschließlich Arbeitsschritte
des Klassifizierens und der Warteschlangenverwaltung, über das
Ausführen
entsprechender Befehlsfolgen auf einer oder mehreren Rechenmaschinen 110 implementiert
werden. Als Option können
alle oder ein Teil der verschiedenen Arbeitsschritte, die von den
hierin diskutierten funktionalen Blöcken geliefert werden, implementiert
werden, indem geeignete programmierbare Logik auf einer NPU oder
dergleichen eingebettet wird.
-
Somit
können
Ausführungsformen
dieser Erfindung als oder zum Unterstützen von Firmware/Softwaremodulen
verwendet werden und/oder für
Programme, die auf irgendeiner Form eines Prozessorkerns ausgeführt werden,
oder auf andere Weise innerhalb eines maschinen lesbaren Mediums implementiert
oder verwirklicht werden. Ein maschinenlesbares Medium umfaßt irgendeinen
Mechanismus zum Speichern oder Senden von Information in einer Form,
die von einer Maschine (z. B. einem Computer) lesbar ist. Zum Beispiel
kann ein maschinenlesbares Medium einen Nur-Lese-Speicher (ROM);
einen Speicher mit wahlfreiem Zugriff (RAM – Random Access Memory); ein
Magnetplatten-Speichermedium; ein optisches Speichermedium und eine
Flash-Speichervorrichtung usw. umfassen. Zusätzlich kann ein maschinenlesbares
Medium sich fortpflanzende Signale umfassen, so wie elektrische, optische,
akustische oder andere Formen sich fortpflanzender Signale (z. B.
Trägerwellen,
Infrarotsignale, Digitalsignale usw.).
-
Die
obige Beschreibung veranschaulichter Ausführungsformen der Erfindung,
einschließlich dessen,
was in der Zusammenfassung beschrieben ist, ist nicht als erschöpfend oder
die Erfindung auf die genauen offenbarten Formen beschränkend gedacht.
Obwohl bestimmte Ausführungsformen
und Beispiele der Erfindung zu Zwecken der Veranschaulichung beschrieben
sind, sind verschiedene äquivalente
Abänderungen
innerhalb des Umfangs der Erfindung möglich, wie es Fachleute auf
dem relevanten Gebiet erkennen werden.
-
Diese
Abänderungen
können
an der Erfindung im Lichte der obigen genauen Beschreibung vorgenommen
werden. Die Ausdrücke,
die in den folgenden Ansprüchen
verwendet werden, sollen nicht so verstanden werden, daß sie die
Erfindung auf die bestimmten Ausführungsformen, die in der Beschreibung
und in den Zeichnungen offenbart sind, beschränken. Statt dessen soll der
Umfang der Erfindung vollständig
durch die folgenden Ansprüche
bestimmt sein, die entsprechend den bestehenden Lehren der Interpretation
von Ansprüchen
ausgelegt werden sollen.
-
ZUSAMMENFASSUNG
-
Befehlsunterstützte Cache-Verwaltung
für den
effizienten Einsatz von Cache und Speicher. Anweisungen (z. B. Modifizierer)
werden Lese- und Schreib-Speicherzugriffsbefehlen hinzugefügt, um Speicherzugriff
für temporäre Daten
zu identifizieren. Angesichts solcher Anweisungen wird eine alternative
Cache-Strategie und Zuweisungs-Strategien implementiert, die den
Zugriff auf Cache und Speicher minimieren. Bei einer Strategie kann
ein Schreib-Cache-Fehler
dazu führen,
daß Daten
in eine Teil-Cache-Zeile geschrieben werden, ohne einen Speicher-Lese/Schreib-Zyklus,
um den Rest der Zeile zu füllen.
Bei einer weiteren Strategie kann ein Lese-Cache-Fehler dazu führen, daß aus einem
Speicher gelesen wird, ohne die gelesenen Daten einer Cache-Zeile
zuzuweisen oder sie zu beschreiben. Ein Mechanismus zum weichen
Sperren von Cache-Zeilen wird ebenfalls offenbart, bei dem Cache-Zeilen wahlweise
weich gesperrt werden können,
um die Präferenz
zum Halten derartiger Cache-Zeilen gegenüber nicht gesperrten Zeilen
anzugeben.