Определите, на каком процессоре запущен процесс

19

Используя Process Explorer от Sysinternals, есть ли столбец, который может использоваться для указания того, на каком процессоре запущен процесс? Если столбца нет, есть ли другой способ?

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

Ответы:

47

Запрошено в 2005 году :

Я очень впечатлен возможностями, встроенными в Process Explorer, но хотел бы видеть возможность отображать привязку ЦП каждого процесса в главном окне в виде переключения столбцов.

Нет ответа

Запрошено в 2007 году :

Спасибо за отличные утилиты. Моя просьба добавить опцию столбца в Process Explorer для отображения соответствия процессора. Вот и все.

Нет ответа

Подобное обсуждалось в 2013 году :

Было бы неплохо, если бы появился новый столбец представления производительности процесса под названием Core Usage, который бы отображал сумму использования по ядру, на котором запущен процесс.

Основной обзор: это не может быть сделано.

Потоки - это то, что отправляется ядрам для обработки, а не процессы. Большинство современных процессов имеют несколько потоков.

Если вы вручную устанавливаете привязку к процессу, то все потоки для процесса должны привязываться к одному процессору. Поскольку вы устанавливаете его вручную, вы должны знать, на каком процессоре он работает. ;)

Но если вы не укажете, то поток (ы) будет контролироваться ОС и базовым аппаратным обеспечением и будет переключаться между процессорами со скоростью, которая будет недоступна для просмотра, и, скорее всего, будет неточной во время отображения вы.

Возможно, проверьте эти SU вопрос больше:

Также из StackOverflow:

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

Использование этого позволит вам оценить использование процессора вашими потоками, так как вы никогда не сможете быть уверены, где потоки будут проходить один цикл за другим (опять же, если вы не установили сходство намеренно).

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

Ƭᴇcʜιᴇ007
источник
3
Хороший ответ ... :)
DavidPostill
@DavidPostill - Согласен.
rory.ap
Отличный ответ, поскольку он отвечает на конкретный вопрос, попадает в историю и почему и помогает понять концепции.
Смитерс
1
Как в Linux, так и в Windows можно установить привязку для каждого потока. Тем не менее, это редко бывает когда-либо полезно, поэтому редко когда-либо делается, поэтому отображение сходства для каждого потока в универсальной программе мониторинга, если оно установлено , более или менее бесполезно - подавляющее большинство просто позволяло бы ядру планировать по своему усмотрению.
Боб
ОС может даже переключить ваш поток на другой процессор сразу после вызова GetCurrentProcessorNumber (но до того, как он начнет выполняться) и снова сразу после его возврата, так что результатом будет ни процессор во время вызова, ни процессор во время звонок возвращается!
gnasher729
8

Это можно сделать, захватив трассировку xperf и открыв ее с помощью Windows Performance Analyzer (WPA.exe) из Windows Performance Toolkit, здесь вы можете добавить столбец CPU, чтобы увидеть, какой CPU (Core) выполняет процесс:

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

magicandre1981
источник
Ницца. Он перечисляет один и тот же процесс под каждым процессором (если он использует более одного)? Поскольку он использует захваченную трассировку xperf, означает ли это, что это не прямые отчеты?
Ƭᴇcʜιᴇ007
@ Ƭᴇcʜιᴇ007 ETW-события также могут использоваться во время выполнения. Запись их в файл ETL - это только один из способов. Да, он перечисляет процессы под обоими процессорами, когда он использует оба.
magicandre1981