Arm场景将8张昇腾AI处理器直通给虚拟机后使用npu-smi工具只能查询到5张昇腾AI处理器
问题描述
Arm场景将8张昇腾AI处理器直通给虚拟机后使用npu-smi工具只能查询到5张昇腾AI处理器。
通过执行命令dmesg | grep “BAR 4”查询,显示如下则表示为PCIe地址空间不足导致。
可能原因
根因:默认的开源QEMU配置中,将PCIe域配置的地址空间限制在512G,而每张昇腾AI处理器所需要的BAR4资源为64G,结合虚拟机本身已使用的地址资源,最终无法在申请出足够的地址空间,导致分配失败。
解决方案
- 参考修改QEMU章节中1至4安装必要的依赖。
- 从https://download.qemu.org/下载4.1.0版本的QEMU源码包,并将下载的源码包上传至环境中。
- 执行如下命令,修改目录权限。
chmod +x ./qemu-4.1.0.tar.xz
- 执行如下命令,解压QEMU源码包。
tar -xf ./qemu-4.1.0.tar.xz
- 执行如下命令,进入QEMU源码目录。
cd qemu-4.1.0/
- 修改QEMU源码。
- 执行如下命令,修改“virt.c”文件。
修改extended_memmap数组定义,加粗字体由512修改至1024后保存。
static MemMapEntry extended_memmap[] = { /* Additional 64 MB redist region (can contain up to 512 redistributors) */ [VIRT_HIGH_GIC_REDIST2] = { 0x0, 64 * MiB }, [VIRT_HIGH_PCIE_ECAM] = { 0x0, 256 * MiB }, /* Second PCIe window */ [VIRT_HIGH_PCIE_MMIO] = { 0x0, 1024 * GiB },
- 执行如下命令,修改“configure”文件。
vi ./configure
修改如下加粗字体的参数取值为“yes”并保存。
qom_cast_debug="yes" trace_backends="log" trace_file="trace" spice="yes" rbd="" smartcard="" libusb="" usb_redir="" opengl="" opengl_dmabuf="no" cpuid_h="no" avx2_opt=""
- 执行如下命令,修改“virt.c”文件。
- 构建并安装QEMU。
- 检查QEMU版本。
- 执行如下命令,重启libvirtd服务。
[root@localhost etc]# service libvirtd restart Redirecting to /bin/systemctl restart libvirtd.service
- 执行如下命令,关闭AppArmor。
systemctl disable apparmor
若系统环境为openEuler 22.03 LTS/openEuler 20.03 LTS/Kylin V10 SP2/KyLinV10/BC Linux 21.10系统,可跳过此步骤。
- 执行如下命令,重启系统。
若系统环境为openEuler 22.03 LTS/openEuler 20.03 LTS/Kylin V10 SP2/KyLinV10系统,可跳过此步骤。
- 执行如下命令,查看QEMU版本。
[root@localhost qemu-4.1.0]# virsh version Compiled against library: libvirt 6.0.0 Using library: libvirt 6.0.0 Using API: QEMU 6.0.0 Running hypervisor: QEMU 4.1.0
- 执行如下命令,重启libvirtd服务。
父主题: FAQ