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核,所以并没有什么区别。

先决条件

开始之前安装qemuutm。后者不是必需的,但会使生活更轻松。这假设您已经安装了 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)

Logo

更多推荐