中文日本語

Performance

keelOS next to KVM

keelOS development build 89cdaaf (FreeBSD 14.5, bhyve) vs Proxmox VE 9.2 (Linux 7.0.2, QEMU 11.0, KVM) · measured 1 October 2026

ComputeKVM
7-Zip benchmark95%
sysbench CPU97%
sysbench memory100%
Build Redis (make -j4)96%
Process wake-ups (perf sched pipe)78% tuning
StorageKVM
4K random read, QD3254% tuning
4K random write, QD3235% tuning
4K random read, QD185% tuning
4K random read, QD1, p99 latency100%
1M sequential read, QD877% tuning
1M sequential write, QD895%
NetworkKVM
VM → another machine (1 GbE port)100%
Another machine → VM (1 GbE port)100%
VM → VM on the same host, 1 stream24% tuning
VM ← VM on the same host, 1 stream24% tuning
VM → VM on the same host, 4 streams25% tuning
VM ← VM on the same host, 4 streams26% tuning

Bar = keelOS. Dashed line = KVM (100%). The track runs to 120% of KVM.

Results

TestUnitkeelOSKVMkeelOS / KVM
7-Zip benchmarkMIPS (higher is better)23,25124,53395%
sysbench CPUevents/s (higher is better)4,7734,90597%
sysbench memoryMiB/s (higher is better)5,2035,182100%
Build Redis (make -j4)s (lower is better)41.4239.9696%
Process wake-ups (perf sched pipe)s (lower is better)4.5983.57978%
4K random read, QD32IOPS (higher is better)42,72479,36854%
4K random write, QD32IOPS (higher is better)12,57936,36635%
4K random read, QD1IOPS (higher is better)5,4616,45685%
4K random read, QD1, p99 latencyus (lower is better)264264100%
1M sequential read, QD8MB/s (higher is better)1,5091,97077%
1M sequential write, QD8MB/s (higher is better)1,8101,90695%
VM → another machine (1 GbE port)Mbit/s (higher is better)941941100%
Another machine → VM (1 GbE port)Mbit/s (higher is better)940941100%
VM → VM on the same host, 1 streamMbit/s (higher is better)7,57931,07024%
VM ← VM on the same host, 1 streamMbit/s (higher is better)7,47330,51924%
VM → VM on the same host, 4 streamsMbit/s (higher is better)6,83726,99125%
VM ← VM on the same host, 4 streamsMbit/s (higher is better)6,98327,01826%

Setup

  • Server: Supermicro X11SPW, Xeon Gold 5122 (4 cores, 8 threads), 16 GB, two Samsung PM1725a NVMe drives. Why this one and not the server behind the numbers on the home page (2 × Xeon Gold 6144): the comparison needs the disks wiped and Proxmox VE installed, and this is the one of our two servers we can wipe; the other one runs our long tests.
  • VM: Debian 13, 4 vCPU, 4 GiB, virtio-blk and virtio-net. The same disk image on the same ZFS volumes (volblocksize 16K, no compression), the same MAC address, the whole test disk written once before.
  • keelOS: development build 89cdaaf (FreeBSD 14.5, bhyve). Proxmox VE 9.2: kernel 7.0, QEMU 11.0, ZFS 2.4; --cpu host, disks cache=none, aio=io_uring, iothread; vhost-net. The same ZFS cache limit on both; no other VM running.
  • Storage on one NVMe drive on both sides (Linux could not read the second drive's protection information).
  • Each test three times; the table shows the median and all three runs are in the raw data.

Why some numbers are behind

  • Between VMs on the same host. KVM moves packets in the kernel (vhost-net) and passes large segments between VMs. keelOS's virtio network runs in bhyve's user-space process. The physical 1 GbE port is full on both, so this only shows between VMs on one host. keelOS still moves about 7.5 Gbit/s there, more than a 1 or 2.5 GbE network, so a router VM in front of a NAS VM does not cap a LAN client. Until the faster path is done, give both VMs an SR-IOV virtual function of the same network card and the card switches their traffic in hardware.
  • Random disk I/O with many requests in flight. A single request is as fast as on KVM (same p99 latency at QD1); at QD32 bhyve's virtio disk keeps fewer requests in flight than QEMU's iothread with io_uring.
  • Process wake-ups. Waking a process on another vCPU costs more under keelOS's hypervisor; it shows in perf sched pipe and a little in the compile and compression tests.

What we are doing

Multi-queue and asynchronous I/O for the virtio disk and a faster path for virtio network are being worked on now. Every release is measured again on the same server, and this page shows the latest run.