本文来自依云's Blog,转载请注明。
准备 GVT-g
把 kvmgt vfio-iommu-type1 vfio-mdev 这仨加到 /etc/mkinitcpio.conf
的 MODULES
数组里去。mkinitcpio -P
重新生成一下 initramfs。
添加内核参数 i915.enable_gvt=1
。比如是 grub 引导就去改 /etc/default/grub
里的 GRUB_CMDLINE_LINUX
变量,然后 grub-mkconfig ...
。
去把 /etc/systemd/system.conf
里的 DefaultLimitMEMLOCK
给改了。比如 DefaultLimitMEMLOCK=65536:1073741824
。
重启。
这个时候应该已经有 /sys/devices/pciXXXX:XX/XXXX:XXXX.X/mdev_supported_types
这个目录了。里边有好几个选项呢。选择一下合适的(查看 description
文件),然后往里边的 create
文件里写一个 UUID 就创建了。
启动 KVM 虚拟机
呃,如果你还没有磁盘镜像就自己 qemu-img 创建一个,然后装机。如果你有别的虚拟机的,也可以用 qemu-img 去转格式。
另外准备一下网络。我早就有个网桥了,所以直接用它了。在 /etc/qemu/bridge.conf
里写一句 allow br0
不然不给用的,毕竟我是普通用户权限而网络接口是要 root 权限操作的,得明确允许一下。
我尽可能地使用了 virtio,据说性能好(VirtualBox 也支持一部分了呢)。如果用已有的虚拟机系统但以前没用过 virtio 的话,记得用 fallback 那个 initramfs 启动,然后进系统之后重新生成一个。
我给分配了四个逻辑 CPU 核,4G 内存。VGA 要关掉,不然两个显卡用起来麻烦。为了避免部分内容显示到别处去(如果关了 VGA 的话就看不到,否则能在默认的那个上看到),要加上 ramfb=on,driver=vfio-pci-nohotplug
选项。
声音当然是要的。添加个 PulseAudio 后端,一张 HDA 声卡。我不懂声卡型号所以找了个顺眼的,能用就好。
合起来是这样子的(那两个省略号,一个是磁盘镜像路径,一个是创建 vGPU 用的 UUID):
#!/bin/bash -e ulimit -l 1024000 exec qemu-system-x86_64 -enable-kvm \ -name "ArchKDE" \ -cpu host -smp 4 \ -m 4G \ -drive file=/.../ArchLinuxKDE.qcow2,if=virtio \ -netdev bridge,id=eth0,br=br0 \ -device virtio-net,netdev=eth0 \ -device vfio-pci,sysfsdev=/sys/bus/mdev/devices/...,display=on,x-igd-opregion=on,ramfb=on,driver=vfio-pci-nohotplug \ -vga none \ -display gtk,gl=on \ -audiodev pa,id=pa0,server=/run/user/$UID/pulse/native -device intel-hda -device hda-output,audiodev=pa0 \ "$@"
如果你使用 GVT-g 显卡的时候整个系统都卡卡卡的话,去看一下宿主的内核日志,是不是有 vfio_pin_page_external: Task qemu-system-x86 (257364) RLIMIT_MEMLOCK (104857600) exceeded
这样的提示,然后去把 RLIMIT_MEMLOCK 给调大,大到它不再报这个错为止。我最后给了1000M才终于不报错地把 KDE 给跑起来了(默认是64K)。
当然如果你没有 GVT-g 支持的话,去掉那行配置,然后 -vga virtio
也能用。
May 08, 2020 10:50:32 AM
就因为这个功能. 家里的小服务器一直用i3(有ecc)...不能切换到amd.
Jun 05, 2020 11:22:36 AM
依云创建 vGPU 之后宿主机可以正常休眠 (suspend) 吗?
我这里必须要 remove 掉才能休眠,不然就会卡死,sysrq
REISUB 都不响应。
Jun 05, 2020 11:27:29 AM
可以的。不过群里有其他人说遇到了问题,可能是 CPU 或者内核不同吧。
Jun 05, 2020 02:10:04 PM
我现在内核用的 5.6.16,处理器是 i7-6700hq,
搜了些资料,可能是关键字选的不对,一直没什么收获。
内核日志最后一条是 kernel: PM: suspend entry (deep),
有什么方法可以排查问题所在吗?
Jun 05, 2020 04:38:26 PM
你试试 linux-lts 或者 linux-lily?
Jun 08, 2020 12:49:24 PM
谢谢你的建议~
因为用的不是 arch 所以只试了下 lts 版,还是同样的问题,不过因为是自编译的内核,也可能是配置项有问题,我再找时间对比下好了
Mar 10, 2022 01:10:52 AM
一、
我这里,使用 GVT-g 的 Win10 虚拟机,无法正常的睡眠、休眠。测试了很多不同的虚拟机配置都不行。Linux 虚拟机可以正常休眠,但是无法睡眠。
搜索了Google以及 gvt-g 的 Github issues,似乎没有什么结果。
你们的能否正常睡眠、休眠?如果能的话,是啥 CPU?啥内核版本?已经 XML 配置是怎样的?
二、
似乎10代CPU(comet lake)是最后一代支持 gvt-g,再之后,intel已经废弃这个功能了。有没有试过10代笔记本(ice lake)是否支持gvt-g?
intel 独显 DG1 是否支持 gvt-g?
从11代开始,Intel说是用SRIOV替代GVT-g,这个目前Linux KVM/QEMU支持如何?
Mar 10, 2022 11:00:02 AM
我记得我在使用 gvt-g 的时候睡眠没有问题,其它没有用过。CPU 是 i7-7700HQ。
我记得目前不支持11代的。
Mar 20, 2022 11:03:51 PM
有用过gvt-g windows 10 虚拟机吗?睡眠、休眠功能都能正常支持码?
Mar 21, 2022 12:53:57 PM
有用过但是没睡眠/休眠过。