2012-12-02 9 views
6

Ich muss den Prozess in Echtzeit so viel wie möglich laufen lassen.Verhindern kleinere Seitenfehler in Echtzeit-Prozess unter Linux

Die gesamte Kommunikation erfolgt über Shared Memory - Memory Mapped Files - überhaupt keine Systemaufrufe - es verwendet Busy, das auf Shared Memory wartet.

Der Prozess läuft unter Echtzeit-Priorität und alle Speicher mit mlockall(MCL_CURRENT|MCL_FUTURE) verriegelt ist, die erfolgreich und Verfahren hat genug ulimits haben alle der Speicher verriegelt.

Wenn ich es auf es perf stat -p PID laufen lasse, erhalte ich noch Zählungen von kleineren Seitenfehlern.

Ich testete dies sowohl mit Prozessaffinität als auch ohne.

Frage:

Ist es möglich, sie überhaupt zu beseitigen - auch kleinere Seitenfehler?

Antwort

0

Wenn ich die Frage richtig verstehe, ist es nicht möglich, kleinere Seitenfehler vollständig zu vermeiden. In den meisten modernen Betriebssystemen, einschließlich Linux, lädt das Betriebssystem nicht alle Text- und Datensegmente in den Speicher, wenn die Programme starten. Es weist interne Datenstrukturen zu und Seiten sind im Wesentlichen fehlerhaft, wenn Text und Daten benötigt werden. Dies führt dazu, dass ein physischer Seitenfehlerspeicher dem Prozess zur Verfügung gestellt wird, der die Seite aus dem Hintergrundspeicher auswechselt. Daher könnte ein kleinerer Seitenfehler vermieden werden, ohne auf den Sicherungsspeicher zuzugreifen, was möglicherweise nicht möglich ist.

+0

Ich spreche über kleinere Seite Fehler, die durch TLB verursacht wird vermisst – Artyom

+0

TLB Miss ist Hardware-behandelt in den meisten modernen CPU. Es sollte für OS unsichtbar sein; Verlangsamung einiger Speicherzugriffe und Erhöhung des Hardwareleistungsüberwachungszählers (DTLB_LOAD_MISSES.ANY in Intel). – osgx

+0

Wie kann ich den kleineren Seitenfehler reduzieren? Ich habe zwar viel Speicher, bin aber immer noch von dem kleinen Seitenfehlerproblem betroffen, das die CPU-Auslastung zu stark für andere Aufgaben macht –

5

Ich löste dieses Problem, indem ich von Memory-Mapped-Dateien auf POSIX shared memory shm_open + Speicherverriegelung wechselte.