限制2个进程的CPU使用率总和?

限制2个进程的CPU使用率总和?

两个进程,分别称为 A 和 B,
A 优先级高,B 优先级低
我想将这两个进程的总 CPU 使用率限制在 80% 以下

有时 A 什么都没做,cpu 使用率为 0%,此时希望 B 执行并占用 80% cpu
有时 A 正在工作,cpu 使用率为 80%,此时希望 B 什么都没做,不使用 cpu(或者只使用一点点,1%)
有时 A 占用了 30% 的 cpu,此时 B 应该占用 50% 的 cpu

我在 Ubuntu 20.04 下,有什么办法吗?

答案1

为了准确起见,你可能需要使用cgroups

这是我在 Ubuntu 20.04 上测试的一个简单的示例。为简单起见,这是一个单 CPU VM,所有命令均以 root 身份运行。

  • 安装工具
apt-get install cgroup-tools stress
  • 创建一个 cgroup 层级,该层级将受 CPU 限制。父级已命名max80,其下有AB
cgcreate -g cpu:max80/A -g cpu:max80/B
  • 将父 cgroup 限制max80为 CPU 的 80%。
echo 1000000 > /sys/fs/cgroup/cpu/max80/cpu.cfs_period_us
echo  800000 > /sys/fs/cgroup/cpu/max80/cpu.cfs_quota_us
  • 限制子 cgroupB拥有 10% 的份额。您在帖子中提到了 1%,但 10% 更容易说明。 B将使用所有可用的 CPU,但如果存在进程争用,A则将限制为 10%。
echo $((1024 * 10 / 100 )) > /sys/fs/cgroup/cpu/max80/B/cpu.shares

实际应用

  • stress只需 即可运行一个进程。执行该工作的进程A的 CPU 使用率将达到 80% 。stress
root@ubuntu:~# cgexec -g cpu:max80/A stress --cpu 1 &
[1] 2040
stress: info: [2040] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
root@ubuntu:~# ps -o pid,%cpu,cmd --sort -%cpu -p $(pidof stress)
    PID %CPU CMD
   2041 80.4 stress --cpu 1
   2040  0.0 stress --cpu 1
root@ubuntu:~# killall stress
  • stress只需 即可运行一个进程B。CPU 使用率将达到 80%。
root@ubuntu:~# cgexec -g cpu:max80/B stress --cpu 1 &
[1] 2065
stress: info: [2065] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
root@ubuntu:~# ps -o pid,%cpu,cmd --sort -%cpu -p $(pidof stress)
    PID %CPU CMD
   2066 80.6 stress --cpu 1
   2065  0.0 stress --cpu 1
root@ubuntu:~# killall stress
  • 在和中运行一个stress进程。CPU 使用率将分为 90%/10%。AB
root@ubuntu:~# cgexec -g cpu:max80/A stress --cpu 1 &
[1] 2078
stress: info: [2078] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
root@ubuntu:~# cgexec -g cpu:max80/B stress --cpu 1 &
[2] 2080
stress: info: [2080] dispatching hogs: 1 cpu, 0 io, 0 vm, 0 hdd
root@ubuntu:~# ps -o pid,%cpu,cmd --sort -%cpu -p $(pidof stress)
    PID %CPU CMD
   2079 71.9 stress --cpu 1
   2081  7.2 stress --cpu 1
   2078  0.0 stress --cpu 1
   2080  0.0 stress --cpu 1
root@ubuntu:~# killall stress

链接

答案2

在 Linux 中,可以使用命令更改正在运行的程序的优先级renice 。您可以阅读有关在终端上输入命令的信息man renice。互联网上的教程将帮助您快速了解其工作原理,例如Tecmint电脑希望

相关内容