Рейтинг:1

Ограничить сумму использования процессора двумя процессами?

флаг br

2 процесса, назовите это A и B
A имеет высокий приоритет. B имеет низкий приоритет.
Я хочу ограничить общее использование процессора этими двумя процессами до 80%

Иногда A нечего делать — загрузка процессора составляет 0%, в это время я надеюсь, что B выполнит и займет 80% процессора.
Иногда A работает — загрузка процессора составляет 80%, в это время я надеюсь, что B ничего не делает и не использует процессор (или использует только немного, 1%)
Иногда A занимает 30% процессора, в это время B должен занимать 50% процессора.

У меня Ubuntu 20.04, есть ли способ это сделать?

Рейтинг:1
флаг jp

Чтобы быть точным, вам, вероятно, нужно использовать контрольные группы.

Вот краткий пример, который я тестировал на Ubuntu 20.04. Для простоты это виртуальная машина с одним процессором, и все команды выполнялись от имени пользователя root.

  • установить инструменты
apt-get установить cgroup-tools стресс
  • создайте иерархию контрольных групп, которые будут ограничены процессором. Имя родителя макс80 и у него есть А и Б под этим.
cgcreate -g процессор:max80/A -g процессор:max80/B
  • ограничить родительскую cgroup макс80 до 80% загрузки процессора.
эхо 1000000 > /sys/fs/cgroup/cpu/max80/cpu.cfs_period_us
эхо 800000 > /sys/fs/cgroup/cpu/max80/cpu.cfs_quota_us
  • ограничить дочернюю группу Б иметь 10% акций. Вы упомянули 1% в своем посте, но 10% показать проще. Б будет использовать весь доступный ЦП, но если возникнут конфликты с процессами в А то он будет ограничен 10%.
эхо $((1024 * 10/100)) > /sys/fs/cgroup/cpu/max80/B/cpu.shares

в действии

  • управлять стресс процесс всего за А. Загрузка ЦП будет составлять 80% для стресс процесс выполнения работы.
root@ubuntu:~# cgexec -g cpu:max80/A stress --cpu 1 &
[1] 2040 г.
стресс: информация: [2040] диспетчеризация свиней: 1 процессор, 0 io, 0 vm, 0 hdd
root@ubuntu:~# ps -o pid,%cpu,cmd --sort -%cpu -p $(напряжение pidof)
    PID %CPU CMD
   2041 80,4 стресс --процессор 1
   2040 0.0 стресс --процессор 1
root@ubuntu:~# убить стресс
  • управлять стресс процесс всего за Б. Загрузка процессора будет 80%.
root@ubuntu:~# cgexec -g cpu:max80/B stress --cpu 1 &
[1] 2065
стресс: информация: [2065] диспетчеризация свиней: 1 процессор, 0 io, 0 vm, 0 hdd
root@ubuntu:~# ps -o pid,%cpu,cmd --sort -%cpu -p $(напряжение pidof)
    PID %CPU CMD
   2066 80,6 стресс --процессор 1
   2065 0.0 стресс --процессор 1
root@ubuntu:~# убить стресс
  • управлять стресс процесс в А и Б. Загрузка ЦП будет разделена на 90%/10%.
root@ubuntu:~# cgexec -g cpu:max80/A stress --cpu 1 &
[1] 2078
стресс: информация: [2078] диспетчеризация свиней: 1 процессор, 0 io, 0 vm, 0 hdd
root@ubuntu:~# cgexec -g cpu:max80/B stress --cpu 1 &
[2] 2080
стресс: информация: [2080] диспетчеризация свиней: 1 процессор, 0 io, 0 vm, 0 hdd
root@ubuntu:~# ps -o pid,%cpu,cmd --sort -%cpu -p $(напряжение pidof)
    PID %CPU CMD
   2079 71,9 стресс --процессор 1
   2081 7.2 стресс --процессор 1
   2078 0.0 стресс --процессор 1
   2080 0.0 стресс --процессор 1
root@ubuntu:~# убить стресс

Ссылки

флаг br
Спасибо, очень подробно! Я пробовал, он ограничивал использование процессора до 80%, но только для 1 процессора, мой компьютер имеет 8 процессоров, поэтому он фактически занимает 80% от 800%, остальные 7 процессоров все еще простаивают. Я надеюсь, что он может использовать 80% всех процессоров, поэтому 800% * 80% = 640%, есть ли способ сделать это?
Andrew Lowther avatar
флаг jp
Я считаю, что вам придется умножить квоту на количество ядер. `echo $((8 * 800000)) > /sys/fs/cgroup/cpu/max80/cpu.cfs_quota_us`. Если вы используете `stress` для тестирования, вам нужно увеличить количество рабочих процессов `stress --cpu 8`.
Рейтинг:0
флаг cn

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

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.