终于发现lmhub的瓶颈了

 上次修改了广播的缺陷,直接写入所有通道来发送片,目的是可以同时接收对端发送的帧。(因为广播使能是不能发送片应答)

现在更主要是问题,当然不是致命问题,却是最难解决的问题。lmhub目前最大的瓶颈就是搬移片的速度太慢。

如果一次接收了所有路的片,并且假设都是接收了4片,那么就要搬移很长时间,而且搬移的过程中是关中断的。

这样必然造成丢片。

呵呵,当初脑子没转过来,为什么早没有想到关中断搬移,如果搬移时间超过10ms,就会丢片,而且使用c语言写的,执行时间很长。

但是这个问题其实不会有致命的影响,因为一般情况下通信量很小,而且帧也不会那么大,同时接收到那么多片的

可能性也比较小。所以一般不会丢片。

解决办法有两个:

第一:把搬移代码改写成汇编,但是比较困难。

第二:如果不行就只能减少通道数量了。

当初之所以没有注意到这里,不是我没想到,而是我认为内存搬移会很快,慢就慢在从FPGA读数据,从总线读数据的速度虽然慢点,但大块的搬移内存也是很慢的。有关这些操作的时间需要通过实验得到。

第二天:

早上一来和涛哥讨论了一下,立刻又发现了新亮点,上边写的原因是本质原因。一下是更清楚的分析。

程序的结构是

for(71路)

{

ipset 1

A.关中断中,先搬移一路到xmem中

ipres

B.判断这路是否已经收够片数了,如果够了就组帧。

}

 昨天我实验是把B.中尽量减少搬移的次数(把搬移的代码都注释掉了),这样B.相当于很快就完成了,大部分消耗在A.,A.是关闭中断的,循环75遍的时间关闭中断,这样肯定会丢片的。这就是昨天为什么很简单的代码,几乎相同,唯一的差别就是我减少了搬移次数,结果丢帧丢的更厉害了。原因就是连续关闭中断的时间太长了。

因为root中储存4片,所以必须在40ms内把所有71路*4个片搬走,可以让下一次中断发生时新片有root可放。

但是要注意一个很重要的现象,单发帧,可以完全接收,说明问题就在连续发送两帧的链接处。

因为当收完71路的帧的最后一片时,相当于一下进来了71个整帧,B.的处理时间一下加长了,之前只是简单的记片数,现在还要搬移整帧,然后checksum,所以这下不能在40ms内搬移完毕所有buf,所以下一帧的片再进来时就会丢帧,尤其是没有收到头片,所以后边的整个帧都会丢掉。如果连续发3帧,那么第一帧和低三帧能够收到,第二帧将丢失。

 终于发现关键点了:我把checksum去掉后双向广播发送都不丢帧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值