Application Note: Apple M1 和虚拟机

2020-11-26 22:04:14 +08:00
 imbushuo

都在说各种 M1 的使用体验,我来说点别的(这机器拿到之后本来就打算是纯折腾用的)。本文基本上就是个 Application Note,供打算写 VM 的人做参考。

macOS on Apple Silicon 有两个虚拟化的框架,一个是 high-level 的 (Virtualization.Framework),一个是 low-level 的 (Hypervisor.Framework)。前者暴露了一系列 VirtIO 设备和经过包装的 Bootloader,后者提供了细粒度的虚拟硬件控制,需要自己处理 vCPU vmexit/interrupt/timer 和内存的映射。

在 Apple Silicon 上调用这两个框架需要合适的 entitlements (com.apple.security.hypervisor,也有可能需要 com.apple.vm.networking)

Virtualization.Framework

这里有一个非常简单的 SimpleVM 的实现。

Virtualization.Framework 的使用方法非常简单:

Virtualization.Framework 的虚拟了以下 vCPU 和外设:

Virtualization.Framework 的私有类里面还暗示了 ARM PL011 UART, 16550 UART, FrameBuffer, Virtual USB, EFI Bootloader 之类的存在,但是目前它们是坏的,不要尝试了。

Red Hat 的人跟我说他们发现 Virtualization.Framework 存在一些潜在的内存问题,所以可能它还需要一段时间来稳定一下

Hypervisor.Framework

提供了细粒度的硬件控制。一些细节如下:

一个 Hypervisor.Framework 使用的玩具例子可以看这里: https://gist.github.com/imbushuo/51b09e61ecd7b7ac063853ad65cedf34

Misc

Qemu + HVF 支持有人在做了,另外 Windows 早就有人偷偷跑过了

5209 次点击
所在节点    macOS
15 条回复
chouch0u
2020-11-26 22:14:41 +08:00
围观大佬。
minamike
2020-11-26 22:18:24 +08:00
Misc 里面说的是 UTM 吗
imbushuo
2020-11-26 22:19:44 +08:00
Errata: `eret_el1` -> `elr_el2`
imbushuo
2020-11-26 22:20:05 +08:00
@minamike 不是 UTM 那种玩具(
zckevin
2020-11-26 22:21:12 +08:00
围观学习
minamike
2020-11-26 22:28:40 +08:00
@imbushuo 那看来 PD 、VM 之类的兼容 M1 指日可待了,期待一下
daveh
2020-11-26 22:30:49 +08:00
@imbushuo UTM 就是 qemu 。
HandSonic
2020-11-27 00:33:18 +08:00
围观大佬
lightingtime
2020-11-27 00:55:56 +08:00
具备大佬这样的知识框架应该如果学习。
irytu
2020-11-27 00:57:23 +08:00
@imbushuo UTM 的 backend qemu 可不是玩具…
imbushuo
2020-11-27 03:02:34 +08:00
@irytu I mean TCG 模式下的确就是个玩具(
qemu + hvf 有人在做了,包括我自己
vk42
2020-11-27 05:02:22 +08:00
@imbushuo TCG 和 HVF 定位是不同的啊,HVF 对 MacOS 相当于 Linux 的 KVM,不懂为啥要黑 TCG……
hyln9
2020-11-27 06:54:50 +08:00
lqf96
2020-11-27 09:29:26 +08:00
@hyln9 这个人是厉害,听说都把 Windows on ARM 跑起来了...
https://twitter.com/_AlexGraf/status/1332081983879569415
feast
2020-11-27 14:01:33 +08:00
@lqf96 WOA 本来就不是难题,而且虚拟机的驱动更加好处理,然而 WOA 是没有意义的,大部分人需要的是 Win x86

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/729648

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX