Wie ändere ich die E / A-Priorität eines Prozesses oder Threads in Win7?


32

Process Explorer kann die effektive E / A-Priorität eines bestimmten Threads anzeigen, aber nicht ändern. Da die Unterstützung von E / A-Prioritäten eine vergleichsweise neue Funktion ist, legen die meisten Programme keine eigenen E / A-Prioritäten fest. Standardmäßig wird die E / A-Priorität von der Thread-Priorität (und nicht von der Prozesspriorität) abgeleitet, die auch von Process Explorer nicht geändert werden kann.

Gibt es andere Tools, mit denen ich die E / A-Priorität eines bestimmten Threads / aller Threads eines bestimmten Prozesses ändern kann?


Es gibt fast die gleiche Frage zum Stack Overflow: stackoverflow.com/questions/301290/…
Mehper C. Palavuzlar

3
@ [Mehper C. Palavuzlar] stimmt, aber das ist nicht für Software, die ich entwickle - ich suche ein fertiges Tool, um dies für Software von Drittanbietern zu tun.
RomanSt

Antworten:


11

Fertiges Werkzeug

Ein Drittanbieter-Tool zum Festlegen von Prozess-E / A-Prioritäten, entweder durch manuelle Benutzeraktion oder durch Automatisierung und Persistenz, ist Process Lasso . Es kann fast jede Prozesseinstellung festlegen, und zwar dauerhaft oder nach Regeln (z. B. wenn dies passiert, ändern Sie die E / A-Priorität davon).

Programmatische Antwort

Die Antwort ist ein einfacher API-Aufruf an eine native NT-API, NTSetInformationProcess . Es wird im DDK 2008 als Klasse 'IoPriority' definiert. In NT6 werden nur zwei Ebenen unterstützt: Sehr niedrig (Hintergrund) und Normal . Es sind technisch gesehen 5 Stufen definiert - Kritisch, Hoch, Normal, Niedrig und Sehr Niedrig. Die kritische Ebene ist für Paging-Vorgänge reserviert. Keine Daten zu den anderen.

Die ordnungsgemäße Verwendung der E / A-Priorität besteht jedoch nur darin, einen Hintergrundmodus über einen Aufruf der Windows-API SetProcessPriorityClass zu starten , der PROCESSS_MODE_BACKGROUND_BEGIN bereitstellt. Dadurch wird die sehr niedrige (Hintergrund-) E / A-Priorität zusammen mit einer IDLE-CPU-Prioritätsklasse verwendet. Wenn Sie fertig sind, kehren Sie über PROCESS_MODE_BACKGROUND_END zurück.

Die SetThreadPriority- API ermöglicht diesen Hintergrundmodus auch für bestimmte Threads. Hier geben Sie THREAD_MODE_BACKGROUND_BEGIN / END an.


Ich bin nicht in Windows-Programmierung und OS-Level-Zeug, aber ich habe gehört, die Priorität eines Threads bis zu THREAD_PRIORITY_TIME_CRITICAL zu stoßen, ist das mit Ihrem Programm oder einem Programm möglich? oder ist es immer noch nur IO PRIORITY, die angepasst werden kann, und nicht Thread-CPU-Priorität? Ich vermute, dass eine Änderung der E / A-Priorität keinen großen Unterschied zur CPU-Auslastung macht, oder?
Barlop

Ja. Beides kann eingestellt werden und bleibt bestehen. Viele andere Dinge können auch basierend auf Regeln (z. B. CPU-Affinität) festgelegt oder dynamisch geändert werden. Die E / A-Priorität unterscheidet sich von der CPU-Priorität.
Dyasta

Dies ist kein vorgefertigtes Tool, um dies mit Software von Drittanbietern zu tun.
Cees Timmerman

Entschuldigung, ich denke, die Frage wurde möglicherweise bearbeitet, da ich eindeutig programmatisch geantwortet habe (nicht bearbeitet). Process Lasso ist ein vorgefertigtes Tool, um dies mit Software von Drittanbietern zu tun. Siehe bitsum.com
dyasta

23

Ich habe das entwickelt, nachdem ich gesehen hatte, dass es niemanden gestört hat: https://sourceforge.net/projects/iopriority/ (open source)

Dieses Programm kann die E / A-Priorität eines Prozesses festlegen, und alle Threads sind sofort davon betroffen. Es ist ziemlich einfach, es so zu ändern, dass es mit Threads statt mit Prozessen funktioniert.


1
Ich habe gerade bemerkt, dass Sie nicht zulassen, dass ein Prozess auf Server 2012R2 in einen Prozess mit hoher Priorität geändert wird.
Jftuga

14

ProcessHacker ist ein GUI-Tool, mit dem die E / A- Priorität eines beliebigen Prozesses geändert werden kann.


Warum sieht es so aus, als hätte Russinovich es getan?
Daniel Mošmondor

1
@ DanielMošmondor Vielleicht wurde es von ProcExp und seinen Einschränkungen inspiriert? Ich persönlich habe gewechselt, weil ProcExp nach Version 14 auf meinem Laptop eine völlig falsche CPU-Auslastung
aufwies

1
Nicht nur das, ProcExp war auch in der Lage, meinen Comp, etc. zu BSOD. Ist es kostenlos?
Daniel Mošmondor

@ DanielMošmondor Ja, außerdem scheint es in jeder Hinsicht mehr zu können als ProcExp. Etwas andere Benutzeroberfläche, aber in der Tat sehr leistungsfähig.
RomanSt

1

Ich bin teilweise an einer kostenlosen App namens PRIO interessiert, die (unter anderem) Prozesspriorität spart und einen sehr geringen Platzbedarf (weniger als 1 MB) aufweist. Nach der Installation wird es unbeaufsichtigt im Hintergrund ausgeführt, bis Sie es benötigen. Die Benutzeroberfläche wird direkt in den Windows-Task-Manager integriert. Dadurch wird die Funktionalität erweitert und die hinzugefügten Funktionen werden als Teil des Task-Managers betrachtet. Wenn Sie im Task-Manager mit der rechten Maustaste auf einen Prozess klicken, um dessen Priorität zu ändern, werden einige der hinzugefügten PRIO-Funktionen deutlich, da Sie nicht nur die CPU-Priorität des Prozesses, sondern auch dessen E / A-Priorität ändern können (stellen Sie Ihre Frage). , und Sie können die neuen Einstellungen SPEICHERN, wenn Sie dies wünschen. Letzteres bewirkt, dass jedes Mal, wenn dieser Prozess (dh dieses Programm) ausgeführt wird, die von Ihnen festgelegten und gespeicherten CPU- und E / A-Prozessprioritäten wirksam werden.

Die App verfügt über weitere Funktionen, die die Funktionalität der verschiedenen Registerkarten im Windows Task-Manager erweitern. Es gibt Versionen für 32- und 64-Bit-Systeme. Die App ist für den persönlichen Gebrauch kostenlos.


Klingt nach einer großartigen App. Hast du einen Link?
Stijn de Witt

1
Wenn Sie PRIO meinen, ist es von einer Reihe verschiedener Inhaltsaggregatoren (wie cnet) erhältlich, aber direkt von der Website des Entwicklers wäre prnwatch.com/prio
Mike Mounier
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.