Docker --cpus 使用 cpu 个内核或处理器来限制使用?
Docker --cpus use cpu cores or processors to limit usage?
Docker 有 --cpus 来限制容器的 CPU 使用。
根据docs,它将
Specify how much of the available CPU resources a container can use. For instance, if the host machine has two CPUs and you set --cpus="1.5", the container is guaranteed at most one and a half of the CPUs.
不过,我运行机器:
# cat /proc/cpuinfo | grep "cpu cores" | tail -n 1
8
# cat /proc/cpuinfo | grep "processor" | wc -l
16
如果我想为容器设置 50% 的限制,设置 --cpus=8 是否有意义?还是 100%?
我在 Docker 文档和 cgroups 手册中都没有看到明确的答案。
我看到了物理 cpu 和虚拟 cpu 以及核心 here 之间差异的详细解释,但它没有阐明我应该使用什么来限制 [=33] =].
默认情况下,容器中的进程 运行 没有 CPU 限制,可以使用所有可用的处理器时间,与 运行ning 上的其他进程竞争 [=20] =] 主机。当设置 --cpus
时,这会将 cgroup 设置配置为限制该容器内的进程仅使用那么多的 CPU 时间。这是由内核管理的,但底层硬件在 /proc/cpuinfo
中仍然可见。相反,您应该查看 cgroup 设置:
$ docker run -it --rm --cpus 0.75 busybox sh
/proc # cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us
75000
/proc # cat /sys/fs/cgroup/cpu/cpu.cfs_period_us
100000
与无限容器对比:
$ docker run -it --rm busybox sh
/ # cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us
-1
/ # cat /sys/fs/cgroup/cpu/cpu.cfs_period_us
100000
/ #
Docker 有 --cpus 来限制容器的 CPU 使用。
根据docs,它将
Specify how much of the available CPU resources a container can use. For instance, if the host machine has two CPUs and you set --cpus="1.5", the container is guaranteed at most one and a half of the CPUs.
不过,我运行机器:
# cat /proc/cpuinfo | grep "cpu cores" | tail -n 1
8
# cat /proc/cpuinfo | grep "processor" | wc -l
16
如果我想为容器设置 50% 的限制,设置 --cpus=8 是否有意义?还是 100%?
我在 Docker 文档和 cgroups 手册中都没有看到明确的答案。
我看到了物理 cpu 和虚拟 cpu 以及核心 here 之间差异的详细解释,但它没有阐明我应该使用什么来限制 [=33] =].
默认情况下,容器中的进程 运行 没有 CPU 限制,可以使用所有可用的处理器时间,与 运行ning 上的其他进程竞争 [=20] =] 主机。当设置 --cpus
时,这会将 cgroup 设置配置为限制该容器内的进程仅使用那么多的 CPU 时间。这是由内核管理的,但底层硬件在 /proc/cpuinfo
中仍然可见。相反,您应该查看 cgroup 设置:
$ docker run -it --rm --cpus 0.75 busybox sh
/proc # cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us
75000
/proc # cat /sys/fs/cgroup/cpu/cpu.cfs_period_us
100000
与无限容器对比:
$ docker run -it --rm busybox sh
/ # cat /sys/fs/cgroup/cpu/cpu.cfs_quota_us
-1
/ # cat /sys/fs/cgroup/cpu/cpu.cfs_period_us
100000
/ #