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
/ #