6

我正在尝试对 Docker 容器 CPU 使用设置绝对限制。CPU 共享概念 ( docker run -c <shares>) 是相对的,但我想说“让这个容器每 100 毫秒最多使用 20 毫秒的 CPU 时间。我能找到的最接近的答案是邮件列表中关于使用cpu.cfs_quota_usand的提示cpu.cfs_period_us。如何使用时使用这些设置docker run

我对 LXC 支持的 Docker(例如 pre0.9)或更高版本没有严格要求,只需要查看正在使用的这些设置的示例 - 任何指向相关文档或有用博客的链接也非常受欢迎。我目前使用的是 Ubuntu 12.04,在/sys/fs/cgroup/cpu/docker我看到以下选项:

$ ls /sys/fs/cgroup/cpu/docker
cgroup.clone_children  cpu.cfs_quota_us   cpu.stat
cgroup.event_control   cpu.rt_period_us   notify_on_release
cgroup.procs           cpu.rt_runtime_us  tasks
cpu.cfs_period_us      cpu.shares
4

1 回答 1

7

我相信我已经完成了这项工作。我不得不重新启动我的 Docker 守护程序,--exec-driver=lxc因为我找不到将 cgroup 参数传递给libcontainer. 这种方法对我有用:

# Run with absolute limit
sudo docker run --lxc-conf="lxc.cgroup.cpu.cfs_quota_us=50000" -it ubuntu bash

有关带宽限制的必要 CFS 文档在这里

我向 sysbench 简要确认了这似乎确实引入了一个绝对限制,如下所示:

$ sudo docker run --lxc-conf="lxc.cgroup.cpu.cfs_quota_us=10000" --lxc-conf="lxc.cgroup.cpu.cfs_period_us=50000" -it ubuntu bash
root@302e651c0686:/# sysbench --test=cpu --num-threads=1 run
   <snip> 
   total time:                          90.5450s
$ sudo docker run --lxc-conf="lxc.cgroup.cpu.cfs_quota_us=20000" --lxc-conf="lxc.cgroup.cpu.cfs_period_us=50000" -it ubuntu bash
root@302e651c0686:/# sysbench --test=cpu --num-threads=1 run
   <snip> 
    total time:                          45.0423s
于 2014-10-14T01:32:25.540 回答