我正在编写一个并行运行的库。该库经常在 docker 容器中使用。我想启动与我的 docker 容器分配的核心一样多的线程。
docker 是否将 CPU 限制设置为环境变量?
例如,如果我的用户在创建容器时设置了两个 CPU:
docker run --cpuset-cpus="2" myapp:latest
(see 这个问题 https://stackoverflow.com/questions/37871540/how-many-cpus-does-a-docker-container-use)
如何取回号码2
通过检查容器的状态从容器内部?
With --cpuset-cpus="2"
你实际上使用了1个CPU。例如,如果您有 4 个可用:{0,1,2,3}
您必须通过用逗号分隔或定义范围来指定其中 2 个。来自docs https://docs.docker.com/config/containers/resource_constraints/#cpu:
--cpuset-cpus
限制容器可以使用的特定 CPU 或内核。如果您有多个 CPU,则容器可以使用的以逗号分隔的列表或以连字符分隔的 CPU 范围。第一个 CPU 编号为 0。有效值可能是 0-3(使用第一个、第二个、第三个和第四个 CPU)或 1,3(使用第二个和第四个 CPU)。
Answer:
- 要获取可用处理单元的数量:
nproc
- 获取CPU集:
/sys/fs/cgroup/cpuset/cpuset.cpus
小例子如下:
-
host:
$ nproc
4
-
具有 1 个 cpu 的容器:
$ docker run --rm -it --cpuset-cpus="2" ubuntu
root@73844de506db:/# nproc
1
root@73844de506db:/# cat /sys/fs/cgroup/cpuset/cpuset.cpus
2
-
具有 3 个 cpu 的容器:
$ docker run --rm -it --cpuset-cpus="0-2" ubuntu
root@4c3f841e613b:/# nproc
3
root@4c3f841e613b:/# cat /sys/fs/cgroup/cpuset/cpuset.cpus
0-2
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)