2013-03-10 30 views
6

In Linux, wo ich meistens arbeite, verwenden wir eine Technik namens CPU-Isolation, die einen Prozess auf einen Prozessor effektiv sperrt und auch verhindert, dass der Prozessor irgendetwas anderes laufen lässt. Unsere Kernel-Jungs haben ein bisschen gezaubert, um die Interrupts zu verarbeiten.Pin-Prozessor CPU-Isolation unter Windows

In Windows die nächste Sache, die ich fand, ist ein Affinitätskonzept, das scheint, einen Prozess/Thread an einen Prozessor zu binden. Aber es gibt keine Garantie, dass der Prozessor NUR diesen Prozess/Thread ausführt, was bedeutet, dass es immer noch Kontextwechsel und anderen Jitter geben kann.

Gibt es eine Möglichkeit, eine CPU unter Windows für semi-deterministische Laufzeiten zu isolieren?

+1

Nein. Sie sollten besser mit Linux bleiben, wenn Sie das brauchen. –

Antwort

3

Im Benutzermodus gibt es keinen genauen Weg dazu. Und Windows versucht größtenteils zu verhindern, dass Apps alle Systemressourcen in den Schatten stellen. Aber Sie könnten wahrscheinlich die meisten anderen Prozesse auf einen anderen Core/Prozessor isolieren, so dass Ihr Code auf einem Core laufen kann, der hauptsächlich für ihn bestimmt ist.

Beginnen Sie mit der Suche nach at this code here on MSDN über Aufzählungsprozesse. Außer Ihrem Aufzählungscode wird PROCESS_SET_INFORMATION als Flag für OpenProcess angegeben. Wahrscheinlich benötigen Sie Ihren Code mit admin privs, um dies für Prozesse zu tun, die nicht wie Ihr NT-Guthaben laufen. Rufen Sie für jedes Prozesshandle SetProcessAffinityMask auf, um den Prozess so zu konfigurieren, dass er auf allen Kernen außer einem ausgeführt wird. Stellen Sie dann Ihren Prozess so ein, dass er einen anderen auf dem reservierten Kern ausführt, den Sie aus allen anderen Prozess-Handles ausgesucht haben.

Dadurch werden andere Prozesse nicht vom Starten und Lastenausgleich auf den Kern, auf dem Sie Ihren Code ausführen möchten, verarbeitet.

Ihre Laufleistung kann variieren. Wenn dies nur zum Testen oder für Computer gedacht ist, die Ihrem Code gewidmet sind, wird es wahrscheinlich in Ordnung sein. Wenn dies für eine kommerzielle App gedacht ist, die neben allen anderen Apps ausgeführt werden soll, werden die Kunden sehr enttäuscht sein, wenn sie alle anderen Apps und Dienste bei der Ausführung ihres Codes sehen. Vorsichtig auftreten.