我在 Threadripper 3990X 上使用 Docker 时遇到了困难。尽管启动了 64 个容器,每个容器都将
--cpus 2
选项传递给 docker run
,但我无法让 Docker 使用该 CPU 中的两个 NUMA 节点。它总是使用节点 0。我的理解是 --cpus 2
应该映射到两个线程或一个核心。因此,对于 64 个容器,我应该能够使我的 CPU 饱和,但无论如何,只有 NUMA 节点 0 饱和。这是在 Windows 10 企业版上。
编辑1:我正在使用Windows容器,来宾操作系统也是Windows(与主机版本相同)。
我尝试过
--cpuset-cpus
和 --cpuset-mems
,但收到错误消息,指出 Docker for Windows 不支持这些选项。我已经尝试过 start /NODE <NUMA_node> docker run
但这对虚拟机在哪个 NUMA 节点上运行没有影响。我唯一取得的成功是使用 --isolation process
,因为它暴露了所有核心。然而,我正在容器化的应用程序的性质意味着我真的想切换回 Hyper-V 隔离模式。
阅读KEP-1769:内存管理器作为非均匀内存访问(NUMA)用法的示例,有:
您可以在 WSL2 环境中尝试您的容器,但如果您完全依赖于 Windows 内核(这解释了您的 Windows 容器),这可能是不可能的。