tcp传输效率问题,请高手解答 ( 积分: 200 )

  • 主题发起人 主题发起人 rebek
  • 开始时间 开始时间
R

rebek

Unregistered / Unconfirmed
GUEST, unregistred user!
程序设计:
采用多线程的tcp协议做文件传输。
server: 启动1监听线程监听某端口,收到连接请求后为此连接创建新的线程发送数据给客户端,测试程序中线程未做任何处理,一次发送1-8k数据,测试程序中线程会不停的给客户端发送速度,而客户端也会不停的收数据并直接丢弃
client:测试程序中客户端收到数据后立刻丢弃,并取新的数据。
目前状况:
100M局域网。
server端的总传输最大能力为6M byte/s左右。
如只有一个client client1连接上,此连接的传输速度为6M byte/s左右。
在新连接上一个client client2,这时client1和client2基本平分6M byte/s的速度。
client1 和clinet2分别为3M byte/s。
再有新的连接上来,都是平分server的总速度。
server的总的传输速度固定在6M byte/s,连接多的时候略有下降。
而此时cpu使用率为40%多。内存使用也不高。
疑问描述:
个人理解,在cpu和内存富余的情况下 对于单个连接应该都能达到极限速度,随着
连接到server的客户端越多,server的总发送速度应该是变大。
测试程序中发送。接收线程都未做任何处理,瓶颈不在互斥量,和硬盘读取速度上。
各位高手有无做过类似应用。一些ftp server的总发送速度,是怎么达到一个比较高
的水平。
盼解答
 
程序设计:
采用多线程的tcp协议做文件传输。
server: 启动1监听线程监听某端口,收到连接请求后为此连接创建新的线程发送数据给客户端,测试程序中线程未做任何处理,一次发送1-8k数据,测试程序中线程会不停的给客户端发送速度,而客户端也会不停的收数据并直接丢弃
client:测试程序中客户端收到数据后立刻丢弃,并取新的数据。
目前状况:
100M局域网。
server端的总传输最大能力为6M byte/s左右。
如只有一个client client1连接上,此连接的传输速度为6M byte/s左右。
在新连接上一个client client2,这时client1和client2基本平分6M byte/s的速度。
client1 和clinet2分别为3M byte/s。
再有新的连接上来,都是平分server的总速度。
server的总的传输速度固定在6M byte/s,连接多的时候略有下降。
而此时cpu使用率为40%多。内存使用也不高。
疑问描述:
个人理解,在cpu和内存富余的情况下 对于单个连接应该都能达到极限速度,随着
连接到server的客户端越多,server的总发送速度应该是变大。
测试程序中发送。接收线程都未做任何处理,瓶颈不在互斥量,和硬盘读取速度上。
各位高手有无做过类似应用。一些ftp server的总发送速度,是怎么达到一个比较高
的水平。
盼解答
 
问题2个
1:硬盘的访问时间减低速度 : 一般都是预读
2:还有程序本身的 切换 : 一次发出多点的数据tcp的缓冲区是可以设置的,把那里搞大点
这样会达到极限的
 
》》:测试程序中发送。接收线程都未做任何处理,瓶颈不在互斥量,和硬盘读取速度上。

瓶颈在硬盘访问上已经排除了
一次发送,从1k-8k都试过了。对速度基本没有影响。

请问 【可爱小猪】 你们做的server最大传输总速率到了多少?
 
我在局域网最高能做到10M
 
你是不是用的阻塞模式
阻塞模式IO 需要时间,改成非阻塞IO 、完成端口之类的测一下。
呵呵我还没进行量化测试,测完了把结果说一下
 
to:djh_djh
我用的是阻塞模式,但是对每一个连接我都是开了一个线程做处理,我现在的困惑就是为什么连接数增加的时候,server的总发送速度不会提高,不同的socket的连接啊,1个连接到2个连接都是平分了6m的速度。郁闷。。而且cpu是一直不高的。
iocp我也试过了,iocp比较适合传输数据量不大,但是响应请求巨大的应用
但是对于传输数据量很大,实时性能要求高的应用,iocp就不那么适合了
我用iocp,server的总连接速度倒是会随着client增加而增加,但是到了5m左右就打住了,而且单个连接的速度只有1m左右不能达到我应用的要求,(传实时视频)

to leaber:
你用的什么模式? 不知道能不能充分利用局网的100M带宽,做到server总传送速度达到 50M左右,嘿嘿,不知道那些FTP server能到什么程度,是不是要起多个进程啊
 
应该可以提高的;

你这样:
就在本机测试 S + C 端,地址 127.0.0.1 ;
估计一下发 200M 的数据大慨要多少时间;

如果没问题了,那么可以考虑是否局域网问题、交换机有?、网络结构等;
 
用来TCP传视频? 不会吧
我用RTP测过视频能达到10M
 
IOCP优化一下,速度应该是不错的!可以投递多个异步请求
 
如果在100M局域网中服务器才6M吞吐肯定有问题!
 
100M局域网指的是 100Mbps 吧
正常来说最大速度应该是 12.5MByte/s 吧

其实我觉得达到 6M Byte 已经可以了
 
后退
顶部