免费注册 查看新帖 |

Chinaunix

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

[网络] 如何提高tcp echo server的通信速率 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2014-07-25 15:51 |只看该作者 |倒序浏览
本帖最后由 woailaoxiang 于 2014-07-25 15:54 编辑

在Cortex A9的芯片上运行Linux 3.14,千兆以太网,全双工

用socket建立了一个接收并且回环应答的tcp服务器,
但是在实测中发现,整个环路的速率只有10MB/s左右,

如果只是接收数据,通信速率有70MB/s,
只是发送,通信速率在40MB/s

怎样进行优化,可以提高回环通信的效率?
谢谢!


具体的代码,如下
通过pthread_create创建了两个单独的收发线程
  1. typedef struct{
  2.         unsigned int valid;
  3.         unsigned int length;
  4.         unsigned char buffer[8192];
  5. }SigPackTypedef;

  6. SigPackTypedef        Pack[1024];
  7. SigPackTypedef        *pRcv, *pSnd;

  8. pRcv= pSnd= Pack;

  9. void *recv_func(void *arg)
  10. {
  11.     while(1)
  12.     {
  13.                 if(pRcv->valid==0)
  14.                 {
  15.                         rxlen = recv(new_fd, pRcv->buffer, 8192, 0);
  16.                         if(rxlen>0)
  17.                         {
  18.                                 pRcv->length= rxlen;
  19.                                 pRcv->valid= 1;
  20.                                 pRcv++;
  21.                                 if(pRcv>= &(Pack[1024]))
  22.                                         pRcv= Pack;
  23.                                 rxsum+= rxlen;
  24.                         }
  25.                         else
  26.                         {
  27.                                 printf("err in recv(%s)\n", strerror(errno));
  28.                                 close(sockfd);
  29.                                 exit(0);
  30.                         }
  31.                 }
  32.     }
  33. }
  34. void *send_func(void *arg)
  35. {
  36.         int res;
  37.         txsum= 0;
  38.         while(1)
  39.         {
  40.                 if(pSnd->valid)
  41.                 {
  42.                         res= send(new_fd, pSnd->buffer, pSnd->length, 0);
  43.                         if(res!= pSnd->length)
  44.                         {
  45.                                 printf("Err in send(%s)\n", strerror(errno));
  46.                         }
  47.                         else
  48.                         {
  49.                                 pSnd->valid= 0;
  50.                                 pSnd++;
  51.                                 if(pSnd>= &(Pack[1024]))
  52.                                         pSnd= Pack;
  53.                                 txsum+= res;
  54.                         }
  55.                 }
  56.         }
  57. }
复制代码

论坛徽章:
0
2 [报告]
发表于 2014-07-25 16:01 |只看该作者
另外,创建的socket是阻塞的。

论坛徽章:
0
3 [报告]
发表于 2014-07-30 09:24 |只看该作者
自己顶,坚决不能沉帖!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP