bwbench-client
路径:
os/arceos/tools/bwbench_client类型:二进制 crate 分层:ArceOS 层 / 宿主机配套工具 版本:0.1.0文档依据:Cargo.toml、README.md、src/main.rs、src/device.rs、os/arceos/modules/ax-net/src/smoltcp_impl/bench.rs
bwbench-client 是一个运行在 Linux 宿主机上的原始以太网带宽对测工具。它通过 AF_PACKET raw socket 直接向指定网卡或 tap 设备发送/接收帧,并按秒输出吞吐统计。它不是 ArceOS 镜像里的应用,也不是可复用网络库;它的真实定位是给 ArceOS 网络基准路径提供一个宿主机侧对端。
最关键的边界是:bwbench-client 只负责在宿主机侧制造或接收原始以太网流量,用来观察链路吞吐。它不是 ArceOS 网络栈的一部分,也不是通用 benchmark 框架。
架构设计
设计定位
从目录和源码看,bwbench-client 与仓库里的 HTTP 示例完全不同:
- 它运行在宿主机
std环境,而不是no_stdArceOS 应用环境 - 它不走
ax-std,也不直接依赖仓库内的网络栈 - 它直接使用 Linux raw socket 与
ioctl
因此,它不是“ArceOS 的一个网络示例”,而是“ArceOS 网络基准的宿主机配套工具”。
模块结构
| 模块 | 作用 |
|---|---|
src/main.rs | 命令行入口、模式选择、吞吐统计与主循环 |
src/device.rs | Linux raw socket 封装、接口绑定、MTU/MAC 查询、收发接口 |
整个工具的结构非常直接,重点在于以最薄的封装把宿主网卡原始收发能力暴露出来。
1.3 设备接入模型
device.rs 展示了它的真实工作方式:
- 使用
libc::socket(AF_PACKET, SOCK_RAW | SOCK_NONBLOCK, ETH_P_ALL) - 通过
SIOCGIFHWADDR读取接口 MAC - 通过
SIOCGIFINDEX获取接口索引并完成bind - 通过
SIOCGIFMTU读取 MTU - 使用
send/recv直接收发原始帧
这说明它测量的不是 TCP/UDP 应用吞吐,而是更低层的二层帧收发吞吐。
1.4 发送与接收两种工作模式
main.rs 只提供两种模式:
Sender:持续发送固定长度以太网帧Receiver:持续接收帧并累计字节数
两边都以每秒为窗口输出:
- 累计传输量(GBytes)
- 当前窗口带宽(Gbits/sec)
并在达到 MAX_BYTES = 10 * GB 后结束。