【问题标题】:Why my limit on CPU does not validate via cgroups为什么我的 CPU 限制无法通过 cgroups 验证
【发布时间】:2015-05-29 14:25:32
【问题描述】:

/etc/cgconfig.conf

...

group memlimit {
    memory {
        memory.limit_in_bytes = 8589934592;
    }
}

group cpulimit {
    cpu {
        cpu.shares = 1024;
    }
}

/etc/cgrules.conf:

@gatewayer  memory  memlimit/
@gatewayer  cpu cpulimit/

我已经通过命令重启了服务:

service cgconfig restart
service cgred restart

从属于gatewayer 组的用户执行我的python 脚本后,我可以在执行cat /cgroup/memory/memlimit/cgroup.procs 时看到PID,并且限制已应用于正在运行的进程。但是,对cpu的限制没有生效,cat /cgroup/cpu/cpulimit/cgroup.procs没有按预期打印PID。

我尝试检查进程,结果是相同的结果,内存受 cgroups 限制,而 cpu 不受:

$ cat /proc/18113/cgroup 
174:blkio:/
173:net_cls:/
172:freezer:/
171:devices:/
170:memory:/memlimit
169:cpuacct:/
168:cpu:/
167:cpuset:/

谁能给我一些帮助?非常感谢。

【问题讨论】:

  • 如果没有 CPU 争用,cpu.shares 不是 CPU 使用的“限制”。如果 CPU 处于空闲状态,则任何进程都可以使用整个 CPU,而不管其 cpu.shares 值如何。但是,当存在 CPU 争用时,cpu.shares 值用于确定给定进程的 CPU 时间百分比(“此进程cpu.shares”/“所有cpu.shares 的总和”)。跨度>
  • 关键问题是我的进程没有按预期与其他进程按比例共享cpu。我在不同的用户上运行了两个相同的 python 脚本,一个应该由 cgroups 保护,另一个是 root。 cpu.shares 分别为 100 和 1024。但是这些进程实际上平等地共享 cpu。 @twalberg

标签: linux linux-kernel cgroups


【解决方案1】:

似乎应该正确应用 cgroups 设置 cpu.shares

现代计算机通常具有多核 CPU。用于测试的python脚本只能100%使用一个核心。因此,如果仍有空闲的 cpu 核心,其他脚本也可以使用该核心的 100%。

测试cpu.shares 的更好方法是运行比cpu 核心数更多的进程数。

cat /proc/cpuinfo表示cpu核心数。

【讨论】:

    猜你喜欢
    • 2021-01-30
    • 1970-01-01
    • 2013-08-07
    • 2021-08-01
    • 2012-02-04
    • 2018-02-10
    • 2010-10-03
    • 2020-10-29
    • 1970-01-01
    相关资源
    最近更新 更多