Есть ли способ измерить использование процессора конкретным процессом по ядрам?
Я знаю, что top хорош для измерения использования ЦП всей системы по ядрам, а набор задач может предоставить информацию о том, на каком ядре ЦП разрешено запускать процесс.
Но как мне измерить использование ЦП конкретным процессом ядрами ЦП?
I
чтобы переключить режим Irix (в отличие от режима Solaris ). Когдаon
, процент, отображаемый в списке процессов, относится к потоку ЦП . Когдаoff
, указанный процент отображается относительно общей мощности ЦП (то есть ВСЕ потоки, то есть все ядра).top
,man
страница говорит,top -1
но жалуется! Было бы неплохо получитьtop -1 -n 1
одну итерацию,top
но с отдельным отображением использования ЦП.Ты можешь использовать:
Он показывает, насколько занято каждое ядро, и обновляется автоматически каждую секунду. Результат будет примерно таким (на четырехъядерном процессоре):
Эта команда не отвечает на исходный вопрос, то есть не показывает использование ядра ЦП для определенного процесса.
источник
вы можете использовать
ps
.например, наличие процесса python с двумя занятыми потоками на двухъядерном процессоре:
(PSR - это идентификатор процессора, которому в настоящее время назначен поток)
вы видите, что потоки выполняются на одном ядре процессора (из-за GIL)
запустив тот же сценарий python в jython, мы видим, что сценарий использует оба ядра (и есть много других служб или любых других потоков, которые почти простаивают):
вы можете обработать вывод и вычислить общий объем ЦП для каждого ядра ЦП.
К сожалению, этот подход не выглядит на 100% надежным, иногда я вижу, что в первом случае сообщается, что два рабочих потока разделены на каждое ядро ЦП, или в последнем случае сообщается, что два потока работают. такое же ядро ..
источник
htop
дает хороший обзор использования отдельных ядеристочник
ps
Раствор почти то , что мне было нужно , и с некоторым Башем придачи делает именно то , что спросил оригинальный вопрос: увидеть за основное использование конкретных процессовЭто также показывает использование многопоточных процессов на уровне ядра .
Используйте как: cpustat `pgrep processname`` pgrep otherprocessname` ...
Примечание. Эта статистика основана на времени жизни процесса , а не на последних X секундах, поэтому вам нужно будет перезапустить процесс, чтобы сбросить счетчик.
источник
Также будет указано использование ЦП первых 4 ядер. Конечно, если у вас 32 ядра, эта команда станет немного длиннее, но полезна, если вас интересует только несколько ядер.
Например, если вас интересуют только ядра 3 и 7, вы можете сделать
источник
У меня была только эта проблема , и я нашел подобный ответ здесь .
Метод состоит в том, чтобы установить
top
желаемое, а затем нажатьW
(заглавная W). Это сохраняетtop
текущий макет в файл конфигурации в $ HOME / .toprc.Хотя это может не сработать, если вы хотите запустить несколько
top
с разными конфигурациями.Итак, с помощью того, что я считаю обходным решением, вы можете писать в разные файлы конфигурации / использовать разные файлы конфигурации, выполнив одно из следующих действий ...
1) Переименуйте двоичный файл
Теперь
.top2rc
будет записано в ваш $ HOME2) Установите для $ HOME какой-либо альтернативный путь, так как он запишет свой файл конфигурации в файл $ HOME / .binary-name.rc
Теперь
.toprc
будет записано в текущую папку.Используя комментарии других людей, чтобы добавить различный учет использования вверху, вы можете создать пакетный вывод для этой информации, а последний объединяет информацию с помощью сценария. Может быть, не так просто, как вы, сценарий, но я обнаружил, что верхний слой предоставляет мне ВСЕ процессы, чтобы позже я мог резюмировать и фиксировать состояние в течение длительного времени, которое я мог бы пропустить в противном случае (необъяснимое внезапное использование процессора из-за случайных процессов)
источник
Думал
perf stat
это то, что тебе нужно.Когда вы указываете
--cpu=list
параметр, он показывает конкретное использование процесса . Вот пример мониторинга использования процессора при сборке проекта с помощьюperf stat --cpu=0-7 --no-aggr -- make all -j
команды. Результат:В левом столбце указан конкретный индекс ЦП, а в крайнем правом столбце - использование ЦП. Если вы не укажете этот
--no-aggr
параметр, результаты будут агрегированы.--pid=pid
Опция поможет , если вы хотите контролировать процесс бега.Попробуйте
-a --per-core
или-a perf-socket
тоже, что предоставит более секретную информацию.Подробнее об использовании
perf stat
можно увидеть в этом руководстве: статистика производительности процессора , такжеperf help stat
поможет понять значение параметров.источник