ROS2性能优化(一) ------------- 优化executor性能

本文针对ROS2节点订阅大量topic导致CPU使用率升高的问题进行分析,发现executor遍历和处理机制类似select,效率低下。通过研究官方issue和使用ebpf工具,提出模拟epoll实现进行优化,包括一次性添加等待对象、动态添加删除和使用就绪列表,以提高性能。并以代码示例说明优化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

使用ros2实现的节点,订阅了较多的topic数量(70个左右), 节点cpu使用率明显升高
使用perf观察火焰图,executor耗时较多.

在这里插入图片描述

在ros2 rclcpp的github上搜到确实有一个相关的issue.

官方issue

https://github.com/ros2/rclcpp/issues/1637

原因分析

既然官方问题还没有解决,我们先分析和解决一下吧

进一步使用ebpf工具分析函数的调用次数和单次耗时,发现rmw_wait单次耗时都比较久,达到了ms级别.因此重点分析rmw_wait的实现. --------- ebpf工具的使用可以阅读专栏相关文章了解.

发现每次rmw_wait操作都会先遍历所有要订阅的sub, 所有clients, 所有events, 所有guard_conditions. 然后依次添加到具体DDS实现的wait_set上,然后调用DDS相关接口等待就绪对象. 当有一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

self-motivation

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

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

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

打赏作者

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

抵扣说明:

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

余额充值