Визначте, на якому процесорі працює процес


19

Використовуючи Провідник процесів Sysinternals, чи є стовпець, який може бути використаний для вказівки, на якому процесорі працює процес? Якщо немає стовпця, чи є інший спосіб?



3
@DavidPostill - найкраща відповідь лише вказує на веб-сторінку Process Explorer. Моє запитання: заданий провідник процесів, як визначити, на якому ядрі запускається процес?
rory.ap

Відповіді:


47

Запитано у 2005 році :

Я дуже вражений функціями, інтегрованими в Process Explorer, але хотів би побачити можливість відображення спорідненості кожного процесора процесора в головному вікні як перемикання стовпців.

Немає відповіді.

Запитано у 2007 році :

Дякую за чудові утиліти. Мій запит - додати параметр стовпчика для обробки провідника для відображення спорідненості до процесора. Це воно.

Немає відповіді.

Аналогічне обговорення у 2013 році :

Було б дуже приємно, якби з’явився новий стовпець перегляду продуктивності процесу під назвою Core Usage, який би показував суму використання над ядром, на якому працює процес.

Основний конспект: цього неможливо зробити.

Нитки - це те, що направляється в ядра для обробки, а не процеси. Більшість сучасних процесів мають декілька потоків.

Якщо ви вручну встановили спорідненість до процесу, то всі потоки цього процесу повинні дотримуватися одного процесора. Оскільки ви вручну встановили його, ви повинні знати, на якому процесорі. ;)

Але якщо ви не вказуєте, то потоки (а) будуть контролюватися ОС і базовим обладнанням для обробки, і перескочуватимуть між процесорами зі швидкістю, яка була б недосяжною і, швидше за все, неточною до того часу, коли вона відображатиметься ти.

Можливо, ознайомтеся з цими питаннями щодо SU:

Також із StackOverflow:

Тепер, якщо ви написали програму, ви можете використовувати GetCurrentProcessorNumber , який повідомляє про поточний процесор, який використовується, тим потоком, з якого викликалася функція.

Використовуючи це, ви зможете робити оцінки щодо використання процесора своїми потоками, оскільки ви ніколи не можете бути впевнені, де потоки будуть одним циклом до наступного (знову ж таки, якщо ви не встановите спорідненість за призначенням).

Більше інформації:


3
Приємна відповідь ... :)
DavidPostill

@DavidPostill - Погоджено.
rory.ap

Чудова відповідь, оскільки відповідає на конкретне запитання, потрапляє в історію та бажання, і допомагає зрозуміти поняття.
Smithers

1
І в Linux і Windows можна встановити спорідненість на основі потоку. Однак це рідко буває корисним, тому рідко коли-небудь робиться, тому показ загальної спорідненості на потік у загальній програмі моніторингу, якщо вона встановлена, є більш-менш марною - переважна більшість просто дозволить розкладати ядро ​​за власним бажанням.
Боб

ОС може навіть переключити свій потік на інший процесор відразу після виклику GetCurrentProcessorNumber (але перед тим, як він почне виконувати), і знову відразу після його повернення, тому результатом не буде ні процесор під час виклику, ні процесор під час дзвінок повертається!
gnasher729

8

Це можна зробити, захопивши слід xperf та відкривши його за допомогою аналізатора продуктивності Windows (WPA.exe) з інструментарію Windows Performance Toolkit, тут ви можете додати процесор стовпця стовпця, щоб побачити, який процесор (Core) працює в процесі:

введіть тут опис зображення


Приємно. Чи вказується той самий процес у кожному процесорі (якщо він використовує більше одного)? Оскільки він використовує захоплений слід xperf, чи це означає, що він не є реальним звітом?
Ƭᴇcʜιᴇ007

@ Ƭᴇcʜιᴇ007 Події ETW також можна використовувати під час виконання. Запис їх у файл ETL - це лише один із способів. Так, він перераховує процеси в обох процесорах, коли він використовує обидва.
magicandre1981
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.