【FastDDS】Examples ( 01-benchmark )

Fast-DDS的benchmark示例是一个用于测试DDS通信性能的工具,主要通过发布者(Publisher)和订阅者(Subscriber)之间的消息传输,验证不同配置下的吞吐量等性能指标。以下是代码结构和核心逻辑的梳理:

一、代码结构

示例位于Fast-DDS/examples/cpp/benchmark,主要文件及功能如下:

文件/目录功能描述
main.cpp程序入口,解析命令行参数,初始化发布者/订阅者应用,并启动运行。
Application.hpp/cpp抽象应用基类,定义发布者和订阅者的通用接口(如run()stop())。
PublisherApp.hpp/cpp发布者实现类,负责按配置发送消息,并统计吞吐量。
SubscriberApp.hpp/cpp订阅者实现类,负责接收消息并记录接收情况。
CLIParser.hpp命令行参数解析,处理用户输入的配置(如消息大小、传输协议、QoS策略等)。
types/定义不同大小的消息类型(通过IDL生成),如Benchmark_small(16KB)、Benchmark_big(8MB)等。
benchmark_profile.xmlDDS QoS配置文件,定义参与者、数据读写器的可靠性、持久性等策略。
CMakeLists.txt编译配置,生成可执行文件并复制XML配置到构建目录。

二、核心逻辑

1. 消息类型设计

types/目录下的消息类型通过IDL定义,并由fastddsgen工具生成C++代码,支持不同大小的消息传输:

  • BenchMark:仅包含一个uint32_t索引(无附加数据)。
  • BenchMarkSmall:包含uint32_t索引 + 16KB数组(std::array<char, 16384>)。
  • BenchMarkMedium:包含uint32_t索引 + 512KB数组(std::array<char, 524288>)。
  • BenchMarkBig:包含uint32_t索引 + 8MB数组(std::array<char, 8388608>)。

这些类型用于模拟不同大小的 payload,测试DDS在不同数据量下的性能。

2. 命令行参数解析(CLIParser.hpp

支持配置多种运行参数,核心配置项如下:

  • 角色publishersubscriber(必选)。
  • 消息大小NONE(默认)、SMALLMEDIUMBIG(对应上述消息类型)。
  • 传输协议DEFAULT(SHM + UDPv4)、SHM(共享内存)、UDPv4LARGE_DATA(大数据模式)。
  • QoS策略
    • 可靠性(--reliable):可靠传输(默认)或尽力而为(未指定时)。
    • 持久性(--transient-local):瞬态本地(默认)或volatile。
  • 发布者特有参数
    • 消息发送间隔(-i,默认100ms)。
    • 运行超时时间(-to,默认10s)。
    • 发送样本数(-s,默认无限)。

解析后的参数被封装到benchmark_config结构体,用于初始化发布者/订阅者。

3. 发布者逻辑(PublisherApp.cpp
  • 初始化:根据配置创建DDS参与者(Participant)、主题(Topic)、数据写入器(DataWriter),并等待订阅者发现(通过matched_变量判断)。
  • 消息发送
    • 循环发送消息,根据配置的interval控制发送间隔。
    • 消息索引自增,用于跟踪发送顺序。
  • 性能统计
    • 记录总运行时间、发送样本数。
    • 计算吞吐量(每秒传输字节数),并按Gbps/Mbps/Kbps格式化输出。
4. 订阅者逻辑(隐含于代码结构)
  • 初始化:创建DDS参与者、主题、数据读取器(DataReader),等待发布者发现。
  • 消息接收:通过回调函数接收消息,记录接收的样本索引,验证消息完整性。
  • 匹配与退出:持续运行直至接收指定数量的样本或被中断(Ctrl+C)。
5. QoS配置(benchmark_profile.xml

默认配置:

  • 参与者(Participant):使用域ID 0。
  • 数据写入器/读取器:
    • 可靠性:可靠(RELIABLE)。
    • 持久性:瞬态本地(TRANSIENT_LOCAL)。
    • 历史记录:保留最后100个样本(KEEP_LAST,深度100)。

用户可修改XML文件调整QoS策略,测试不同配置对性能的影响。

三、运行流程

  1. 编译:通过CMake构建,生成benchmark可执行文件。
  2. 启动订阅者
    ./benchmark subscriber [选项]  # 如指定消息大小:--msg-size BIG
    
  3. 启动发布者
    ./benchmark publisher [选项]  # 如指定传输协议:--transport SHM
    
  4. 输出结果:发布者完成后输出总样本数、吞吐量等统计信息(示例如下):
    RESULTS after 1206 milliseconds:
    COUNT: 500
    SAMPLES: 41,46,44,...
    THROUGHPUT BPS: 3.48482 Gbps
    

四、核心测试场景

通过组合不同参数,可测试:

  • 不同消息大小(16KB~8MB)对吞吐量的影响。
  • 传输协议(SHM vs UDPv4)的性能差异(共享内存通常更快)。
  • 可靠性QoS(可靠传输 vs 尽力而为)对传输效率的影响。
  • 大数据模式(LARGE_DATA)对超大消息的处理能力。

该示例为评估Fast-DDS在不同场景下的性能提供了灵活的测试框架。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ray Song

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值