跳转至主要内容
我们刚刚从T1(1.544 Mbps)升级到T3(44.736 Mbps),为什么复制那个文件还是要花90分钟?

 

简单来说,容量提升不等于传输速度加快。即使将容量提升近29倍(44.736 / 1.544),你或许能在90分钟内复制29个文件,但单个文件的传输速度可能不会因此加快。 去年我在题为《应用性能问题与延迟》的博文中曾提及此现象,但认为文件传输和copy_file操作值得单独撰文深入探讨。

 

关键在于窗口大小,即发送主机/应用程序在无需暂停等待接收主机/应用程序确认的情况下,能够发送多少字节的数据。某些应用程序(如FTP)不具备应用层确认机制,依赖于TCP实现。此时窗口大小取决于远程主机TCP层声明的值,最高可达64K字节——这是STCP支持的最大值。 部分应用程序具备应用层窗口机制,对于这类应用,限制窗口取决于TCP窗口与应用窗口两者中的较小值。
最大吞吐量按以下方式计算:

 

W / RTT = T
何处
W 是窗口大小(以字节为单位)
RTT 是指往返时间(以秒为单位)
T 表示每秒传输的字节数
往返时间是指发送数据并收到确认所需的时间。 对于长距离传输(如跨国传输),该时间主要取决于数据包的传输距离以及端点间所有网络设备的处理速度。接收主机的处理速度、数据包大小(TCP MSS值,详见《提升子网间吞吐量的简易方法》)以及最慢链路的带宽则影响较小。

 

例如,若往返时间为0.050秒,窗口大小为64K,则最大吞吐量为每秒1,310,720字节(64 × 1024 ÷ 0.050)。只要链路的闲置容量大于吞吐量,增加容量就不会加快传输时间。
T 是理论上的最大吞吐量。除非扩大窗口或缩短往返时间,否则任何操作都无法提升速度,但恶劣的网络环境可能导致速度大幅下降。

 

估算传输时间只需将文件大小除以吞吐量

 

F/ W * RTT = Ti
何处
F 是文件大小(单位:字节)
W 是窗口大小(以字节为单位)
RTT 是指往返时间(以秒为单位)
Ti 是传输文件所需的时间(单位:秒)

 

OSL的应用程序窗口大小为4K,OpenVOS文件系统以4K字节为单位报告文件大小,因此要估算使用copy_file命令在两个OpenVOS系统间复制文件所需的时间,只需

 

F * RTT = Ti
何处
F 是文件大小(以块为单位)
RTT 是指往返时间(以秒为单位)
Ti 是传输文件所需的时间(单位:秒)

 

在往返时间为0.050秒的链路上,OSL复制50,000个数据块的文件需耗时略超过41分钟(50,000 × 0.05)。 最大吞吐量为每秒81,920字节(4096 / 0.050)。只要链路的闲置网络带宽大于每秒81,920字节,增加带宽并不会缩短文件复制时间。

 

测量往返时间最简单的方法是使用ping命令。遗憾的是,ping不会给出单一的往返时间数值,而是返回多个数值,且这些数值可能存在显著差异,例如:

 

ping 172.16.1.80
Pinging host 172.16.1.80 : 172.16.1.80
ICMP Echo Reply:TTL 53 time = 418 ms
ICMP Echo Reply:TTL 53 time = 107 ms
ICMP Echo Reply:TTL 53 time = 91 ms
ICMP Echo Reply:TTL 53 time = 100 ms
Host 172.16.1.80 replied to all 4 of the 4 pings
ready 12:03:15

 

若需计算最佳吞吐量,请取最低数值。若需合理预估预期值,请使用10次ping计数,剔除最高值与最低值各两个,其余数值取平均值。

 

ping 172.16.1.80 -count 10
Pinging host 172.16.1.80 : 172.16.1.80
ICMP Echo Reply:TTL 53 time = 89 ms
ICMP Echo Reply:TTL 53 time = 96 ms
ICMP Echo Reply:TTL 53 time = 95 ms
ICMP Echo Reply:TTL 53 time = 105 ms
ICMP Echo Reply:TTL 53 time = 186 ms
ICMP Echo Reply:TTL 53 time = 87 ms
ICMP Echo Reply:TTL 53 time = 90 ms
ICMP Echo Reply:TTL 53 time = 90 ms
ICMP Echo Reply:TTL 53 time = 89 ms
ICMP Echo Reply:TTL 53 time = 96 ms
Host 172.16.1.80 replied to all 10 of the 10 pings
ready 12:12:39
calc 96 + 95 + 90 + 90 + 89 + 96
556
ready 12:12:49
calc 556 / 6
92.6666666666667
ready 12:12:57

 

如前所述,恶意网络会显著降低传输速度。Ping超时便是明证。因此任何超时现象都意味着这些计算结果可能过于乐观。 磁盘或CPU负载过高同样会拖慢传输速度:发端可能无法以最快速度读取并发送数据,收端则可能因读取速度低于数据到达速率而延迟应用确认(增加往返时间),甚至可能因TCP接收缓冲区满载导致发送主机停止传输。要判断是否存在上述情况,唯一途径是进行数据包追踪分析。