我很好奇在蘋果M1平臺上使用Rosetta 2與仿真運行x86-64二進制檔案的性能特點有多大差別,例如Docker Desktop目前使用QEMU的做法。
我明白為什么仿真的速度如此之慢,但在這個 Twitter 執行緒中已經詳細解釋了為什么 Rosetta 2 的速度如此之快。https://twitter.com/ErrataRob/status/1331735383193903104
該解釋的要點是,在通常情況下,arm和x86有相反的(不兼容的)記憶體尋址方案,需要大量的仿真開銷,但M1芯片通過硬體優化解決了這個問題,使其能夠使用兩種尋址方案訪問記憶體。實際上,當Rosetta 2仿真指令被運行時,會設定一個標志,讓處理器知道使用x86風格的尋址方案。
假設這種解釋是合理的(如果有人有比上述 Twitter 執行緒更好的報告來源,我將在評論中表示感謝,以便納入其中),那么從技術上講,這種優化是否可以用于完全的硬體仿真,例如運行 x86-64 Linux Docker 容器,或運行完整的 x86-64 Windows 桌面虛擬機a VMware Fusion/VirtualBox?或者,在這些應用場景中,獨立的作業系統層是否排除了能夠利用記憶體排序優化的可能性?
另外,這種處理器模式(標志或指令)是否被記錄下來并公布給第三方使用,還是只屬于蘋果公司的隱私?
uj5u.com熱心網友回復:
不是記憶體addressing,是記憶體ordering。即用于執行緒間同步的無鎖原子--在x86中,每個asm load/store分別是acquire/release。 (與真正的 x86 CPU 進行投機性的早期加載,因此在正常情況下,當單個執行緒在其他執行緒沒有寫入的記憶體上操作時,性能不會受到影響。)
M1 具有硬體支持。
M1 具有對這樣一種模式的硬體支持,以及一種弱序模式,以最有效地運行原生的 AArch64 代碼。 見
- https://singhkays.com/blog/apple-silicon-m1-black-magic/#performance-must-suck-when-trying-to-emulate-x86-on-arm-right
- https://www.reddit.com/r/hardware/comments/i0mido/apple_silicon_has_a_runtime_toggle_for_tso_to/ .
是的,https://github.com/saagarjha/TSOEnabler是用來切換該支持的開源軟體。 但它是一個內核擴展,而代碼簽名使得讓MacOS允許它變得很棘手,你必須簽署它或禁用簽名驗證或其他東西:
?據說,如果你建立并簽署了內核擴展(如果你沒有使用KEXT簽名證書,則禁用SIP),并將其拖入/Library/Extensions,你就應該能夠使用這個。一個對話框會出現,提示你在安全與隱私偏好窗格中啟用該擴展,你從那里允許它,然后重新啟動,它就會被安裝。(如果你沒有看到它,擴展的權限可能是錯誤的:試著用chown -R root:wheel。) 在實踐中,這可能會在很多方面出錯,我曾通過 "重置一切 "并在做完以下作業后嘗試安裝來獲得好運:
[......]請看鏈接中的步驟串列
。
因此,QEMU 的 x86 仿真可以使用與 Rosetta-2 的 x86 仿真相同的硬體支持,這一點是可信的。
而且正如你所說,主要的問題是蘋果為啟用HW模式提供公共API,這樣人們就不必手動安裝這個內核模塊;我相信大多數人都不想這樣做。 我對軟體的情況了解不多,我對CPU架構的細節更感興趣。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/320401.html
標籤:
