一些用于性能测试和系统监控的小工具。
gen_random、timer 和 tcpBench 均使用 C++11 构建。在 macOS 和 Linux 上安装 make 及可用的 C++ 编译器后执行:
make生成的可执行文件位于 bin/:
bin/gen_random
bin/timer
bin/tcpBench
也可以单独构建某一工具:
make gen_random
make timer
make tcpBench通过 CXX 和 CXXFLAGS 覆盖默认编译器或编译选项:
make CXX=clang++ CXXFLAGS='-std=c++11 -O2'清理构建产物:
make clean生成并输出一个 32 位随机数和两个 64 位随机数。
./bin/gen_random对一段固定运算分别使用 gettimeofday 和 CPU 周期计时并输出耗时,适用于简单的计时方法演示。
./bin/timer在 x86 Linux/macOS 上,CPU 周期计时使用 rdtsc 指令;在 Apple Silicon 等非 x86 平台上,该部分自动使用单调时钟并以纳秒输出。rdtsc 的结果基于源码中预设的 CPU 频率,仅供粗略比较。
多线程 TCP 吞吐测试工具。先在服务端启动监听,再从客户端发起连接。两端应使用相同的端口和相近的测试时长,并确保防火墙或安全组放行对应 TCP 端口。
服务端:
./bin/tcpBench --mode server --bind-addr 0.0.0.0 --port 5001 --duration 30客户端:
./bin/tcpBench --mode client --host <SERVER_IP> --port 5001 --threads 4 --duration 30本机联调时,先在一个终端执行:
./bin/tcpBench --mode server --port 5001 --duration 10再在另一个终端执行:
./bin/tcpBench --mode client --host 127.0.0.1 --port 5001 --threads 4 --duration 10常用参数:
| 参数 | 说明 | 默认值 |
|---|---|---|
--threads, -t |
客户端并发连接数 | 4 |
--buf-size, -b |
收发缓冲区大小,支持 K、M、G 后缀 |
65536 |
--duration, -d |
测试时长,单位为秒 | 10 |
--update-interval, -u |
吞吐显示间隔,单位为毫秒 | 1000 |
--tcp-nodelay |
客户端启用 TCP_NODELAY |
关闭 |
--send-buf |
客户端设置 SO_SNDBUF,0 表示保持系统默认值 |
0 |
--recv-buf |
服务端设置 SO_RCVBUF,0 表示保持系统默认值 |
0 |
查看完整参数说明:
./bin/tcpBench --helpLinux 下的 RDMA 端口流量监控脚本。它读取 /sys/class/infiniband/<device>/ports/1/counters/ 下的计数器,因此需要安装 Python 3 与 click,且本机存在可访问的 RDMA 设备。
安装依赖:
python3 -m pip install click监控默认设备 mlx5_0,每秒更新一次:
python3 rdma_monitor/rdma_monitor.py指定 RDMA 设备和更新间隔:
python3 rdma_monitor/rdma_monitor.py --dev mlx5_0 --interval 2按 Ctrl-C 停止监控。该工具依赖 Linux 的 RDMA sysfs 接口,不能在没有 RDMA 设备的 macOS 主机上运行。