English日本語

性能

keelOS 和 KVM 的性能对比

keelOS 开发版 89cdaaf(FreeBSD 14.5,bhyve)对 Proxmox VE 9.2(Linux 7.0.2,QEMU 11.0,KVM)· 2026 年 10 月 1 日测试

计算KVM
7-Zip 压缩跑分95%
sysbench CPU97%
sysbench 内存100%
编译 Redis(make -j4)96%
进程互相唤醒(perf sched pipe)78% 调优中
存储KVM
4K 随机读,QD3254% 调优中
4K 随机写,QD3235% 调优中
4K 随机读,QD185% 调优中
4K 随机读,QD1,p99 延迟100%
1M 顺序读,QD877% 调优中
1M 顺序写,QD895%
网络KVM
虚拟机 → 另一台机器(千兆口)100%
另一台机器 → 虚拟机(千兆口)100%
同一宿主上虚拟机 → 虚拟机,单流24% 调优中
同一宿主上虚拟机 ← 虚拟机,单流24% 调优中
同一宿主上虚拟机 → 虚拟机,4 流25% 调优中
同一宿主上虚拟机 ← 虚拟机,4 流26% 调优中

条 = keelOS,虚线 = KVM(100%)。底色画到 KVM 的 120%。

结果

项目单位keelOSKVMkeelOS / KVM
7-Zip 压缩跑分MIPS (越高越好)23,25124,53395%
sysbench CPUevents/s (越高越好)4,7734,90597%
sysbench 内存MiB/s (越高越好)5,2035,182100%
编译 Redis(make -j4)s (越低越好)41.4239.9696%
进程互相唤醒(perf sched pipe)s (越低越好)4.5983.57978%
4K 随机读,QD32IOPS (越高越好)42,72479,36854%
4K 随机写,QD32IOPS (越高越好)12,57936,36635%
4K 随机读,QD1IOPS (越高越好)5,4616,45685%
4K 随机读,QD1,p99 延迟us (越低越好)264264100%
1M 顺序读,QD8MB/s (越高越好)1,5091,97077%
1M 顺序写,QD8MB/s (越高越好)1,8101,90695%
虚拟机 → 另一台机器(千兆口)Mbit/s (越高越好)941941100%
另一台机器 → 虚拟机(千兆口)Mbit/s (越高越好)940941100%
同一宿主上虚拟机 → 虚拟机,单流Mbit/s (越高越好)7,57931,07024%
同一宿主上虚拟机 ← 虚拟机,单流Mbit/s (越高越好)7,47330,51924%
同一宿主上虚拟机 → 虚拟机,4 流Mbit/s (越高越好)6,83726,99125%
同一宿主上虚拟机 ← 虚拟机,4 流Mbit/s (越高越好)6,98327,01826%

测试环境

  • 服务器:Supermicro X11SPW,Xeon Gold 5122(4 核 8 线程),16 GB,两块 Samsung PM1725a NVMe。为什么不用首页数字那台(2 × Xeon Gold 6144):对比要清空硬盘、装 Proxmox VE,我们两台服务器里只有这台可以清空,另一台在跑长时间测试。
  • 虚拟机:Debian 13,4 vCPU,4 GiB,virtio-blk 和 virtio-net。两边用同一份磁盘镜像、同一组 ZFS 卷(volblocksize 16K,不压缩)、同一个 MAC 地址,测试盘事先整盘写过一遍。
  • keelOS:开发版 89cdaaf(FreeBSD 14.5,bhyve)。Proxmox VE 9.2:内核 7.0,QEMU 11.0,ZFS 2.4;--cpu host,磁盘 cache=none、aio=io_uring、iothread;vhost-net。两边 ZFS 缓存上限相同,测试时没有别的虚拟机在跑。
  • 存储两边都只用一块 NVMe(Linux 读不了第二块盘上的保护信息)。
  • 每项跑三次,表里是中位数,三次的数值都在原始数据里。

为什么有些项目落后

  • 同一宿主上虚拟机之间。KVM 在内核里转发数据包(vhost-net),虚拟机之间能传大包;keelOS 的 virtio 网卡在 bhyve 的用户态进程里处理。物理千兆口两边都跑满,所以只有同一宿主上虚拟机之间才看得出差别。这一项 keelOS 也有约 7.5 Gbit/s,比千兆、2.5G 网络都快,所以 NAS 虚拟机前面放一台软路由虚拟机,不会卡住局域网里的客户端。更快的路径做好之前,可以给两台虚拟机各一个同一块网卡的 SR-IOV VF,由网卡硬件交换。
  • 并发很多的随机磁盘读写。单个请求和 KVM 一样快(QD1 的 p99 延迟相同);QD32 时 bhyve 的 virtio 磁盘同时在处理的请求比 QEMU 的 iothread + io_uring 少。
  • 进程互相唤醒。在 keelOS 的 hypervisor 下,唤醒另一个 vCPU 上的进程代价更高;perf sched pipe 里看得到,编译和压缩里也有一点。

我们在做什么

virtio 磁盘的多队列和异步 IO、virtio 网卡更快的数据路径正在做。每个版本都在同一台服务器上重新测,这一页显示最新的一次。