最近用百度云,常常发现发现上传只有几百K,但如果开多个上传线程,每个都可以有几百K,总速度最多试过有一两m。就是说其实总带宽是不止几百K的,当时猜测是校园网出口的控制策略。
但到了后来用FTP上传文件到校内服务器也发现了这个问题,就是每个上传线程最多只有1.1m/s的速度,五个同时上传也好,只有一个上传任务也好,每个任务都是1.1m/s。
然后就觉得可能是本机的TCP拥堵控制有问题。
在cmd输入
1 |
netsh interface tcp show global |
可以看到以下的返回
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
查询活动状态... TCP 全局参数 ---------------------------------------------- 接收方缩放状态 : enabled 烟囱卸载状态 : automatic NetDMA 状态 : enabled 直接缓存访问(DCA) : disabled 接收窗口自动调谐级别 : normal 附加拥塞控制提供程序 : none ECN 功能 : disabled RFC 1323 时间戳 : disabled ** 上述 autotuninglevel 设置是窗口缩放启发的结果 正在覆盖至少一个配置文件的任何本地/策略配置。 |
可以发现附加拥堵控制提供程序是none,根据这里(https://technet.microsoft.com/en-au/library/bb878127.aspx)的指引,只要以管理员身份运行cmd,然后输入如下指令
1 |
netsh interface tcp set global congestionprovider=ctcp |
即可把拥堵控制换为更为先进的CTCP。然后再次运行
1 |
netsh interface tcp show global |
就会看到
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
查询活动状态... TCP 全局参数 ---------------------------------------------- 接收方缩放状态 : enabled 烟囱卸载状态 : automatic NetDMA 状态 : enabled 直接缓存访问(DCA) : disabled 接收窗口自动调谐级别 : normal 附加拥塞控制提供程序 : ctcp ECN 功能 : disabled RFC 1323 时间戳 : disabled ** 上述 autotuninglevel 设置是窗口缩放启发的结果 正在覆盖至少一个配置文件的任何本地/策略配置。 |
现在上传的瓶颈变成硬盘了(不是说上传速度真的比硬盘传输速度快,而是百度云比较蠢,居然会同时对在同一个硬盘上的文件进行哈希…导致数据吞吐率下降,最后硬盘追不上网速。)