Benchmarks
本post用于记录一些自己工作工程中做的benchmark与得出的结论,供参考。
不同架构下QEMU对ARM架构虚拟化
目的:探索不同方案下对arm架构虚拟化的性能损耗,以便确定合适的技术方案(即对armhf架构的Linux操作系统尽可能行虚拟化,运行armhf架构的目标程序,尽量不要折衷使用aarch64兼容模式运行armhf的目标程序)。
测试设备:
- Macbook Air M4 (16G RAM)
- Amazon AWS a1.metal
- 实验室服务器(Xeon Gold 6130 x 2,512G RAM,HDD raid 0)
- 游戏本(i9-13980hx,48G RAM,P44 Pro)
a1.metal运行Ubuntu 24.04 LTS,使用aws kernel;实验室服务器为Ubuntu 22.04 LTS;游戏本运行VMWare,分配4c 16g RAM,运行Ubuntu 22.04 LTS,故横向比对数据有失真的情况
Macbook Air为被动散热,因此没有完成跑unixbench
测试方法:
- 使用最新的Ubuntu cloud image (24.04)启动qemu
- mac下硬件虚拟化为hvf,linux下为kvm
- smp 4,mem 8192,virtio
- tcg下,armhf cpu为cortex-a15,aarch64下cpu为cortex-a57
- 安装必要的dependencies
- 运行
sysbench cpu run,单线程,limit写10000 - 运行unixbench 6.0.0
测试结果:
sysbench
| m4 | aws a1.metal | Gold 6130 | 13980hx(virt-4c) | |
|---|---|---|---|---|
| host | 16857108.73 | 2239.87 | 961.46 | 4527.22 |
| aarch64+hw-accel | 12224.75 | 2236.63 | N/A | N/A |
| aarch64+tcg | 1446.81 | 178.77 | 338.67 | 1374.18 |
| armhf+tcg | 64.24 | 9.86 | 25.53 | 83.36 |
unixbench单线程score
| m4 | aws a1.metal | Gold 6130 | 13980hx(virt-4c) | |
|---|---|---|---|---|
| host | N/A | 609.6 | 805.9 | 2945.2 |
| aarch64+hw-accel | 730 | 520.1 | N/A | N/A |
| aarch64+tcg | N/A | 3.8 | 13.3 | 40.1 |
| armhf+tcg | N/A | 10.4 | 28.6 | 71.6 |
unixbench多线程score (这里的host为宿主机的核心数benchmark的结果,游戏本的vm分配了4c故只有4线程)
| m4 | aws a1.metal | Gold 6130 | 13980hx(virt-4c) | |
|---|---|---|---|---|
| host | N/A | 7061.1 | 20743 | 11595.7 |
| aarch64+hw-accel | 3500.8 | 1875.1 | N/A | N/A |
| aarch64+tcg | N/A | 9.6 | 45.9 | 114.6 |
| armhf+tcg | N/A | 28.7 | 87.1 | 167.2 |
结论:
- 能够硬件加速就硬件加速(废话)
- M系列芯片也许有特殊优化?sysbench分数偏高
- 也许是因为x86_64的tcg后端更加成熟?x86_64对arm系的虚拟化损耗低于arm系使用tcg虚拟化自身
- tcg虚拟化armhf在部分硬件上基本没办法用(参考a1.metal的分数),Linux在启动过程中会出现启动过慢进入emergency mode后过1-2分钟恢复正常的情况
原始数据可以在qemu-arm-target-virt.zip获取(仅包含unixbench的结果)。