-
Die vorliegende Erfindung betrifft ein Verfahren zum Betreiben eines Cachespeichers, einen Cachespeicher und eine Recheneinheit.
-
Hintergrund der Erfindung
-
Mikroprozessoren können einen Cachespeicher bzw. Zwischenspeicher umfassen bzw. mit einem solchen verbunden sein, in dem Daten, die in einem Hauptspeicher (z.B. einem Arbeitsspeicher) gespeichert sind, zwischengespeichert werden können, um, falls diese Daten erneut benötigt werden, schneller auf diese zugreifen zu können. Üblicherweise weist der Cachespeicher eine höhere Taktfrequenz, eine höhere Speicherbandbreite und/oder eine geringere Latenz als der Hauptspeicher auf und ist aufgrund der dadurch bedingten aufwändigeren Fertigung deutlich kleiner als der Hauptspeicher.
-
Offenbarung der Erfindung
-
Erfindungsgemäß werden ein Verfahren zum Betreiben eines Cachespeichers, ein Cachespeicher und eine Recheneinheit mit den Merkmalen der unabhängigen Patentansprüche vorgeschlagen. Vorteilhafte Ausgestaltungen sind Gegenstand der Unteransprüche sowie der nachfolgenden Beschreibung.
-
Die Erfindung bedient sich der Maßnahme, bei der Bestimmung zu überschreibender Speicherblöcke im Cachespeicher neben der Zugriffzeit (d.h. Zeitpunkt des Zugriffs) zusätzlich eine Relevanz, kodiert als Relevanz-Rangwert, der darin gespeicherten Datenblöcke zu berücksichtigen. Dies ermöglicht es, die Wahrscheinlichkeit eines Cache-Treffers (Cache Hit) und damit die Ausführungsgeschwindigkeit von Computerprogrammen gegenüber der ausschließlichen Berücksichtigung der Zugriffszeit zu erhöhen, da Datenblöcken, die Daten enthalten, die im Programmablauf voraussichtlich bzw. mit höherer Wahrscheinlichkeit wiederholt abgerufen werden, eine höhere Relevanz zugewiesen werden kann als anderen Datenblöcken. Insbesondere kann ein ungünstiges Cache-Verhalten von zeitkritischen Anwendungen unterdrückt werden.
-
Im Einzelnen umfasst das Verfahren zum Betreiben eines Cachespeichers, der wenigstens einen Satz mit mehreren zum Speichern von Datenblöcken eingerichteten Speicherblöcken aufweist, dass bei einem Schreibprozess eines Datenblocks in einen Speicherblock des Satzes (d.h. bei einem Cache-Schreibzugriff) der Datenblock in den Speicherblock geschrieben wird, ein Relevanz-Rangwert des Datenblocks und ein erster Zugriffszeit-Rangwert bestimmt werden, mittels einer Schreib-Rangabbildung aus dem Relevanz-Rangwert und dem ersten Zugriffszeit-Rangwert dem Speicherblock zugeordnete Rangdaten bestimmt werden und die bestimmten, dem Speicherblock zugeordneten Rangdaten gespeichert werden. Wenn kein Speicherblock des Satzes frei ist, wird aus den Speicherblöcken des Satzes ein zu überschreibender Speicherblock basierend auf den Rangdaten, die den Speicherblöcken zugeordnet sind, ausgewählt, und der zu speichernde Datenblock wird unter Verwendung des Schreibprozesses in den ausgewählten Speicherblock geschrieben. Dies bedeutet somit ein Ersetzen von in einem Cachespeicher gespeicherten Datenblöcken durch neue. Wenn ein Speicherblock frei ist, wird zweckmäßigerweise in den freien Speicherblock geschrieben. Falls mehrere Speicherblöcke frei bzw. unbelegt sind, kann ein beliebiger dieser Speicherblöcke gewählt werden (gegebenenfalls unter Berücksichtigung der Assoziativität). Wesentlich ist, dass auch hier der Schreibprozess, bei dem Rangdaten bestimmt und gespeichert werden, verwendet wird.
-
Der Begriff „Cachespeicher“ bzw. „Pufferspeicher“ bezeichnet einen einem Prozessor zugeordneten Zwischenspeicher, in dem Daten, die in einem Hauptspeicher (der relativ zum Cachespeicher langsam ist) gespeichert sind, zwischengespeichert werden können, so dass auf diese, falls sie erneut benötigt werden, von dem Prozessor schneller zugegriffen werden kann. Der Begriff „Speicherblock“ bzw. „Cacheblock“ bezeichnet einen Abschnitt des Cachespeichers bzw. des Satzes, der in seiner Größe den Datenblöcken entspricht, auf die im Hauptspeicher gemeinsam zugegriffen wird. Diese Größe, bzw. zumindest die minimale Größe, ist im Wesentlichen durch die Speicher-Busbreite des Hauptspeichers bestimmt. Statt dem Begriff „Speicherblock“ bzw. „Cacheblock“ kann auch der Begriff „Cachezeile“ verwendet werden. Mehrere Speicherblöcke sind zu einem „Satz“ bzw. „Cachesatz“, auch als „Cache-Gruppe“ bezeichnet zusammengefasst, der einem Abschnitt des Hauptspeichers zugeordnet ist, d.h. Datenblöcke in diesem Abschnitt werden im zugeordneten Satz gespeichert.
-
Der Relevanz-Rangwert kann als Wert angesehen werden, der angibt, inwiefern eine längere oder kürzere Speicherung des Datenblocks im Cachespeicher ausschlaggebend für die Ausführungsgeschwindigkeit eines Computerprogramms ist, das diesen Datenblock umfasst oder auf ihn zugreift. Der Relevanz-Rangwert kann eine beliebige Zahl, oder allgemeiner auch mehrere Zahlen, sein. Bevorzugt ist die Menge unterschiedlicher Relevanz-Rangwerte endlich und insbesondere durch eine Teilmenge der ganzen oder der natürlichen Zahlen gegeben, z.B. {0, 1, 2, ..., M-1}. Weiter vorzugsweise ist die Anzahl M, etwa M = 2 oder M = 4, unterschiedlicher Relevanz-Rangwerte eine Potenz von 2, d.h. M = 2N für eine ganze Zahl N, so dass die Relevanz-Rangwerte effizient als N-Bit-Muster kodiert und gespeichert werden können.
-
Um die Relevanz-Rangwerte zu speichern, kann in einer Seitentabelle (Page Table), die logischen Speicheradressen (d.h. Speicheradressen in einem virtuellen Adressraum aus Sicht des Prozessors bzw. eines Programms) entsprechende physikalische Speicheradressen (d.h. tatsächliche Speicheradressen des Hauptspeichers) zuordnet, in einem Seitentabellen-Eintrag für einen Datenblock ein Relevanzfeld vorgesehen sein, in dem der Relevanz-Rangwert des Datenblocks gespeichert ist bzw. gespeichert werden kann. Alternativ kann vorgesehen sein, dass Seitentabellen-Einträge lediglich Einstufungsfelder (z.B. ein Bit) aufweisen, in denen durch einen Wert angegeben ist, ob für den jeweiligen Datenblock ein Relevanz-Rangwert vorhanden ist. Die Relevanz-Rangwerte für Datenblöcke, für die ein Relevanz-Rangwert vorhanden ist, können dann in einer Relevanz-Tabelle oder -Liste gespeichert sein bzw. werden. Für Datenblöcke für die kein Relevanz-Rangwert vorhanden ist, kann ein Standard-Relevanz-Rangwert verwendet werden. Für die Seitentabelle und gegebenenfalls für die Relevanz-Tabelle bzw. -Liste ist vorzugsweise ein eigener Pufferspeicher vorgesehen, der auch im Cachespeicher, insbesondere dessen Steuerung, eingeschlossen sein kann. Bei Speicherzugriffen können diese zusätzlichen Felder in den Seitentabellen-Einträgen und gegebenenfalls die Relevanz-Tabelle bzw. -Liste gelesen und die entsprechenden Relevanz-Rangwerte im Verfahren verwendet werden.
-
Der erste/zweite Zugriffszeit-Rangwert entspricht dem Zeitpunkt, an dem der letzte Cachezugriff auf den Speicherblock erfolgt ist, bzw. der Einordnung des jeweiligen Cachezugriffs in einer zeitlichen Reihenfolge von Cachezugriffen. Der Begriff „Cachezugriff“ soll hier sowohl, wie vorstehend, Cache-Schreibzugriffe bzw. Schreibzugriffe als auch, wie nachstehend, Cache-Lesezugriffe einschließen. Beispielsweise können Cachezugriffe entsprechend ihrer zeitlichen Reihenfolge nummeriert werden, wobei der Zugriffszeit-Rangwert eines Cachezugriffs die Nummer dieses Cachezugriffs entsprechend der Nummerierung ist.
-
Sowohl Relevanz-Rangwert als auch Zugriffszeit-Rangwert können mehrere einzelne Werte (z.B. Zahlenwerte) umfassen. Diese Begriffe sind also im Allgemeinen als „wenigstens ein Relevanz-Rangwert“ bzw. „wenigstens ein Zugriffszeit-Rangwert“ zu verstehen.
-
Bevorzugt werden bei einem Cache-Lesezugriff, bei dem ein gespeicherter Datenblock aus einem Speicherblock des Satzes gelesen wird, der Relevanz-Rangwert des zu lesenden Datenblocks und ein zweiter Zugriffszeit-Rangwert bestimmt, mittels einer Lese-Rangabbildung aus dem Relevanz-Rangwert und dem zweiter Zugriffszeit-Rangwert dem Speicherblock erneut zugeordnete Rangdaten bestimmt und die neu bestimmten, dem Speicherblock zugeordneten Rangdaten gespeichert. Die Lese-Rangabbildung ist bevorzugt gleich der Schreib-Rangabbildung. Ein Cache-Lesezugriff auf den Cachespeicher erfolgt, wenn ein Cache-Treffer auftritt, d.h. angeforderte Daten (etwa von einem Prozessor angefordert) sind in einem Datenblock enthalten, der in einem Speicherblock des Satzes gespeichert ist. Die angeforderten Daten können dann aus diesem Speicherblock gelesen werden, ohne auf einen Hauptspeicher, der die im Cachespeicher zwischenzuspeichernden Daten enthält, zugreifen zu müssen.
-
Bevorzugt umfassen die Rangdaten einen kombinierten Rangwert, wobei eine Kombinationsfunktion auf den Relevanz-Rangwert und den ersten bzw. zweiten Zugriffszeit-Rangwert angewandt wird, um den kombinierten Rangwert zu bestimmen. Bevorzugt wird ein Speicherblock des Satzes, der den niedrigsten kombinierten Rangwert aufweist, als zu überschreibender Speicherblock ausgewählt oder ein Speicherblock des Satzes, der den höchsten modifizierten kombinierten Rangwert aufweist, als zu überschreibender Speicherblock ausgewählt.
-
Das Bestimmen des kombinierten Rangwerts kann Teil der Schreib-Rangabbildung und/oder der Lese-Rangabbildung sein, wobei für die Schreib-Rangabbildung und die Lese-Rangabbildung verschiedene Kombinationsfunktionen vorgesehen sein können. Die Bildung von kombinierten Rangwerten ist vorteilhaft, da diese ohne großen Aufwand und damit schnell ausgewertet werden können. Werden der Relevanz-Rangwert mit P, der Zugriffszeit-Rangwert mit R, der modifizierte Zugriffszeit-Rangwert mit Rkomb und die Relevanzfunktion mit g bezeichnet, gilt Rkomb = g(P, R).
-
Bevorzugt umfassen die Rangdaten einen modifizierten Zugriffszeit-Rangwert, wobei eine Relevanzfunktion auf den Relevanz-Rangwert angewandt wird und das Ergebnis mit dem Zugriffszeit-Rangwert verrechnet wird, z.B. addiert, subtrahiert, multipliziert oder dividiert wird, um den modifizierten Zugriffszeit-Rangwert zu bestimmen. Bevorzugt wird ein Speicherblock des Satzes, der den niedrigsten modifizierten Zugriffszeit-Rangwert aufweist, als zu überschreibender Speicherblock ausgewählt oder ein Speicherblock des Satzes, der den höchsten modifizierten Zugriffszeit-Rangwert aufweist, als zu überschreibender Speicherblock ausgewählt wird.
-
Das Bestimmen des modifizierten Zugriffszeit-Rangwerts ist Teil der Schreib-Rangabbildung und/oder der Lese-Rangabbildung, wobei für die Schreib-Rangabbildung und die Lese-Rangabbildung verschiedene Relevanzfunktionen vorgesehen sein können. Im nachfolgenden Beispiel einer linearen Funktion könnte etwa die Konstante a im Fall einer Lese-Rangabbildung betragsmäßig größer gewählt werden als im Fall einer Schreib-Rangabbildung, um zu berücksichtigen, dass ein Datenblock, für den ein Cache-Treffer auftritt, mit höherer Wahrscheinlichkeit später erneut benötigt wird.
-
Werden der Relevanz-Rangwert mit P, der Zugriffszeit-Rangwert mit R, der modifizierte Zugriffszeit-Rangwert mit Rmod und die Relevanzfunktion mit f bezeichnet, gilt Rmod = f(P) + R. Die Relevanzfunktion sollte im Wertebereich der Relevanz-Rangwerte monoton steigend (oder fallend) sein. Hier sind z.B. lineare, quadratische usw. Funktionen oder auch andere funktionale Abhängigkeiten denkbar. Im Falle einer linearen Funktion also f(P) = a P + b; mit reellen Konstanten a, b; beispielsweise f(P) = 6·P - 1, so dass Rmod = 6 P - 1 + R. Weitergehend sind auch je nach Relevanz-Rangwert unterschiedliche funktionale Abhängigkeiten denkbar, beispielsweise könnte für Datenblöcke mit Relevanz-Rangwert P gleich 0 der modifizierte Zugriffszeit-Rangwert mit Rmod gleich dem Zugriffszeit-Rangwert R sein (Rmod = R, für P = 0), und für Datenblöcke mit Relevanz-Rangwert P ungleich 0 eine Funktion wie vorstehend genannt angewendet werden (Rmod = f(P) + R, für P # 0).
-
Ob der Speicherblock mit dem niedrigsten kombinierten bzw. modifizierten Rangwert oder mit dem höchsten kombinierten bzw. modifizierten Rangwert als zu überschreibender Speicherblock ausgewählt wird, hängt von der Kodierung ab, d.h. in welche Richtung (auf- oder absteigend) die kombinierten bzw. modifizierten Rangwerte anzeigen, dass der entsprechende Speicherblock nicht überschrieben werden sollte. Ist der Zugriffszeit-Rangwert R etwa eine aufsteigende Nummerierung von Cachezugriffen, wird derjenige Speicherblock mit niedrigstem modifizierten Rangwert gewählt.
-
In beiden vorstehenden Ausführungen kann bevorzugt, wenn mehrere Speicherblöcke des Satzes den gleichen niedrigsten oder den gleichen höchsten kombinierten bzw. modifizierten Zugriffszeit-Rangwert aufweisen, derjenige dieser mehreren Speicherblöcke als zu überschreibender Speicherblock ausgewählt werden, der den niedrigsten Relevanz-Rangwert aufweist, oder derjenige, der den höchsten Relevanz-Rangwert aufweist.
-
Bevorzugt umfassen die Rangdaten einen Stufenwert, wobei der Stufenwert im Schreibprozess basierend auf dem Relevanz-Rangwert des zu schreibenden Datenblocks bestimmt wird, wobei der Stufenwert nach jeweils einer bestimmten Anzahl von Cache-Schreibzugriffen und/oder Cache-Lesezugriffen geändert wird. Bevorzugt wird nach der bestimmten Anzahl von Cache-Schreibzugriffen und/oder Cache-Lesezugriffen der Stufenwert verringert oder erhöht und ein Speicherblock, der den kleinsten Stufenwert aufweist, als zu überschreibender Speicherblock ausgewählt, oder ein Speicherblock, der den größten Stufenwert aufweist. Weiter bevorzugt umfassen die Rangdaten den Zugriffszeit-Rangwert und, wenn mehrere Speicherblöcke den kleinsten bzw. größten Stufenwert aufweisen, wird der Speicherblock als zu überschreibender Speicherblock ausgewählt, der den niedrigsten Zugriffszeit-Rangwert bzw. der den höchsten Zugriffszeit-Rangwert aufweist. Beispielsweise können Stufenwerte 0, 1, ..., S vorgesehen sein, wobei, wenn ein Datenblock überschrieben werden soll, derjenige belegte Speicherblock gewählt wird, der den niedrigsten Stufenwert aufweist und, falls mehrere Speicherblöcke den gleichen Stufenwert aufweisen, von diesen derjenige mit niedrigstem Zugriffszeit-Rangwert. Für diese Ausführung können die Rangdaten z.B. als Listen gespeichert werden, wobei für jeden Stufenwert eine Liste vorgesehen ist, in der die diesen Stufenwert aufweisenden Speicherblöcke (bzw. Adressen der Speicherblöcke im Satz) und der entsprechenden Zugriffszeit-Rangwerte angegeben sind. Nach der vorgegebenen bzw. bestimmten Anzahl von Cachezugriffen wird der Stufenwert aller Speicherblöcke um eins erniedrigt. Im Falle eines Cache-Treffers bzw. Cache-Lesezugriffs können die Rangdaten (d.h. Stufenwert und Zugriffszeit-Rangwert) des gelesenen Speicherblocks erneut bestimmt und aktualisiert werden, d.h. dieser Speicherblock wird wieder mit einem höheren Stufenwert eingestuft, falls mehr als die bestimmte Anzahl von Cachezugriffen seit dem letzten Zugriff auf diesen Speicherblock vergangen ist.
-
Vorzugsweise werden bei Cache-Schreibzugriffen und/oder bei Cache-Lesezugriffen die jeweilig zugeordneten Rangdaten eines oder mehrerer nicht vom Cachezugriff betroffenen Speicherblöcke aktualisiert. Dazu kann eine Aktualisierungs-Rangabbildung verwendet werden, die eine Funktion der alten Rangdaten, der Relevanz-Rangwerte und/oder der Zugriffszeit-Rangwerte sein kann und diese auf die aktualisierten Rangdaten abbildet, welche dann gespeichert werden. Eine Aktualisierung kann z.B. in einem Ändern von kombinierten oder kombinierten Zugriffszeit-Rangwerte bestehen oder, falls die Rangdaten eine relative Priorität der Speicherblöcke kodieren, in einem Aktualisieren dieser relativen Prioritäten. Relative Prioritäten sind zweckmäßig, da diese effizient in BitMustern gespeichert werden können. Umfasst beispielsweise ein Satz vier Speicherblöcke, reichen zwei Bit je Speicherblock zur Kodierung aus.
-
Bevorzugt umfasst die Erfindung ein Bestimmen der Relevanz-Rangwerte für Datenblöcke, wobei wenigstens ein Computerprogramm, das die Datenblöcke umfasst oder auf diese zugreift, mehrmals von einem mit dem Cachespeicher verbundenen Prozessor ausgeführt wird, und Ausführungszeiten gemessen werden, wobei ein oder mehrere zu testende Datenblöcke wahlweise von einem Speichern im Cachespeicher ausgeschlossen werden oder nach erstmaliger Speicherung im Cachespeicher für eine vorgegebene Anzahl von Speicherzugriffen nicht aus diesem gelöscht werden können, um die Relevanz-Rangwerte dieser zu testenden Datenblöcke basierend auf den Ausführungszeiten zu bestimmen. Getesteten Datenblöcken, die, für den Fall, dass sie für die vorgegebene Anzahl von Speicherzugriffen nicht aus dem Cache gelöscht werden können, zu kürzeren Ausführungszeiten führen, kann eine höhere Relevanz und ein entsprechender Relevanz-Rangwert zugewiesen werden.
-
Datenblöcken, die nicht getestet werden, kann ein Standard-Relevanz-Rangwert, insbesondere ein solcher, der einer geringen Relevanz entspricht, zugewiesen werden. Alternativ können nicht getestete Datenblöcke als „ohne Relevanz-Rangwert“ gekennzeichnet werden, was dann durch die Schreib- und/oder Lese-Rangabbildung berücksichtigt wird. Ebenso können getestete Datenblöcke als „mit Relevanz-Rangwert“ gekennzeichnet werden. Insgesamt ist so zur Kennzeichnung der Datenblöcke nur ein Bit („ohne Relevanz-Rangwert“ / „mit Relevanz-Rangwert“) notwendig, wobei für diejenigen „mit Relevanz-Rangwert“ zusätzlich eine Tabelle oder Liste (Relevanz-Tabelle oder -Liste) mit den entsprechenden Relevanz-Rangwerten vorgesehen ist. Zur Zeitersparnis brauchen also nicht alle Datenblöcke, die Programmdaten umfassen, getestet werden. Die zu testenden Datenblöcke können vom Fachmann basierend auf der ihm bekannten Struktur des Computerprogramms ausgewählt werden. Es ist aber auch möglich, zunächst beim Programmablauf Speicherzugriffe auf den Hauptspeicher zu beobachten, und dann zu testendende Datenblöcke aus Bereichen des Hauptspeichers zu wählen, auf die relativ oft zugegriffen wird.
-
Entsprechend umfasst das Verfahren weiterhin bevorzugt ein Ergänzen von Seitentabellen-Einträgen, um die bestimmten Relevanz-Rangwerte zu speichern; wobei in einem Relevanzfeld eines Seitentabellen-Eintrags, der sich auf einen getesteten Datenblock bezieht, der bestimmte Relevanz-Rangwert für diesen Datenblock gespeichert wird. Alternativ wird in einem Einstufungsfeld eines Seitentabellen-Eintrags, der sich auf einen getesteten Datenblock bezieht, ein Wert gespeichert, der anzeigt, dass für diesen Datenblock ein Relevanz-Rangwert bestimmt wurde, und in einer Relevanz-Tabelle oder Relevanz-Liste wird der für diesen Datenblock bestimmte Relevanz-Rangwert gespeichert. Das Einstufungsfeld kann dem Bit („ohne Relevanz-Rangwert“ / „mit Relevanz-Rangwert“) entsprechen. Für Datenblöcke, für die kein Relevanz-Rangwert bestimmt wurde, kann im Einstufungsfeld ein entsprechender Wert („ohne Relevanz-Rangwert“) gespeichert werden; dies kann beispielsweise ein Standardeintrag sein. In der Relevanz-Tabelle bzw. -Liste müssen lediglich Einträge für Datenblöcke, für die ein Relevanz-Rangwert bestimmt wurde und gespeichert wird („mit Relevanz-Rangwert“), erzeugt werden, so dass Speicherplatz gespart werden kann, wenn nur für einen Teil der Datenblöcke ein Relevanz-Rangwert bestimmt wird.
-
Ein erfindungsgemäßer Cachespeicher umfasst wenigstens einen Satz mit mehreren Speicherblöcken, die dazu eingerichtet sind, Datenblöcke zu speichern, und eine Steuerung, die dazu eingerichtet ist, ein Verfahren nach einem der vorstehenden Ansprüche durchzuführen.
-
Vorzugsweise umfasst der Cachespeicher einen Rangdatenspeicherbereich, der dazu eingerichtet ist, die Rangdaten zu speichern. Der Rangdatenspeicherbereich kann Teil eines Verwaltungsdatenspeicherbereichs sein, in dem Daten gespeichert werden, die die in den Speicherblöcken des Cachespeichers zwischengespeicherten Datenblöcke betreffen, z.B. welcher Datenblock (d.h. dessen Adresse im Hauptspeicher) ist in einem Speicherblock gespeichert, oder ob dieser vom Prozessor überschrieben wurde („Dirty-Tag“), und ähnliches. Der Rangdatenspeicherbereich ist nicht zwangsläufig ein zusammenhängender Speicherbereich, sondern es kann für jeden Speicherblock im Verwaltungsdatenspeicherbereich ein Eintrag (der typischerweise mehrere Byte umfasst) vorgesehen sein, der auch die Rangdaten für diesen Speicherblock umfasst.
-
Eine erfindungsgemäße Recheneinheit umfasst einen Prozessor, einen Hauptspeicher und einen erfindungsgemäßen Cachespeicher, der dazu eingerichtet ist, im Hauptspeicher gespeicherte Datenblöcke zwischenzuspeichern.
-
Weitere Vorteile und Ausgestaltungen der Erfindung ergeben sich aus der Beschreibung und der beiliegenden Zeichnung.
-
Die Erfindung ist anhand von Ausführungsbeispielen in der Zeichnung schematisch dargestellt und wird im Folgenden unter Bezugnahme auf die Zeichnung beschrieben.
-
Figurenliste
-
- 1 zeigt eine Recheneinheit mit einem Cachespeicher gemäß einer bevorzugten Ausführungsform der Erfindung.
- 2 zeigt ein Ablaufdiagramm eines Speicherzugriffs, wobei entsprechend bevorzugter Ausführungsformen der Erfindung auf einen Cachespeicher zugegriffen wird.
-
Ausführungsform(en) der Erfindung
-
1 zeigt eine Recheneinheit 2 mit einem Cachespeicher 10 gemäß einer bevorzugten Ausführungsform der Erfindung. Die Recheneinheit 2 umfasst einen Prozessor 4, der zur Ausführung von Computerprogrammen eingerichtet ist, die in einem Hauptspeicher 6 (Arbeitsspeicher) gespeichert sind. Um den Zugriff auf den Hauptspeicher 6 zu beschleunigen, ist ein Cachespeicher 10 vorgesehen.
-
Der Cachespeicher 10 umfasst einen Datenblock-Speicherbereich 12, eine Steuerung 14 und einen Rangdaten-Speicherbereich 16.
-
Der Datenblock-Speicherbereich 12 ist dazu eingerichtet, Datenblöcke, die im Hauptspeicher 6 gespeichert sind und die vom Prozessor 4 gelesen werden, zwischenzuspeichern, um, falls diese erneut vom Prozessor 4 angefordert werden, schneller auf diese zugreifen zu können. Der Datenblock-Speicherbereich 12 umfasst bzw. ist organisiert in wenigstens einen Satz 18 mit mehreren Speicherblöcken 20, wobei in jedem Speicherblock ein Datenblock gespeichert werden kann. Eine Größe eines Speicherblocks bzw. Datenblocks kann im Prinzip beliebig entsprechend den Anforderungen bzw. Gegebenheiten der verwendeten Hauptspeicher- und/oder Prozessorarchitektur gewählt werden. Z.B. kann die Größe 16 Byte, 32 Byte, 64 Byte oder 128 Byte usw. sein. Der Satz 18 dient dazu, Datenblöcke, die in einem bestimmten, dem Satz 18 zugeordneten Abschnitt 8 des Hauptspeichers 6 gespeichert sind, zwischenzuspeichern. Anders als hier dargestellt, kann der dem Satz zugeordnete Abschnitt auch nicht zusammenhängend sein, d.h. aus mehreren über den Hauptspeicher verteilten Teil-Abschnitten bestehen. Verschiedene Sätze sind verschiedenen Abschnitten des Hauptspeichers zugeordnet, jeder im Hauptspeicher gespeicherte Datenblock kann also in genau einem der Sätze zwischengespeichert werden. Die Größe der Hauptspeicher-Abschnitte ist um ein Vielfaches größer als die Größe der Sätze, z.B. kann die Anzahl von Datenblöcken in einem Hauptspeicher-Abschnitt 8 um mehrere Größenordnungen (z.B. 103 bis 106) größer als die Anzahl von Speicherblöcken in einem Satz sein (dies entspricht dem Größenverhältnis von Hauptspeicher zu Datenblock-Speicherbereich). Die als Assoziativität bezeichnete Anzahl von Speicherblöcken in einem Satz kann an sich eine beliebige Zahl sein, z.B. 2, 4, 8, 16 usw. Auch eine vollassoziative Ausführung, d.h. es gibt nur einen Satz, der alle Speicherblöcke beinhaltet, ist möglich.
-
Die Steuerung 14 dient dazu, den Cachespeicher 10 zu steuern. Dies schließt einerseits die Datenkommunikation mit dem Prozessor 4 und dem Hauptspeicher 6 ein. Andererseits ist die Steuerung 14 dazu eingerichtet, ein erfindungsgemä-ßes Verfahren durchzuführen. Die verwendeten Rangdaten werden im Rangdaten-Speicherbereich 16 gespeichert. Der Rangdaten-Speicherbereich 16 kann Teil eines Speicherbereichs (nicht dargestellt) sein kann, in dem Verwaltungsdaten bezüglich der in den Speicherblöcken gespeicherten Datenblöcke gespeichert sind; insofern können die Rangdaten als Verwaltungsdaten angesehen werden, bzw. in diesen umfasst sein.
-
Der Prozessor 4 und der Cachespeicher 10 sind hier zu Veranschaulichung als separate Elemente dargestellt, wobei die Daten-Kommunikation zwischen dem Cachespeicher und dem Hauptspeicher direkt oder indirekt (über den Prozessor) erfolgen kann. Bevorzugt ist allerdings der Cachespeicher 10 ein Teil des Prozessors 4, wobei die Steuerung 14 des Cachespeichers 10 Teil einer Speichersteuerung des Prozessors 4 sein kann. Es ist ebenso denkbar, dass der Cachespeicher und der Hauptspeicher in einer Speichervorrichtung, z.B. einem Festplattenlaufwerk oder einem Solid-State-Drive, vorgesehen sind, die mit dem Prozessor, der auch in einer von der Speichervorrichtung getrennten Recheneinheit enthalten sein kann, über eine Datenschnittstelle, z.B. PCIe, USB oder SATA, verbunden ist.
-
2 zeigt ein Ablaufdiagramm eines Speicherzugriffs, wobei entsprechend bevorzugter Ausführungsformen der Erfindung auf einen Cachespeicher zugegriffen wird. Es ist der allgemeine Ablauf des Speicherzugriffs dargestellt, der auch Schritte umfasst, die optional sind. Insbesondere beziehen sich die Schritte 110, 120, 130, 140 auf solche Vorgänge.
-
In Schritt 110 werden Daten angefordert (etwa von dem Prozessor), die an einer bestimmten Speicheradresse im Hauptspeicher gespeichert sind. In Schritt 120 wird geprüft (durch die Steuerung des Cachespeichers), ob der Datenblock, in dem die Speicheradresse enthalten ist, in einem Speicherblock eines entsprechenden Satzes des Cachespeichers gespeichert ist. Wenn dies der Fall ist, werden die Daten in Schritt 130 aus dem Cachespeicher gelesen (siehe auch Schritte 220, 230, 240 weiter unten), und wenn dies nicht der Fall ist, werden die Daten in Schritt 140 aus dem Hauptspeicher gelesen.
-
Wenn die Daten in Schritt 140 aus dem Hauptspeicher gelesen werden, können die Daten bzw. der Datenblock, in dem diese enthalten sind, in dem Cachespeicher gespeichert werden. Dies stellt einen Cache-Schreibzugriff dar. Dabei wird in Schritt 150 zunächst geprüft, ob ein Speicherblock in dem Satz, der den Daten bzw. dem Datenblock, in dem diese enthalten sind, zugeordnet ist, frei bzw. unbelegt ist. Wenn dies der Fall ist, wird in Schritt 160 dieser freie Speicherblock ausgewählt (falls mehrere Speicherblöcke im Satz frei sind, wird einer dieser mehreren gewählt) und mit einem Schreiben des Datenblocks in den ausgewählten Speicherblock fortgefahren. Dieses Schreiben bzw. dieser Schreibprozess 165 umfasst die Schritte 170, 180, 190, 200.
-
In Schritt 170 wird der zu speichernde Datenblock in den Speicherblock geschrieben. Das Schreiben des zu speichernden Datenblocks in den Speicherblock kann unabhängig von den weiteren Schritten 180 (Bestimmen der Relevanz- und Zugriffszeit-Rangwerte), 190 (Bestimmen der Rangdaten), 200 (Schreiben der Rangdaten) durchgeführt werden und vor, nach, zwischen oder auch parallel zu diesen Schritten erfolgen.
-
In Schritt 180 werden ein Relevanz-Rangwert des zu speichernden Datenblocks, d.h. ein Wert, der die Priorität, mit der der Datenblock im Cache vorgehalten werden soll, bezeichnet, und ein erster Zugriffszeit-Rangwert, d.h. ein Wert, der den Zeitpunkt des Schreibzugriffs charakterisiert, bestimmt.
-
In Schritt 190 werden aus dem Relevanz-Rangwert und dem ersten Zugriffszeit-Rangwert Rangdaten (die dem Speicherblock, in den der Datenblock geschrieben wird, zugeordnet sind) bestimmt. Die Rangdaten stellen einen kombinierten Rangwert dar. Um die Rangdaten zu bestimmen, wird eine Schreib-Rangabbildung verwendet, d.h. eine Abbildung bzw. Funktion, die jedem Paar aus Relevanz-Rangwert und Zugriffszeit-Rangwert die Rangdaten zuordnet. Die Schreib-Rangabbildung kann von den Rangdaten, Relevanz-Rangwerten und/oder Zugriffszeit-Rangwerten anderer Speicherblöcke bzw. der darin gespeicherten Datenblöcke abhängig sein, z.B. wenn die Rangdaten lediglich eine Rangfolge der Speicherblöcke im Satz beschreiben.
-
In Schritt 200 werden die Rangdaten gespeichert, z.B. in den Rangdaten-Speicherbereich geschrieben.
-
Zurückkommend zu Schritt 150, wenn festgestellt wird, dass kein Speicherblock im Satz (der den Daten bzw. dem Datenblock, in dem diese enthalten sind, zugeordnet ist) unbelegt bzw. frei ist, wird in Schritt 210 ein zu überschreibender Speicherblock des Satzes ausgewählt. Diese Auswahl erfolgt basierend auf den Rangdaten, die den im Satz eingeschlossenen Speicherblöcken zugeordnet sind, d.h. es wird der Speicherblock ausgewählt, dessen Rangdaten die geringste Priorität einer weiteren Zwischenspeicherung anzeigen. Für welchen Speicherblock dies der Fall ist, ergibt sich aus der Bestimmung der Rangdaten, die diese „Priorität“ kodieren; typischerweise umfassen die Rangdaten wenigstens einen Wert, wobei der Speicherblock, für den dieser am größten oder am kleinsten ist, ausgewählt wird. Die Rangdaten können z.B. als modifizierter Zugriffszeit-Rangwert gegeben sein bzw. einen solchen umfassen, wobei dann der Speicherblock mit der ältesten modifizierten Zugriffszeit (kleinster oder größter Zugriffszeit-Rangwert) ausgewählt wird, wobei eventuell weitere Gesichtspunkte (z.B. kodiert in den Rangdaten) berücksichtigt werden können, etwa falls zwei Speicherblöcke den gleichen modifizierten Zugriffszeit-Rangwert aufweisen.
-
Wenn die Daten in Schritt 130 aus dem Cachespeicher gelesen werden, können die Rangdaten des Speicherblocks, in dem der entsprechende Datenblock gespeichert ist, beim Lesen aktualisiert werden. Dies erfolgt in den Schritten 220, 230 und 240, die im Wesentlichen den Schritten 180, 190 und 200 entsprechen.
-
In Schritt 220 werden der Relevanz-Rangwert des zu lesenden Datenblocks und ein zweiter Zugriffszeit-Rangwert (der zweite Zugriffszeit-Rangwert bezieht sich auf den Cache-Lesezugriff, im Gegensatz zum ersten Zugriffszeit-Rangwert, der sich auf den Cache-Schreibzugriff bezieht) bestimmt.
-
In Schritt 230 werden mittels einer Lese-Rangabbildung aus dem Relevanz-Rangwert und dem zweiter Zugriffszeit-Rangwert dem Speicherblock zugeordnete Rangdaten erneut bestimmt. Lese-Rangabbildung kann gleich der Schreib-Rangabbildung sein oder kann verschieden von dieser sein, etwa könnte berücksichtigt werden, dass für den Datenblock bereits ein Cache-Treffer auftrat.
-
In Schritt 240 werden die in Schritt 230 neu bestimmten Rangdaten, die dem Speicherblock zugeordnet sind, gespeichert (z.B. im Rangdaten-Speicherbereich, durch Überschreiben der alten Rangdaten).
-
In beiden Fällen, d.h. bei einem Cache-Lesezugriff (Schritte 130, 220, 230, 240) und bei einem Cache-Schreibzugriff (Schritte 140 bis 210) können optional auch die Rangdaten von Speicherblöcken, auf die nicht zugegriffen wurde, neu bestimmt bzw. aktualisiert werden. Dies kann insbesondere dann vorgesehen sein, wenn die Rangdaten eine relative Priorität der Speicherblöcke kodieren. Es erfolgt also bevorzugt in Schritt 250 ein Aktualisieren der (gespeicherten) Rangdaten von Speicherblöcken des Satzes, auf die nicht zugegriffen (weder lesend noch schreibend) wird. Dazu kann eine Aktualisierungsabbildung verwendet werden, die auf die gespeicherten Rangdaten angewendet wird und eventuell auch von den Relevanz-Rangwerten der entsprechenden Datenblöcke abhängig sein kann, um die Rangdaten neu zu bestimmen. Die neu bestimmten Rangdaten können dann gespeichert werden, z.B. durch Überschreiben der alten Rangdaten.
-
Weiterhin kann bevorzugt in Schritt 100 (vorbereitend) ein Bestimmen der Relevanz-Rangwerte für Datenblöcke erfolgen. Dabei können mehrere Ausführungszeiten eines Computerprogrammes oder von Teilen eines Computerprogramms gemessen werden, wobei jeweils, zur Messung verschiedener Ausführungszeiten, zu testende Datenblöcke (das sind Datenblöcke, in denen das Computerprogramm gespeichert ist oder auf die dieses zugreift) wahlweise vom Zwischenspeichern im Cache ausgeschlossen werden, oder die, wenn auf sie zugegriffen wird, für eine vorgegebene Anzahl von Speicherzugriffen im Cachespeicher vorgehalten werden (also nicht gelöscht werden). Durch Vergleichen der Ausführungszeiten kann dann auf die jeweilige Relevanz der entsprechenden zu testenden Datenblöcke geschlossen werden. Das Bestimmen der Relevanz-Rangwerte erfolgt vorzugsweise vor Implementierung des Verfahrens (bei der regulären Computerprogrammausführung), kann aber auch parallel dazu durchgeführt werden, indem jedem zu testenden Datenblock, etwa bei wiederholter Programmausführung, verschiedene Relevanz-Rangwerte zugewiesen werden und zugehörige Ausführungszeiten aufgezeichnet werden.