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

测试方法:

  1. 使用最新的Ubuntu cloud image (24.04)启动qemu
  • mac下硬件虚拟化为hvf,linux下为kvm
  • smp 4,mem 8192,virtio
  • tcg下,armhf cpu为cortex-a15,aarch64下cpu为cortex-a57
  1. 安装必要的dependencies
  2. 运行sysbench cpu run,单线程,limit写10000
  3. 运行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

结论:

  1. 能够硬件加速就硬件加速(废话)
  2. M系列芯片也许有特殊优化?sysbench分数偏高
  3. 也许是因为x86_64的tcg后端更加成熟?x86_64对arm系的虚拟化损耗低于arm系使用tcg虚拟化自身
  4. tcg虚拟化armhf在部分硬件上基本没办法用(参考a1.metal的分数),Linux在启动过程中会出现启动过慢进入emergency mode后过1-2分钟恢复正常的情况

原始数据可以在qemu-arm-target-virt.zip获取(仅包含unixbench的结果)。