GPU Passthrough in Bhyve (2)

接着昨天继续折腾,目前并没有什么进展…… Windows 这边还是错误43。经常看某些视频的可能知道普通情况是显卡坏了,然而我这个显卡直接用是没问题的,所以还是 passthrough 有啥问题。 首先,说 NVidia 从某个版本开始,在驱动里面做了限制。如果检测到 VM,那就报43。围绕这个有很多办法,比如 KVM 那边可以设置一个 kvm=off (或者 libvirt 里面 hidden=on),隐藏 hypervisor 的存在。我看了眼那个 patch,照着改了几次 bhyve 里面的 CPUID 处理,另外还改了系统的 vendor 之类,然而依然没用。后来看见还有另一个办法:直接 patch 掉驱动里面的检测代码。我 patch 了一波,结果还是 43,那看来根本就不是这个检测的问题了…… 那看来应该还是某种硬件上的问题。鉴于 Nouveau 跑得好好的,看来是某些不是那么关键的东西没有模拟对。Linux 虚拟机里面一开始有一堆错误,主要是 PCI BAR 分配的问题。 Bhyve 的 PCI BAR 分配很基础,就是从 0xC0000000 开始一路往上填。对于64位的 BAR,从64位的基础地址开始填。然而 Bhyve 的64位基础地址太高,所以其实搞下来一点就行。我为了尽可能模拟真实环境(我看我真机上64位 BAR 也是在32位地址空间里),hack 了一波分配逻辑,把显卡最大的那个64位 BAR 给塞到了 0xC0000000 – 0xD0000000,然后其他的直接从0xD0000000开始填。这么搞完之后,这部分错误就没有了。另一部分错误是因为 …

Continue reading ‘GPU Passthrough in Bhyve (2)’ »