硬件辅助虚拟化(Hardware-Assisted Virtualization)允许虚拟机绕过宿主机的软件模拟层,直接控制底层物理硬件,从而获得几乎等同于裸机的性能(Near-native performance)。
步骤一:开启系统 IOMMU 支持
vi /etc/default/grub
# Ubuntu / Debianupdate-grub# CentOS / RHEL (BIOS 模式)grub2-mkconfig -o /boot/grub2/grub.cfg# CentOS / RHEL (UEFI 模式)grub2-mkconfig -o /boot/efi/EFI/centos/grub.cfgreboot
dmesg | grep -e DMAR -e IOMMU
步骤二:解绑 NVIDIA 驱动并绑定 VFIO-PCI
# 加载 vfio-pci 内核模块modprobe vfio-pci# 定义你的 8 张 A800 对应的 PCI 地址 (注意 sysfs 中字母需要小写)GPUS=("0000:49:00.0""0000:54:00.0""0000:5e:00.0""0000:65:00.0""0000:89:00.0""0000:b0:00.0""0000:c4:00.0""0000:d9:00.0")for dev in "${GPUS[@]}"; doecho "Processing GPU at $dev..."# 1. 解绑当前驱动 (NVIDIA)if [ -e /sys/bus/pci/devices/$dev/driver ]; thenecho $dev > /sys/bus/pci/devices/$dev/driver/unbindfi# 2. 获取厂商和设备 ID (Vendor & Device ID)vendor=$(cat /sys/bus/pci/devices/$dev/vendor)device=$(cat /sys/bus/pci/devices/$dev/device)# 3. 绑定至 vfio-pciecho "$vendor $device" > /sys/bus/pci/drivers/vfio-pci/new_idecho "GPU $dev successfully bound to vfio-pci."done# 验证绑定结果lspci -nnk -s 0000:49:00.0 | grep "Kernel driver in use"
验证绑定结果
lspci -nnk -s 0000:49:00.0 | grep"Kernel driver in use"
步骤三:使用 QEMU 启动 8 卡透传虚拟机
qemu-system-x86_64 \-enable-kvm \-m 256G \-smp cores=32,threads=2,sockets=1 \-cpu host,kvm=off \-nodefaults \-vga none -nographic \-serial stdio \-drive file=/path/to/your/ubuntu_guest.qcow2,format=qcow2,if=virtio \-netdev user,id=net0,hostfwd=tcp::2222-:22 \-device virtio-net-pci,netdev=net0 \-device vfio-pci,host=0000:49:00.0,multifunction=on \-device vfio-pci,host=0000:54:00.0 \-device vfio-pci,host=0000:5e:00.0 \-device vfio-pci,host=0000:65:00.0 \-device vfio-pci,host=0000:89:00.0 \-device vfio-pci,host=0000:b0:00.0 \-device vfio-pci,host=0000:c4:00.0 \-device vfio-pci,host=0000:d9:00.0

