当我在具有 2 个 CPU 插槽和 4 个 GPU 的裸机主机系统上安装 Nvidia CUDA Toolkit 时,NUMA 设置如下所示:
numactl --hardware
available: 6 nodes (0,8,252-255)
[...]
在哪里:
- 0 和 8 是 CPU
- 252,253,254,255 是 GPU
安装 CUDA 后,我们可以检查 cpuset.mems:
$ cat /sys/fs/cgroup/cpuset/cpuset.mems
0,8,252-255
现在我的问题是:当我将 2 个 GPU 传递给 KVM 来宾时,使用:
[...]
<hostdev mode='subsystem' type='pci' managed='yes'>
<source>
<address domain='0x0004' bus='0x04' slot='0x00' function='0x0'/>
</source>
<address type='pci' domain='0x0000' bus='0x01' slot='0x01' function='0x0'/>
</hostdev>
<source>
<address domain='0x0004' bus='0x05' slot='0x00' function='0x0'/>
</source>
<address type='pci' domain='0x0000' bus='0x01' slot='0x02' function='0x0'/>
</hostdev>
[...]
我希望设置是
- CPU0 NUMA ID 0
- GPU1 NUMA ID 255
- GPU2 NUMA ID 254
但似乎他们正在获得随机值:
numactl --hardware
available: 3 nodes (0,5-6)
有时是0,7-8
有时0,5-6
KVM/libvirt 中是否有可能修复 GPU 编号,或者至少告诉他们从 255 开始倒退,因为它是裸机完成的?
谢谢!