当前位置: 代码网 > it编程>数据库>Redis > RTI DDS大数据碎片

RTI DDS大数据碎片

2024年07月31日 Redis 我要评论
PublicationBuiltingTopicData或SubscriptionBuiltnTopicData样本较大的最常见原因是序列化的TypeCode或TypeObject,但您也可能发送了大量属性(通过7.5.19 PROPERTY QosPolicy(DDS扩展))或具有较大的ContentFilteredTopic筛选器表达式,以及其他大小可变的字段,这可能会导致样本大小较大。如果您尝试发送一个大小大于MTU的DDS样本,但尚未设置DDS级碎片,您将看到IP级碎片。

有两种类型的碎片:ip级碎片和dds级碎片。

当传输层(通常是udp或tcp)提供的有效载荷超过适合链路帧的最大有效载荷大小(也称为链路最大传输单元或链路mtu)时,就会发生ip级碎片。如果网络是以太网,则链路mtu是以太网帧的最大大小。当接收器nic获得ip片段时,它会将它们存储在缓冲区中,直到接收到所有片段,并且可以重新组装以形成udp数据报或tcp段。当接收到所有片段时,执行重新组装,并将消息提供给应用层。

如果您尝试发送一个大小大于mtu的dds样本,但尚未设置dds级碎片,您将看到ip级碎片。众所周知,ip级碎片是脆弱的,如果您的系统配置不正确,可能会导致通信问题。例如,当您的应用程序依赖于传输来对数据进行分片,并且一个分片丢失时,则需要重新发送所有分片以修复丢失的分片——而如果您使用reliable reliability(见7.5.21 reliability qospolicy),connext dds可以修复单个丢失的dds分片。

https://community.rti.com/static/documentation/connext-dds/6.1.1/doc/manuals/connext_dds_professional/users_manual/index.htm#users_manual/largedata_fragmentation.htm?highlight=asynchronousicon-default.png?t=n7t8https://community.rti.com/static/documentation/connext-dds/6.1.1/doc/manuals/connext_dds_professional/users_manual/index.htm#users_manual/largedata_fragmentation.htm?highlight=asynchronous

23.3.3异步发布

如果您使用的是reliable 7.5.21 reliability qospolicy,dds级碎片需要异步发布。发送大于传输的message_size_max的可靠样本需要异步发布,这样碎片化过程就可以在编写样本的线程的上下文之外进行。

如果您使用的是尽力而为的可靠性,则大于message_size_max的样本将被分割;但是,不建议使用此配置(尽力而为,加上碎片化),因为您更有可能丢弃样本。错误“commendsrwriterservice_on_submessage:!write-resend。可靠的大数据需要异步写入”来自序列化样本大于传输的message_size_max,而7.5.21可靠性qos策略设置为可靠性qos,但未启用异步发布。

要在使用可靠可靠性的同时对dds数据包进行分段,请将7.5.20 publish_mode qospolicy(dds扩展)中的kind设置为asyncronous_publish_mode_qos。使用这些设置,connext dds将使用单独的线程发送片段。这将减轻应用程序线程执行碎片和发送工作的负担。有关异步发布器的更多信息,请参阅7.4.1异步发布器qos策略(dds扩展)。

可能还需要将内置publicationbuiltintopicdata和subscriptionbuiltintopdatawriters的发布模式设置为异步。这是通过9.5.3 discovery_config qos策略(dds扩展)完成的(详见23.3.5示例)。publicationbuiltingtopicdata或subscriptionbuiltntopicdata样本较大的最常见原因是序列化的typecode或typeobject,但您也可能发送了大量属性(通过7.5.19 property qospolicy(dds扩展))或具有较大的contentfilteredtopic筛选器表达式,以及其他大小可变的字段,这可能会导致样本大小较大。也可能是样本不是特别大,但如果您将message_size_max设置为一个较小的值来强制dds级分段,则内置datawriters发送的样本可能会超过此大小并需要分段。

使用异步发送模式可减少dds碎片

异步发布的优点:

异步发布可能会增加延迟,但具有以下优点:

  • write() 调用不进行任何网络调用,因此速度更快、更具确定性。当用户线程正在执行时间关键代码时,这一点变得很重要。
  • 当数据以突发方式写入或将大型数据类型作为多个分段发送时,流控制器可以限制异步发布线程的发送速率,以避免淹没网络。
  • 针对同一目标的异步写入的 dds 样本将合并到单个网络数据包中,从而减少带宽消耗。
(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2025  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com