Существует ли команда в Linux, чтобы узнать номер процессора, на который загружен процесс?

Вопрос или проблема

Существует ли в 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/.

htop screenshot

Наконец, вы можете использовать инструмент taskset, чтобы задать привязку к конкретному процессору.

Есть много способов это выяснить: htop, top, ps.

htop

  1. Нажмите F2, чтобы попасть в окно настроек
  2. выберите Columns в колонке Setup
  3. перейдите к Available Columns
  4. добавьте PROCESSOR
    htop selecting processor
  5. Проверьте колонку CPU
    htop with cpu column

top

  1. Нажмите f, чтобы попасть в окно управления полями
  2. Выберите 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

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 можно легко настроить отображение процессора для каждого процесса. Для этого:

  1. Запустите htop.
  2. Нажмите F2, чтобы открыть меню настройки.
  3. Перейдите в раздел "Columns" и добавьте столбец "PROCESSOR".
  4. Теперь в основном окне htop будет отображаться номер процессора, на котором выполняется процесс.

Этот графический интерфейс также предоставляет наглядные графики загрузки процессоров.

Использование top

Утилита top также может показать, на каком процессоре выполняется процесс. Для демонстрации этой информации:

  1. Запустите top.
  2. Нажмите клавишу f, чтобы войти в режим управления полями.
  3. Выберите поле P, которое обозначает "Последний использованный процессор".

Здесь процессор, на котором выполняется процесс, будет отображаться в колонке P.

Применение

Эти команды позволяют администраторам и пользователям систем Linux получить детальную информацию о распределении процессов по процессорным ядрам. Это особенно важно для высокопроизводительных систем, где балансировка нагрузки может значительно улучшить общую производительность.

Например, если определенные задания требовательны к ресурсам и часто выполняются на одном и том же процессоре, можно использовать утилиту taskset для настройки привязки процесса к определенному ядру, чтобы разгрузить перегруженные процессоры. Это может быть полезно в средах с интенсивной обработкой данных или в системах с низким энергопотреблением, где важно учитывать распределение нагрузки.

В заключении, знание того, на каком процессоре выполняется процесс, и понимание загрузки и времени простоя процессоров помогает в оптимальной настройке системы для достижения максимальной эффективности. В сочетании с утилитами, такими как ps, top, htop и taskset, администраторы могут оперативно реагировать на проблемы перегрузки и сбалансировать использование вычислительной мощности в серверных средах.

Оцените материал
Добавить комментарий

Капча загружается...