如何降低UDP的丢帧率

aozhi 2012-07-02 04:39:17
传输视频码流,250路,2Mbit/s,运行1天左右。有时某些时段会有大量丢帧(10%左右),有时则连续不到1%的丢帧。
传输层协议用的是UDP。

把sysctl配置改了。
net.core.rmem_default = 256000
net.core.wmem_default = 256000
net.core.rmem_max = 1024000
net.core.wmem_max = 1024000
丢帧率没有明显改善。

目标:避免连续丢帧和偶尔3%以下的丢帧。
请教各位,有没有其他办法呀?
...全文
789 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
titer1 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 的回复:]

网络条件差的话,udp丢包率根本无法通过软件优化解决,增加超时重发机制,效果往往比tcp更差
[/Quote]
简言之,用户层来实现重发。
titer1 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 的回复:]

一般丢包都不会发生在发送端,很有可能是接收端来不及处理
[/Quote]

喂得太多了,以至于接收端吃不过来,呵呵
titer1 2012-08-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

把缓冲区调大一点试试。250路,你用250个线程来接收吧!
[/Quote]

这么多线程,linux下面来个线程池。
falloutmx 2012-08-02
  • 打赏
  • 举报
回复
果然是接收端的问题。你网络带宽占了多少了?千兆网用到50%以上就很难处理了
aozhi 2012-08-02
  • 打赏
  • 举报
回复
各位久等了。
我把结果调查出来了,情况如下。

我用的是intel 82574L网卡。
网卡接收环上,描述符队列空间不足,用ethtool -G把描述符个数调到最大,只能减缓描述符队列空间不足的频率,不能彻底避免。
累计网卡寄存器MPC,得到的数值很大。故判断内存不够是丢包的主要原因。换了大内存,可以减少丢包。
clean的时候,分配skb,也会出现内存不够的现象。从次数上看也不是主要原因。
所以估计就是内存不够了。

各位还有别的见解吗?准备结贴了。
jackyjkchen 2012-08-02
  • 打赏
  • 举报
回复
网络条件差的话,udp丢包率根本无法通过软件优化解决,增加超时重发机制,效果往往比tcp更差
akainixing 2012-08-02
  • 打赏
  • 举报
回复
希望楼主 有时间把这个写成博客 然后详细分享下你的经验 把链接放在这里 麻烦了!
Wenxy1 2012-07-10
  • 打赏
  • 举报
回复
UDP丢包无解,可靠UDP,性能比TCP还要差吧?
falloutmx 2012-07-10
  • 打赏
  • 举报
回复
一般丢包都不会发生在发送端,很有可能是接收端来不及处理
aozhi 2012-07-10
  • 打赏
  • 举报
回复
我尝试用tcpdump抓包,想分析一下包丢在哪儿。
发送端一个包都不丢。接收端被内核扔掉了20%,把tcpdump的参数-s设定成1,接收端被内核扔了2%。
又用vmstat看了下两端,发送端cpu占用时间sys+usr大约1%,接收端30%-40%。
估计是接收端cpu压力过大,导致tcpdump来不及处理,于是丢包。

哪位大侠用过比tcpdump轻一点的抓包工具呢?
推荐一个呗。
aozhi 2012-07-10
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]
2Mbit/s是1路?
[/Quote]

是的。
每个端口2Mbis/s,共250个UDP端口。
恨天低 2012-07-09
  • 打赏
  • 举报
回复
实在是极限的话,试试更新下网卡的驱动,或者加强CPU。
恨天低 2012-07-09
  • 打赏
  • 举报
回复
把缓冲区调大一点试试。250路,你用250个线程来接收吧!
aozhi 2012-07-09
  • 打赏
  • 举报
回复
会不会是网络设备不行呢?
falloutmx 2012-07-09
  • 打赏
  • 举报
回复
2Mbit/s是1路?
daviddb7 2012-07-03
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

引用 2 楼 的回复:
QOS开了没?


这个不是很懂啊。
find / -name *qos*一下,只找到了几个头文件。
/usr/src/kernels/***/include/net/irda/qos.h
/usr/src/kernels/***/include/config/ipw2200/qos.h
/usr/src/kernels/***/include/linu……
[/Quote]
应该不用装,本机网卡和交换机都支持802.1p就可以。
qq120848369 2012-07-02
  • 打赏
  • 举报
回复
我只知道UDT这个开源库是可靠的UDP,做视频传输刚刚的。
aozhi 2012-07-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 的回复:]
QOS开了没?
[/Quote]

这个不是很懂啊。
find / -name *qos*一下,只找到了几个头文件。
/usr/src/kernels/***/include/net/irda/qos.h
/usr/src/kernels/***/include/config/ipw2200/qos.h
/usr/src/kernels/***/include/linux/pm_qos_params.h
是不是没装啊?
morris88 2012-07-02
  • 打赏
  • 举报
回复
SCTP
aozhi 2012-07-02
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 的回复:]
换用 TCP 来保证可靠传输;否则自己实现一个可靠 UDP 传输协议
[/Quote]

传输视频,响应敏感啊。
一般宁可少丢点帧也别卡。所以当初没用TCP,但这次丢的有点多。
加载更多回复(2)

19,612

社区成员

发帖
与我相关
我的任务
社区描述
系统使用、管理、维护问题。可以是Ubuntu, Fedora, Unix等等
社区管理员
  • 系统维护与使用区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧