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

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

2 ответа2

3

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

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

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

0

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

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

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .