相关问题:

Windows 10 自带 WSL,那么 Linux 什么时候可以自带 Windows 子系统??

www.zhihu.com图标


其实很简单,Apple不授权第三方开发提供3D加速功能的显示驱动程序,也不放出相关的DDK。这样虚拟机下就只能用CPU模拟渲染界面,在几乎所有现代操作系统都需要利用3D API渲染界面的现在,能不卡顿吗?


虚拟化主要有几个形式:

  • 软体虚拟化: 通过用户态的软体, 比如说 qemu 就是一个系列的软体虚拟化代表, 去虚拟化一定的硬体功能, 比如常见的网卡 e1000, SATA/IDE (块设备)控制器, USB 控制器, 标准输入设备, 音频设备, 2D显卡(FrameBuffer)这些 IO 设备通常都是通过这种模式实现的. 以及就是 CPU 虚拟化基本上不通过软体实现了, 除非需要跨架构或者用于实验, 比如基于 js 的一些虚拟机, 可以在浏览器内运行.
    • 半虚拟化: 相比于纯粹的软体虚拟化, 半虚拟化会更加利用宿主操作系统的功能, 比如 Windows 的 remoteFX+RDP 就能带来良好的标准输入/音频/画面输出性能, 以及把宿主的 D3D API 穿透进去. Linux 的代表就是 virtio, 包含了输入输出设备, 块设备驱动和 API 穿透(OpenGL).
  • PCIe 直通: 通过平台支持 IOMMU, 将 PCIe 的 MMIO 地址空间映射到虚拟机内, 这样虚拟机的内核就能直接接触到物理硬体, 这种方式性能最高.
    • SR-IOV: PCIe 直通通常只能让虚拟机独占一个硬体, 而 SR-IOV 就能让一个设备虚拟的物理功能(pf)出多个虚拟功能(vf), 所以再借助 IOMMU 就能把 vf 接进虚拟机, 获取原生级别的性能.

macOS/Windows 都是常见的桌面操作系统. 评价一个桌面操作系统的流畅度主要有以下指标:

  1. CPU 性能
  2. IO 性能
  3. 图形刷新率
  4. 输入延迟

一般来说 1/2 两点上, macOS/Windows 都是半斤八两, KVM 的话在 Windows 可以 passthrough, 而 macOS 就必须得开 feature set, 会有一定损失, 但是由于可以启用到 Penryn (但是实际上可以开启 AVX 这类特性)从而在 macOS 强制关闭 PTI, 一定程度上能够改善系统性能.

图形刷新率主要就是依赖显卡驱动. macOS 上的桌面虚拟化平台主要就是 Parallel Desktop/VMware Fusion/VBox. PD 最贵, 但是他家的显卡 API 虚拟化性能最好, VMware 的虚拟化性能马马虎虎过得去, VBox 就比较垃圾一点. 不过多多少少都有 3D 加速. 外加 Windows 桌面本身系统没有那么吃 GPU, 哪怕没有 3D 加速依旧能用.

Windows 要虚拟化 macOS 也只能利用 VMware/VBox 的 VESA 2D 驱动, 换句话说完全没有 3D 加速, 而且 macOS 又是一个桌面很吃 GPU 的系统, 卡爆完全能够理解.

输入延迟方面 PD 这样的虚拟机做了很多深入的优化, 我记得 PD 是有个内核驱动获取 raw input 然后直接通进 windows 以改善性能. 所以能够勉强打游戏.

Windows 的话只有 VMware/VBox 的软体虚拟化, 而且还是没有深入调优的那种, 只能凑合日常使用.


当然 Hyper-V 本身支持 SR-IOV/PCIe 直通, 虽然不如 KVM/ESXi 那套直观. 然而如何虚拟 macOS 的那个 OSK string 就是一个问题, 毕竟 Hyper-V 官方的那个平台不支持. 虽然说你可以通过 VMware/VBOX 换为 Hyper-V 的后端, 但是没人试过在这种情况下直通.

所以要流畅虚拟机, 就搞个 RX470, 最好有独立的 USB 控制器(ASMedia 就行, 或者把宿主的 Intel XHCI 控制器直接通进去), 这样就有流畅的 macOS 虚拟机了.

参见

Luv Letter:将双系统塞入A4主机:OSX-KVM 显卡直通教程?

zhuanlan.zhihu.com图标


其实Linux下真的可以有流畅的mac虚拟机,我用kvm+pci passthrough跑macos跑的可欢了,不比物理机慢多少,大型3d游戏一样跑。

具体步骤参见 https://github.com/kholia/OSX-KVM


苹果从法律上禁止把 MACos 装在非苹果产的硬体上,你认为软体公司会冒著这个风险去开发虚拟化 MACos 的优化方案?

(我有点好奇他们用什么机器去 build MACos 的……总不能真的用一大堆 ImAC pRO 吧)


直接原因是没有厂商开发,就算在virtualbox或者vmware运行了虚拟机也会因为没有显卡支持而特别卡。那为什么连linux都会给支持图形加速而macOS不行呢?难道是喜欢用linux图形界面工作的用户很多,比macOS的多?

根本原因还是macOS只被允许在Apple的硬体上运行的,在非苹果硬体上跑macOS是违反EULA的。因此各路厂商是不敢公开支持macOS虚拟机的

按照EULA,如果你在虚拟机里运行macOS,也只有在Apple硬体上才是被许可的,


推荐阅读:
相关文章