分页: 1 / 2

实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-08-03 6:36
dongping_xie
kvm在内核提供了vfio-vga功能后,也可以让虚拟机可以直接控制显卡了。那样虚拟机就会有(接近)原生的3d性能,也就是说可以玩任何的3d游戏。

其实这个功能xen早就提供了(pci-back模块好像是),只不过xen的dom0主机上不能装vmware的module,因为dom0就是在hypervisor上的,主机的内核并不是真正直接和硬件通信的。

前提:
* 两个显卡
* 两套键盘鼠标
* 支持iommu的主板和cpu
* 有一个非btrfs的分区

大概流程
* 更新kernel和驱动,有些驱动需要打补丁
* 启动时将需要passthrough的显卡绑定到pci-stub,以避免显卡驱动绑定显卡。
* 然后吧显卡绑定到vfio的驱动,就可以启动kvm了。

暂时坑还是很多,例如虚拟机不能重启,只能关机。虚拟机关机后,主机要sleep一次来reset显卡,否则重启虚拟就就会让主机的内核死掉。

详细教程在这里:
https://bbs.archlinux.org/viewtopic.php?id=162768

有什么问题我可以尝试一下解答。

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-08-03 12:09
天羽美羽
前排大力支持 :em11

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-08-03 13:34
zhw2101024
标记一下,等以后稳定了就可以抛弃virtualbox了 :em11

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-08-03 19:13
dongping_xie
zhw2101024 写了:标记一下,等以后稳定了就可以抛弃virtualbox了 :em11
其实过了一年,已经很稳定了。就是例如nvidia的patch还没有进入upstream,以及虚拟机reset显卡会有问题。我反正是买了ssd和键盘鼠标来玩这个了。

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-08-04 11:33
jobinson99
这个好,记下了。

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-09-06 13:25
嘧涅咓^_^
MS这个对显卡是有要求的...

前几天照那个帖子的方法试了,启动qemu时老是报 no iommu_group for device ~~~>_<~~~

明明intel_iommu=on, lsmod看vfio也一切正常,pcistub也表示绑定显卡了...

然后维基了一下...http://en.wikipedia.org/wiki/List_of_IO ... g_hardware,俺家显卡不在里面... :em20

PS 支持列表里面满满的A卡有木有,用A卡的孩纸你们是幸福的...

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-09-06 18:06
dongping_xie
嘧涅咓^_^ 写了:MS这个对显卡是有要求的...

前几天照那个帖子的方法试了,启动qemu时老是报 no iommu_group for device ~~~>_<~~~

明明intel_iommu=on, lsmod看vfio也一切正常,pcistub也表示绑定显卡了...

然后维基了一下...http://en.wikipedia.org/wiki/List_of_IO ... g_hardware,俺家显卡不在里面... :em20

PS 支持列表里面满满的A卡有木有,用A卡的孩纸你们是幸福的...
楼主有sudo么?我之前也有这个错误了,忘记是什么了,有可能是vfio-bind那步出错了。可以试试手动来看sysfs里面的显卡是否bind到了vfio驱动那里。


而且如果另一张卡是n卡,驱动要打个补丁的。 编译后33mb 放不上来。。

我的显卡也不在列表上。没有写上去而已。

代码: 全选

diff -Naur NVIDIA-Linux-x86_64-331.38-no-compat32/kernel/nv.c NVIDIA-Linux-x86_64-331.38-no-compat32/kernel/nv.c
--- kernel/nv.c	2014-01-09 03:49:24.000000000 +0100
+++ kernel/nv.c	2014-07-28 21:47:48.025541267 +0200
@@ -2993,12 +2993,12 @@
 
     pci_set_master(dev);
 
-#if defined(CONFIG_VGA_ARB)
-#if defined(VGA_DEFAULT_DEVICE)
-    vga_tryget(VGA_DEFAULT_DEVICE, VGA_RSRC_LEGACY_MASK);
-#endif
-    vga_set_legacy_decoding(dev, VGA_RSRC_NONE);
-#endif
+//#if defined(CONFIG_VGA_ARB)
+//#if defined(VGA_DEFAULT_DEVICE)
+//    vga_tryget(VGA_DEFAULT_DEVICE, VGA_RSRC_LEGACY_MASK);
+//#endif
+//    vga_set_legacy_decoding(dev, VGA_RSRC_NONE);
+//#endif
 
     if (NV_IS_GVI_DEVICE(nv))
     {
diff -Naur NVIDIA-Linux-x86_64-331.38-no-compat32/kernel/nv-linux.h NVIDIA-Linux-x86_64-331.38-no-compat32/kernel/nv-linux.h
--- kernel/nv-linux.h	2014-01-09 03:49:25.000000000 +0100
+++ kernel/nv-linux.h	2014-07-28 21:47:30.521541666 +0200
@@ -127,9 +127,9 @@
 #error "struct file_operations compile test likely failed!"
 #endif
 
-#if defined(CONFIG_VGA_ARB)
-#include <linux/vgaarb.h>
-#endif
+//#if defined(CONFIG_VGA_ARB)
+//#include <linux/vgaarb.h>
+//#endif
 
 #if defined(NV_VM_INSERT_PAGE_PRESENT)
 #include <linux/pagemap.h>

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-09-06 20:09
嘧涅咓^_^
dongping_xie 写了:
嘧涅咓^_^ 写了:MS这个对显卡是有要求的...

前几天照那个帖子的方法试了,启动qemu时老是报 no iommu_group for device ~~~>_<~~~

明明intel_iommu=on, lsmod看vfio也一切正常,pcistub也表示绑定显卡了...

然后维基了一下...http://en.wikipedia.org/wiki/List_of_IO ... g_hardware,俺家显卡不在里面... :em20

PS 支持列表里面满满的A卡有木有,用A卡的孩纸你们是幸福的...
楼主有sudo么?我之前也有这个错误了,忘记是什么了,有可能是vfio-bind那步出错了。可以试试手动来看sysfs里面的显卡是否bind到了vfio驱动那里。


而且如果另一张卡是n卡,驱动要打个补丁的。 编译后33mb 放不上来。。

我的显卡也不在列表上。没有写上去而已。

代码: 全选

diff -Naur NVIDIA-Linux-x86_64-331.38-no-compat32/kernel/nv.c NVIDIA-Linux-x86_64-331.38-no-compat32/kernel/nv.c
--- kernel/nv.c	2014-01-09 03:49:24.000000000 +0100
+++ kernel/nv.c	2014-07-28 21:47:48.025541267 +0200
@@ -2993,12 +2993,12 @@
 
     pci_set_master(dev);
 
-#if defined(CONFIG_VGA_ARB)
-#if defined(VGA_DEFAULT_DEVICE)
-    vga_tryget(VGA_DEFAULT_DEVICE, VGA_RSRC_LEGACY_MASK);
-#endif
-    vga_set_legacy_decoding(dev, VGA_RSRC_NONE);
-#endif
+//#if defined(CONFIG_VGA_ARB)
+//#if defined(VGA_DEFAULT_DEVICE)
+//    vga_tryget(VGA_DEFAULT_DEVICE, VGA_RSRC_LEGACY_MASK);
+//#endif
+//    vga_set_legacy_decoding(dev, VGA_RSRC_NONE);
+//#endif
 
     if (NV_IS_GVI_DEVICE(nv))
     {
diff -Naur NVIDIA-Linux-x86_64-331.38-no-compat32/kernel/nv-linux.h NVIDIA-Linux-x86_64-331.38-no-compat32/kernel/nv-linux.h
--- kernel/nv-linux.h	2014-01-09 03:49:25.000000000 +0100
+++ kernel/nv-linux.h	2014-07-28 21:47:30.521541666 +0200
@@ -127,9 +127,9 @@
 #error "struct file_operations compile test likely failed!"
 #endif
 
-#if defined(CONFIG_VGA_ARB)
-#include <linux/vgaarb.h>
-#endif
+//#if defined(CONFIG_VGA_ARB)
+//#include <linux/vgaarb.h>
+//#endif
 
 #if defined(NV_VM_INSERT_PAGE_PRESENT)
 #include <linux/pagemap.h>
sudo有的,不过patch没打,俺现在再试试看吧

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-09-07 20:13
dongping_xie
嘧涅咓^_^ 写了:
sudo有的,不过patch没打,俺现在再试试看吧
还有就是i家的芯片组好像在grub启动那里要加上什么 unsafe_interrupt 之类的,我是a家的,所以没有试过。

然后还有一点就是显卡不只有一个设备的(显卡是一个设备,显卡上的声卡又是一个),同一组的两个设备必定都要Bind到pcistub上的,然后再同时bind到vfio上。

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-09-07 20:22
自由建客
独占显卡吗?要是双显卡的机器是不是可只分配一块呢?

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-09-08 16:38
langyxxl
等再成熟点就能了。。
我现在APU+A卡独显,貌似没法进行

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-09-10 13:45
嘧涅咓^_^
嘧涅咓^_^ 写了:
dongping_xie 写了:
嘧涅咓^_^ 写了:MS这个对显卡是有要求的...

前几天照那个帖子的方法试了,启动qemu时老是报 no iommu_group for device ~~~>_<~~~

明明intel_iommu=on, lsmod看vfio也一切正常,pcistub也表示绑定显卡了...

然后维基了一下...http://en.wikipedia.org/wiki/List_of_IO ... g_hardware,俺家显卡不在里面... :em20

PS 支持列表里面满满的A卡有木有,用A卡的孩纸你们是幸福的...
楼主有sudo么?我之前也有这个错误了,忘记是什么了,有可能是vfio-bind那步出错了。可以试试手动来看sysfs里面的显卡是否bind到了vfio驱动那里。


而且如果另一张卡是n卡,驱动要打个补丁的。 编译后33mb 放不上来。。

我的显卡也不在列表上。没有写上去而已。

代码: 全选

diff -Naur NVIDIA-Linux-x86_64-331.38-no-compat32/kernel/nv.c NVIDIA-Linux-x86_64-331.38-no-compat32/kernel/nv.c
--- kernel/nv.c	2014-01-09 03:49:24.000000000 +0100
+++ kernel/nv.c	2014-07-28 21:47:48.025541267 +0200
@@ -2993,12 +2993,12 @@
 
     pci_set_master(dev);
 
-#if defined(CONFIG_VGA_ARB)
-#if defined(VGA_DEFAULT_DEVICE)
-    vga_tryget(VGA_DEFAULT_DEVICE, VGA_RSRC_LEGACY_MASK);
-#endif
-    vga_set_legacy_decoding(dev, VGA_RSRC_NONE);
-#endif
+//#if defined(CONFIG_VGA_ARB)
+//#if defined(VGA_DEFAULT_DEVICE)
+//    vga_tryget(VGA_DEFAULT_DEVICE, VGA_RSRC_LEGACY_MASK);
+//#endif
+//    vga_set_legacy_decoding(dev, VGA_RSRC_NONE);
+//#endif
 
     if (NV_IS_GVI_DEVICE(nv))
     {
diff -Naur NVIDIA-Linux-x86_64-331.38-no-compat32/kernel/nv-linux.h NVIDIA-Linux-x86_64-331.38-no-compat32/kernel/nv-linux.h
--- kernel/nv-linux.h	2014-01-09 03:49:25.000000000 +0100
+++ kernel/nv-linux.h	2014-07-28 21:47:30.521541666 +0200
@@ -127,9 +127,9 @@
 #error "struct file_operations compile test likely failed!"
 #endif
 
-#if defined(CONFIG_VGA_ARB)
-#include <linux/vgaarb.h>
-#endif
+//#if defined(CONFIG_VGA_ARB)
+//#include <linux/vgaarb.h>
+//#endif
 
 #if defined(NV_VM_INSERT_PAGE_PRESENT)
 #include <linux/pagemap.h>
sudo有的,不过patch没打,俺现在再试试看吧

N卡patch打了,unsafe_interrupt也加了,还是不行 :em20

网上转了一圈,貌似还是俺显卡不支持...

PS 俺配置:i7-4700MQ+GT750M

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-09-10 19:05
langyxxl
笔记本不行,听别人说在同一个桥上,没法给虚拟机的吧

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-10-06 20:55
lanni654321
这个不错
嘿嘿 支持……

Re: 实测,用qemu-kvm直接控制显卡获得接近原生的3D性能,终于可以玩游戏了

发表于 : 2014-11-30 19:07
jinhongchao@gmail.com
两个显卡就没有意思了