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

相关文章

将Mybatis升级为Mybatis-Plus的详细过程

《将Mybatis升级为Mybatis-Plus的详细过程》本文详细介绍了在若依管理系统(v3.8.8)中将MyBatis升级为MyBatis-Plus的过程,旨在提升开发效率,通过本文,开发者可实现... 目录说明流程增加依赖修改配置文件注释掉MyBATisConfig里面的Bean代码生成使用IDEA生

Python如何使用__slots__实现节省内存和性能优化

《Python如何使用__slots__实现节省内存和性能优化》你有想过,一个小小的__slots__能让你的Python类内存消耗直接减半吗,没错,今天咱们要聊的就是这个让人眼前一亮的技巧,感兴趣的... 目录背景:内存吃得满满的类__slots__:你的内存管理小助手举个大概的例子:看看效果如何?1.

Redis中高并发读写性能的深度解析与优化

《Redis中高并发读写性能的深度解析与优化》Redis作为一款高性能的内存数据库,广泛应用于缓存、消息队列、实时统计等场景,本文将深入探讨Redis的读写并发能力,感兴趣的小伙伴可以了解下... 目录引言一、Redis 并发能力概述1.1 Redis 的读写性能1.2 影响 Redis 并发能力的因素二、

Golang中拼接字符串的6种方式性能对比

《Golang中拼接字符串的6种方式性能对比》golang的string类型是不可修改的,对于拼接字符串来说,本质上还是创建一个新的对象将数据放进去,主要有6种拼接方式,下面小编就来为大家详细讲讲吧... 目录拼接方式介绍性能对比测试代码测试结果源码分析golang的string类型是不可修改的,对于拼接字

linux环境openssl、openssh升级流程

《linux环境openssl、openssh升级流程》该文章详细介绍了在Ubuntu22.04系统上升级OpenSSL和OpenSSH的方法,首先,升级OpenSSL的步骤包括下载最新版本、安装编译... 目录一.升级openssl1.官网下载最新版openssl2.安装编译环境3.下载后解压安装4.备份

mysql线上查询之前要性能调优的技巧及示例

《mysql线上查询之前要性能调优的技巧及示例》文章介绍了查询优化的几种方法,包括使用索引、避免不必要的列和行、有效的JOIN策略、子查询和派生表的优化、查询提示和优化器提示等,这些方法可以帮助提高数... 目录避免不必要的列和行使用有效的JOIN策略使用子查询和派生表时要小心使用查询提示和优化器提示其他常

Springboot中分析SQL性能的两种方式详解

《Springboot中分析SQL性能的两种方式详解》文章介绍了SQL性能分析的两种方式:MyBatis-Plus性能分析插件和p6spy框架,MyBatis-Plus插件配置简单,适用于开发和测试环... 目录SQL性能分析的两种方式:功能介绍实现方式:实现步骤:SQL性能分析的两种方式:功能介绍记录

Tomcat高效部署与性能优化方式

《Tomcat高效部署与性能优化方式》本文介绍了如何高效部署Tomcat并进行性能优化,以确保Web应用的稳定运行和高效响应,高效部署包括环境准备、安装Tomcat、配置Tomcat、部署应用和启动T... 目录Tomcat高效部署与性能优化一、引言二、Tomcat高效部署三、Tomcat性能优化总结Tom

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

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

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

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