使用cgroup限制cpu利用率。 编写相关测试程序使得进程的cpu利用率超出设置的阈值验证上述限制操作是否成功。
一、使用cgroup限制cpu利用率的方法
- 创建一个cgroup:
sudo mkdir /sys/fs/cgroup/cpu/testgroup
- 设置该cgroup的cpu.cfs_period_us参数,即cpu时间片的长度,单位为微秒,默认值为1000000(1秒):
sudo sh -c "echo 1000000 > /sys/fs/cgroup/cpu/testgroup/cpu.cfs_period_us"
- 设置该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"
- 将进程加入该cgroup:
sudo sh -c "echo <PID> > /sys/fs/cgroup/cpu/testgroup/cgroup.procs"
其中,
二、编写测试程序使进程的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 著作权归作者所有。请勿转载和采集!