免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 7986 | 回复: 11
打印 上一主题 下一主题

[技术动态] tcp传输性能瓶颈 [复制链接]

论坛徽章:
2
技术图书徽章
日期:2014-04-15 16:30:27金牛座
日期:2014-06-06 16:20:49
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-08-19 19:40 |只看该作者 |倒序浏览
本帖最后由 knull 于 2014-08-19 19:41 编辑

环境:A,B,C三台机器,A,B是一般的pc机器,双核+1Gbps;C是服务器,8核+1GBps;都是windows系统;
测试内容:用ACE编写的网络测试程序,简单的客户端、服务端;只不过发送的tcp报文比较大,每条消息80K;socket的接收、发送队列,都设置为512K。
测试结果:A和C测试,发送10000条,耗时近80秒,即近10M每秒;对每次recv收到的大小统计,发现其中大部分是1460字节,占90%+;
              A和B测试,发送10000条,没统计耗时;统计每次的recv的大小,发现其中50%是30-40K;0-10K,10-20K,20-30K各占10%左右;其余的,80-520K大约占10%。
分析:在对软件进行性能分析的时候,发现TCP通信是瓶颈,所以单独拿出来测试了下,发现还是这样子的。说明,很可能的确是TCP造成的问题。由于每次接收的包都不大,说明接收端是不饱和的(如果饱和,那么缓冲有512K,完全不会recv这么小的数据包)。这是发送端,也是send整个80K数据包。是不是可能是因为tcp发送慢造成的?另外,很明显的就是,C作为服务器,为什么反而不如pc机B?
提问:这里,tcp通信存在瓶颈,那么可能是什么原因造成的?有没有改进的可能?
谢过

论坛徽章:
1
2015年迎新春徽章
日期:2015-03-04 09:49:45
2 [报告]
发表于 2014-08-20 02:24 |只看该作者
部分的千兆网卡达不到千兆,需要单独测网卡,还要确认用的是千兆交换机和六类网线
windows我没经验,但是相信不至于把千兆弄成百兆

论坛徽章:
12
巳蛇
日期:2013-09-16 15:32:242015年辞旧岁徽章
日期:2015-03-03 16:54:152015年亚洲杯之约旦
日期:2015-02-11 14:38:37双鱼座
日期:2015-01-05 11:05:47戌狗
日期:2014-12-08 09:41:18戌狗
日期:2014-08-15 09:29:29双子座
日期:2014-08-05 09:17:17卯兔
日期:2014-06-08 15:32:18巳蛇
日期:2014-01-27 08:47:08白羊座
日期:2013-11-28 21:04:15巨蟹座
日期:2013-11-13 21:58:012015年亚洲杯之科威特
日期:2015-04-17 16:51:51
3 [报告]
发表于 2014-08-20 09:26 |只看该作者
感觉是网络问题,A到B和A到C的网络是否完全相同?1460字节感觉象是因为MTU的原因被拆分了。

论坛徽章:
0
4 [报告]
发表于 2014-08-20 09:40 |只看该作者
首先,你说的缓冲区是应用程序缓冲区不是套接字缓冲区吧?一般以太网的MTU是1500,减去40字节IP、TCP头后,MSS的大小就是1460。也就是说一次TCP发送最大不分片的包是1460字节大小。C服务器接收的情况符合这种情况。AB两机通信每次都能10K以上?觉得不太可能,用wireshark抓包看看就明白了。

论坛徽章:
0
5 [报告]
发表于 2014-08-20 14:44 |只看该作者
前面那些测试是怎么得出结论 "tcp通信存在瓶颈" ? 每次的recv的大小不一, 跟瓶颈有什么关系?

论坛徽章:
3
天蝎座
日期:2014-10-25 13:44:312015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:48:31
6 [报告]
发表于 2014-08-20 17:27 |只看该作者
曾测试过libevent大量发包,在发送端拥赛,后来把百M交换机替换为千兆交换机,通顺。

发送端通过netstat查看,看到sendQ有10W数量级的包,这样判断发生拥塞了。

论坛徽章:
2
技术图书徽章
日期:2014-04-15 16:30:27金牛座
日期:2014-06-06 16:20:49
7 [报告]
发表于 2014-08-20 18:08 |只看该作者
补充下,今天再次测试了A,B的收发速度,10000条80K的,耗时大约是7-8秒,比C机器快了10倍;而且查看C机器的网络,达到近100M每秒,千兆网卡的极限。

论坛徽章:
2
技术图书徽章
日期:2014-04-15 16:30:27金牛座
日期:2014-06-06 16:20:49
8 [报告]
发表于 2014-08-21 20:08 |只看该作者
回复 6# ilex
首先,感谢你的回复;
很遗憾,我们的系统是windows的,所以,netstat我没找到这些信息

   

论坛徽章:
2
技术图书徽章
日期:2014-04-15 16:30:27金牛座
日期:2014-06-06 16:20:49
9 [报告]
发表于 2014-08-21 20:13 |只看该作者
补充:今天抓包(A,C),发现C发送一个80K的包,会分成近15个小包;发送数据包之后,会等ack,等到之后,才会发送下一个包

论坛徽章:
0
10 [报告]
发表于 2014-08-21 20:16 |只看该作者
感觉不是TCP有瓶颈,是程序本身哪里没处理好吧。
你创建一个最简单的网络模型试试,
server端只接收一个连接,客户端也只用一个connect,连接后while(1)全力发,server端全力收。不管收发都用单线程,发送使用阻塞socket,发成功再返回。收方到就丢掉,或保存到内存,尽量不占CPU时间。然后统计一下收发包的情况,如果你的程序统计和这个数据差不多,那只能说明在你们网络环境下,只能达到这样。否则,就检查一下程序,收或发哪里做了些额外工作,影响了网络的收发。
一般情况下,网络收发单独一个线程,处理数据另开线程比较好。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP