高中毕业要换新电脑了,装linux然后kvm跑windows虚拟机有没有搞头?
我两种方案都试过,Linux虚拟机跑Windows,和Windows虚拟机跑Linux。
先说简单的,Windows虚拟机跑Linux,又有两种方案,WSL和VMware。VirtualBox龟壳不上心开发,VMware又免费了,不推荐VirtualBox。
WSL最大的问题是没有完整的Linux GUI体系,也不能装到物理硬盘,只能放到NTFS里。WSL的GUI原理是把Windows宿主机的Dx驱动接口暴露给Linux虚拟机,然后Linux用Mesa的d3d12/dozen把OpenGL和Vulkan转成Dx12,然后再由编译到Linux 动态库的Windows用户模式显卡驱动将Dx12编译成可以由WDDM提交并由GPU执行的机器码。性能差,功能不全不说,厂商的驱动质量参差不齐,我就遇到过AMD和Nvidia两个GPU的驱动都段错误的问题,也不知道是Windows的Bug还是厂商的问题。当然,不用Linux的GUI程序,WSL倒是能用。

VMware的GUI问题也不少,首先是没有Vulkan支持,然后虽然有drm,但是很多硬件功能没有,很多时候Wayland桌面工作不正常,一些程序也打不开(比如alacritty),X11倒是能用。
Linux跑Windows根据技术路线的不同又有很多区别。最简单的virtio全家桶,能装上一个没有3D加速的虚拟机,浏览器引擎都是swiftshader用CPU算,很卡。
进阶一点的,穿透nvme硬盘、半边的USB接口和独立显卡,Linux用核显、Type-C外接显示器、笔记本键盘、触控板,虚拟机的Windows用外接键鼠、独立的nvme硬盘、独显和独显连接的HDMI/DP显示器,显示器/USB声卡的音频输出,再伪装一下CPU的cpuid、ACPI伪造一个风扇、电池,改一下BIOS里的名字,基本上和单独的电脑没什么区别了,非腾讯系的网游也不会报错,N卡也不会报43 code error(假电池非常重要,否则台式机配移动版显卡很容易报错)。用腾讯ACE的竞技网游不推荐,存在封号10年的风险。
但是这个路线需要外接显示器,而且主板的IOMMU组和显示、USB口必须划分的合理,否则就会导致没有独立USB口,没有核显输出口或者没有独显输出口。这时候就需要模拟鼠标、模拟显示屏。模拟键鼠的问题是略有延迟,而且和Linux共享输入,不能独立操作。
虚拟声卡(Scream)和虚拟屏幕(Looking Glass)这些基于IVSHMEM的技术完全不推荐, 延迟也就比串流低一点,稳定性和实时性都远不如原生方案。
也可以反过来,部分机器独显直连开了之后核显还在,而且Type-C的输出仍然走核显,此时可以核显给Windows,独显给Linux。虽然Nvidia的闭源驱动依然很恶心,但是在Linux下游戏性能和Windows没有什么大的损失,甚至有时更有优势。
这里AMD核显更有优势,因为Intel核显通常IOMMU分组比较复杂,不能单独穿透。但是Intel核显支持SR-IOV,可以共享使用(虽然虚拟的GPU没有物理接口,需要走虚拟屏幕显示)。
如果是非游戏用途,winapps这种基于RDP的虚拟显示功能也可以一用,这样就不需要外接显示器了。
这里推荐7945HX/8945HX或者9955HX3D,因为有两个CCD,天生适合划分一半给虚拟机,然后硬隔离,虚拟机独占的CPU完全不会被宿主机内核调度。
