Was ist Windows Priority and Affinity und welche Vorteile bietet es?

9

Was genau ist Priorität und Affinität (im Task-Manager enthalten) und wofür werden sie verwendet:

Gefunden im Task-Manager

In welchen Situationen sollten / könnten sie verwendet werden und welche Vorteile ergeben sich beim Anpassen dieser Einstellungen.

James Mertz
quelle

Antworten:

3

Das Einstellen der Affinität bewirkt zwar etwas, aber Sie werden es niemals verwenden wollen.

Durch Festlegen der CPU-Affinität wird Windows gezwungen, nur die ausgewählte CPU (oder die ausgewählten Kerne) zu verwenden. Wenn Sie die Affinität auf eine einzelne CPU festlegen, führt Windows diese Anwendung nur auf dieser CPU aus, niemals auf einer anderen.

Windows stellt ausgeführte Anwendungen automatisch auf den am wenigsten ausgelasteten Prozessor, sodass Windows seine Arbeit nicht auf eine einzelne CPU beschränken kann. Selbst wenn CPU / Core 1 andere Anwendungen ausführt, kann Windows keine Anwendung mit auf CPU / Core 2 festgelegter Affinität ausführen.

Der einzige Grund, warum Sie dies tun möchten, ist die Ausführung einer alten Anwendung, die auf einem Multi-CPU / Core-System nicht ordnungsgemäß funktioniert.

shf301
quelle
5
> Sie werden es nie benutzen wollen. Nicht wahr. Wenn Sie eine Single-Threaded-Anwendung haben, kann sie die Threads / Kerne der CPU nicht in vollem Umfang nutzen, und Windows kann nichts tun, um sie zu erzwingen / auszutricksen. Wenn Sie zwei Single-Thread-Anwendungen haben, können Sie Windows anweisen, dass jede einen separaten Thread / Core verwendet, damit die gesamte CPU-Auslastung nicht zwischen 50 und 75% liegt, sondern maximal 100% (jeder Core) von einem Programm maximal genutzt werden). Ja, Sie können die Einstellung zwar verwenden, aber es ist ein spezifisches Szenario, das die meisten Menschen nicht kennen / realisieren / brauchen.
Synetech
2
Wenn Sie zwei Single-Threaded-Anwendungen haben, wird Windows jeweils auf einem anderen Thread / Core ausgeführt und Sie erhalten eine 100% ige CPU-Auslastung, ohne die Affinität festzulegen. Zum Testen habe ich gerade 4 Instanzen eines Single-Threaded-Programms auf meinem 4-Core-Computer ausgeführt und 100% CPU-Auslastung erhalten. Windows ist intelligent genug, um CPUs effizient zu planen.
shf301
Ich denke, es hängt vom System und / oder der Version von Windows ab. Ich habe gesehen, dass beide Kerne bei 50-75% schweben, wobei beide Prozesse auf beide Kerne eingestellt waren und durch manuelles Einstellen der CPU die CPU voll ausgelastet wurde.
Synetech
@ Synetech: Das scheint fast unmöglich. Es müsste die beiden Prozesse von Kern zu Kern verschoben haben, immer beide gleichzeitig.
David Schwartz
Ein weiterer gültiger Anwendungsfall hierfür: Es gibt Anwendungen, die möglicherweise alle verfügbaren CPUs nutzen und verhindern, dass andere Programme ordnungsgemäß ausgeführt werden und / oder das Betriebssystem sehr langsam auf Benutzereingaben reagiert. In diesem Fall könnte jemand beschließen, eine solche Anwendung nur auf einige der CPUs zu beschränken. Als Entwickler verwende ich diese Funktion häufig, wenn ich meine CPU-intensiven Anwendungen profiliere, da für die Profilerstellung selbst CPU erforderlich ist.
Eyal Roth
2

Durch Festlegen der Affinität wird dem Prozess mitgeteilt, auf welchen Prozessoren er ausgeführt werden darf.

Obwohl dies für einige Nischenfälle sehr nützlich ist, sollte sich der durchschnittliche Benutzer wahrscheinlich nicht damit anlegen.

Wenn beispielsweise einem Prozess erlaubt würde, seinen eigenen Kern auszuführen, könnte er in (nahezu) Echtzeit ausgeführt werden, ohne dass diese 70 Windows-Dienstprogramme den Prozessor ständig unterbrechen und für ihre eigene Zeitscheibe stapeln. Echtzeitanwendungen waren etwas, was Windows niemals tun konnte, bevor Multiprozessor- / Multi-Core-Systeme auf den Markt kamen, da das Betriebssystem die Anwendung ständig für seine eigenen Zwecke unterbrach / aufgab. Dies kann jetzt größtenteils überwunden werden, indem die Echtzeitanwendung von einem Prozessor isoliert wird, während verhindert wird, dass alle anderen Anwendungen im System diesen Prozessor verwenden. Dies ist ein sehr Nischenthema, aber Systeme wie (echte) Flugsimulatoren, Fabrikautomation und Steuerungsrückmeldesysteme hängen von der Echtzeitarchitektur ab, um zu funktionieren.

Prozessorintensive Anwendungen (wie VMs) können auf ihren eigenen Kern isoliert werden, sodass Sie sie verwenden können, ohne den Rest Ihres Systems zu crawlen. Theoretisch kann ein Hypervisor, der auf einem Prozessor ausgeführt wird, der die Bare-Metal-Hypervisor-Interaktion unterstützt, eine Prozessorleistung erreichen, die dem eigenständigen Betriebssystem entspricht (abzüglich des Prozessors, der zum Ausführen des Host-Betriebssystems erforderlich ist). In der Praxis muss natürlich auch eine VM, die auf einem eigenen isolierten Kern / Prozessor ausgeführt wird, noch einen geringen Overhead vom Host des Host-Betriebssystems akzeptieren.

Bei Anwendungen, die eine große Datenmenge im Fluss verarbeiten, wird durch das Isolieren der Anwendung auf ihren eigenen Prozessor (und möglicherweise durch die Verwendung mehrerer Kerne) der Cache-Austausch verringert.

Ältere Anwendungen, die nicht mehr funktionieren, wenn sie auf mehrere Prozessoren verteilt sind, können effektiv auf einen Kern / Prozessor beschränkt werden, um das Problem zu beheben.

Wenn Sie Leistungsmessungen für eine bestimmte Anwendung durchgeführt haben, ist es nahezu unmöglich, konsistente Ergebnisse über verschiedene Systeme hinweg zu erzielen, es sei denn, Sie können den Prozess isolieren, da Sie sonst keine Kontrolle darüber haben, wie viel Zeit das Betriebssystem Ihrer Anwendung zur Verfügung stellt. Die meisten Menschen sind sich einig, dass die Messung der Laufzeitleistung keine guten Ergebnisse liefert, aber diese Menschen haben nie in Betracht gezogen, dass die Betriebssystemintervention (die die Ergebnisse so inkonsistent macht) durch die Verwendung von Affinität eingeschränkt werden kann.

Es gibt viele Fälle, in denen Affinität wichtig ist, aber wenn Sie nicht wissen, was sie sind, werden Sie sie wahrscheinlich nicht brauchen.

Evan Scholle
quelle
Das, was Affinität viel weniger nützlich macht, als viele denken, ist Folgendes: Setzen Sie Ihre Prozessaffinität auf eine Teilmenge der verfügbaren CPUs. schließt nichts anderes aus diesen CPUs aus. Dazu müssten Sie zu allen anderen Prozessen im System gehen, um sie aus der CPU herauszuhalten, die Sie für sich selbst haben möchten. Das ist fast nie praktisch.
Jamie Hanrahan
Es ist möglich, Software von Drittanbietern zu verwenden . Warum MS diese Funktionalität standardmäßig nicht enthält, ist mir ein Rätsel.
Evan Plaice
Weil es, wie ich schrieb, gar nicht so nützlich ist. Und es ist sehr anfällig für Missbrauch. Tatsächlich ist das übliche Ergebnis, wenn man mit Affinität zu "kreativ" ist, dass die Dinge nicht laufen, wenn sie es sonst könnten. Normalerweise ist es besser, einen Thread auf einer anderen als der Ihrer Meinung nach bevorzugten CPU auszuführen, als überhaupt nicht (nachdem Sie dummerweise die Affinität festgelegt haben, ihm den Zugriff auf CPUs zu verweigern, die ansonsten inaktiv sind). Der standardmäßige Mechanismus "idealer Prozessor" und "vorheriger Prozessor" von Windows erreicht eine gute Cache-Kohärenz ohne das stumpfe Instrument der Affinitätsmaske.
Jamie Hanrahan
2

Dies ist in bestimmten Szenarien eine sehr nützliche Funktion. Angenommen, Sie haben eine Multithread-Anwendung, die dazu neigt, entweder inaktiv zu sein oder mehrere Minuten lang 100% jeder CPU aggressiv zu greifen, Suchvorgänge, Builds usw. durchzuführen. Nennen wir diese Anwendung "Eclipse".

Nehmen wir auch an, dass Sie während der Arbeit an dieser Anwendung eine Reihe anderer Anwendungen haben, die bescheidene CPU-Anforderungen haben, aber im Wesentlichen Echtzeitanwendungen sind. Während Sie beispielsweise Eclipse verwenden und Builds zufällig starten oder GWT-Kompilierungen durchführen, verwenden Sie Ihren Computer auch zum Streamen von Musik oder zum Durchführen von Recherchen in einem Browserfenster (z. B. zum Erforschen der Ursache eines Build-Problems). . Sicher, Sie werden nicht sterben, wenn Ihre Musik überspringt oder Ihr Browser nicht mehr reagiert, aber es ist ärgerlich.

Mit Affinität können Sie Ihre CPU-Ess-App auf 7/8 Kerne beschränken, sodass allen anderen der Zugriff auf eine relativ unbenutzte CPU garantiert wird und Sie nicht ständig mit Stottern und Unterbrechungen der Benutzerfreundlichkeit von allem anderen auf Ihrem Computer zu kämpfen haben während die Sonnenfinsternis wegschleift.

Jim W.
quelle
In diesem Fall ist es viel besser, wenn Sie einfach Ihren CPU-Hog-Prozess auf eine niedrige Priorität setzen.
Jamie Hanrahan
1

Höhere Priorität bedeutet, dass die Verarbeitung einer Aufgabe gegenüber Aufgaben mit niedriger Priorität von Vorteil ist. Wenn Sie eine Anwendung ausführen, die sehr reaktionsschnell sein muss, und beispielsweise eine Reihe anderer nicht interaktiver Prozesse, können Prioritäten eine bessere Erfahrung mit Ihrem Prozess mit hoher Priorität gewährleisten.

Beispiel: Seit Windows Vista erhält Windows Media Player automatisch eine höhere Priorität, um eine reibungslose und kontinuierliche Wiedergabe von Mediendateien zu gewährleisten. Standardmäßig stehen anderen Prozessen nur etwa 20% der CPU-Zeit zur Verfügung. Dies ist nur ein Beispiel, um Ihnen zu helfen, die Prioritäten zu verstehen. (Weitere Informationen zu Media Player-Prioritäten finden Sie in Vista unter Technet .)

Eine weiche oder harte Affinität kann die Verarbeitungsgeschwindigkeit erhöhen, da der Cache der CPU noch Reste des Prozesses enthalten kann, wenn ein Prozess zuvor unterbrochen und zu einem späteren Zeitpunkt wieder aufgenommen wurde.

David M.
quelle
Süßer Dank! Was ist also ein guter Leitfaden für die Verwendung von Afinity?
James Mertz
Eine gute Anleitung zur Verwendung von Affinität: "Nicht".
Jamie Hanrahan
Die "nur 20% CPU-Zeit, die anderen Prozessen zur Verfügung steht" ist keine genaue Beschreibung. Die eigentliche Implementierung besteht darin, dass ein Thread, der sich für den Multimedia-Klassenplaner entscheidet, bis zu 80% jedes Planungsintervalls in der Echtzeitprioritätsklasse ausführen kann . Es muss nicht unbedingt so viel verbrauchen, und wenn nicht. Mehr als 20% stehen anderen Threads zur Verfügung.
Jamie Hanrahan
1

Ein perfektes Beispiel hierfür sind alte Computerspiele (oder andere Software), insbesondere wenn 32-Bit-Spiele (Anwendungen) auf einem modernen 64-Bit-Computer emuliert werden. Indem die Affinität für alte Spiele auf nur vier Kerne beschränkt wird, können Abstürze oft vermieden werden, damit Stubburn-Spiele gestartet werden können. Einige Rendering-Engines, die von ALTEN Spielen, Videobearbeitern und hardwarebeschleunigter Grafiksoftware oder CAD-Software verwendet werden, verstehen nicht mehr als vier CPU-Kerne und stürzen beim Start ab.

Ich erstelle kein Konto, nur um dies zu posten und um mich bei Google 'kieseyhow' zu finden.

Kieseyhow
quelle