- 论坛徽章:
- 0
|
本帖最后由 woailaoxiang 于 2014-07-25 15:54 编辑
在Cortex A9的芯片上运行Linux 3.14,千兆以太网,全双工
用socket建立了一个接收并且回环应答的tcp服务器,
但是在实测中发现,整个环路的速率只有10MB/s左右,
如果只是接收数据,通信速率有70MB/s,
只是发送,通信速率在40MB/s
怎样进行优化,可以提高回环通信的效率?
谢谢!
具体的代码,如下
通过pthread_create创建了两个单独的收发线程- typedef struct{
- unsigned int valid;
- unsigned int length;
- unsigned char buffer[8192];
- }SigPackTypedef;
- SigPackTypedef Pack[1024];
- SigPackTypedef *pRcv, *pSnd;
- pRcv= pSnd= Pack;
- void *recv_func(void *arg)
- {
- while(1)
- {
- if(pRcv->valid==0)
- {
- rxlen = recv(new_fd, pRcv->buffer, 8192, 0);
- if(rxlen>0)
- {
- pRcv->length= rxlen;
- pRcv->valid= 1;
- pRcv++;
- if(pRcv>= &(Pack[1024]))
- pRcv= Pack;
- rxsum+= rxlen;
- }
- else
- {
- printf("err in recv(%s)\n", strerror(errno));
- close(sockfd);
- exit(0);
- }
- }
- }
- }
- void *send_func(void *arg)
- {
- int res;
- txsum= 0;
- while(1)
- {
- if(pSnd->valid)
- {
- res= send(new_fd, pSnd->buffer, pSnd->length, 0);
- if(res!= pSnd->length)
- {
- printf("Err in send(%s)\n", strerror(errno));
- }
- else
- {
- pSnd->valid= 0;
- pSnd++;
- if(pSnd>= &(Pack[1024]))
- pSnd= Pack;
- txsum+= res;
- }
- }
- }
- }
复制代码 |
|