Как узнать общее количество используемых процессоров пользователем в Linux?

Как узнать общее количество используемых процессоров пользователем в Linux?

Как узнать общее количество используемых процессоров пользователем в Linux? Например: Пользователь "X" запускает 2 (или более) процесса, которые в общей сложности используют 3 процессора. Как узнать это? Если это невозможно, то Как узнать, сколько процессоров может использовать пользователь? Например: Пользователь "X" открыл сеанс с 2 процессорами (из 8 возможных).

Мне нужно написать функцию Perl, которая получает имя пользователя (например, "root") и возвращает скалярное число - одно из возможных: 1. Общее количество используемых пользователем процессоров (например, 2 из 8) 2. Общее количество используемых пользователем ядер 3. Процессоры, доступные пользователю В моем случае пользователь запускает один (может больше, но не намного) большой процесс, который выполняется несколько дней, и я хочу знать, как процессы (специального пользователя) нагружают машину... Потому что если он использует слишком много ресурсов, то мне нужно будет его остановить...

решение1

Невозможно сказать, какие ядра использовала данная программа. ЦП назначает потоки ядрам невидимо и автоматически на основе большого количества факторов и выполняет множество манипуляций, чтобы создать видимость того, что все работает синхронно, даже если есть некоторое разделение по времени в том, как он назначает время обработки каждому потоку.

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

это не похоже на то, что вы назначаете 2 ядра Салли, 2 ядра Бобу и 4 ядра Тому, из-за чего они у вас «закончатся». Программы Салли, Боба и Тома могут использовать до 8 ядер, и система сама решит, как лучше всего назначить потоки вычислительному объекту.

решение2

Вы можете использоватьsched_getaffinity и sched_setaffinityдля поиска того, на каком ядре разрешено запускать процесс пользователя. Однако это не означает, что он будет запущен на всех из них.

Вы можете ограничить число ядер, на которых может работать процесс, запустив его впроцессорный набор(определенная частьcgroup)

например, см.это руководствоо том, как добавить процесс в cgroup в Red Hat 6 иэто руководствоо том, как эффективно разделить процессор и память по группам (или, следовательно, по пользователям).

Если вас интересует только процент загрузки процессора конкретным пользователем, вы можете воспользоваться этой однострочником:

top -b -n 1 -u <username> | awk 'NR>7 { sum += $9; } END { print sum; }'

Связанный контент