当须要在机器之间传输400GB文件的时候,你就会很是在乎传输的速度了。默认状况下(约125MB带宽,网络延迟17ms,Intel E5-2430,本文后续讨论默认是指该环境),scp的速度约为40MB,传输400GB则须要170分钟,约3小时,若是能够加速,则能够大大节约工程师的时间,让攻城师们有更多时间去看个电影,陪陪家人。php
声明:这里给出的测试数据不具备通常性,仅供参考。测试与数据自己特性有很大关系,本文使用InnoDB的redo log做为测试数据。算法
* 改变ssh加密算法,可让速度更快;一般,越弱的加密算法,速度越快网络
* 一般压缩会下降scp速度,但这与数据类型有很大关系,对压缩率很是高的数据启用压缩,能够加速ssh
* 压缩级别对传输效率影响很小工具
* 用于完整性校验的不一样MAC( message authentication code)算法,对性能约有10%-20%的影响。性能
因此,简单尝试以下,让你的SCP速度double一下:测试
注:启用压缩使用参数: -o "Compression yes"加密
这里对比了12种ssh中实现的加密算法和是否使用压缩的传输效率,测试文件使用的是InnoDB的1GB*4的日志文件(注意:不一样类型的文件测试结果会很不一样),这里纵坐标单位为MB/s,数据分为压缩传输和不压缩传输两组:spa
原始数据:scp_speed.txt日志
能够看到,不一样加密算法传输速度相差很大;使用了压缩以后,速度降低不少,也看到不一样加密算法加密后区别并不大。
* 压缩只有在网络传输速度很是慢,以至于压缩后节省的传输时间大于压缩自己的时间,这时才有效果,因此是否启用压缩,须要实际测试
* 压缩比很低的数据,不要再启用压缩(例如已经压缩过的数据、视频等)
* 一般建议,传输前先压缩,而不是使用ssh的压缩;建议使用pigz/lbizp2等并行压缩工具
* 数据中大量重复、空洞,这类适合压缩的数据,能够尝试压缩选项,例如以下是一组,大量"空洞"数据的测试:
看到,压缩大大提升了传输效率
最后一组对比是,将压缩级别从1改到9,对比传输速度,纵坐标单位MB/s,对12种加密算法分别使用了测试9个压缩级别,数据以下:
大图连接 原始数据:scp-compression-level.txt
能够看到,压缩级别对传输影响较小。ssh使用的默认压缩级别是6。
经过选项Macs能够设置对应的哈希算法,man ssh_config能够看到支持哪些哈希算法。这里对了比了12中加密算法下使用不用的完整性校验算法的性能状况:
看到,绝大数状况下"umac-64@openssh.com"(关于此哈希)性能都更好,因此建议尝试使用此哈希算法作验证,看看你的场景下速度是否与提高。也能够看到,默认的hmac-md5哈希在默认的加密aes128-ctr下表现比较好;
http://www.orczhou.com/index.php/2013/11/make-scp-faster-with-cipher-and-compression/