使用Cgroups限制CPU使用率

11

我正在尝试使用cgroups来限制CPU使用率。我正在使用这个指南 https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/6/html/Resource_Management_Guide/sec-cpu_and_memory-use_case.html

我的/etc/cgconfig.conf文件如下:

mount {
cpu     = /mnt/cgroup/cpu,cpuacct;
cpuacct = /mnt/cgroup/cpu,cpuacct;
}

group wheel {
    cpu {
            cpu.shares="800";
    }
    cpuacct {
            cpuacct.usage="0";
    }
}
 group test1 {
    cpu {
            cpu.shares="200";
    }
    cpuacct {
            cpuacct.usage="0";
    }
}

我的cgrules.conf文件如下:

@wheel cpu,cpuacct wheel
@test1 cpu,cpuacct test1

尽管我尝试运行:

dd if=/dev/zero of=/dev/null bs=1024k

我看到用户组wheel和test1的CPU使用率达到了100%。

我已经使用以下命令检查了服务: service cgconfig status 并且已启动。

Loaded: loaded (/usr/lib/systemd/system/cgconfig.service; disabled)
Active: active (exited) since Mon 2015-03-02 17:29:19 EET; 7min ago
Process: 1240 ExecStop=/usr/sbin/cgclear -l /etc/cgconfig.conf -e   (code=exited, status=3)
Process: 56536 ExecStart=/usr/sbin/cgconfigparser -l /etc/cgconfig.conf -s         1664 (code=exited, status=0/SUCCESS)
Main PID: 56536 (code=exited, status=0/SUCCESS)

有人能告诉我我做错了什么吗? 非常感谢


你能在运行 dd if=/dev/zero of=/dev/null bs=1024k 的时候添加 top 命令的输出吗? - kirill-a
6
只有在资源存在竞争时,cgroup 分享才会限制 CPU 资源。例如,在您的示例中,如果 test1 需要 CPU 资源,而 wheel 没有使用,则没有竞争,test1 可以获得其需要的资源。如果两者都需要资源,则应该看到基于分享的限制生效。 - twalberg
你好,输出如下: PID 用户 PR NI VIRT RES SHR S %CPU %MEM TIME+ 命令 51535 user1 20 0 108956 1680 556 R 100.0 0.0 0:27.74 dd 51557 user2 20 0 108956 1676 552 R 100.0 0.0 0:23.57 dd` user1 属于 wheel 组,user2 属于 test1 组。 - SteveGr2015
@twalberg非常感谢您的回答。我同时为两个用户运行了dd命令。我还在上面放置了top命令的结果。您认为我应该尝试使用另一个命令吗? - SteveGr2015
1个回答

22

cpu cgroup是工作保守的,即如果没有竞争,任务不会被停止使用CPU。如果您想对任务可以使用的CPU数量设置硬限制,请尝试设置cpu.cfs_quota_uscpu.cfs_period_us

此处查看文档。


RedHat文档链接是404,但找到了这个:https://dev59.com/v7Pma4cB1Zd3GeqPsIvl#55914709 - balupton
cgroups版本2使用cpu.max代替cpu.cfs_(尽管cgroups手册中提到:“虽然cgroups v2旨在取代cgroups v1,但旧系统仍然存在(出于兼容性原因,不太可能被删除)。")。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接