广告广告位招商联系 ads@irunion.comA5 · 728×90(移动端 320×100) · 参考价 ¥300/月了解详情 →

ROS2 DDS 发现风暴:多机启动后 CPU 飙高时的 Participant 与域隔离清单

Started by irunion编辑部 · 2026-11-04 01:54 UTC · 22 views · 2 replies
I Editorial
车队或多机实验床一键拉起后,CPU 被 DDS 发现占满、风扇狂转,业务节点还没开始干活——很常见被误判成「机器性能不够」或「某个节点写炸了」。更常见的是 Participant 过多、域未隔离、组播风暴或发现周期过密。本帖整理「先确认是发现而非业务话题 → 再收 Participant/域 → 最后调 QoS/传输」的清单。

一、先确认是不是发现风暴
1. 启动后立刻 CPU 高、话题尚无稳定发布:优先查 discovery;业务算力尖峰通常随订阅与传感器帧率出现。
2. 用系统监控看是否大量 UDP 组播/单播打满某个核;对照 DDS 实现的 discovery 线程。
3. 单机正常、多机同网段一起炸:高度怀疑共享域 + 组播范围过大。

二、Participant 与进程模型
1. 每个进程一个 Participant 时,节点拆太碎会线性放大发现表;能合并的生命周期节点尽量同进程。
2. 启动顺序:先基础设施(记录、tf、公共参数)再批量感知节点,避免 N 台同时全量宣告。
3. 退出要干净:崩溃残留的租约未过期时,其他机会持续重试匹配,表现为「停了一台反而更吵」。

三、域与网络隔离
1. 不同车队/实验床使用不同 Domain ID;同网段多项目混域是发现风暴重灾区。
2. 组播范围:开发机与车载网是否二层互通要心中有数;必要时用对等发现或限制接口。
3. 防火墙/交换机未知组播处理:有的环境会把组播变成泛洪,表象与 DDS 配置无关。

四、QoS 与传输
1. 发现周期与租约:过密的 announcement 在大车队上先伤 CPU;按规模拉长并做压测。
2. 大消息与发现分开看:图像/点云走的共享内存或专用通道,不要和发现调参混为一谈。
3. 多网卡:指定用于 DDS 的接口,避免发现包从错误网卡出去再被转发一圈。

五、验收建议
1. 记录冷启动 N 台时的 CPU、UDP pps、Participant 数量曲线。
2. 变更域、启动编排、DDS 配置同版本入库。
3. 禁止为「先跑起来」把所有节点丢进 Domain 0 还不做隔离。

六、常见误区
- 一飙高就加 CPU,不查域与进程数。
- 开发笔记本与车队同域同网段长期共存。
- 用关防火墙当常规方案。

欢迎补充你们在 Fast DDS / CycloneDDS、以及实车多网段下的发现隔离经验。
I Editorial
产线多机伺服同时上电时,若通讯与运动在同一二层域,也会出现类似的发现/广播风暴占 CPU。和 DDS Domain 隔离一样,运动总线与普通 IT 网段要分开;Participant 过多对应到「节点拆太碎」。建议冷启动分批拉起,并记录 UDP/组播 pps 与 CPU 曲线。域隔离和限幅联锁一样,属于上线前就要定的边界,而不是出了再关防火墙。
R Member
判断是发现风暴还是业务负载,关键看时间点:上电后立即占满且话题尚未稳定发布,基本是发现问题;业务负载通常随订阅与传感器帧率爬升。先把进程数压下来:每个进程一个 Participant,把同一功能、生命周期一致的节点合并为组件容器,Participant 数量降下来后发现表规模是接近平方级下降的。启动编排也要错峰,先起定位、TF 与记录等基础设施,感知节点分批拉起,避免几十台同时全量宣告。退出路径同样重要,崩溃节点的租约过期前其他节点会反复重试匹配,设置合理的租约与发现宣告周期。做压测时记录冷启动的 CPU、UDP 包速率与 Participant 曲线,只有三条曲线同时回落才算修好,而不是只看峰值 CPU 降没降。
广告广告位招商联系 ads@irunion.comA6 · 728×90(移动端 320×100) · 参考价 ¥200/月了解详情 →
Log in or register to reply.