Wie deaktiviere ich die L1- und L2-Caches des Prozessors?

10

Ist es möglich, den L1- und / oder L2-Cache unter Ubuntu 14.04 zu deaktivieren (vorzugsweise in einer höheren Sprache wie Python)? Wenn das so ist, wie?

Unterscheidet sich das Deaktivieren des Caches außerdem erheblich zwischen verschiedenen Architekturen? Wenn ja, bin ich mehr an einem ARM Cortex-A15 interessiert.

BEARBEITEN

Bei der Untersuchung, wie der Cache deaktiviert werden kann, habe ich in der Dokumentation zu kernel.org Informationen zur Datei "drop_caches" in / proc / sys / vm / gefunden

"Wenn Sie darauf schreiben, löscht der Kernel saubere Caches sowie wiedergewinnbare Plattenobjekte wie Dentries und Inodes. Sobald sie gelöscht werden, wird ihr Speicher frei."

...

"Diese Datei ist kein Mittel, um das Wachstum der verschiedenen Kernel-Caches (Inodes, Dentries, Pagecache usw.) zu steuern. Diese Objekte werden vom Kernel automatisch zurückgefordert, wenn an anderer Stelle im System Speicher benötigt wird."

Dies scheint nicht das zu sein, wonach ich suche, da dies nicht nur den Cache deaktivieren würde, sondern ich dachte, dass sich der virtuelle Speicher im Betriebssystem und nicht auf der Hardware befindet. Mein Ziel ist es, den Cache zu deaktivieren, sodass der gewünschte Speicher an anderer Stelle gesucht werden muss, z. B. im RAM.

BEARBEITEN

Zur Verdeutlichung verstehe ich, was das Deaktivieren des Caches für das System bedeutet. Es ist jedoch eine übliche Technik, die in Weltraumanwendungen verwendet wird, um die Zuverlässigkeit für sicherheitskritische Anwendungen zu erhöhen. Hier sind einige Ressourcen, die dieses Phänomen dokumentieren:

Reduzierung der durch Strahlung verursachten Fehler eingebetteter Software durch Cache-Speicher

Leitfaden für die Bodenstrahlungsprüfung von Mikroprozessoren in der Weltraumstrahlung

Es gibt sogar Bücher zum Thema:

Ionisierende Strahlungseffekte in der Elektronik: Von Erinnerungen zu Bildgebern

AustinTronics
quelle
Wenn Sie versuchen, den Cache zu deaktivieren, führen Sie Embedded-Programmierung durch. Wenn Sie Embedded-Programmierung durchführen, sollten Sie wahrscheinlich eine eingebettete Sprache (C) verwenden, und ich würde kein Betriebssystem verwenden. Abgesehen davon wird das Deaktivieren des Cache Ihr System erheblich verlangsamen.
Sam
Ich habe andere Möglichkeiten, mein System ohne Cache zu beschleunigen, aber ich kann nicht sagen, wie effektiv diese Methoden sind, bis ich den Cache deaktiviere und Benchmarks ausführe. Ich bin mir sehr bewusst, dass C oder Assembly die bevorzugte Wahl für eingebettete Anwendungen ist. Es passieren jedoch einige Dinge auf hoher Ebene, die in Python sinnvoller sind. Es wäre einfach bequemer, wenn Python Unterstützung für das Deaktivieren des Caches für meine bestimmte Anwendung hätte. Was das Strippen des Betriebssystems angeht, ist Bare-Metal für mich leider keine Option.
AustinTronics

Antworten:

2

Sie können dies nicht direkt in Python tun, da Sie dazu ein Kernelmodul benötigen (und Root-Rechte zum Laden dieses Moduls).

Unter http://lxr.free-electrons.com/source/arch/arm/mm/cache-v7.S#L21 finden Sie Informationen zum Ungültigmachen des L1-Cache (ungültig machen, nicht deaktivieren).

Unterschiedliche CPU-Architekturen (z. B. x86 oder ARM) erfordern unterschiedlichen Assembler-Code (CPU-Anweisungen), um den Cache zu deaktivieren. Ich bin mir nicht sicher, ob der Linux-Kernel die Möglichkeit hat, die L1 / L2 / L3 / L4-Caches zu deaktivieren, und wenn dies der Fall wäre, würde er meiner Meinung nach nur für kurze Zeit intern verwendet, da die CPU langsam ist ohne diese Caches.

Siehe Gibt es eine Möglichkeit, den CPU-Cache (L1 / L2) auf einem Linux-System zu deaktivieren? Hier finden Sie einen Link zum Deaktivieren des Caches auf einem x86 / x64-System (Sie müssen das Register ändern cr0). Überprüfen Sie für ARM das deaktivierte Verhalten des Cache .

Ich bin mir nicht sicher, ob Sie vollständig verstehen, was die CPU-Caches tun. Können Sie bitte erläutern, warum Sie die Leistung Ihres Systems beeinträchtigen möchten?

tehnicaorg
quelle
Die Anwendung ist High Performance Embedded Computing für die Luft- und Raumfahrt. Die Verfügbarkeit ist für meine Anwendung wichtiger als die Leistung. Ich weiß, das klingt seltsam, aber das Phänomen ist gut dokumentiert.
AustinTronics
Wie können Sie eine "Hochleistungs" -Anwendung ohne CPU-Cache haben? Was haben Caches mit der Verfügbarkeit zu tun?
Tehnicaorg
2
Ich bin ein Softwareentwickler in Forschung und Entwicklung, wir machen viele verrückte Dinge. Es tut mir leid, wenn es so aussieht, als würde ich Informationen weglassen oder während meiner Antworten vage sein, aber ich kann nicht so viel tun, wie ich möchte, da es sich um Anstandsinformationen handelt. Wenn Sie interessiert sind, was der Cache mit der Verfügbarkeit in Luft- und Raumfahrtanwendungen zu tun hat, finden Sie hier ein öffentlich verfügbares JPL-Papier . Hier ist auch eine Zeitschrift darüber.
AustinTronics
1
Ironischerweise macht es heute Sinn, den L1-Cache zu deaktivieren!
Ring Ø
4

Sie können dies mit einem kleinen ASM-Code erreichen, siehe Kapitel 11 des Intel System Programming Guide

11.5.3 Caching verhindern

Führen Sie die folgenden Schritte aus, um die Caches L1, L2 und L3 zu deaktivieren, nachdem sie aktiviert wurden und Cache-Füllungen erhalten haben: 1. Rufen Sie den Cache-Modus ohne Füllung auf. (Setzen Sie das CD-Flag im Steuerregister CR0 auf 1 und das NW-Flag auf 0. 2. Leeren Sie alle Caches mit der Anweisung WBINVD. 3. Deaktivieren Sie die MTRRs und setzen Sie den Standardspeichertyp auf nicht zwischengespeichert oder setzen Sie alle MTRRs für den nicht zwischengespeicherten Speichertyp (Siehe die Diskussion der Diskussion des TYPE-Felds und des E-Flags in Abschnitt 11.11.2.1, „IA32_MTRR_DEF_TYPE MSR“).

Mir ist kein Python-Modul bekannt, das dies implementiert.

Gaius
quelle