Określ, na którym procesorze działa proces

19

Czy za pomocą Eksploratora procesów Sysinternals istnieje kolumna, za pomocą której można wskazać, na którym procesorze działa proces? Jeśli nie ma kolumny, czy jest jakiś inny sposób?

rory.ap
źródło
3
@DavidPostill - Najlepsza odpowiedź wskazuje tylko na stronę internetową Process Explorer. Moje pytanie brzmi: biorąc pod uwagę eksplorator procesów, jak ustalić, na którym rdzeniu proces jest uruchamiany?
rory.ap

Odpowiedzi:

47

Wniosek o wydanie w 2005 r . :

Jestem pod wrażeniem funkcji zintegrowanych z Process Explorer, ale chciałbym zobaczyć opcję wyświetlania powinowactwa procesora każdego procesu w głównym oknie jako przełączania kolumn.

Brak odpowiedzi.

Wniosek o wydanie w 2007 r . :

Dzięki za wspaniałe narzędzia. Moja prośba to dodanie opcji kolumny w celu przetworzenia eksploratora w celu wyświetlenia powinowactwa procesora. Otóż ​​to.

Brak odpowiedzi.

Podobne omówione w 2013 r . :

Byłoby naprawdę miło, gdyby istniała nowa kolumna widoku wydajności procesu o nazwie Wykorzystanie rdzenia, która pokazywałaby sumę zużycia w stosunku do rdzenia, na którym działa proces.

Podstawowe streszczenie: Nie da się tego zrobić.

Wątki są przesyłane do rdzeni w celu przetworzenia, a nie procesów. Większość nowoczesnych procesów ma wiele wątków.

Jeśli ręcznie ustawisz powinowactwo dla procesu, wszystkie wątki dla procesu powinny przykleić się do jednego procesora. Ponieważ ustawiłeś go ręcznie, powinieneś wiedzieć, który procesor jest włączony. ;)

Ale jeśli nie określisz, wątki będą kontrolowane przez system operacyjny i leżący u ich podstaw sprzęt przetwarzający i będą przeskakiwać między procesorami z prędkością, która byłaby nie do obejrzenia i najprawdopodobniej niedokładna do czasu wyświetlenia ty.

Być może sprawdź te pytania SU, aby uzyskać więcej:

Ponadto z StackOverflow:

Teraz, jeśli napisałeś program, możesz użyć GetCurrentProcessorNumber , który raportuje bieżący procesor używany przez wątek, z którego funkcja została wywołana.

Korzystanie z tego pozwoli ci dokonać oszacowań wykorzystania procesora przez twoje wątki, ponieważ nigdy nie możesz być pewien, gdzie wątki będą od jednego cyklu do następnego (ponownie, chyba że celowo ustawisz powinowactwo).

Więcej informacji:

Ƭᴇcʜιᴇ007
źródło
3
Ładna odpowiedź ... :)
DavidPostill
@DavidPostill - Uzgodniony.
rory.ap
Świetna odpowiedź, ponieważ odpowiada na konkretne pytanie, wnika w historię i dlaczego oraz pomaga zrozumieć pojęcia.
Smithers,
1
Zarówno w systemie Linux, jak i Windows można ustawić powinowactwo dla poszczególnych wątków. Jest to jednak rzadko przydatne, dlatego rzadko się to robi, dlatego wyświetlanie powinowactwa do wątków w ogólnym programie monitorującym, jeśli jest ustawiony, jest mniej lub bardziej bezużyteczne - zdecydowana większość po prostu pozwoliłaby planowi jądra, jak mu się podoba.
Bob
System operacyjny może nawet zmienić twój wątek na inny procesor zaraz po wywołaniu GetCurrentProcessorNumber (ale przed jego uruchomieniem) i ponownie zaraz po jego zwróceniu, więc wynikiem nie będzie ani procesor w momencie połączenia, ani procesor w tym czasie połączenie powraca!
gnasher729
8

Można to zrobić, przechwytując ślad xperf i otwierając go za pomocą Windows Performance Analyzer (WPA.exe) z Windows Performance Toolkit, tutaj możesz dodać kolumnę CPU, aby zobaczyć, który procesor (rdzeń) jest uruchomiony:

wprowadź opis zdjęcia tutaj

magicandre1981
źródło
Ładny. Czy wyświetla ten sam proces w ramach każdego procesora (jeśli używa więcej niż jednego)? Skoro używa przechwyconego śledzenia xperf, czy to oznacza, że ​​nie jest to raportowanie na żywo?
Ƭᴇcʜιᴇ007
@ Ƭᴇcʜιᴇ007 Zdarzenia ETW mogą być również wykorzystywane w czasie wykonywania. Zapisanie ich w pliku ETL to tylko jeden sposób. Tak, wyświetla listę procesów w obu procesorach, gdy korzysta z obu.
magicandre1981