一尘不染

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

docker

我正在尝试对Docker容器CPU使用率设置绝对限制。CPU共享概念(docker run -c <shares>)是相对的,但是我想说些类似的话:“让此容器每100毫秒最多使用20毫秒CPU时间。我能找到的最接近的答案是邮件列表中关于cpu.cfs_quota_us和的提示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

阅读 904

收藏
2020-06-17

共1个答案

一尘不染

我相信我已经做到了。我必须使用重新启动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
2020-06-17