为Docker容器设置CPU的绝对限制

我试图设置Docker容器CPU使用的绝对限制。 CPU共享的概念( docker run -c <shares> )是相对的,但我想说的是“让这个容器每100ms使用最多20ms的CPU时间。我能find的最接近的答案是来自邮件的提示列出使用cpu.cfs_quota_uscpu.cfs_period_us 。如何使用cpu.cfs_quota_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 

我相信我已经得到这个工作。 我必须重新启动我的Docker守护进程--exec-driver=lxc因为我找不到将cgroupparameter passing给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