DSOMEIP丢数据问题分析和总结:

(1)问题现象

        无论使用arm64硬件、x86 ubuntu电脑、ubuntu docker哪种组合进行DSOMEIP event通信,接收端都会在event payload长度增加到一定程度时udp方式出现丢数据现象。

        总体上arm64硬件略优于x86 ubuntu电脑,x86 ubuntu电脑略优于ubuntu docker。并且用wireshark抓包时每次都可以抓到丢的SOMEIP数据包,并且数据包完整并且TP顺序没有问题。

        如果使用vrte example的默认json配置文件,根据上面通信载体不同丢数据现象会出现在event payload长度为500KB、200KB、或50KB。

(2)问题分析

        问题可能是由于硬件资源和网络环境的限制,造成过大的数据包分成过多的TP(以1个tp长度1400为例,两个tp之间时间间隔大约为0.07-0.08ms),从而使接收端接收不及时tp无法组成完整的SOMEIP数据包。

(3)解决方法

 优化方案应该包含以下方面:

[a] 连续发送多个tp后,发送端等待1个小延时,如1ms。

[b] 默认接收端数据接收buffer是1MB,接收大于1MB的数据需要对应增加buffer长度。

[c] 优化SOMEIP-SD的过程,减少测试过程中SD对通信过程的影响。

发送端json几个重要配置的说明:

"event_burstSize":"20"    // 连续20个tp中间不加时间间隔,这个地方如果不填则默认为0

"event_maximum_segment_length": "0x578" // tp长度为1400

"event_separation_time":"0.001"                                  // 两个burst之间的时间间隔,这个从代码看很有误导性,其实可以填小数,单位是s而不是ms。这块之前我们理解错了,应该是json配置解析时比较隐蔽的乘以了1000,从代码看起来还以为直接填整数ms。

接收端json几个重要配置的说明:

"udp_maximum_receive_buffer_size": "5"  // 接收端buffer为5MB

附件为实验用的一对json文件。

在ubuntu docker环境下测了3000KB-1s和1000KB-350ms 10分钟都没有再出现丢数据

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

aFakeProgramer

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

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

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

打赏作者

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

抵扣说明:

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

余额充值