QEMU net‐bench result - Antareske/tgoskits GitHub Wiki

net-bench 测试报告 — x86_64 vhost (smp=1, KVM)

日期: 2026-07-18 Starry commit: 2529b4d6a

测试环境

项目 值
Host 系统 Linux Astalia 6.18.33.2-microsoft-standard-WSL2 x86_64
Host CPU 核心数 32
QEMU 8.2.2 (Debian 1:8.2.2+ds-0ubuntu1.17)
Host iperf3 3.16
Guest iperf3 3.19.1
KVM /dev/kvm 可用
vhost-net /dev/vhost-net 可用

测试配置

参数 值
场景 vhost(TAP + vhost-net)
架构 x86_64
加速 KVM (-accel kvm -cpu host)
SMP 1
内存 2G
网络设备 virtio-net-pci (plain, 无 mq/vectors/offload)
网络拓扑 tap,id=net0,ifname=tap0,vhost=on,bridge br0 192.168.100.1/24
UEFI 启用
Starry Guest 内核 StarryOS(PIE, x86_64-unknown-linux-musl)
Linux Guest 内核 7.0.0-28-generic (Ubuntu)
Linux Guest rootfs Alpine initramfs(与 Starry 同源 rootfs 提取)
每次测试迭代 warmup=1 + measured=5(iperf3 -t 5)
跨启动重复 5 次(累计 25 个测量点)

测试负载

测试 iperf3 参数 说明
tcp1 (默认,1 流) TCP 单流上行吞吐
tcp4 -P 4 TCP 4 流上行吞吐
tcp1r -R TCP 单流下行吞吐
udp1g -u -b 1G UDP 大包吞吐(目标 1Gbps)
udp64 -u -l 64 -b 100M UDP 64B 小包 PPS(目标 100Mbps)

结果对比

吞吐与 PPS

测试 Starry Linux Baseline Starry/Linux
TCP 1-stream (uplink) 154.53 ± 1.90 Mbit/s 75.26 ± 1.53 Gbit/s 0.2%
TCP 4-stream (uplink) 21.68 ± 0.64 Mbit/s 46.28 ± 1.65 Gbit/s 0.05%
TCP 1-stream (reverse/downlink) 298.10 ± 19.48 Mbit/s 70.03 ± 1.45 Gbit/s 0.4%
UDP 1G (large packets) 197.21 ± 3.12 Mbit/s 998.98 ± 2.37 Mbit/s 19.7%
UDP 64B (small-packet) 7.55 ± 0.05 Mbit/s 99.92 ± 0.25 Mbit/s 7.6%

PPS 与丢包

测试 指标 Starry Linux Baseline
UDP 1G PPS 16,885 ± 267 pkt/s 86,249 ± 196 pkt/s
UDP 1G 丢包率 0.00% 0.01%
UDP 64B PPS 29,485 ± 201 pkt/s 195,166 ± 498 pkt/s
UDP 64B 丢包率 50.00% 0.00%

协议开销(L2 vs 应用层)

方向 Starry Linux Baseline
TX overhead 6.4% 0.2%
RX overhead 5.1% 0.3%

L2 总吞吐(/proc/net/dev 计数器)

Starry Linux Baseline
TX 5.91 GB / 6,071,713 pkts 1,790.39 GB / 68,461,404 pkts
RX 4.56 GB / 4,304,709 pkts 1,021.89 GB / 39,803,119 pkts

关键发现

如果结果准确,那么 QEMU 中 Starry 的网络性能表现与 Linux 相差巨大。

  • Starry TCP 性能严重偏低:TCP 上行仅为 Linux 的 0.2%,差距达 3 个数量级。4 流 TCP 反而劣于单流(21.7 vs 154.5 Mbit/s),与 Linux 的表现趋势一致但恶化得更严重。

  • Starry UDP 64B 丢包率 50%:小包测试中 Starry 丢包率稳定在 50%,说明其在 100Mbps 目标速率下只能送出约一半的包,PPS 能力(~29k)仅为 Linux(~195k)的 15%。

  • UDP 大包相对差距最小(19.7%):大包 UDP 场景下 Starry 能达到 Linux 近 1/5 的吞吐,丢包率为 0%,是五个场景中表现最好的。

  • TCP 下行优于上行:Starry TCP 下行(298 Mbit/s)约为上行(154.5 Mbit/s)的 2 倍,Linux 下两者相近(~75 vs ~70 Gbit/s),说明 Starry 在当前拓扑中发送路径是瓶颈。

  • Starry 协议开销偏高:TX 开销 6.4%(Linux 仅 0.2%),可能反映帧封装或统计口径的差异。

Starry vs Linux 架构

                         Starry                  Linux
                     ┌─────────────┐        ┌─────────────┐
     smoltcp/socket  │  ax_net +   │        │ Linux TCP/IP │  ← 完全不同
                     │  smoltcp    │        │  协议栈       │
                     ├─────────────┤        ├─────────────┤
     netdev 抽象     │  rd_net +   │        │  netdev +    │  ← 完全不同
                     │  RdNetDriver│        │  NAPI        │
                     ├─────────────┤        ├─────────────┤
     virtio 驱动     │ VirtIoNet-  │        │ virtio_net.ko│  ← 完全不同
                     │ Device      │        │              │
                     ├─────────────┤        ├─────────────┤
     virtio 协议库   │ virtio_     │        │ (内核内置)    │  ← 不同实现
                     │ drivers crate│       │              │
                     ╞═════════════╡        ╞═════════════╡
     QEMU 虚拟硬件   │ virtio-net-pci + vhost-net + KVM     │  ← 相同
                     └─────────────────────────────────────┘