sfnt-pingpong -测试网络性能和延迟的工具

目录

[0. 背景](#0. 背景)

[1. Topology 介绍](#1. Topology 介绍)

[2. 问题描述:sfnt-pingpong TCP 时延报错](#2. 问题描述:sfnt-pingpong TCP 时延报错)

[3. 解决方法](#3. 解决方法)

[3.1 搜索含 sfnt-pingpong.c 的源码文件夹](#3.1 搜索含 sfnt-pingpong.c 的源码文件夹)

[3.2 在三份源码里直接搜这个 hash](#3.2 在三份源码里直接搜这个 hash)

[3.3 进入目录,先清理旧编译产物(关键!避免把旧 obj 传到对端)](#3.3 进入目录,先清理旧编译产物(关键!避免把旧 obj 传到对端))

[3.4 打包纯净源码(上层目录打包)](#3.4 打包纯净源码(上层目录打包))

[3.5 将打包的cns-sfnettest_90.tar.gz 传到对端 10.1.22.18](#3.5 将打包的cns-sfnettest_90.tar.gz 传到对端 10.1.22.18)

[3.6 远端编译流程(重点!远端也要进 src 编译)](#3.6 远端编译流程(重点!远端也要进 src 编译))

[4. 测试校验](#4. 测试校验)


0. 背景

需要测试数据包时延

1. Topology 介绍

复制代码
10.1.22.18              -----------直连-----------    192.168.2.73

swift1f0:192.168.1.18   -----------直连-----------    swift1f0:192.168.2.73

2. 问题描述:sfnt-pingpong TCP 时延报错

定位原因:sfnt-pingpong version 版本不一致

3. 解决方法

将其中一台中的snft-pingpong 打包到另一台机器上重新编译安装

3.1搜索含 sfnt-pingpong.c 的源码文件夹

复制代码
# 想要本地(192.168.2.73) 的sfnt-pingpong 版本安装到 另一台机器(10.1.22.18)上

# 192.168.2.73


[root@[localhost](https://localhost) ~]# sfnt-pingpong --version
version: no-version
src: 90b95efce4ec5ab3987cb432a34702e0
[root@[localhost](https://localhost) ~]#
[root@[localhost](https://localhost) ~]#
[root@[localhost](https://localhost) ~]#  find / -name "sfnt-pingpong.c" 2>/dev/null
/home/bf/autotest/cns-sfnettest-master/src/sfnt-pingpong.c
/home/guokh/cns-sfnettest-master/src/sfnt-pingpong.c
/home/yanyiwei/cns-sfnettest-master/src/sfnt-pingpong.c
[root@[localhost](https://localhost) ~]#



//***************************************************************************
这台机器192.168.2.73(src=`90b95efce4ec5ab3987cb432a34702e0`)上有 3 份源码副本,
先确认哪一份对应正在跑的二进制,然后把这份源码打包传到另一台重新编译即可。

3.2 在三份源码里直接搜这个 hash

复制代码
在三份源码里直接搜这个 hash

# grep -rn "90b95efce4ec5ab3987cb432a34702e0" /home/bf/autotest/cns-sfnettest-master /home/guokh/cns-sfnettest-master /home/yanyiwei/cns-sfnettest-master 2>/dev/null


# 192.168.2.73:

[root@localhost cns-sfnettest-master]# 
[root@localhost cns-sfnettest-master]# grep -rn "90b95efce4ec5ab3987cb432a34702e0" /home/bf/autotest/cns-settest-master 2>/dev/null
Binary file /home/guokh/cns-sfnettest-master/src/sfnt_sysinfo.o matches
Binary file /home/guokh/cns-sfnettest-master/src/libsfnettest.a matches
Binary file /home/guokh/cns-sfnettest-master/src/sfnt-pingpong matches
Binary file /home/guokh/cns-sfnettest-master/src/sfnt-stream matches
Binary file /home/yanyiwei/cns-sfnettest-master/src/sfnt_sysinfo.o matches
Binary file /home/yanyiwei/cns-sfnettest-master/src/libsfnettest.a matches
Binary file /home/yanyiwei/cns-sfnettest-master/src/sfnt-pingpong matches
Binary file /home/yanyiwei/cns-sfnettest-master/src/sfnt-stream matches
[root@localhost cns-sfnettest-master]# 

grep 匹配到的都是 .o / .a / 可执行文件(编译后的二进制产物),源码文本里没有硬写这个 hash,这个 hash 是 Makefile 编译阶段生成、嵌入二进制的

3.3 进入目录,先清理旧编译产物(关键!避免把旧 obj 传到对端)

复制代码
#这里才是真正的 Makefile 位置,clean、make 都在这里执行
# cd /home/guokh/cns-sfnettest-master/src   
# ls -l Makefile

# 清理编译产物
make clean


[root@localhost src] cd /home/guokh/cns-sfnettest-master/src
[root@localhost src]# ls -l Makefile 
-rw-r--r--. 1 root root 1779 Sep  4  2023 Makefile
[root@localhost src]# 
[root@localhost src]# make clean
find . -name "*.o" | xargs rm -f
find . -name "*.d" | xargs rm -f
find . -name "*.a" | xargs rm -f
rm -f sfnt-pingpong sfnt-stream
[root@localhost src]#

3.4 打包纯净源码(上层目录打包)

复制代码
cd /home/guokh
tar -zcvf cns-sfnettest_90.tar.gz cns-sfnettest-master/


# 192.168.2.73:

[root@localhost src]# cd /home/guokh/
[root@localhost guokh]# 
[root@localhost guokh]# tar -zcvf cns-sfnettest_90.tar.gz cns-sfnettest-master/
cns-sfnettest-master/
cns-sfnettest-master/.github/
cns-sfnettest-master/.github/CODEOWNERS
cns-sfnettest-master/.gitignore
cns-sfnettest-master/ChangeLog
cns-sfnettest-master/LICENSE
cns-sfnettest-master/README.md
cns-sfnettest-master/README.sfnt-pingpong.md
cns-sfnettest-master/README.sfnt-stream.md
cns-sfnettest-master/libsfnettest.vcxproj
cns-sfnettest-master/libsfnettest.vcxproj.filters
cns-sfnettest-master/sfnettest.sln
cns-sfnettest-master/sfnt-pingpong.vcxproj
cns-sfnettest-master/sfnt-pingpong.vcxproj.filters
cns-sfnettest-master/sfnt-stream.vcxproj
cns-sfnettest-master/sfnt-stream.vcxproj.filters
cns-sfnettest-master/src/
cns-sfnettest-master/src/Makefile
cns-sfnettest-master/src/rules.mk
cns-sfnettest-master/src/rules_pre.mk
cns-sfnettest-master/src/sfnettest.h
cns-sfnettest-master/src/sfnettest_gcc.h
cns-sfnettest-master/src/sfnettest_msvc.h
cns-sfnettest-master/src/sfnettest_unix.h
cns-sfnettest-master/src/sfnettest_waitall_hack.h
cns-sfnettest-master/src/sfnettest_win32.h
cns-sfnettest-master/src/sfnt-pingpong.c
cns-sfnettest-master/src/sfnt-stream.c
cns-sfnettest-master/src/sfnt_affinity.c
cns-sfnettest-master/src/sfnt_cmd_line.c
cns-sfnettest-master/src/sfnt_fd.c
cns-sfnettest-master/src/sfnt_int_list.c
cns-sfnettest-master/src/sfnt_logging.c
cns-sfnettest-master/src/sfnt_macosx.c
cns-sfnettest-master/src/sfnt_mux.c
cns-sfnettest-master/src/sfnt_nonblocking_send.c
cns-sfnettest-master/src/sfnt_socket.c
cns-sfnettest-master/src/sfnt_stats.c
cns-sfnettest-master/src/sfnt_sysinfo.c
cns-sfnettest-master/src/sfnt_test.c
cns-sfnettest-master/src/sfnt_tsc.c
[root@localhost guokh]# 

3.5 将打包的cns-sfnettest_90.tar.gz 传到对端 10.1.22.18

复制代码
# scp cns-sfnettest_90.tar.gz root@10.1.22.18:/root/

# 192.168.2.73:

[root@localhost guokh]# 
[root@localhost guokh]# scp cns-sfnettest_90.tar.gz root@10.1.22.18:/root/
The authenticity of host '10.1.22.18 (10.1.22.18)' can't be established.
ECDSA key fingerprint is SHA256:FV+ykBycwaRx4XhTBiEcV+3qiOzAPz+fKOym4RuxOs0.
Are you sure you want to continue connecting (yes/no/[fingerprint])? Y
Please type 'yes', 'no' or the fingerprint: yes
Warning: Permanently added '10.1.22.18' (ECDSA) to the list of known hosts.
root@10.1.22.18's password: 
cns-sfnettest_90.tar.gz                                                                                   
[root@localhost guokh]# 
[root@localhost guokh]#



# 10.1.22.18:

3.6 远端编译流程(重点!远端也要进 src 编译)

复制代码
ssh root@10.1.22.18
cd /root
tar -zxvf cns-sfnettest_90.tar.gz
cd cns-sfnettest-master/src
# 先清理(防止远端src自带旧产物)
make clean
# 编译
make
# 校验版本
./sfnt-pingpong --version


#***************************************************************
# 10.1.22.18
1. 解压cns-sfnettest_90.tar.gz

[root@localhost ~]# 
[root@localhost ~]# tar -xvzf cns-sfnettest_90.tar.gz 
cns-sfnettest-master/
cns-sfnettest-master/.github/
cns-sfnettest-master/.github/CODEOWNERS
cns-sfnettest-master/.gitignore
cns-sfnettest-master/ChangeLog
cns-sfnettest-master/LICENSE
cns-sfnettest-master/README.md
cns-sfnettest-master/README.sfnt-pingpong.md
cns-sfnettest-master/README.sfnt-stream.md
cns-sfnettest-master/libsfnettest.vcxproj
cns-sfnettest-master/libsfnettest.vcxproj.filters
cns-sfnettest-master/sfnettest.sln
cns-sfnettest-master/sfnt-pingpong.vcxproj
cns-sfnettest-master/sfnt-pingpong.vcxproj.filters
cns-sfnettest-master/sfnt-stream.vcxproj
cns-sfnettest-master/sfnt-stream.vcxproj.filters
cns-sfnettest-master/src/
cns-sfnettest-master/src/Makefile
cns-sfnettest-master/src/rules.mk
cns-sfnettest-master/src/rules_pre.mk
cns-sfnettest-master/src/sfnettest.h
cns-sfnettest-master/src/sfnettest_gcc.h
cns-sfnettest-master/src/sfnettest_msvc.h
cns-sfnettest-master/src/sfnettest_unix.h
cns-sfnettest-master/src/sfnettest_waitall_hack.h
cns-sfnettest-master/src/sfnettest_win32.h
cns-sfnettest-master/src/sfnt-pingpong.c
cns-sfnettest-master/src/sfnt-stream.c
cns-sfnettest-master/src/sfnt_affinity.c
cns-sfnettest-master/src/sfnt_cmd_line.c
cns-sfnettest-master/src/sfnt_fd.c
cns-sfnettest-master/src/sfnt_int_list.c
cns-sfnettest-master/src/sfnt_logging.c
cns-sfnettest-master/src/sfnt_macosx.c
cns-sfnettest-master/src/sfnt_mux.c
cns-sfnettest-master/src/sfnt_nonblocking_send.c
cns-sfnettest-master/src/sfnt_socket.c
cns-sfnettest-master/src/sfnt_stats.c
cns-sfnettest-master/src/sfnt_sysinfo.c
cns-sfnettest-master/src/sfnt_test.c
cns-sfnettest-master/src/sfnt_tsc.c
[root@localhost ~]#

[root@localhost ~]# cd cns-sfnettest-master/src/
[root@localhost src]# ll
total 236
-rw-r--r--. 1 root root  1779 Sep  4  2023 Makefile
-rw-r--r--. 1 root root   409 Sep  4  2023 rules.mk
-rw-r--r--. 1 root root   415 Sep  4  2023 rules_pre.mk
-rw-r--r--. 1 root root  1691 Sep  4  2023 sfnettest_gcc.h
-rw-r--r--. 1 root root 18000 Sep  4  2023 sfnettest.h
-rw-r--r--. 1 root root  2075 Sep  4  2023 sfnettest_msvc.h
-rw-r--r--. 1 root root  4463 Sep  4  2023 sfnettest_unix.h
-rw-r--r--. 1 root root  2112 Sep  4  2023 sfnettest_waitall_hack.h
-rw-r--r--. 1 root root 10340 Sep  4  2023 sfnettest_win32.h
-rw-r--r--. 1 root root  1646 Sep  4  2023 sfnt_affinity.c
-rw-r--r--. 1 root root 10813 Sep  4  2023 sfnt_cmd_line.c
-rw-r--r--. 1 root root  1059 Sep  4  2023 sfnt_fd.c
-rw-r--r--. 1 root root  2575 Sep  4  2023 sfnt_int_list.c
-rw-r--r--. 1 root root  1218 Sep  4  2023 sfnt_logging.c
-rw-r--r--. 1 root root  1011 Sep  4  2023 sfnt_macosx.c
-rw-r--r--. 1 root root  6016 Sep  4  2023 sfnt_mux.c
-rw-r--r--. 1 root root  1477 Sep  4  2023 sfnt_nonblocking_send.c
-rw-r--r--. 1 root root 44069 Sep  4  2023 sfnt-pingpong.c
-rw-r--r--. 1 root root 13204 Sep  4  2023 sfnt_socket.c
-rw-r--r--. 1 root root  3059 Sep  4  2023 sfnt_stats.c
-rw-r--r--. 1 root root 52666 Sep  4  2023 sfnt-stream.c
-rw-r--r--. 1 root root  3197 Sep  4  2023 sfnt_sysinfo.c
-rw-r--r--. 1 root root   784 Sep  4  2023 sfnt_test.c
-rw-r--r--. 1 root root  3675 Sep  4  2023 sfnt_tsc.c
[root@localhost src]# 
[root@localhost src]# make clean
find . -name "*.o" | xargs rm -f
find . -name "*.d" | xargs rm -f
find . -name "*.a" | xargs rm -f
rm -f sfnt-pingpong sfnt-stream
[root@localhost src]# 


[root@localhost src]# 
[root@localhost src]# make
cc -Wall -Werror -g -fPIC -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'c -o sfnt_sysinfo.o sfnt_sysinfo.c
cc -Wall -Werror -g -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'  -c -fnt_logging.o sfnt_logging.c
cc -Wall -Werror -g -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'  -c -fnt_cmd_line.o sfnt_cmd_line.c
cc -Wall -Werror -g -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'  -c -fnt_test.o sfnt_test.c
cc -Wall -Werror -g -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'  -c -fnt_socket.o sfnt_socket.c
cc -Wall -Werror -g -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'  -c -fnt_stats.o sfnt_stats.c
cc -Wall -Werror -g -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'  -c -fnt_tsc.o sfnt_tsc.c
cc -Wall -Werror -g -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'  -c -fnt_int_list.o sfnt_int_list.c
cc -Wall -Werror -g -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'  -c -fnt_affinity.o sfnt_affinity.c
cc -Wall -Werror -g -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'  -c -fnt_mux.o sfnt_mux.c
cc -Wall -Werror -g -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'  -c -fnt_fd.o sfnt_fd.c
cc -Wall -Werror -g -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'  -c -fnt_nonblocking_send.o sfnt_nonblocking_send.c
ar -r libsfnettest.a sfnt_sysinfo.o sfnt_logging.o sfnt_cmd_line.o sfnt_test.o sfnt_socket.o sfnt_stats.o sftsc.o sfnt_int_list.o sfnt_affinity.o sfnt_mux.o sfnt_fd.o sfnt_nonblocking_send.o
ar: creating libsfnettest.a
cc -Wall -Werror -g -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'  -c -fnt-pingpong.o sfnt-pingpong.c
cc -Wl,-E -Wall -Werror -g sfnt-pingpong.o -L. -lsfnettest -lm  -lrt -o sfnt-pingpong
cc -Wall -Werror -g -DSFNT_VERSION='"no-version"' -DSFNT_SRC_CSUM='"90b95efce4ec5ab3987cb432a34702e0"'  -c -fnt-stream.o sfnt-stream.c
cc -Wl,-E -Wall -Werror -g sfnt-stream.o -L. -lsfnettest -lm  -lrt -lpthread -o sfnt-stream
rm sfnt-stream.o sfnt-pingpong.o
[root@localhost src]# 

[root@localhost src]# 
[root@localhost src]# sfnt-pingpong --version
version: no-version
src: 2b01b02a25134b95306a16c81ae1d4bb
[root@localhost src]# 

//=====================================================================

# 注意:当解压编译后,在解压目录:/root/cns-sfnettest-master/src 下的 ./sfnt-pingpong --version 版本与 sfnt-pingpong --version 版本不一致

解决方法:备份旧版本并覆盖
//=====================================================================
 
[root@localhost src]# pwd
/root/cns-sfnettest-master/src
[root@localhost src]# 
[root@localhost src]# ./sfnt-pingpong --version
version: no-version
src: 90b95efce4ec5ab3987cb432a34702e0   # 来自192.168.2.73 打包的 sfnt-pingpong 版本
[root@localhost src]# 
[root@localhost src]# sfnt-pingpong --version   # 还是原来的 sfnt-pingpong 版本
version: no-version
src: 2b01b02a25134b95306a16c81ae1d4bb
[root@localhost src]# 
[root@localhost src]# which sfnt-pingpong 
/usr/bin/sfnt-pingpong
[root@localhost src]# 

太好了!问题找到了 ------**你新编译出来的 `./sfnt-pingpong` 版本已经是正确的 `90b95efce4ec5ab3987cb432a34702e0`**,只是你之前直接敲 `sfnt-pingpong` 跑的是系统里 `/usr/bin/` 的旧二进制(2b01b02...),所以以为 "版本没变化"


# 检查新二进制依赖是否齐全
# ldd  ldd ./sfnt-pingpong   确认没有 `not found` 的行
[root@localhost src]# 
[root@localhost src]# ldd ./sfnt-pingpong    # 确认没有 `not found` 的行
	linux-vdso.so.1 (0x00007fff7493e000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f4b6ce54000)
	librt.so.1 => /lib64/librt.so.1 (0x00007f4b6cc4c000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f4b6c876000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f4b6d1d6000)
	libpthread.so.0 => /lib64/libpthread.so.0 (0x00007f4b6c656000)
[root@localhost src]# 
[root@localhost src]# 

# 备份旧版本并覆盖
# 备份旧的
# cp /usr/bin/sfnt-pingpong /root/sfnt-pingpong_old_2b01b0.bak

# 覆盖
# cp ./sfnt-pingpong /usr/bin/sfnt-pingpong

# 刷新命令缓存
# hash -r

[root@localhost src]# cp /usr/bin/sfnt-pingpong /root/sfnt-pingpong_old_ae1d4bb.bak
[root@localhost src]# 
[root@localhost src]# ll /usr/bin/sfnt-pingpong 
-rwxr-xr-x. 1 root root 168752 Aug  1  2025 /usr/bin/sfnt-pingpong
[root@localhost src]# md5sum /usr/bin/sfnt-pingpong 
9be07b3ab8b3fdf12abe7eb434788623  /usr/bin/sfnt-pingpong
[root@localhost src]# 
[root@localhost src]# cp ./sfnt-pingpong /usr/bin/sfnt-pingpong
cp: overwrite '/usr/bin/sfnt-pingpong'? y
[root@localhost src]# 
[root@localhost src]# hash -r
[root@localhost src]# sfnt-pingpong --version
version: no-version
src: 90b95efce4ec5ab3987cb432a34702e0
[root@localhost src]# 

4. 测试校验

到此已解决 sfnt-pingpong 版本不一致问题

相关推荐
ck01357918 小时前
图片抠图怎么做?从背景去除到透明 PNG 的实用教程
人工智能·测试工具·音视频·媒体·视频
LT101579744421 小时前
2026年国内有哪些好用的性能测试工具?
测试工具
技术人生0011 天前
Selenium 工程化模板(日志+异常截图,可直接复制使用)
python·selenium·测试工具
ck0135791 天前
视频转 GIF 的基本流程与文件大小优化
前端·测试工具·html·音视频·视频
菜鸟阿达2 天前
Postman 有哪些免费/开源的替代品?2026 年接口工具选型参考
测试工具·开源·postman
雪雪爱冲浪3 天前
2026 年网络爬虫领域的Puppeteer vs. Playwright
爬虫·网络协议·测试工具·接口隔离原则
星星码️5 天前
博客系统 Web 端测试报告:功能、自动化与性能
功能测试·测试工具·压力测试·模块测试·测试覆盖率
han68895 天前
selenium之实战
笔记·python·selenium·测试工具·自动化