У меня есть доступ к 8-ядерному узлу кластера Linux. При входе на узел я вижу список процессоров, использующих эту команду:
more /proc/cpuinfo
В моем 8-ядерном узле процессоры пронумерованы от 0 до 7. Каждый процессор - это процессор Intel Xeon (E5430 @ 2,66 ГГц).
Теперь предположим, что я вызываю программу foo
с некоторыми аргументами args
:
foo args
Выполнение программы foo
занимает много времени (например, часы или дни). Позвонив foo
, можно ли определить конкретный процессор (т. Е. От 0 до 7), на котором foo
работает? В top
программе показывает мне идентификатор процесса и подобную информацию, но я не вижу процессор номер . Доступна ли такая информация?
foo
двум разным процессорам. Когда я звонюfoo
один раз, он работает%CPU
очень близко к 100% (согласноtop
). Но когда я вызываюfoo
второй раз, обаfoo
процесса запускаются так, что%CPU
для обоих процессов сумма составляет менее 100% (обычно около 45% для каждогоfoo
процесса). Для меня это говорит о том, что два вызоваfoo
выполняются на одном процессоре (хотя доступно восемь процессоров); Я хотел бы убедиться, что это так.Ответы:
ps
может дать вам эту информацию, если вы попроситеpsr
колонку (или используйте-F
флаг, который включает ее).Пример:
Или:
Моя оболочка работала на CPU 2, когда я запускал первую команду, на CPU 0, когда я запускал вторую. Помните, что процессы могут очень и очень быстро менять ЦП, поэтому информация, которую вы на самом деле видите, по сути уже устарела.
Дополнительная информация в ответах на этот вопрос Супер-пользователя:
Linux: команда, чтобы узнать номер процессора, в который загружен процесс?
источник
С помощью
top
fromprocps
(обычно по умолчанию в дистрибутивах Linux в настоящее время)top
нажмите in , fперейдите кP = Last User CPU (SMP)
и нажмите, Spaceчтобы выбрать (вы также можете переместить поле, например, передCOMMAND
полем с помощью Rightклавиши, а затем перемещаться вверх и вниз). qвернуться к главному экрану (где вы увидите, как ваш процесс переходит от процессора к процессору, если вы явно не настроили его для работы с ним). Вы можете нажать, Wчтобы сохранить это как значение по умолчанию.Нажмите ?для помощи.
источник
Команда
taskset
- это то, что вы ищете:taskset - получить или установить привязку процессора к процессу
пример
Маска
f
означает все процессоры,0x00000001
будет просто процессор 0.Показывает процессор в формате списка. В этом примере у меня на ноутбуке 4 ядра.
Смотрите man-страницу более подробно .
источник
Вы также можете получить эту информацию непосредственно из
/proc/[pid]/stat
. Это 39-е поле, разделенное пробелами (начиная с Linux 2.2.8).Например, для отображения процессора процессора, на котором работает текущая оболочка (в данном случае):
источник