2 Stimmen

Bei welchen Anwendungen bringt die Zwischenspeicherung keine Vorteile?

Unser Professor bat uns, uns ein Design für ein eingebettetes System auszudenken, bei dem der Cache nicht optimal genutzt werden kann. Ich habe versucht, ein solches Design zu finden, konnte aber noch keins finden. Wenn Sie ein solches Design kennen, können Sie mir ein paar Tipps geben?

5voto

Vladimir Keleshev Punkte 12396

Caches nutzen die Tatsache aus, dass Daten (und Code) Ortschaft .

Ein eingebettetes System, das keine Lokalität aufweist, wird also nicht von einem Cache profitieren.

Beispiel:

Ein eingebettetes System hat 1MB Speicher und 1kB Cache. Wenn dieses eingebettete System mit kurzen Sprüngen auf den Speicher zugreift, wird es lange in demselben 1kB-Speicherbereich bleiben, der erfolgreich gecacht werden konnte. Wenn das eingebettete System innerhalb dieser 1 MB an verschiedene, weit entfernte Stellen springt und dies häufig tut, dann gibt es keine Lokalität und der Cache wird schlecht genutzt.

Beachten Sie auch, dass Sie je nach Architektur unterschiedliche Caches für Daten und Code oder einen einzigen haben können.

Ein konkreteres Beispiel:

Wenn Ihr eingebettetes System die meiste Zeit auf dieselben Daten zugreift und (z. B.) in einer engen Schleife läuft, die in den Cache passt, dann nutzen Sie den Cache voll aus. Handelt es sich bei Ihrem System um eine Datenbank, die zufällige Daten aus einem beliebigen Speicherbereich abruft, dann kann der Cache nicht optimal genutzt werden. (Weil die Anwendung keine Lokalität von Daten/Code aufweist.)

Ein anderes, aber merkwürdiges Beispiel

Wenn Sie ein sicherheits- oder unternehmenskritisches System bauen, möchten Sie manchmal, dass Ihr System sehr vorhersehbar ist. Caches machen die Ausführung Ihres Codes sehr unvorhersehbar, da Sie nicht vorhersagen können, ob ein bestimmter Speicher zwischengespeichert ist oder nicht, so dass Sie nicht wissen, wie lange der Zugriff auf diesen Speicher dauern wird. Wenn Sie also den Cache deaktivieren, können Sie die Leistung Ihres Programms genauer beurteilen und die Worst-Case-Ausführungszeit berechnen. Aus diesem Grund ist es üblich, den Cache in solchen Systemen zu deaktivieren.

1voto

Michel Punkte 2343

Ich weiß nicht, welchen Hintergrund Sie haben, aber ich schlage vor, dass Sie nachlesen, was das Schlüsselwort "volatile" in der Sprache C bewirkt.

1voto

old_timer Punkte 65318

Überlegen Sie, wie ein Cache funktioniert. Wenn Sie z.B. einen Cache ausschalten wollen, könnten Sie je nach Cache versuchen, die Daten, auf die häufig zugegriffen wird, an 0x10000000, 0x20000000, 0x30000000, 0x40000000 usw. zu speichern. Es braucht nur sehr wenige Daten an jeder Stelle, um Cache-Thrashing und einen erheblichen Leistungsverlust zu verursachen.

Ein weiterer Grund ist, dass Cache-Speicher in der Regel eine "Cache-Zeile" einziehen. Ein einziger Befehl kann dazu führen, dass 8, 16 oder mehr Bytes oder Wörter gelesen werden. In jeder Situation, in der Sie im Durchschnitt einen kleinen Prozentsatz der Cache-Zeile verwenden, bevor sie entfernt wird, um eine andere Cache-Zeile einzuziehen, sinkt Ihre Leistung mit eingeschaltetem Cache.

Im Allgemeinen müssen Sie zuerst Ihren Cache verstehen, dann Wege finden, um den Leistungsgewinn zu verhindern, und dann über alle realen Situationen nachdenken, die dies verursachen würden. Nicht alle Caches sind gleich, daher gibt es keine gute oder schlechte Angewohnheit oder einen Angriff, der für alle Caches funktioniert. Das Gleiche gilt für denselben Cache mit anderen Speichern dahinter oder einem anderen Prozessor oder einer anderen Speicherschnittstelle oder anderen Speicherzyklen davor. Sie müssen auch das System als Ganzes betrachten.

EDIT :

Vielleicht habe ich die falsche Frage beantwortet. nicht...voller Vorteil. das ist eine viel einfachere Frage. In welchen Situationen muss die eingebettete Anwendung über den Cache hinaus auf den Speicher zugreifen (nach dem ersten Füllen)? Der Wechsel in den Hauptspeicher löscht das Wort "voll" in "voller Vorteil". IMO.

0voto

Theran Punkte 3746

Die Zwischenspeicherung bietet keinen Vorteil, sondern ist eher ein Hindernis bei der Steuerung von speicherbelegten Peripheriegeräten. Dinge wie Koprozessoren, Motorsteuerungen und UARTs erscheinen oft nur als ein weiterer Speicherplatz im Adressraum des Prozessors. Anstatt einfach nur einen Wert zu speichern, können diese Speicherplätze etwas in der realen Welt bewirken, wenn sie beschrieben oder ausgelesen werden.

Der Cache verursacht bei diesen Geräten Probleme, denn wenn Software darauf schreibt, sieht das Peripheriegerät den Schreibvorgang nicht sofort. Wenn die Cache-Zeile nie geleert wird, kann es sein, dass das Peripheriegerät nie einen Befehl erhält, selbst wenn die CPU Hunderte von Befehlen gesendet hat. Wenn das Schreiben von 0xf0 an 0x5432 dazu führen sollte, dass die Zündkerze Nr. 3 gezündet oder das rechte Querruder um 2 Grad nach unten gekippt wird, dann verzögert oder stoppt der Cache dieses Signal und verursacht einen Systemausfall.

In ähnlicher Weise kann der Cache verhindern, dass die CPU frische Daten von den Sensoren erhält. Die CPU liest wiederholt von der Adresse, und der Cache sendet immer wieder den Wert zurück, der beim ersten Mal vorhanden war. Auf der anderen Seite des Zwischenspeichers wartet der Sensor geduldig auf eine Abfrage, die nie kommen wird, während die Software auf der CPU hektisch Regler einstellt, die nichts tun, um Messwerte zu korrigieren, die sich nie ändern.

0voto

pmod Punkte 9810

Zusätzlich zu der fast vollständigen Antwort von Halst möchte ich noch einen weiteren Fall erwähnen, in dem Caches keineswegs von Vorteil sein können. Wenn Sie ein SoC mit mehreren Kernen haben, bei dem alle Kerne natürlich eigene Caches haben, und je nachdem, wie der Programmcode diese Kerne nutzt, können Caches sehr ineffektiv sein. Dies kann passieren, wenn z. B. aufgrund eines fehlerhaften Designs oder programmspezifisch (z. B. Multi-Core-Kommunikation) ein Datenblock im RAM gleichzeitig von 2 oder mehr Kernen verwendet wird.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X