带宽时延乘积指的是链路的带宽(单位比特每秒)与来回通信延迟(RTT,单位秒)的乘积。结果为比特的数据量,表示在特定时间该网络上的最大数据量--已发送但尚未确认的数据。
带宽时延乘积对网络性能的影响
举一个好理解的例子,开了100Mb的电信宽带,但由于中间一些路由器以及链路的瓶颈,导致ping对端主机的RTT为1s,对端的窗口大小为64kB,那么你的发包速度很快会占满窗口,必须等待ACK回来才能重新发包,所以你的速度大概只能有64KB/S。
假设两台电脑百兆网口接在一起用Chariot跑TCP流量,电脑的窗口大小为64KB(窗口不自动扩大)。它们之间线路速度为100Mb/s,RTT稳定为1ms,那么带宽时延乘积为100Kb (12.5KB), 小于窗口大小,那么跑出来的速度是接近线速(100Mb/s)的。如果RTT稳定为10ms,那么理论速度为64*8/10=51.2Mb/s。
在实验室测试电信的百兆光纤专线时,使用www.speedtest.net网站测速,下载测试速度大概85Mb/s,以64KB的窗口大小计算可以得出RTT大概等于6ms。而自己搭PPPOE服务器,测试性能,下载速度可以到93Mb/s。说明中间路由器的转发,链路速度这些会使RTT时间增大,从而影响下载性能。
如果开通百兆网,并不意味着你真正有百兆的使用体验,这还得需要运营商优化线路,使用性能更好的中间路由器,努力降低往返时延才行。
http://blog.csdn.net/u013401853/article/details/53930932
应用程序通过socket系统调用和远程主机进行通讯,每一个socket都有一个读写缓冲区。读缓冲区保存了远程主机发送过来的数据,如果缓冲区已满,则数据会被丢弃,写缓冲期保存了要发送到远程主机的数据,如果写缓冲区已慢,则系统的应用程序在写入数据时会阻塞。可知,缓冲区是有大小的。
BDP 给出了一种简单的方法来计算理论上最优的 TCP socket 缓冲区大小(其中保存了排队等待传输和等待应用程序接收的数据)。如果缓冲区太小,那么 TCP 窗口就不能完全打开,这会对性能造成限制。如果缓冲区太大,那么宝贵的内存资源就会造成浪费。如果您设置的缓冲区大小正好合适,那么就可以完全利用可用的带宽
BDP = 带宽 * 延迟 (单位: 字节)
带宽*延时/8*2^20 = ***B
带宽: Mebibites 延时:s (RTT)
注意:调整tcp前,必须调整core,对于tcp,udp来说不能超出core的限制
默认值:
net.core.rmem_max = 131071 128K
net.core.rmem_default = 124928
net.core.wmem_max = 131071
net.core.wmem_default = 124928
net.ipv4.tcp_rmem = 4096 87380 2691072
net.ipv4.tcp_wmem = 4096 16384 2691072
示例:
带宽:1.5M 100M
延时:500ms 3000ms
1.5 * 0.5 / 8 * 2^20 ======= net.ipv4.tcp_wmem
100 * 3 / 8 * 2^20 ======= net.ipv4.tcp_wmem
一般设置socket的sendbuf和recvbuf等于带宽时延乘积。