阅读:1749回复:10
如何提高网络吞吐
本人对网卡工作原理十分感兴趣,有一些问题想请教高手:
1网卡的处理速率,是真正全双工,还是由半双工模拟全双工?100M网卡是否可以全双工线速?如果不能达到全双工线速,那么主要的瓶颈在哪里?网卡对数据包的发送时间与接收时间是否相同? 2在使用组播包测试网络接口的环回时间时(即在同一台计算机上发送、接收组播数据包),发现在网卡连接网线时或拔掉网线时,环回时间时间差别特别大,为什么? 在有网线的情况下,组播包是否经过网络后再返回呢? 欢迎有兴趣的朋友与我联系! |
|
沙发#
发布于:2002-06-24 10:58
1.现在的网卡大概都能支持全双工.但真正的工作模式与连接对象有关,若对方不支持全双工也是没办法的事情.
2.100M网卡当然可以工作在全双工线速.若达不到,首先看网卡是否工作在100M全双工模式,其次看DRIVER做得有无问题. 3.网卡对数据包发送与接受的时间是一样的要不然怎么做到线速全双工?但从内存到卡上FIFO及从卡上buffer到内存就不一定,跟具体的工作方式有关. |
|
|
板凳#
发布于:2002-06-24 19:30
我想知道如果不能达到线速全双工,真正的瓶颈在那里?(最好能够从发送/接收的整个流程讲)
如果瓶颈不在网卡上,那么现在的多网卡捆绑技术是否不可以提高网络吞吐呢? |
|
地板#
发布于:2002-06-25 09:34
1.发送:主机内存-->NIC FIFO-->CABLE
接收:CABLE-->NIC FIFO-->主机内存. 对网卡来讲从内存到CABLE(就是发到线上以及反向的接收过程都是可以达到线速的因为是硬件完成的.但NIC跟主机内存的数据交换就有软件参与.发送是把BUFFER地址告诉NIC,然后NIC用DMA读到FIFO.接收是NIC用DMA写到BUFFER.读写完后还得让上层软件知道好进行下一步操作(继续收发还是空闲),这就要用到中断.但不是每个包收发完后都会中断.为了提高效率一般是几个包才产生一次中断(DMA操作完,实际不会等到做完才产生,那就太晚了).如果DRIVER做得有问题就可能不能及时处理导致数据吞吐达不到线速.当然如果网卡硬件有问题而导致经常丢包上层软件(协议)必须经常重传的话也会导致这种结果.但现在应该很少会发生. 多网卡捆绑技术是可以提高网络吞吐.它实际是几块网卡一起用.但单块网卡的吞吐并不会有改变. |
|
|
地下室#
发布于:2002-06-25 13:31
1)假设100M的网卡,数据包大小1200 byte,计算
1200*8*1000/100/1024/1024 = 0.09155毫秒(每个包的发送/接收时间) 2)采用环回接口测得:发送加上接收一个数据包的时间如下 Tout + Tin = 0.105毫秒 3)采用组播发送接收/接收数据包(假设组播包经过物理网卡接口环回测得),测得 (Tout + Tadpter_out + Tadpter_in +Tin ) * 2 = 0.323毫秒 根据(1),(2)(Tout + Tadpter_out + Tadpter_in +Tin ) * 2 = 0.5762毫秒 如何解释与(3)差别如此之大? 一、多网卡捆绑技术是可以提高网络吞吐,最多可以捆绑几块,如何确定? 二、如何测试网卡发送/接收数据包的时间(网卡部分的时间,驱动部分的时间),有无更好的办法? |
|
5楼#
发布于:2002-06-26 12:27
1.ethernet 数据包大小是按BIT来算而非BYTE,最大是1518BIT,如果有VLAN是1522BIT.所以你的计算是有问题的.
2.TRUNKING技术可以在不必采用更高规格的硬件的情况下提高网络吞吐,但捆绑的数量一般不超过4个.因为再多的话技术会比较复杂,价格也会上涨,还不如去买高规格的硬件.(就是10M换100M,100M换GIGA,10块100M的网卡肯定比一块GIGA的网卡要贵) |
|
|
6楼#
发布于:2002-06-27 09:10
不好意思,昨天犯迷糊,居然说以太网帧最大长度是1518BIT,说错了,见笑了.是BYTE.
能不能描述一下你的测试环境,你插上线是连到哪里的? |
|
|
7楼#
发布于:2002-06-27 14:23
环回接口不用网线了。
测试组播时,网卡连在交换机上。 测试程序采用Winsock,WinNT环境 |
|
8楼#
发布于:2002-06-28 09:33
正确的算法应该是:
每BIT耗时10X10E(-9),即10纳秒,1200BYTE耗时1200*8*10ns,就是0.096毫秒.我不知道你所说的1200BYTE有没有算上帧头帧尾,如果再考虑到IPG,电路延迟,和你实测结果差不多. 我费了好大的劲才理解你的算法.我猜你是对网卡和交换机的工作原理不太熟悉.实际上经过交换机的环回时间应该是0.096*2+xx毫秒,和你测得的0.323毫秒相差无几. [编辑 - 6/28/02 by Master_Yi] |
|
|
9楼#
发布于:2002-07-01 20:44
非常感谢Master_Yi的耐心解答!
不好意思,我的公式写的不清楚,让你费神。 (Tout + Tadpter_out + Tadpter_in +Tin ) * 2 = 0.323毫秒 是由两个测试程序完成的。一个程序发送原始数据包,另一个接收后,再转发回来,最后由原始发送程序回收。所以说与理论计算非常不符合。实际测量值远小于理论计算值。 另外,IPG指什么? |
|
10楼#
发布于:2002-07-05 12:50
如何在WinNT下测试数据包从Socket缓冲区,经驱动程序,发送到网卡的时间?
在WinNT下,我可以得到的最小时间精度是多少? 请大侠指点! |
|