keelOS と KVM の比較
結果
| テスト | 単位 | keelOS | KVM | keelOS / KVM |
|---|---|---|---|---|
| 7-Zip ベンチマーク | MIPS (高いほど良い) | 23,251 | 24,533 | 95% |
| sysbench CPU | events/s (高いほど良い) | 4,773 | 4,905 | 97% |
| sysbench メモリ | MiB/s (高いほど良い) | 5,203 | 5,182 | 100% |
| Redis のビルド(make -j4) | s (低いほど良い) | 41.42 | 39.96 | 96% |
| プロセス間の起床(perf sched pipe) | s (低いほど良い) | 4.598 | 3.579 | 78% |
| 4K ランダム読み込み、QD32 | IOPS (高いほど良い) | 42,724 | 79,368 | 54% |
| 4K ランダム書き込み、QD32 | IOPS (高いほど良い) | 12,579 | 36,366 | 35% |
| 4K ランダム読み込み、QD1 | IOPS (高いほど良い) | 5,461 | 6,456 | 85% |
| 4K ランダム読み込み、QD1、p99 レイテンシ | us (低いほど良い) | 264 | 264 | 100% |
| 1M シーケンシャル読み込み、QD8 | MB/s (高いほど良い) | 1,509 | 1,970 | 77% |
| 1M シーケンシャル書き込み、QD8 | MB/s (高いほど良い) | 1,810 | 1,906 | 95% |
| VM → 別のマシン(1 GbE ポート) | Mbit/s (高いほど良い) | 941 | 941 | 100% |
| 別のマシン → VM(1 GbE ポート) | Mbit/s (高いほど良い) | 940 | 941 | 100% |
| 同じホストの VM → VM、1 ストリーム | Mbit/s (高いほど良い) | 7,579 | 31,070 | 24% |
| 同じホストの VM ← VM、1 ストリーム | Mbit/s (高いほど良い) | 7,473 | 30,519 | 24% |
| 同じホストの VM → VM、4 ストリーム | Mbit/s (高いほど良い) | 6,837 | 26,991 | 25% |
| 同じホストの VM ← VM、4 ストリーム | Mbit/s (高いほど良い) | 6,983 | 27,018 | 26% |
計測環境
- サーバー:Supermicro X11SPW、Xeon Gold 5122(4 コア 8 スレッド)、16 GB、Samsung PM1725a NVMe × 2。トップページの数値のサーバー(2 × Xeon Gold 6144)を使わなかった理由:比較にはディスクを消して Proxmox VE を入れる必要があり、2 台のうち消せるのはこちらだけです(もう 1 台は長時間テストを実行中)。
- VM: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 キャッシュの上限は同じ、他の VM は停止。 - ストレージは両方とも NVMe 1 台(2 台目の保護情報を Linux が読めなかったため)。
- 各テスト 3 回。表は中央値で、3 回分の値は生データにあります。
遅れている理由
- 同じホスト上の VM 間。KVM はカーネル内でパケットを転送し(vhost-net)、VM 間で大きなセグメントを渡せます。keelOS の virtio ネットワークは bhyve のユーザー空間プロセスで処理されます。物理 1 GbE ポートはどちらも上限なので、差が出るのは同じホスト上の VM 間だけです。それでも keelOS は約 7.5 Gbit/s 出ており、1 GbE や 2.5 GbE のネットワークより速いので、NAS VM の前にルーター VM を置いても LAN のクライアントが頭打ちになることはありません。より速い経路ができるまでは、両方の VM に同じ NIC の SR-IOV 仮想機能を割り当てれば、NIC がハードウェアで交換します。
- 多数のリクエストを並行するランダム I/O。1 件ずつなら KVM と同じ速さです(QD1 の p99 レイテンシが同じ)。QD32 では、bhyve の virtio ディスクが同時に処理するリクエストが QEMU の iothread + io_uring より少なくなります。
- プロセスの起床。keelOS のハイパーバイザー上では、別の vCPU のプロセスを起こすコストが高く、
perf sched pipeに現れ、ビルドと圧縮にも少し影響しています。
取り組み
virtio ディスクのマルチキューと非同期 I/O、virtio ネットワークの高速なデータ経路に取り組んでいます。リリースごとに同じサーバーで計測し直し、このページには最新の結果を載せます。