Назад | Перейти на главную страницу

Установите соответствие ЦП для всех процессов конкретного пользователя с помощью набора задач

У меня есть ubuntu server 14.04, и мне интересно, есть ли какой-нибудь простой способ решить эту задачу.

Например, я уже могу сделать это для отдельных процессов с помощью taskset -pac 2 29435, но есть ли способ назначить его через имя пользователя вместо идентификатора процесса?

Заранее спасибо.

Ничего не делать. В самом деле, ничего не делай.

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

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

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

Времена, когда вы, возможно, захотите нанести вред процессу:

  • Вы являетесь хостинг-провайдером и предлагает минимальную / максимальную привязку к тому, какие ресурсы доступны потребителю ресурсов.
  • Процесс очень плохо написан / ведет себя неправильно и неправильно потребляет все ресурсы в данной системе, вызывая остановку других процессов. Это приведет к резкому увеличению нагрузки, но «спасет» систему от излишнего потребления ресурсов процессора, который можно было бы использовать для других целей. В этом случае вы обычно стремитесь исправить программу как правильное решение.

Итак - ничего не делайте и позвольте операционной системе разобраться. Через некоторое время, когда ваши экземпляры будут запущены (и если они действительно загружены ЦП), вы можете запустить команду ps -Lo psr,pid,tid $(pgrep <processname>) и вы увидите, что каждый ресурс правильно распределяется по ЦП.

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

$ ps -Lo psr,pid,tid,etime,cputime,comm $(pgrep firefox)
PSR   PID   TID     ELAPSED     TIME COMMAND
  2  3400  3400  1-07:16:10 01:22:29 firefox
  2  3400  3425  1-07:16:10 00:00:00 gdbus
  2  3400  3426  1-07:16:09 00:00:00 Gecko_IOThread
  3  3400  3427  1-07:16:09 00:00:00 Link Monitor
  1  3400  3428  1-07:16:09 00:02:50 Socket Thread
  1  3400  3429  1-07:16:09 00:00:00 firefox
  0  3400  3430  1-07:16:09 00:00:25 JS Helper
  3  3400  3431  1-07:16:09 00:00:26 JS Helper
  3  3400  3432  1-07:16:09 00:00:25 JS Helper
  1  3400  3433  1-07:16:09 00:00:25 JS Helper
  1  3400  3434  1-07:16:09 00:00:26 JS Helper
  3  3400  3435  1-07:16:09 00:00:25 JS Helper
  0  3400  3436  1-07:16:09 00:00:25 JS Helper
  0  3400  3437  1-07:16:09 00:00:26 JS Helper
  2  3400  3438  1-07:16:09 00:00:02 JS Watchdog
  2  3400  3439  1-07:16:09 00:00:00 Hang Monitor
  1  3400  3440  1-07:16:09 00:00:00 BgHangManager
  3  3400  3441  1-07:16:09 00:00:32 Cache2 I/O
  0  3400  3442  1-07:16:09 00:02:41 Timer
  3  3400  3444  1-07:16:09 00:00:00 GMPThread
  2  3400  3447  1-07:16:09 00:07:24 Compositor
  0  3400  3448  1-07:16:09 00:01:08 ImageBridgeChil
  3  3400  3449  1-07:16:09 00:00:31 ImgDecoder #1
  1  3400  3450  1-07:16:09 00:00:32 ImgDecoder #2
  3  3400  3451  1-07:16:09 00:00:31 ImgDecoder #3
  2  3400  3452  1-07:16:09 00:00:00 ImageIO
  2  3400  3453  1-07:16:09 00:04:07 SoftwareVsyncTh
  0  3400  3454  1-07:16:08 00:00:00 firefox
  2  3400  3455  1-07:16:08 00:00:00 Cert Verify
  2  3400  3456  1-07:16:08 00:00:00 IPDL Background
  0  3400  3457  1-07:16:08 00:00:37 DOM Worker
  2  3400  3458  1-07:16:08 00:00:03 HTML5 Parser
  2  3400  3462  1-07:16:07 00:00:01 mozStorage #1
  1  3400  3463  1-07:16:07 00:00:00 Proxy R~olution
  1  3400  3464  1-07:16:07 00:00:49 URL Classifier
  2  3400  3466  1-07:16:07 00:00:02 mozStorage #2
  0  3400  3467  1-07:16:07 00:00:00 gmain
  3  3400  3468  1-07:16:07 00:00:00 Cache I/O
  3  3400  3471  1-07:16:07 00:00:00 mozStorage #3
  2  3400  3477  1-07:16:07 00:00:35 DOM Worker
  2  3400  3479  1-07:16:07 00:00:00 mozStorage #4
  0  3400  3482  1-07:16:07 00:00:00 localStorage DB
  2  3400  3483  1-07:16:07 00:00:03 mozStorage #5
  1  3400  3519  1-07:15:57 00:00:00 mozStorage #6
  2  3400  3537  1-07:14:09 00:00:31 DOM Worker
  0  3400  3562  1-07:08:35 00:00:00 mozStorage #7
  0  3400  3587  1-06:59:39 00:00:00 threaded-ml
  2  3400  3597  1-06:49:40 00:00:00 mozStorage #8
  2  3400  7594  1-01:36:55 00:00:34 threaded-ml
  3  3400 11679    10:48:07 00:00:00 firefox
  2  3400 11684    10:48:07 00:00:00 typefind:sink
  2  3400 11687    10:48:07 00:00:00 typefind:sink
  1  3400 11689    10:48:07 00:00:00 typefind:sink
  0  3400 11690    10:48:07 00:00:00 mpegaudioparse0
  1  3400 11691    10:48:07 00:00:00 mpegaudioparse1
  2  3400 11692    10:48:07 00:00:00 mpegaudioparse2
  0  3400 11693    10:48:07 00:00:00 aqueue:src
  1  3400 11694    10:48:07 00:00:00 aqueue:src
  1  3400 11695    10:48:07 00:00:00 aqueue:src
  2  3400 22770    05:38:46 00:00:00 firefox
  3  3400 29803       10:17 00:00:00 DNS Res~er #226
  3  3400 30018       01:28 00:00:00 DNS Res~er #228

В этом примере я использовал firefox на своем компьютере, но вы можете изменить имя процесса в соответствии со своими потребностями.

Здесь я запрашиваю каждый поток, который живет в процессе. Столбцы означают следующее:

  • PSR - это номер процессора, назначенный этой задаче.
  • PID - это идентификатор процесса.
  • TID - это идентификатор потока. (tid основных процессов равен его pid)
  • ELAPSED показывает общее время, в течение которого процесс был запущен. В основном, количество времени, за которое он был запущен.
  • ВРЕМЯ - это общее количество времени, в течение которого процесс фактически работал на ЦП.
  • КОМАНДА - это имя команды, объявленное процессом. Здесь вы можете увидеть, что каждому фактическому потоку присвоено определенное имя, предположительно используемое для описания его цели.

Чтобы определить процент использования процессов за время их существования в процентах, вы можете выполнить следующий расчет (я использую firefox):

TIME     /    ELAPSED * 100  = UTIL
112570   /    4949    * 100  = 4.40

Заметка: Фактический идентификатор процесса (основной начальный поток, чей tid == pid) действует как `` контейнер '' для совокупной суммы всех потоков (существующих или больше не существующих) CPU-времени, поэтому дает вам достаточно точное описание всего процесса использование.

Чтобы объяснить, если время жизни процесса равно его времени процессора, это означает, что за все время, пока процесс когда-либо жил, он требовал и получал процессор для работы. Это равняется 100% использования процессора.

Я почти уверен, что на самом деле вы обнаружите, что ваши процессы почти не будут использовать процессор.

Итак, повторюсь, чтобы работать с максимальной эффективностью, ничего не делайте, поскольку ваше ядро ​​знает, как лучше всего расставить приоритеты для ресурсов ЦП, чтобы наилучшим образом использовать вашу систему. Все, что вы могли бы добавить, в большинстве случаев снижение вашей общей эффективности.

Если вы не планируете каким-либо образом навредить процессам (и есть обстоятельства, при которых вы действительно можете намереваться это сделать), вы не хотите использовать taskset, control groups или LXC/Docker чтобы получить максимальную производительность.