赞
踩
system.mss下修改网卡模式为temac_adapter_options 设置为1000Mbps,其他不用修改。
ld文件中指定text段指定在bram里,可以让网速大幅提升,
数据拷贝尽量用memcpy,别用for循环,程序运行速度大幅提升。
首先,我们需要弄清楚,当以太网显示连接为1Gbps,它代表了什么?从百兆以太网开始,考虑到要兼容先前的十兆标准,引入了Auto-Negotiation的功能。也就是说,当你用网线连接两个以太网接口的时候,两个接口可以根据提前定义好的握手协议,协商到他们之间连接所能达到的最大速度,这个速度也就是你看到的网口连接速度。
这个握手过程是通过Fast Link Pulse(FPL)来完成的(如下图所示,图片来自Wikipedia)。当两个网口连接时,会发出一串脉冲信号,这些脉冲信号的间隔是125us,一组脉冲信号由17到33个脉冲组成,这组脉冲就是一组FPL。每组FPL包含了一个16位的数据,称为link code word(LCW)。LCW中的这16位数据就包含了这个网口所支持的网速能力。两个网口通过FPL交换了信息之后,就能建立一个他们都能支持的最大速度。可以看出,FPL并不是一个非常快的信号,所以即使使用质量较差的网线,也是能够正确地完成Auto-Negotiation的,也就是说在千兆网口之间使用百兆的网线,他们也可以握手到千兆的速度。
但是,两个千兆的设备握手到了千兆的连接速度,并不代表他们之间就能够以千兆的速度传输数据。这个握手协商后的速度只代表这个link理论上能达到的速度,只是一个link的状态而已,不是实际速度。数据发出端是以千兆的固定速度发出信号,但当使用质量较差的网线时,信号的衰减和回波等都会增大,这些会影响数据接收端的信号质量。有的数据包因此会出现bit error,在网卡进行CRC校验时就会被自动扔掉。网络测速软件测量的都是网卡接收处理后的数据包,并不包含那些已经被丢掉的错误数据包,所以你就会看到数据接收速度远低于显示的千兆连接速度。
那为什么在第一个情况下即使使用了质量好的六类网线却仍然不能达到握手的千兆速度呢?这是因为常用的网速测量软件都只考虑以太网数据帧,而实际上网口发送以太网数据帧时,还要加上Preamble和SFD。此外,虽然千兆以太网标准允许数据帧之间没有间隔,但在大部分设备上,以太网数据帧之间会有12个byte的间隙。有的网速测量软件可能只考虑payload的部分,MAC地址、EtherType和FCS都不计算在内。而1Gbps的握手网速是要把以上所有的部分都考虑进去的。也就是说,以太网的数据传输效率会随着payload的大小而改变。
举个例子,如果是一个没有VLAN、payload为64byte的以太数据帧,它的实际长度应该是
12byte的最小帧间隙+8byte的Preamble和SFD+12byte的MAC地址+2byte的EtherType+64byte的payload+4byte的FCS=102byte
所以,这个时候的效率是64/102=59.375%。
同理,如果payload达到1500byte的时候,效率就能达到97.529%。
总结一下:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。