一、使用cgroup限制cpu利用率的方法

  1. 创建一个cgroup:
sudo mkdir /sys/fs/cgroup/cpu/testgroup
  1. 设置该cgroup的cpu.cfs_period_us参数,即cpu时间片的长度,单位为微秒,默认值为1000000(1秒):
sudo sh -c "echo 1000000 > /sys/fs/cgroup/cpu/testgroup/cpu.cfs_period_us"
  1. 设置该cgroup的cpu.cfs_quota_us参数,即cpu时间片的配额,单位为微秒,默认值为-1,表示不限制。例如,如果想将该cgroup的cpu利用率限制为50%,则设置为500000微秒:
sudo sh -c "echo 500000 > /sys/fs/cgroup/cpu/testgroup/cpu.cfs_quota_us"
  1. 将进程加入该cgroup:
sudo sh -c "echo <PID> > /sys/fs/cgroup/cpu/testgroup/cgroup.procs"

其中,为进程的PID。

二、编写测试程序使进程的cpu利用率超出阈值

以下是一个简单的测试程序,它会不断地进行计算操作,导致cpu利用率非常高:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    while (1) {
        double a = 1.0, b = 1.0;
        while (1) {
            a += b;
            b *= 0.5;
            if (b < 1e-6)
                break;
        }
        printf("result: %lf\n", a);
    }
    return 0;
}

编译并运行该程序,并将其加入到之前创建的cgroup中:

gcc -o test test.c
sudo sh -c "echo <PID> > /sys/fs/cgroup/cpu/testgroup/cgroup.procs"
./test

可以看到,该程序会占用非常高的cpu资源。

三、验证cgroup限制操作是否成功

使用top命令可以看到该进程的cpu利用率:

top -p <PID>

可以看到,该进程的cpu利用率非常高。

接下来,我们将该进程加入到之前创建的cgroup中,并将其cpu配额设置为500000微秒,即50%的cpu利用率:

sudo sh -c "echo <PID> > /sys/fs/cgroup/cpu/testgroup/cgroup.procs"
sudo sh -c "echo 500000 > /sys/fs/cgroup/cpu/testgroup/cpu.cfs_quota_us"

然后再次使用top命令查看该进程的cpu利用率:

top -p <PID>

可以看到,该进程的cpu利用率已经被限制在约50%左右,说明cgroup限制操作成功


原文地址: https://www.cveoy.top/t/topic/cd4p 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录