Jak zmienić priorytet I / O procesu lub wątku w Win7?

32

Process Explorer może pokazywać efektywny priorytet IO danego wątku, ale go nie zmieniać. Ponieważ obsługa priorytetów IO jest stosunkowo nową funkcją, większość programów nie ustawia własnych priorytetów IO. Wygląda na to, że domyślnie priorytet We / Wy pochodzi z priorytetu wątku (a nie priorytetu procesu), którego Process Explorer nie może zmodyfikować.

Czy są jakieś inne narzędzia, które mogą pomóc mi zmienić priorytet IO danego wątku / wszystkich wątków danego procesu?

RomanSt
źródło
Na przepełnieniu stosu jest prawie to samo pytanie: stackoverflow.com/questions/301290/…
Mehper C. Palavuzlar
3
@ [Mehper C. Palavuzlar] to prawda, ale to nie dotyczy oprogramowania, które tworzę - szukam gotowego narzędzia do robienia tego na oprogramowaniu innych firm.
RomanSt

Odpowiedzi:

11

Gotowe narzędzie

Zewnętrznym narzędziem do ustalania priorytetów procesu we / wy, zarówno poprzez ręczne działanie użytkownika, jak i automatyzację i trwałość, byłby Process Lasso . Może ustawić prawie dowolne ustawienie procesu i robić to uporczywie lub zgodnie z regułami (np. Gdy tak się stanie, zmień priorytet I / O).

Odpowiedź programowa

Odpowiedzią jest proste wywołanie API do NT Native API, NTSetInformationProcess . Jest zdefiniowany jako klasa „IoPriority” w DDK 2008. W NT6 obsługiwane są tylko dwa poziomy: bardzo niski (w tle) i normalny . Technicznie zdefiniowano 5 poziomów - Krytyczny, Wysoki, Normalny, Niski i Bardzo niski. Poziom krytyczny jest zarezerwowany dla operacji stronicowania. Brak danych o pozostałych.

Jednak właściwym sposobem korzystania z priorytetu we / wy jest jedynie uruchomienie „trybu tła” poprzez wywołanie funkcji Windows API SetProcessPriorityClass , dostarczając PROCESSS_MODE_BACKGROUND_BEGIN. Spowoduje to, że będzie korzystał z bardzo niskiego priorytetu we / wy (w tle) wraz z klasą priorytetu procesora IDLE. Po zakończeniu przywróć za pośrednictwem PROCESS_MODE_BACKGROUND_END.

SetThreadPriority API pozwoli również ten sam tryb tła dla poszczególnych wątków. Tutaj dostarczysz THREAD_MODE_BACKGROUND_BEGIN / END.

dyasta
źródło
Nie interesuje mnie programowanie w systemie Windows i rzeczy na poziomie systemu operacyjnego, ale słyszałem o zwiększeniu priorytetu wątku aż do THREAD_PRIORITY_TIME_CRITICAL, czy jest to możliwe w twoim programie lub jakimkolwiek programie? czy jest to wciąż tylko PRIORYTET IO, który można regulować, a nie priorytet wątku procesora? Wydaje mi się, że zmiana priorytetu IO nie będzie miała większego wpływu na użycie procesora, prawda?
barlop
Tak. Oba można ustawić i zachować. Wiele innych rzeczy można również ustawiać lub dynamicznie zmieniać w oparciu o reguły (np. Powinowactwo procesora). Priorytet we / wy różni się od priorytetu procesora, prawda.
dyasta
To nie jest „gotowe narzędzie do robienia tego na oprogramowaniu innych firm”.
Cees Timmerman
Przepraszam, myślę, że pytanie mogło być edytowane, ponieważ najwyraźniej odpowiadałem ze strony programistycznej (nie edytowanej). Process Lasso to „gotowe narzędzie do robienia tego na oprogramowaniu innych firm”. Zobacz bitsum.com
dyasta
23

Opracowałem to po tym, jak nikt się tym nie przejmował: https://sourceforge.net/projects/iopriority/ (open source)

Ten program jest w stanie ustawić priorytet operacji we / wy, a wszystkie wątki są przez to natychmiast zmieniane. Bardzo łatwo jest go zmodyfikować, aby działał z wątkami zamiast procesami.

Trójnik skośny
źródło
1
Właśnie zauważyłem, że nie pozwalasz na zmianę procesu na Wysoki priorytet na Server 2012R2.
jftuga
14

ProcessHacker to narzędzie GUI, które może zmienić priorytet IO dowolnego procesu.

RomanSt
źródło
Dlaczego wygląda na coś, co zrobił Rusinowicz?
Daniel Mošmondor
1
@ DanielMošmondor Może inspiracją był ProcExp i jego ograniczenia? Osobiście zmieniłem, ponieważ ProcExp pokazał całkowicie nieprawidłowe użycie procesora na moim laptopie po wersji 14.
RomanSt
1
Nie tylko to, ProcExp był również w stanie BSOD mój komputer itp. Czy to nic nie kosztuje?
Daniel Mošmondor
@ DanielMošmondor Tak, zresztą wydaje się, że pod każdym względem robi więcej niż ProcExp. Nieco inny interfejs użytkownika, ale naprawdę bardzo zdolny.
RomanSt
1

Jestem częściowo zwolennikiem darmowej aplikacji o nazwie PRIO, która jest (między innymi) oszczędnością priorytetów procesu o bardzo małym (mniej niż 1 MB) rozmiarze. Po instalacji działa cicho w tle, dopóki go nie potrzebujesz, a jego interfejs wbudowuje się bezpośrednio w Menedżera zadań Windows, rozszerzając jego funkcjonalność i sprawiając, że dodane funkcje zawsze były częścią Menedżera zadań. Gdy klikniesz prawym przyciskiem myszy proces w Menedżerze zadań z zamiarem zmiany jego priorytetu, niektóre z dodatkowych funkcji PRIO stają się widoczne, ponieważ możesz zmienić nie tylko priorytet procesora, ale także jego priorytet we / wy (ergo swoje pytanie) , i możesz ZACHOWAĆ nowe ustawienia, jeśli chcesz. To ostatnie sprawia, że ​​za każdym razem, gdy ten proces (tj. Ten program) jest uruchamiany, zarówno procesor, jak i priorytety procesu we / wy ustawione i zapisane przez ciebie wchodzą w życie.

Aplikacja ma inne funkcje, które rozszerzają także funkcjonalność różnych kart w Menedżerze zadań Windows. Istnieją wersje dla systemów 32- i 64-bitowych, a aplikacja jest bezpłatna do użytku osobistego.

Mike Mounier
źródło
Brzmi jak świetna aplikacja. Masz link?
Stijn de Witt
1
Jeśli masz na myśli PRIO, jest on dostępny z wielu różnych agregatorów treści (takich jak cnet), ale bezpośrednio ze strony dewelopera będzie prnwatch.com/prio
Mike Mounier