为 Hyper-V 上的 Linux VM 配置 3D 加速
WSL2 默认已经使用了 GPU 半虚拟化(GPU-PV)来进行 3D 加速,GPU-PV 是 RemoteFX 的替代品,但是 GPU-PV 在 Hyper-V 虚拟机启用却比较复杂,Windows 的教程已经有人写了,所以分享下 Hyper-V Linux 虚拟机配置 GPU-PV 的教程
准备
- 一个 Hyper-V Linux 虚拟机,内核版本是 5.15 或 6.0 或 6.1,内核头已安装
- 一个 WSL 2 虚拟机(提取驱动用,提取后可删除,尽量和 Hyper-V 虚拟机使用相同的操作系统)
- Windows 10 最新版本或 Windows 11,x86/x86-64 架构(似乎 ARM 做不到,我没测试)
测试环境
我会使用我喜欢的环境进行测试,如果你正在使用相同的环境,应该可以直接照抄我的命令,如果你正在使用其他发行版或其他硬件,操作步骤可能会有差别
- Windows 11 22H2
- Arch Linux VM,内核:linux-lts
- NVIDIA GeForce RTX 4070 Ti
HV 虚拟机设置
1 - 关闭动态内存
开启动态内存后,GPU-PV 不能正常工作,所以直接为虚拟机设置足够的内存和 swap 并禁用动态内存,这一步骤应该比较简单
2 - 添加 GPU-PV 硬件
首先确保虚拟机已关机,然后按下 Win+X(或右键开始菜单),选择任意一个:
- 命令提示符(管理员)
- PowerShell(管理员)
- 终端(管理员)
在弹出的窗口中输入这三行命令,每一行结束后,都请按 Enter 键
- pwsh
1 | pwsh |
其中 <vmname>
替换为你虚拟机的名称。
完成此步骤后,打开虚拟机并执行 lspci
命令,检查 GPU-PV 设备是否已经成功安装
如果输出中包含 b98b:00:00.0 3D controller: Microsoft Corporation Basic Render Driver
,则说明已正确安装设备
驱动安装
3 - WSL 驱动
进入 WSL 的终端,运行命令:
- sh
1 | tar -cvf - /usr/lib/wsl | zstd -T0 > drivers.tzst |
将 drivers.tzst 拷贝至 Hyper-V 虚拟机根目录(使用任何你喜欢的方式),然后解压:
- sh
1 | unzstd drivers.tzst |
然后复制驱动到 /lib:
- sh
1 | cp /usr/lib/wsl/lib/* /usr/lib |
如果是 NVIDIA 显卡,还需要额外安装 nvidia-smi
:
- sh
1 | cp /usr/lib/wsl/lib/nvidia-smi /usr/bin |
4 - 安装 DirectX 驱动
GPU-PV Linux 使用的 DirectX 驱动名为 dxgkrnl
,直接使用 makepkg 进行安装:
- sh
1 | cd /tmp |
- 仅适用于 6.0 或 6.1 内核,如果是 5.15 内核,可以直接尝试
yay -Sy dxgkrnl-dkms-git
其他内核你需要自己搬驱动
5 - 安装 mesa
- sh
1 | pacman -Sy mesa mesa-utils |
6 - 检查是否成功安装
完成上面五个步骤,需要先重启系统
- sh
1 | ls /dev/dxg -l |
如果 /dev/dxg
存在,则 DX 驱动已正常安装
- txt
1 | crw-rw-rw- 1 root root 10, 119 Aug 26 18:24 /dev/dxg |
7 - 检查 NVIDIA 显卡信息和 CUDA 信息
运行 nvidia-smi
: