使用 qemu/utm 在 Apple M1 上运行 amd64 Linux
M1 |苹果硅 | macOS | x86_64 | amd64 | qem | utm | Linux 虚拟机
哪个 qemu CPU 设置提供了最好的性能。

摘要 (TL;DR)
不是最好的体验——如果你只需要 Linux,你最好使用 arm64 版本——但它工作得很好。但是,它比本机或 arm64 仿真要慢得多。
更新 (MacBook Pro 16" M1)
没有显着差异。我的规格:10 个 CPU 内核,32GB RAM。但是sysbench配置为使用2核,所以并没有什么区别。
先决条件
开始之前安装qemu和utm。后者不是必需的,但会使生活更轻松。这假设您已经安装了 Homebrew。
brew install qemu utm
设置虚拟机
启动utm并“创建一个新的虚拟机”,给它起任何你想要的名字。
转到驱动器并创建至少 10GB 大小的驱动器,更好。然后import disk从您选择的发行版中添加一个可引导的 ISO。
系统设置
-
架构:
x86_64 -
系统:
Standard PC (Q35....) (q35) -
内存:
2048MB以上(我用的是2048MB) -
高级设置:
-
CPU:
qemu64vs.Skylake-Clientvs. ... -
CPU Cores:
4以上(我用了8个) -
Force Multicore:✅(这会显着提高性能)
更新:使用新的utmUI,请执行以下步骤:
-
创建虚拟机 → 模拟
-
选择“Linux”
-
浏览Linux安装ISO
-
... 那么同上:架构,系统,...
-
完成后,再次进入VM的设置:进入
System并检查Force Multicore:✅
安装操作系统
从 ISO 映像启动后,在磁盘上安装操作系统。完成后,停止机器并从驱动器中删除 ISO 并启动新 VM。你已经准备好玩它了。 (提示:安装会比你想象的慢很多,所以要非常耐心。最好选择qemu64作为安装的CPU类型)。
基准测试
-
MacBook Air M1,16GB 内存
-
qemu + utm
-
访客系统:Ubuntu 20.04 Desktop(最小安装)
-
sysbench cpu --threads=2 run
CPU Skylake-Client(默认)
# cpu u003d Skylake 客户端
~$ sysbench 1.0.18(使用系统 LuaJIT 2.1.0-beta3)
[...]CPU 速度:
每秒事件数:507.37 一般统计:
总时间:10.0039s
事件总数:5080延迟(毫秒):
分钟:3.76
平均:3.93
最大值:5.82
第 95 个百分位:4.18
sum: 19962.08 线程公平性:
事件(平均/标准差):2540.0000/5.00
执行时间(平均/标准差):9.9810/0.00
CPU Penryn
# cpu u003d 彭林
~$ sysbench cpu --threadsu003d2 运行
sysbench 1.0.18(使用系统 LuaJIT 2.1.0-beta3)
[...]CPU 速度:
每秒事件数:1455.74 一般统计:
总时间:10.0032s
事件总数:14571延迟(毫秒):
分钟:1.25
平均:1.37
最大值:52.02
第 95 个百分位:1.52
总和:19948.56 线程公平性:
事件(平均/标准差):7285.5000/2.50
执行时间(平均/标准差):9.9743/0.00
CPU qemu64
# cpu u003d qemu64
~$ sysbench cpu --threadsu003d2 运行
sysbench 1.0.18(使用系统 LuaJIT 2.1.0-beta3)
[...]CPU 速度:
每秒事件数:1505.28 一般统计:
总时间:10.0012s
事件总数:15059 延迟(毫秒):
分钟:1.24
平均:1.32
最大值:3.37
第 95 个百分位:1.47
sum: 19938.66 线程公平性:
事件(平均/标准差):7529.5000/2.50
执行时间(平均/标准差):9.9693/0.00
更新:CPU qemu64 with M1 16"
# cpu u003d qemu64
~$ sysbench cpu --threadsu003d2 运行
sysbench 1.0.18(使用系统 LuaJIT 2.1.0-beta3)
[...]CPU 速度:
每秒事件数:1605.28 一般统计:
总时间:10.0019s
事件总数:16048 延迟(毫秒):
分钟:1.18
平均:1.24
最大值:3.83
第 95 个百分位:1.32
总和:19931.65 线程公平性:
事件(平均/标准差):8024.0000/10.00
执行时间(平均/标准差):9.9658/0.00
CPU qemu64-v1
# cpu u003d qemu64-v1
~$ sysbench cpu --threadsu003d2 运行
sysbench 1.0.18(使用系统 LuaJIT 2.1.0-beta3)
[...]CPU 速度:
每秒事件数:1474.44 一般统计:
总时间:10.0016s
事件总数:14751延迟(毫秒):
分钟:1.27
平均:1.35
最大值:21.82
第 95 个百分位:1.55
总和:19923.12线程公平性:
事件(平均/标准差):7375.5000/30.50
执行时间(平均/标准差):9.9616/0.00
CPU EPYC
# CPU u003d EPYC(霄龙)
~$ sysbench cpu --threadsu003d2 运行
sysbench 1.0.18(使用系统 LuaJIT 2.1.0-beta3)
[...]CPU 速度:
每秒事件数:1403.61一般统计:
总时间:10.0024s
事件总数:14045延迟(毫秒):
分钟:1.36
平均:1.42
最大值:3.68
第 95 个百分位:1.52
总和:19938.08 线程公平性:
事件(平均/标准差):7022.5000/1.50
执行时间(平均/标准差):9.9690/0.00
CPU哈斯韦尔
# cpu u003d 哈斯韦尔
~$ sysbench cpu --threadsu003d2 运行
sysbench 1.0.18(使用系统 LuaJIT 2.1.0-beta3)
[...]CPU 速度:
每秒事件数:491.29 一般统计:
总时间:10.0044s
事件总数:4919 延迟(毫秒):
分钟:3.74
平均:4.06
最大值:53.05
第 95 个百分位:4.33
总和:19955.25 线程公平性:
事件(平均/标准差):2459.5000/3.50
执行时间(平均/标准差):9.9776/0.00
CPU kvm64
# cpu u003d kvm64
~$ sysbench cpu --threadsu003d2 运行
sysbench 1.0.18(使用系统 LuaJIT 2.1.0-beta3)
[...]CPU 速度:
每秒事件数:1506.38 一般统计:
总时间:10.0021s
事件总数:15076 延迟(毫秒):
分钟:1.24
平均:1.32
最大值:2.83
第 95 个百分位:1.44
总和:19951.28 线程公平性:
事件(平均/标准差):7538.0000/6.00
执行时间(平均/标准差):9.9756/0.00
原生
本地运行基准测试会给出以下结果:
brew install sysbench
~$ sysbench cpu --threadsu003d2 运行
sysbench 1.0.20(使用系统 LuaJIT 2.1.0-beta3)
[...]CPU 速度:
每秒事件数:21974674.98 一般统计:
总时间:10.0001s
事件总数:219755276延迟(毫秒):
分钟:0.00
平均:0.00
最大值:5.28
第 95 个百分位:0.00
总和:6512.92线程公平性:
事件(平均/标准差):109877638.0000/249382.00
执行时间(平均/标准差):3.2565/0.00
M1上的## ARM64:
# cpu u003d cortex-a72
~$ sysbench cpu --threadsu003d2 运行
sysbench 1.0.20(使用系统 LuaJIT 2.1.0-beta3)使用以下选项运行测试:
线程数:2
从当前时间初始化随机数生成器素数限制:10000 正在初始化工作线程...线程已启动!CPU 速度:
每秒事件数:16194.69 一般统计:
总时间:10.0001s
事件总数:161958 延迟(毫秒):
分钟:0.12
平均:0.12
最大值:1.46
第 95 个百分位:0.13
总和:19968.36 线程公平性:
事件(平均/标准差):80979.0000/11.00
执行时间(平均/标准差):9.9842/0.00
总结
所有基准测试都以sysbench cpu --threads=2 run开头
-
本机 (macOS):每秒 ~24 个 Mio 事件
-
Skylake-Client(默认):每秒约 500 个事件👎
-
qemu64-v1:每秒约 1500 个事件
-
qemu64: ~1500 每秒事件👍
-
qemu64 + ssse3,sse4.1,sse4.2:每秒约 1450 个事件
-
Penryn:每秒约 1500 个事件
-
Penryn + ssse3,sse4.1,sse4.2:每秒约 1400 个事件
-
Haswell:每秒约 500 个事件👎
-
EPYC:每秒约 1400 个事件
-
kvm64:每秒约 1500 个事件
-
现象:每秒约 1400 个事件
-
Nehalem:每秒约 1400 个事件
-
Dhyana:每秒约 500 个事件👎
-
皓龙_G5: — 不工作
-
max: — 不工作
-
Standard PC (i440FX...) (pc)qemu64:~1500(没有变化)
做个对比
容器和 arm64 的一些基准测试。
系统设置
-
架构:
ARM64 (aarch64) -
系统:
QEMU 6.1 ARM ... (virt) -
操作系统:Fedora 35
结果
-
cortex-a72 (default): ~16200 events per second
-
默认值:每秒约 16000 个事件
-
cortex-a8/a9/a15:——不工作
-
max: — 不工作
或与 Docker 或 Lima
GitHub - lima-vm/lima: Linux 虚拟机,在 macOS 上(又名“Linux-on-Mac”,“macOS 子系统......
Lima 推出具有自动文件共享、端口转发和 containerd 的 Linux 虚拟机。利马可以...
github.com
-
docker run -it --rm --platform=linux/amd64 ubuntu:每秒约 550 个事件 -
docker run -it --rm ubuntu: (arm64) ~550 每秒事件!!️ -
lima(arm64): ~20200 每秒事件🤘 -
lima(x86_64):每秒约 260 个事件 -
lima container(arm64 VM 中的 arm64 容器):每秒 ~21000 个事件🤘 -
lima container(x86_64 容器在 arm64 VM中):每秒约 570 个事件 -
multipass(arm64):每秒约 11000 个事件(我没有找到安装多通道 x86_64 VM 的选项)
结论
您可以在 M1 Mac 上运行 x86_64 Linux VM。但是,如果您依赖它来获得类似于原生体验的可用性,那么 Apple Silicon 机器就不是您的正确选择。我仍然需要在更新的 M1 Max 上进行测试,但我怀疑在不久的将来这会是一次有趣的体验。
但是,当您可以在 arm64 Linux VM 上运行所需的一切时,应该没问题。它仍然远非原生体验,但比 x86_64 更流畅(快 10 倍)。
我不是铁杆开发者,但我用我的 MacBook Air 做了很多事情。到目前为止,我没有遇到重大障碍或阻碍,因为我使用远程“真实”Linux 机器来处理工作负载,因此我不需要 Linux VM。此外,到目前为止,我在 docker 中运行的所有内容都按预期工作(除此之外,当您需要 x86_64 或图像尚不适用于 arm64 时,您必须提供--platform=linux/amd64)。
Lima 是新的,似乎是 Docker for Mac 的一个很好的替代品。在没有跨平台的情况下,它轻松胜过 Docker for Mac。
[
containerd & Lima:Docker for Mac 的开源替代品
今天社区被突然的消息震惊了,Docker Desktop for Mac/Win 不再免费[-as-in-beer] for...
媒体网
](https://medium.com/nttlabs/containerd-and-lima-39e0b64d2a59)
谢谢
阅读我的文章!在GitHub、中支持或关注我或其他地方。
我的相关文章
[
我不是苹果粉丝——但没有更好的选择。
为什么Linux和Windows无法与Apple生态系统竞争。
levelup.gitconnected.com
](/im-not-an-apple-fan-but-there-is-no-better-alternative-d1d5250de3d4)
升级编码
感谢您成为我们社区的一员! Level Up 正在改变技术招聘。找到完美的工作在最好的公司。
[
升级——转变招聘流程
🔥 让软件工程师能够找到自己喜欢的完美角色🧠 寻找人才是......最痛苦的部分
工作.levelup.dev
](https://jobs.levelup.dev/talent)
更多推荐




所有评论(0)