25 / 01 / 06

物理群晖SA6400实现VMM核显直通飞牛OS虚拟机

写在前面

本文教程针对带iGPU核显的物理群晖,通过群晖VMM套件安装虚拟机,透传宿主机核显实现虚拟机硬解,与网络上铺天盖地的PVE宿主+核显直通虚拟化群晖VM不同,请注意区分。

环境信息

  • Intel Xeon W-1290P ES (QTB3)处理器

  • UHD P630 iGPU核显(PCI设备ID为:0x8086:0x9BC6)

  • ASUS W480 Pro ACE主板

  • RR 25.1.0引导,模拟机型SA6400,7.7.2最新系统,official内核

  • 飞牛OS v0.8.29

操作步骤

  • 首先使用RR编译安装SA6400,进入系统后完成VMM套件的安装。

  • VMM中导入飞牛OS的镜像ISO,进行虚拟机安装,机型平台选择PC(i440fx),固件选择Legacy

    正常图形化安装后,虚拟机重启,开机确认进入飞牛OS:

  • 完成以上环境准备后开始核显直通步骤,首先重启物理机,确认BIOS中以下功能状态:

    • 开启VT-d和VMX(用于虚拟化)

    • 开启IOMMU支持

    • 开启Above 4G Decoding和Resize BAR Support

    • 关闭CSM,纯UEFI引导

    • 关闭安全启动

  • 在RR引导加入自定义cmdline:

    • intel_iommu=on

    • iommu=pt

    • vfio-pci.ids=8086:9BC6(对应核显PCI设备的vendor ID: device ID)

  • 在RR引导中确认模块里面选择了vfio相关的驱动

  • 重新编译RR引导,启动物理机群晖系统,使用以下命令确认iommu已开启:

    • dmesg | grep -i iommu

    • dmesg | grep DMAR

  • 使用以下脚本确认iommu分组情况

    for iommu_group in $(find /sys/kernel/iommu_groups/ -maxdepth 1 -mindepth 1 -type d); do echo "IOMMU Group $(basename "$iommu_group")"; for device in $(ls "$iommu_group"/devices/); do echo -e "\t$(lspci -nns "$device")"; done; done;

    以下为我的环境的iommu分组情况,可以看到核显是单独的一个组,直通时要求必须整个组一起直通,所以如果你的环境上核显所在分组有其他设备,请查询其他教程进行修改,例如grub 中设置 pcie_acs_override=downstream 或者 pcie_acs_override=downstream,multifunction

  • 加载vfio驱动

    modprobe vfio-pci
  • 解绑核显的i915驱动

    echo 0000:00:02.0 > /sys/bus/pci/drivers/i915/unbind
  • 注册vfio设备id

    echo 8086 9bc6 > /sys/bus/pci/drivers/vfio-pci/new_id
  • 绑定vfio驱动

    echo 0000:00:02.0 > /sys/bus/pci/drivers/vfio-pci/bind
  • 此时可以看到核显已经加载了vfio驱动

    ash-4.4# lspci -s 00:02.0 -vvv | grep driver Kernel driver in use: vfio-pci
  • 新建一个xml文件,写入以下内容,保存为igpu.xml

    <hostdev mode='subsystem' type='pci' managed='yes'> <driver name='vfio' /> <source> <address type='pci' domain='0x0000' bus='0x00' slot='0x02' function='0x0'/> </source> </hostdev>
  • 查看当前群晖上运行的虚机

    ash-4.4# virsh list Id Name State ------------------------------------------------------ 23 24ad9cfe-cc2a-4a74-a07e-40387e52c42e running 32 70a3a0cd-d7b3-4169-8c7f-e530f69f6908 running 33 b861aa8a-0a05-4752-9462-6e7d64626cfd running
  • 向飞牛虚机添加核显,成功会回显Device attached successfully

    virsh attach-device b861aa8a-0a05-4752-9462-6e7d64626cfd igpu.xml
  • 进入飞牛虚机系统,查看核显设备是否识别,并安装intel-gpu-tools监控使用情况

    sudo apt update && sudo apt install intel-gpu-tools
  • 飞牛系统下识别核显正常,影视可以调用解码

    解码时使用intel_gpu_top命令可以查看到核显占用率上升,说明硬件调用成功

感谢

  • RR引导项目

  • Xpenology论坛

  • Jim在SA6400机型上的开发

Powered by Gridea