# travodds-perftest **Repository Path**: agiros/travodds-perftest ## Basic Information - **Project Name**: travodds-perftest - **Description**: travodds性能测试工具 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 2 - **Created**: 2025-04-11 - **Last Updated**: 2025-12-08 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 1 TRAVODDS-PERFTEST ## 1.1 项目简介 travodds的性能测试工具 ## 1.2 文件结构 ``` ┌── README.md # 项目说明文档 ├── README.en.md # 项目说明文档英文版 ├── LICENSE # 许可证 ├── CMakeLists.txt # cmake文件 ├── scripts/ # 脚本目录 ├── resources/ # 测试资源文件 ├── debian/ # deb包打包方案 ├── rpm/ # rpm包打包方案 └── cpp/ # 测试代码 ``` ## 1.3 构建命令 ```bash # 创建构建目录 mkdir build # 执行cmake构建命令 # TRAVODDS核心库安装后,默认cmake目录在"C:/Program Files/travodds/share/travodds/cmake"或"/usr/share/travodds/cmake" # 如果您自定义了核心库安装目录,则此处需要通过-DCMAKE_PREFIX_PATH="path"参数告知,以便cmake能够找到travodds-config.cmake文件 # 如果您使用的核心库是静态库请添加-DUSE_SHARED_DEPS=OFF,默认依赖动态库 cmake -S . -B build # 执行生成任务(编译) # 由于MSVC属于多配置生成器,默认构建类型为Debug,如果您需要构建Release类型,请追加--config Release # 建议构建类型与TRAVODDS核心库保持一致,否则编译会报错 cmake --build build # 执行安装任务 # 默认安装前缀目录为"C:/Program Files/travodds-perf/"或"/usr/local" # 如果需要更改,请在执行cmake构建时传入-DCMAKE_INSTALL_PREFIX="/install/prefix/path" cmake --install build ``` ## 1.4 使用方法 ### 1.4.1 Windows 1. 通过cmake构建工程。 2. 准备测试资源文件。travodds_perf_config.json和travodds_perf_test_qos.xml是测试必须的配置,放在测试程序同一目录。 3. 运行travodds_perf程序。需要置于两台测试机,一端发一端收,选择主辅对应的测试配置。 4. 查看测试结果。测试结果输出在程序所在目录下的CSV格式文件中。 ### 1.4.2 Linux #### 1.4.2.1 直接使用 1. 如果用户无需打包安装,直接使用cmake生成测试程序即可,流程与windows相同。 2. 注意cmake的install行为,如果您未通过CMAKE_INSTALL_PREFIX指定安装前缀,默认的前缀是/usr/local,意味着会将travodds-perf测试程序以及其他相关资源文件安装在此目录下。 3. 如果只是临时使用,则无需执行install过程,编译生成即可运行。 #### 1.4.2.2 打包deb 1. 在项目根目录的scripts目录下有一个dpkg.sh,里面包含了打包deb的全过程。 2. 执行这个脚本需要依赖一些工具,如build-essential、devscripts、debhelper、dpkg-dev、fakeroot、cmake、libasio-dev等,以及基本开发、编译环境支持。 3. 内测在Ubuntu 22.04版本进行,早于此版本的Debian系统内核,可能因为环境工具过于陈旧而出现诸多构建问题。 4. 打包完成之后,deb包置于项目根目录的上层目录。 5. 可通过"dpkg -c xx.deb"命令查看deb包的内容。使用"dpkg -x xx.deb tmp/"可以将deb包指定安装到临时目录,用于测试内容。使用"dpkg -i xx.deb"安装。 #### 1.4.2.3 打包rpm 1. 在项目根目录的scripts目录下有一个rpm.sh,里面包含了打包rpm的全过程。 2. 执行这个脚本需要依赖一些工具,如rpmdevtools、rpm-build、cmake等,以及基本开发、编译环境支持。 3. 内测在CentOS Stream 9版本进行,早于此版本的RHEL系统内核,可能因为环境工具过于陈旧而出现诸多构建问题。 4. 打包完成之后,rpm包置于项目根目录的bin目录。 5. 可通过"rpm -qplv xx.rpm"命令查看rpm包的内容。使用"rpm2cpio xx.rpm | cpio -idmv"可以将rpm包指定安装到临时目录,用于测试内容。使用"rpm -ivh xx.rpm"安装。 ## 1.5 测试原理 ### 1.5.1 吞吐量测试 - 主动端 - 读取配置信息; - 按照配置的QoS创建域参与者->发布者->主题->数据写者实体; - 发送数据; - 等待所有数据响应,清理资源退出。 - 被动端 - 读取配置信息; - 按照配置的QoS创建域参与者->订阅者->主题->数据读者实体; - 在回调函数中按照配置读取每个样本,记录每个数据样本的序列号以及接收到的时间戳,在配置的时机输出以下统计信息: - 丢包率=接收到的样本个数/接收到的样本序列号最大值*100% - 总长度=接收到的样本总长度 - 平均长度=接收到的样本总长度/接收到的样本个数 - 花费时间=收到当前包的时间戳-收到第一包的时间戳 - 平均吞吐量=(总长度-第一包长度)/花费时间 - 清理资源退出; ### 1.5.2 时延测试 - 主动端 - 读取配置信息; - 按照配置的QoS创建域参与者; - 按照配置的QoS->发布者->主题1->数据写者实体; - 按照配置的QoS->订阅者->主题2->数据读者实体; - 按照配置中指定的周期、数据长度对外发布主题数据,按照不同的时延模式发送的时机不同,发送时记录当前样本发送时间戳: - Ping-Pong模式 - 主动发送第一包主题1数据; - 等待接收到一包主题2数据后再继续发送主题1数据; - ul模式 - 按照配置的周期发送主题1数据; - 在接收回调函数中做如下处理 - 接收时间戳=收到当前样本时的当前时间戳 - 当前样本(双向时延)rtt=接收时间戳-发送时间戳 - 当前所花费时间=之前所有收到样本rtt的和 - 当前样本抖动jitter=当前样本rtt与前一个样本rtt差的绝对值 - 在配置的时机对当前样本的rtt以及jitter进行从小到达排序,并输出以下统计信息: - 总长度=接收到的样本总长度 - 平均长度=接收到的样本总长度/接收到的样本个数 - 平均时延=当前所花费时间/接收到的样本个数 - 最小时延=rtt的第一个元素 - 最大时延=rtt的最后一个元素 - x%时延=有x%比例的rtt小于该值=rtt的第(接收到的样本个数*x%)个元素 - 抖动的统计方式同理; - 等待所有数据响应,清理资源退出; - 被动端 - 读取配置信息; - 按照配置的QoS创建域参与者; - 按照配置的QoS->订阅者->主题1->数据读者实体; - 按照配置的QoS->发布者->主题2->数据写者实体; - 等待接收到主题1数据后,立即发送相同长度的主题2数据; - 在配置的时机输出以下统计信息: - 总长度=接收到的样本总长度 - 平均长度=接收到的样本总长度/接收到的样本个数 - 等待所有数据响应,清理资源退出; ## 1.6 配置说明 ### 1.6.1 travodds_perf_config.json #### 1.6.1.1 可配置项 travodds_perf_config.json为测试配置文件,由多个配置构成,每个配置有唯一的标识名称,其中tp::前缀的名称表示为吞吐量测试,delay::前缀的名称表示为延时与抖动测试,具体的配置参数说明如下表。 配置 | 类型 | 含义 | 作用范围 --- | --- | --- | --- "m_isPositive" | bool | true表示为主动端,false表示为被动端 | 所有 "m_dpfQosName" | 字符串 | 引用travodds_perf_test_qos.xml中的域参与者工厂QoS名称 | 所有 "m_dpQosName" | 字符串 | 引用travodds_perf_test_qos.xml中的域参与者QoS名称 | 所有 "m_pubQosName" | 字符串 | 引用travodds_perf_test_qos.xml中的发布者QoS名称 | 除吞吐量测试的被动端以外 "m_subQosName" | 字符串 | 引用travodds_perf_test_qos.xml中的域参与者工厂QoS名称 | 除吞吐量测试的主动端以外 "m_writerQosName" | 字符串 | 引用travodds_perf_test_qos.xml中的数据写者QoS名称 | 除吞吐量测试的被动端以外 "m_readerQosName" | 字符串 | 引用travodds_perf_test_qos.xml中的数据读者QoS名称 | 除吞吐量测试的主动端以外 "m_typeName" | 字符串 | 用于测试的数据类型,当前仅支持DDS::Bytes表示缓冲区类型,DDS::ZeroCopyBytes表示零拷贝类型 | 所有 "m_topicName" | 字符串 | 用于测试的主题名称,吞吐量直接使用该名称,延时与抖动加上后缀_Positive以及_Negative两个主题 | 所有 "m_domainId" | 整型 | 表明所处的域号 | 所有 "m_remoteNum" | 整型 | 表明对端的个数,用于配置1对多或者多对1 | 所有 "m_threadNum" | 整型 | 多线程测试时的线程数量 | 所有 "m_userAction" | 整型 | 用于指定吞吐量测试时,接收端的处理模式,0表示Listener中调用take数据并进行统计,1表示异步拷贝零拷贝类型到用户缓冲区,2表示异步读取缓冲区类型。 | 接收端 "m_latencyMode" | 字符串 | 用于指定延时测试模式,当前支持两种,pp表示ping-pong模式(收到对方反馈报文后再发送下一包),ul 表示under-load模式(发送方以一定的周期发送测试报文),默认为pp模式 | 延时测试 "m_useSyncDelay" | bool | true表示在发送数据延时使用同步的方式(忙等精度高,消耗CPU),false表示使用中断方式延时,延时精度不高,默认为false。| 所有 "m_logTimeStamp" | bool | 是否将延时测试中每个报文的详细的发送、接收时间戳记录到csv文件中。 | 延时测试 "m_delayMode" | 整型 | 延时测试时,每包之间的延时模式,0表示发送后延时m_sendDelay,1表示保证发送时间戳间隔为m_sendDelay。 | 延时测试 "m_useTaskNextSample" | bool | 表明接收端是否使用take_next_sample来获取数据 | 除吞吐量测试的主动端以外 "m_minSize" | 整型数组 | 中括号内整型用逗号隔开,表示不同轮次的长度下界,测试程序将在每一轮次发送长度在[m_minSize, m_maxSize]区间中随机的样本,两者相等则不随机 | 所有 "m_maxSize" | 整型数组 | 中括号内整型用逗号隔开,表示不同轮次的长度上界,测试程序将发送长度在[m_minSize, m_maxSize]区间中随机的样本,两者相等则不随机 | 所有 "m_sendCount" | 整型数组 | 中括号内整型用逗号隔开,表示不同轮次发送的数据量 | 所有主动端 "m_sendDelayCount" | 整型数组 | 中括号内整型用逗号隔开,表示不同轮次每发送m_sendDelayCount进行延迟 | 所有主动端 "m_sendDelay" | 整型数组 | 中括号内整型用逗号隔开,表示不同轮次每次延迟的时间,us | 所有主动端 "m_sendPrintGap | 整型数组 | 中括号内整型用逗号隔开,表示不同轮次每发送 m_sendPrintGap 输出一条信息 | 所有主动端 "m_recvPrintGap" | 整型数组 | 中括号内整型用逗号隔开,表示不同轮次每发送 m_recvPrintGap 输出一条信息 | 所有被动端 "m_resultPath" | 字符串 | 存储测试结果,测试程序将自动添加所有QoS以及类型名称作为测试结果文件的前缀 | 所有被动端 #### 1.6.1.2 默认配置 配置名称 | 说明 --- | --- tp::positive_tcp | tcp吞吐量测试主动端 tp::negative_tcp | tcp吞吐量测试被动端 tp::positive_udp | udp吞吐量测试主动端 tp::negative_udp | udp吞吐量测试被动端 tp::positive_shm | 共享内存吞吐量测试主动端 tp::negative_shm | 共享内存吞吐量测试被动端 delay::positive_tcp | tcp吞吐量测试主动端 delay::negative_tcp | tcp吞吐量测试被动端 delay::positive_udp | udp吞吐量测试主动端 delay::negative_udp | udp吞吐量测试被动端 delay::positive_shm | 共享内存时延测试的主动端 delay::negative_shm | 共享内存时延测试的被动端 ### 1.6.2 travodds_perf_test_qos.xml travodds_perf_test_qos.xml 为测试所依赖的QoS配置文件,其中预定义了一些常用的QoS,如下表所示。 实体 | QoS名称 | 说明 --- | --- | --- DPF | default | 默认域参与者工厂配置 DP | default | 默认域参与者配置 Publisher | default | 默认发布者配置 Subscriber | default | 默认订阅者配置 DataWriter | reliable_keep_all | 可靠的数据写者配置 DataWriter | best-effort | 非可靠的数据写者配置 DataReader | reliable_keep_all | 可靠的数据读者配置 DataReader | best-effort | 非可靠的数据读者配置 ## 1.7 结果解析 - rtt_avg、rtt_min、rtt_max分别表示样本rtt的平均值、最小值以及最大值; - rtt_XX%表示XX%的样本rtt均在该范围内; - 如果开启了m_logTimeStamp,延时测试表格中包长、数量两列后续表示样本的发送时间戳以及接收时间戳。