Ivy Bridge 平台 PVE 直通 RX550 显卡
最近有些不想把笔记本带来带去的,试了一下拿华硕 QM1 棒子日常使用。
很好,确实促进血液循环。
都是 Z3735F,为什么板子至少能带动百合语,棒子跑个 Lubuntu 都吃力
刚好网络出口从以前的双线(联通+校园网)切换到校园网单线(谁叫它便宜呢),我把主路由又换回了锐捷 X32 Pro 硬路由。加上从 DN42 退坑,我对网络的发烧程度显著降低,对插在唯一 PCIe X16 接口上的四口网卡没有了需求。
遂决定撤下该网卡,换上吃灰一年多的 RX550 显卡,推掉以前的 ESXi 6.7,配置了一台 All in One。
设备配置
先贴上我这台 HomeServer 的配置:
主板 | 联想 ThinkCentre M92p |
---|---|
CPU | 8 x Intel(R) Xeon(R) CPU E3-1230 V2 @ 3.30GHz |
RAM | 24GB DDR3 |
显卡 | Radeon RX550 Lexa Pro |
有一块闲置的 PCIe X1 NVMe 转接板,就把一块闲置的 NVMe 硬盘接了上去。
机器配置
虚拟化设置
在 BIOS 设置中启用 VT-x。由于需要直通 PCIe 设备,还需启用 VT-d。
启用 CSM
该机器使用 UEFI 引导无法使用显卡直通,遂在 BIOS 中启用 CSM。
安装 PVE
PVE 默认强制使用 GPT 分区表、UEFI 引导方式,导致无法通过 Legacy 方式启动。
使用 PVE ISO 的 Rescue 模式启动到安装好的 PVE 环境,使用 fdisk 命令将分区表转换为 MBR、删除头部的 EFI 分区(分区号 1、2),之后使用 grub-install 安装 Legacy 版 Grub,即可正常通过 Legacy 方式启动。
导出显卡 ROM
首先启动到使用 Legacy 方式启动的 WinPE,然后用 amdvbflash 导出显卡 ROM,大小为 512K:
amdvbflash -s 0 vbios.rom
将 vbios.rom
保存到 PVE 的 /usr/share/kvm
目录下。
启用 vfio
IOMMU
编辑 Grub 配置文件 /etc/default/grub
,添加以下参数:
1 | GRUB_CMDLINE_LINUX_DEFAULT="quiet intel_iommu=on iommu=pt initcall_blacklist=sysfb_init" |
我的 PVE 版本是 7.4,内核版本为 5.15.102-1。如果使用的是 5.15 之前的 Linux 内核,可能需要将
initcall_blacklist=sysfb_init
换成video=vesafb:off video=efifb:off
。
执行 update-grub
命令以使更改生效。
内核模块
在 /etc/modules
中添加以下模块:
1 | vfio |
显卡直通
到这里为止,除了显卡的任何 PCIe 设备都可以直通了。如果需要直通显卡,需要屏蔽宿主机的显卡驱动,并将显卡的使用权转交给 vfio。
先查看一下需要直通的显卡:
1 | root@pve:~# lspci -knn | grep -i -A 2 vga |
其中 01:00.0
代表组名, 1002:699f
代表厂商 ID 和设备 ID。
然后查看组内的所有设备:
1 | root@pve:~# lspci -n -s 01:00 |
配置显卡直通:
1 | echo "options vfio-pci ids=1002:699f,1002:aae0 disable_vga=1" > /etc/modprobe.d/vfio.conf |
重启宿主机,如果屏幕输出在显示登录提示之前卡住不动,PVE WebUI 可以访问,说明直通成功。
虚拟机配置
虚拟机配置要点:
- BIOS 必须使用 OVMF(UEFI)
- 处理器配置为
cpu: host, hidden=1, flags=+pcid
- 机型为 q35
- 添加 PCI 设备,配置如下:
- 手动修改配置文件,在
hostpci0
后指定 ROM 文件,即在末尾追加,romfile=vbios.rom
- 禁用 KVM 自带虚拟显卡,即将显示设置为 none。
至此显卡直通已经完成。
- 标题: Ivy Bridge 平台 PVE 直通 RX550 显卡
- 作者: Hanako
- 创建于 : 2023-06-21 08:00:00
- 更新于 : 2023-10-22 22:49:01
- 链接: https://hanako.me/gpu_passthrough.html
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。