ROS2 王牌升级:Fast-DDS 性能直接碾压 zeroMQ 「下」

2024-04-22 01:44

本文主要是介绍ROS2 王牌升级:Fast-DDS 性能直接碾压 zeroMQ 「下」,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

以下内容为本人的学习笔记,如需要转载,请声明原文链接 微信公众号「ENG八戒」https://mp.weixin.qq.com/s/aU1l3HV3a9YnwNtC1mTiOA

性能比较

下面就以官网的测试数据为准,让我们一起来看看它们的性能差别到底怎样。

本次比较仅针对 Fast RTPS 和 ZeroMQ 的数据收发延迟和吞吐量两方面,传输模式都采用发布订阅制,而且会统一使用 Fast Buffers 序列化模块处理数据。

测试环境:

系统: Fedora 20 64bit as OS
硬件: Intel Core i3 @3.4GHz,4GB RAM,1Gbps Intel 千兆网络适配器

配置:

组件Fast RTPSZeroMQ
版本1.04.0.5
序列化Fast Buffers 0.3.0Fast Buffers 0.3.0
模式基于UDP 的单播和多播,自动发现发布订阅模式

Fast RTPS 和 ZeroMQ 有什么区别

Fast RTPS 的实时发布订阅模式是基于 UDP 协议实现,比较灵活而轻量,同时可靠性的实现是基于单播和多播时添加 ACK/NACK。

ZeroMQ 底层基于 TCP 协议实现,相对会消耗更多资源。

组件Fast RTPSZeroMQ
传输基于 UDP 协议实现,比较灵活而轻量,同时可靠性的实现是基于单播和多播时添加 ACK/NACK基于 TCP 协议实现,不支持多播
协议头RTPS 的协议头被设计得更加通用而灵活,包含比如关键主题、分发顺序等,所以协议头比较大协议头比较小,不够灵活
节点发现内置端点发现机制,Qos 兼容的情况下,只需指定主题名和主题数据类型,就可以自动匹配发布者和订阅者不具备自动发现端点机制,实现通信前需要手动设置发布者和订阅者的 IP

延迟对比

所谓的延迟就是消息从一端顺利到达另一端所花费的时间。

一般在分组网络里,延迟有两种的测量方法,单向延迟和往返延迟。单向延迟测量的是发送时间,而往返延迟测量的是发送和接收回复的总时间。

由于往返延迟可通过仅在一端测量完成,是常用测量方法。

一对一传输:

一对一传输的情况下,单向消息延迟的计算,开始于发布端对消息序列化,然后发送到订阅端,订阅端接收消息并逆序列化完成为止的时间。而往返消息延迟的计算,开始于发布端对消息序列化,然后发送到订阅端,订阅端接收并返回消息,发布端接收到返回消息完成为止的时间。

比如下面的图中,往返时间是 T2-T1,对应发布订阅模式中延迟时间将是 (T2-T1)/2

看看 Fast RTPS 和 ZeroMQ 消息的延迟测试结果比较:

总体来看,Fast RTPS 和 ZeroMQ 传输延迟曲线都呈现线性,但是 Fast RTPS 斜率更低。可以看到,在数据量比较小时,ZeroMQ 的传输延迟更好一些。但随着数据量的增加,Fast RTPS 延迟增长变慢,最终明显好于 ZeroMQ,数据量越大差距越大,

放大来看,当传输的数据量介乎 16 到 128 字节区间内时,ZeroMQ 的延时明显要更好,这归功于 ZeroMQ 的协议头比较小的原因。随着传输数据量的增加,协议头在整个数据包中的比例越来越小,对传输延迟的影响也越来越小,最终协议头小的优势失效。

一对多传输:

有多个订阅者的情况下,延迟测试和单个订阅者的测试类似,但多个订阅者接收到信息后只有一个订阅者会回复消息。往返时间是 T2-T1,对应发布订阅模式中延迟时间将是 (T2-T1)/2

看看 Fast RTPS 和 ZeroMQ 消息的延迟测试结果比较:

当传输数据量比较小时,Fast RTPS 和 ZeroMQ 延迟非常接近。数据量增大后,Fast RTPS 多播的优势越发明显,比如传输的数据量达到 16 KBytes 时,Fast RTPS 比 ZeroMQ 要快 200 us。

即使数据量较小,但由于 ZeroMQ 不支持多播,为了向多个订阅者发送数据,就必须多次发送,势必增大延迟。消息订阅者越多,ZeroMQ 的传输延迟越大。Fast RTPS 由于具备多播的能力,所以延迟增加比较慢。

吞吐量对比

在网络通信中,数据吞吐量一般指的是信道数据成功传输的速率,单位是字节每秒。

测量数据吞吐量的方法很多,比较常用的就是发送一个大文件或者多个小文件,假设文件总大小为 size,监测文件传送到接收端的时间为 T,那么最后吞吐量的计算结果是 size / T

测试对比的时候,RTPS 在一定时间内发送多组消息,但是吞吐量不是一个固定值而是一个范围,既然是范围就有最大值,为了找到这个最大值,需要不断尝试不同的消息量 D,找到能实现发布者发送管道最大化同时订阅者接收没有丢包的值。测试过程可看下图:

测试吞吐量同样既可以在发送端测试,也可以在接收端测试。两种测试方式在没有丢包的情况下是基本一致的,细微的差别来自于测试的时间有差异。如果存在丢包,吞吐量测试结果就依赖于在哪一端测试。为了统一测试规则,我们假设接收端没有丢包,吞吐量监测放在发送端。

再来看看 ZeroMQ 和 Fast RTPS 的数据吞吐量测试结果对比:

可以看到,ZeroMQ 在小数据量传输时数据吞吐量更高,这是由于 TCP 协议是经过吞吐量优化的流协议,会自动将多个小包合并成一包发送。而 Fast RTPS 如果需要实现类似的操作,需要额外使用主题的类型数组。

另外,相对地 ZeroMQ 需要比较大的数据量才能达到最大吞吐量,而 Fast RTPS 则能更快达到最大吞吐量,大概在 1000 字节的消息大小时超过 ZeroMQ。

总结

全文已结束,看到这里,你是否对 Fast RTPS 有了初步认识?终于明白为什么 ROS2 采用它作为底层通信的默认实现了吧?如果你有什么想法,可以直接在后台回复我,八戒恭候多时!

最后,非常感激各位朋友的点 「赞」 和点击 「在看」,谢谢!

这篇关于ROS2 王牌升级:Fast-DDS 性能直接碾压 zeroMQ 「下」的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/924546

相关文章

C#使用yield关键字实现提升迭代性能与效率

《C#使用yield关键字实现提升迭代性能与效率》yield关键字在C#中简化了数据迭代的方式,实现了按需生成数据,自动维护迭代状态,本文主要来聊聊如何使用yield关键字实现提升迭代性能与效率,感兴... 目录前言传统迭代和yield迭代方式对比yield延迟加载按需获取数据yield break显式示迭

怎么关闭Ubuntu无人值守升级? Ubuntu禁止自动更新的技巧

《怎么关闭Ubuntu无人值守升级?Ubuntu禁止自动更新的技巧》UbuntuLinux系统禁止自动更新的时候,提示“无人值守升级在关机期间,请不要关闭计算机进程”,该怎么解决这个问题?详细请看... 本教程教你如何处理无人值守的升级,即 Ubuntu linux 的自动系统更新。来源:https://

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

你的华为手机升级了吗? 鸿蒙NEXT多连推5.0.123版本变化颇多

《你的华为手机升级了吗?鸿蒙NEXT多连推5.0.123版本变化颇多》现在的手机系统更新可不仅仅是修修补补那么简单了,华为手机的鸿蒙系统最近可是动作频频,给用户们带来了不少惊喜... 为了让用户的使用体验变得很好,华为手机不仅发布了一系列给力的新机,还在操作系统方面进行了疯狂的发力。尤其是近期,不仅鸿蒙O

正则表达式高级应用与性能优化记录

《正则表达式高级应用与性能优化记录》本文介绍了正则表达式的高级应用和性能优化技巧,包括文本拆分、合并、XML/HTML解析、数据分析、以及性能优化方法,通过这些技巧,可以更高效地利用正则表达式进行复杂... 目录第6章:正则表达式的高级应用6.1 模式匹配与文本处理6.1.1 文本拆分6.1.2 文本合并6

Vue3 的 shallowRef 和 shallowReactive:优化性能

大家对 Vue3 的 ref 和 reactive 都很熟悉,那么对 shallowRef 和 shallowReactive 是否了解呢? 在编程和数据结构中,“shallow”(浅层)通常指对数据结构的最外层进行操作,而不递归地处理其内部或嵌套的数据。这种处理方式关注的是数据结构的第一层属性或元素,而忽略更深层次的嵌套内容。 1. 浅层与深层的对比 1.1 浅层(Shallow) 定义

性能测试介绍

性能测试是一种测试方法,旨在评估系统、应用程序或组件在现实场景中的性能表现和可靠性。它通常用于衡量系统在不同负载条件下的响应时间、吞吐量、资源利用率、稳定性和可扩展性等关键指标。 为什么要进行性能测试 通过性能测试,可以确定系统是否能够满足预期的性能要求,找出性能瓶颈和潜在的问题,并进行优化和调整。 发现性能瓶颈:性能测试可以帮助发现系统的性能瓶颈,即系统在高负载或高并发情况下可能出现的问题

性能分析之MySQL索引实战案例

文章目录 一、前言二、准备三、MySQL索引优化四、MySQL 索引知识回顾五、总结 一、前言 在上一讲性能工具之 JProfiler 简单登录案例分析实战中已经发现SQL没有建立索引问题,本文将一起从代码层去分析为什么没有建立索引? 开源ERP项目地址:https://gitee.com/jishenghua/JSH_ERP 二、准备 打开IDEA找到登录请求资源路径位置

黑神话,XSKY 星飞全闪单卷性能突破310万

当下,云计算仍然是企业主要的基础架构,随着关键业务的逐步虚拟化和云化,对于块存储的性能要求也日益提高。企业对于低延迟、高稳定性的存储解决方案的需求日益迫切。为了满足这些日益增长的 IO 密集型应用场景,众多云服务提供商正在不断推陈出新,推出具有更低时延和更高 IOPS 性能的云硬盘产品。 8 月 22 日 2024 DTCC 大会上(第十五届中国数据库技术大会),XSKY星辰天合正式公布了基于星

基于UE5和ROS2的激光雷达+深度RGBD相机小车的仿真指南(五):Blender锥桶建模

前言 本系列教程旨在使用UE5配置一个具备激光雷达+深度摄像机的仿真小车,并使用通过跨平台的方式进行ROS2和UE5仿真的通讯,达到小车自主导航的目的。本教程默认有ROS2导航及其gazebo仿真相关方面基础,Nav2相关的学习教程可以参考本人的其他博客Nav2代价地图实现和原理–Nav2源码解读之CostMap2D(上)-CSDN博客往期教程: 第一期:基于UE5和ROS2的激光雷达+深度RG