為什麼 macOS 上有流暢的 Windows 虛擬機,後者卻沒有流暢的 macOS 虛擬機?

相關問題:

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硬體上才是被許可的,


推薦閱讀:

為什麼那麼多人都覺得Win7好用?
學校提供了正版windows10安裝包,而我已經安裝了盜版的windows10請問怎麼更換?
win10如何把所有分區的磁碟合併?
Win 10 C 盤突然爆滿,怎麼清理?
8月底買的聯想小新700,到現在已經藍屏4次了,這到底是怎麼回事?請問有沒有什麼辦法可以解決?

TAG:Mac | macOS | MicrosoftWindows | 虛擬機 | Windows10 |