當須要在機器之間傳輸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/