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

Ham*_*amy 5 scheduler cpu-usage lxc cgroups docker

我正在尝试设置Docker容器CPU使用率的绝对限制.CPU共享概念(docker run -c <shares>)是相对的,但我想说的是"让这个容器每隔100毫秒使用最多20毫秒的CPU时间.我能找到的最接近的答案是使用和邮件列表中提示."一个人在使用时使用这些设置?cpu.cfs_quota_uscpu.cfs_period_usdocker 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
Run Code Online (Sandbox Code Playgroud)

Ham*_*amy 6

我相信我已经做到了这一点.我不得不重启我的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
Run Code Online (Sandbox Code Playgroud)

带宽限制的必要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
Run Code Online (Sandbox Code Playgroud)