Вопрос или проблема
Существует ли в Linux команда, чтобы определить, на каком процессоре выполняется процесс? Меня интересует определение времени загрузки и простоя процессора.
Вы можете использовать команду ps
, чтобы запросить и отобразить активный процессор. Например, вы можете выполнить:
$ ps -aF
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1 0 0 5971 1764 1 Sep15 ? 00:00:01 /sbin/init
ubuntu 28903 2975 0 3826 1208 0 09:36 pts/0 00:00:00 ps -aF
Столбец PSR
показывает, что init
выполняется на процессоре 1, а ps
— на процессоре 0. Для дополнительной информации о том, как настроить отображение полей, смотрите man-страницу по ps(1).
Вы можете настроить графический инструмент, такой как htop
, для отображения текущего активного процессора. Также в htop
есть график загрузки по процессорам, который может быть тем, что вы ищете. Посмотрите, например, следующий снимок экрана с http://htop.sourceforge.net/.
Наконец, вы можете использовать инструмент taskset
, чтобы задать привязку к конкретному процессору.
Есть много способов это выяснить: htop, top, ps.
htop
- проверенная версия: 1.0.2
- адрес: http://htop.sourceforge.net/
- Нажмите F2, чтобы попасть в окно настроек
- выберите Columns в колонке Setup
- перейдите к Available Columns
- добавьте PROCESSOR
- Проверьте колонку CPU
top
- проверенная версия: procps 3.3.8
- адрес: http://gitorious.org/procps
- Нажмите f, чтобы попасть в окно управления полями
- Выберите P (Последний использованный процессор)
вот пример с последней колонкой P
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND P
5626 yashi 20 0 1926276 545964 47596 R 12.6 3.4 151:10.81 gnome-sh+ 2
5347 root 20 0 384788 73600 55708 S 8.7 0.5 55:10.09 Xorg 1
8125 yashi 20 0 646240 30776 21928 S 4.3 0.2 23:06.20 gnome-sy+ 0
1785 yashi 20 0 581180 29288 15560 R 4.0 0.2 0:25.55 gnome-te+ 1
ps
- проверенная версия: procps 3.3.8
- адрес: http://gitorious.org/procps
PSR — это код для отображения ID процессора. Вы можете использовать опцию формата, например, ps -o pid,psr
или просто выполнить ps -eF
$ ps -eF|head
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
root 1 0 0 3817 964 0 Aug14 ? 00:00:02 init [2]
root 2 0 0 0 0 2 Aug14 ? 00:00:00 [kthreadd]
root 3 2 0 0 0 0 Aug14 ? 00:00:11 [ksoftirqd/0]
root 5 2 0 0 0 0 Aug14 ? 00:00:00 [kworker/0:0H]
root 7 2 0 0 0 0 Aug14 ? 00:00:00 [migration/0]
root 8 2 0 0 0 0 Aug14 ? 00:00:00 [rcu_bh]
root 9 2 0 0 0 3 Aug14 ? 00:00:39 [rcu_sched]
root 10 2 0 0 0 0 Aug14 ? 00:00:00 [watchdog/0]
root 11 2 0 0 0 1 Aug14 ? 00:00:00 [watchdog/1]
/proc/<PID>/stat
Если вам нужно минимальное решение, вы можете использовать:
$ cut -d ' ' -f 1,39 /proc/13396/stat
13396 17
Здесь 13396
— это PID, который вы хотите проверить, а 17
представляет собой ID процессора.
Я просто цитирую содержимое man ps:
psr покажет вам, на каком процессоре выполняется или выполнялся процесс.
pcpu покажет вам процент времени процессора, который процесс использовал.
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm
ps -eo pid,tid,class,rtprio,ni,pri,psr,pcpu,stat,wchan:14,comm | tail
9847 9847 TS - 0 19 2 0.0 S - kworker/2:0
10061 10061 TS - 0 19 2 0.6 Sl futex_wait_que chrome
10208 10208 TS - 0 19 3 0.0 S - kworker/3:3
10247 10247 TS - 0 19 1 0.0 S - kworker/1:1
10381 10381 TS - 0 19 1 4.6 Sl futex_wait_que chrome
10452 10452 TS - 0 19 0 0.0 S - kworker/0:1
10491 10491 TS - 0 19 0 0.5 Sl futex_wait_que chrome
10504 10504 TS - 0 19 2 0.0 S - kworker/2:1
10505 10505 TS - 0 19 0 0.0 R+ - ps
10506 10506 TS - 0 19 3 0.0 S+ pipe_wait tail
Стиль BSD:
ps axo stat,euid,ruid,tty,tpgid,sess,pgrp,ppid,pid,psr,pcpu,comm
Ответ или решение
В Linux имеется несколько команд, которые позволяют выяснить, на каком процессоре выполняется конкретный процесс. Эта информация может быть особенно полезна для анализа загруженности процессоров и оценки времени простоя.
Теория
В многопроцессорных системах важной задачей является управление распределением процессов между ядрами процессора для оптимизации производительности. Знание о том, какой процессор выполняет процесс, позволяет лучше понять, как ресурсы системы используются и где возможны узкие места. Данные о загруженности процессоров и их времени простоя помогают в выявлении узких мест в производительности и оптимизации работы системы.
Одним из способов получения такой информации является использование команды ps
. Эта команда отображает различные атрибуты процессов, включая идентификатор процессора (PSR), на котором выполняется процесс. Дополнительные утилиты, такие как htop
и top
, также предоставляют информацию о загрузке процессоров и состоянии процессов.
Примеры
Использование команды ps
Команда ps
является одной из самых популярных в Linux для получения информации о работе процессов. Чтобы узнать, на каком процессоре запущен конкретный процесс, можно использовать следующее выражение:
ps -o pid,psr,comm
Здесь флаг -o
позволяет задать формат вывода, в котором pid
— идентификатор процесса, psr
— номер процессора, а comm
— команда, запускающая процесс. Вот пример вывода команды:
PID PSR COMMAND
745 1 my_process
1203 0 bash
В данном примере процесс с PID 745 выполняется на процессоре 1.
Использование htop
Графическая утилита htop
— это расширенная замена стандартной утилиты top
, которая предоставляет более дружественный интерфейс для мониторинга процессов. В htop
можно легко настроить отображение процессора для каждого процесса. Для этого:
- Запустите
htop
. - Нажмите
F2
, чтобы открыть меню настройки. - Перейдите в раздел "Columns" и добавьте столбец "PROCESSOR".
- Теперь в основном окне
htop
будет отображаться номер процессора, на котором выполняется процесс.
Этот графический интерфейс также предоставляет наглядные графики загрузки процессоров.
Использование top
Утилита top
также может показать, на каком процессоре выполняется процесс. Для демонстрации этой информации:
- Запустите
top
. - Нажмите клавишу
f
, чтобы войти в режим управления полями. - Выберите поле
P
, которое обозначает "Последний использованный процессор".
Здесь процессор, на котором выполняется процесс, будет отображаться в колонке P
.
Применение
Эти команды позволяют администраторам и пользователям систем Linux получить детальную информацию о распределении процессов по процессорным ядрам. Это особенно важно для высокопроизводительных систем, где балансировка нагрузки может значительно улучшить общую производительность.
Например, если определенные задания требовательны к ресурсам и часто выполняются на одном и том же процессоре, можно использовать утилиту taskset
для настройки привязки процесса к определенному ядру, чтобы разгрузить перегруженные процессоры. Это может быть полезно в средах с интенсивной обработкой данных или в системах с низким энергопотреблением, где важно учитывать распределение нагрузки.
В заключении, знание того, на каком процессоре выполняется процесс, и понимание загрузки и времени простоя процессоров помогает в оптимальной настройке системы для достижения максимальной эффективности. В сочетании с утилитами, такими как ps
, top
, htop
и taskset
, администраторы могут оперативно реагировать на проблемы перегрузки и сбалансировать использование вычислительной мощности в серверных средах.