2010-08-10 4 views
5

Was wären die programmatischen Schritte geschrieben in "C" mit dem Löschen des L2-Cache auf einem Linux OS-Rechner verbunden?"C" programmatisch löschen L2-Cache auf Linux-Maschinen

/sys/devices/system/cpu/cpu0/cache/index2/size = 6144K x 8CPUs

+0

Verwandte: http://StackOverflow.com/Questions/1756825/Cpu-Cache-FLUSH – quantumSoup

+0

und andere verwandte: http://StackOverflow.com/Questions/3446138/How-to-clear-cpu-l1-and -l2-cache – ennuikiller

+3

Dies ist CPU-abhängig und nicht portierbar. Bitte fügen Sie eine Beschreibung Ihrer Plattform/entsprechenden Tags hinzu. Das Hinzufügen des Tags "Assembly" könnte dazu beitragen, die Aufmerksamkeit von Personen mit Systementwicklungserfahrung zu erhalten, die Erfahrung haben könnten. Weil Sie am Ende sowieso eine Assembly codieren müssten. – Dummy00001

Antwort

2

Die nächstgelegene Sie in jedem der Ferne sauber/portable Art und Weise zu bekommen:

char dummy[L2_CACHE_SIZE]; 
memset(dummy, 0, sizeof dummy); 

Je nach Ihre CPU, möglicherweise privilegierte Opcodes, die den Cache löschen können, aber ich weiß nichts über sie oder wie Sie darauf zugreifen können. Wenn sie vorhanden sind, benötigen Sie möglicherweise Code auf Kernel-Ebene, um sie zu verwenden.

+0

Und das bedeutet, wir könnten einen Systemaufruf finden, um die betreffende Aufgabe auszuführen. – Basilevs

+2

Memset() verwendet in der Vergangenheit Anweisungen, die es nicht stören, die Ziel-Cache-Zeile und die Schreib-Zeilen-Kombination auf der zu schreibenden Cache-Zeile zu lesen. Es gibt jedoch Anweisungen, die Daten direkt in den Speicher strömen (sie haben ihre eigene dedizierte Cache-Zeile außerhalb des Caches). Ein intelligenter Compiler könnte solche Anweisungen verwenden, um den L2-Cache davor zu schützen, von einem solchen memset() gelöscht zu werden. –

+0

Ich frage mich, wie viel Cache-Assoziativität in den Weg kommt, den Cache zu löschen? Stellen Sie sich vor, Sie hätten einen vollständig assoziativen L2-Cache; LRU-Ersatz ist die einzige Sache, die auftritt. Andere Prozesse laufen, wobei Cache-Zeilen im Allgemeinen in letzter Zeit verwendet werden - aber das Memset schreibt natürlich nicht erneut in die Cache-Zeilen, die es zum Schreiben verwendet. Sie werden bald die LRU-Zeilen werden ... also würde die memset() am Ende einen kleinen Satz von Cache-Zeilen für ihre Schreibvorgänge verwenden und wiederverwenden. –

0

Sie können nicht aus dem Benutzerbereich auf Low-Level-Speicher zugreifen. Sie müssen Ihren eigenen Gerätetreiber implementieren, um auf physischen Speicher in Linux zugreifen zu können.

Verwandte Themen