加速scp傳輸速度

當需要在機器之間傳輸400GB文件的時候,你就會非常在意傳輸的速度了。默認情況下(約125MB帶寬,網絡延遲17ms,Intel E5-2430,本文后續討論默認是指該環境),scp的速度約為40MB,傳輸400GB則需要170分鐘,約3小時,如果可以加速,則可以大大節約工程師的時間,讓攻城師們有更多時間去看個電影,陪陪家人。

目錄

  • 1. 結論
  • 2. 測試數據:加密算法和壓縮的影響
  • 3. 關于是否啟用壓縮
  • 4. "壓縮級別"對傳輸速度影響不大
  • 5. 測試數據:完整性校驗算法MACs選擇
  • 6. 參考閱讀

1. 結論

聲明:這里給出的測試數據不具有一般性,僅供參考。測試與數據本身特性有很大關系,本文使用InnoDB的redo log作為測試數據。

* 改變ssh加密算法,可以讓速度更快;通常,越弱的加密算法,速度越快

*?通常壓縮會降低scp速度,但這與數據類型有很大關系,對壓縮率非常高的數據啟用壓縮,可以加速

* 壓縮級別對傳輸效率影響很小

* 用于完整性校驗的不同MAC( message authentication code)算法,對性能約有10%-20%的影響。

所以,簡單嘗試如下,讓你的SCP速度double一下:

scp -r -c arcfour128 ...
scp -r -c aes192-cbc ...
scp -r -c arcfour128 -o "MACs umac-64@openssh.com" ...

注:啟用壓縮使用參數: -o "Compression yes"

2. 測試數據:加密算法和壓縮的影響

這里對比了12種ssh中實現的加密算法和是否使用壓縮的傳輸效率,測試文件使用的是InnoDB的1GB*4的日志文件(注意:不同類型的文件測試結果會很不同),這里縱坐標單位為MB/s,數據分為壓縮傳輸和不壓縮傳輸兩組:

screen-scp-compare-cipher-compression

原始數據:scp_speed.txt

?

可以看到,不同加密算法傳輸速度相差很大;使用了壓縮之后,速度下降很多,也看到不同加密算法加密后區別并不大。

3. 關于是否啟用壓縮

* 壓縮只有在網絡傳輸速度非常慢,以致于壓縮后節省的傳輸時間大于壓縮本身的時間,這時才有效果,所以是否啟用壓縮,需要實際測試

* 壓縮比很低的數據,不要再啟用壓縮(例如已經壓縮過的數據、視頻等)

* 通常建議,傳輸前先壓縮,而不是使用ssh的壓縮;建議使用pigz/lbizp2等并行壓縮工具

* 數據中大量重復、空洞,這類適合壓縮的數據,可以嘗試壓縮選項,例如如下是一組,大量"空洞"數據的測試:

chart_1

看到,壓縮大大提高了傳輸效率

4. "壓縮級別"對傳輸速度影響不大

最后一組對比是,將壓縮級別從1改到9,對比傳輸速度,縱坐標單位MB/s,對12種加密算法分別使用了測試9個壓縮級別,數據如下:

screen-scp-compare-compression-level

原始數據:

MB/s            with-compression  without-compressoin
3des-cbc        17.525            13.5
aes256-ctr      20.325            30.2
aes192-ctr      20.275            35.1
aes128-ctr      20.275            38.5
cast128-cbc     20.825            38.9
blowfish-cbc    20.8              43.1
arcfour         21.975            74.2
arcfour128      21.725            75
arcfour256      22.025            75.8
aes128-cbc      21.6              75.8
aes256-cbc      21.325            80.1
aes192-cbc      21.725            85.2

可以看到,壓縮級別對傳輸影響較小。ssh使用的默認壓縮級別是6。

5. 測試數據:完整性校驗算法MACs選擇

通過選項Macs可以設置對應的哈希算法,man ssh_config可以看到支持哪些哈希算法。這里對了比了12中加密算法下使用不用的完整性校驗算法的性能情況:

screen-scp-compare-macs-all

看到,絕大數情況下"umac-64@openssh.com"(關于此哈希)性能都更好,所以建議嘗試使用此哈希算法做驗證,看看你的場景下速度是否與提升。也可以看到,默認的hmac-md5哈希在默認的加密aes128-ctr下表現比較好;

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/444810.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/444810.shtml
英文地址,請注明出處:http://en.pswp.cn/news/444810.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

tcpcopy使用方法

1、下載tcpcopy http://code.google.com/p/tcpcopy/downloads/list 2、配置、編譯、安裝 依此使用如下命令: 配置: ./configure 編譯: make 安裝: make install 3、使用方法 下面以mosquitto為例,說明tcpcopy的用法&a…

C++(14)--面向對象

面向對象1.面向對象編程(難點)2.類和對象demo1:地主類的實現版本1demo2:地主類的實現版本23.訪問修飾符demo3:外部修改成員變量不安全(版本3)demo4: 使用封裝防止直接修改成員變量(版本3)demo5:進一步封裝:設置/獲取名字,修改積分…

終于,我讀懂了所有Java集合——map篇(多線程)

多線程環境下的問題 1.8中hashmap的確不會因為多線程put導致死循環(1.7代碼中會這樣子),但是依然有其他的弊端,比如數據丟失等等。因此多線程情況下還是建議使用ConcurrentHashMap。 數據丟失:當多線程put的時候&…

system函數的返回值和執行腳本的返回值

1、先統一兩個說法:(1)system返回值:指調用system函數后的返回值,比如上例中status為system返回值(2)shell返回值:指system所調用的shell命令的返回值,比如上例中&#x…

OJ匯總

國內:(一下排名不分先后) 浙江大學(ZJU):http://acm.zju.edu.cn/ 北京大學(PKU):http://acm.pku.edu.cn/JudgeOnline/ 同濟大學(TJU):…

C++(15)--面向對象編程實踐-歡樂斗地主(vector的花式輸出)

面向對象編程實踐-歡樂斗地主《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》-------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)---------------要求:實現錄入及…

Google Protobuf 使用介紹

直接在 www.google.com.hk 上搜索google protobuf 后下載官方版本。 官方版本支持C\Java\Python三門語言。 還有很多非官方的語言版本支持,如C\NET(C#/Vb.net)\Flex(AS3)等. 要通信,必須有協議,否則雙方無法理解對方的碼流。在protobuf中&…

epoll的再次認識

使用mmap加速內核與用戶空間的消息傳遞。 這 點實際上涉及到epoll的具體實現了。無論是select,poll還是epoll都需要內核把FD消息通知給用戶空間,如何避免不必要的內存拷貝就很 重要,在這點上,epoll是通過內核于用戶空間mmap同一塊內存實現的。而如果你想我一樣從2.5內核就關…

leetcode82. 刪除排序鏈表中的重復元素 II

給定一個排序鏈表,刪除所有含有重復數字的節點,只保留原始鏈表中 沒有重復出現 的數字。 示例 1: 輸入: 1->2->3->3->4->4->5 輸出: 1->2->5 示例 2: 輸入: 1->1->1->2->3 輸出: 2->3 思路:判斷n…

C++(16)--運算符重載(自定義Integer類)

運算符重載1.運算符重載--重點2.友元函數--難點(流運算符重載)《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》 -------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)--------…

反應器組件 ACE_Reactor

6.1 反應器組件 ACE_Reactor反應器的基本原理是: 針對關心的某個事件寫一個事件處理器(event_handler). 將該事件處理器登記到反應器中(同時指明關心的事件). 然后反應器會自動檢測事件的發生. 并調用預先登記的事件處理器中的回調函數. 所以ACE Reactor 框架的責任&#x…

C++(17)--詳解const

詳解const《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》-------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)---------------1.const修飾成員變量 2.const修飾函數參數 3.c…

cppcheck的安裝和使用

首先從這里下載linux版本的:http://sourceforge.net/projects/cppcheck/files/cppcheck/ 然后下載對應的版本,解壓,之后安裝: 編譯: g++ -o cppcheck -Ilib cli/*.cpp lib/*.cpp 安裝: make install

leetcode24 兩兩交換鏈表中的節點

給定一個鏈表,兩兩交換其中相鄰的節點,并返回交換后的鏈表。 你不能只是單純的改變節點內部的值,而是需要實際的進行節點交換。 示例: 給定 1->2->3->4, 你應該返回 2->1->4->3. 思路:這一看就是個遞歸定義&…

再議指針和引用的一些事情吧

關于指針和引用一直是學習C++的同學們爭論的焦點,什么時候用指針,什么時候用引用,還有怎么引用數組,這么用指針訪問數組,以及初始化的問題。 不過有一些文章我在很早就已經寫過,但是由于當時時間不充分,自己也都是隨性寫的,可以參看以前我的一個文章:http://blog.csd…

C++(18)--復制構造函數

復制構造函數《老九學堂C課程》《C primer》學習筆記。《老九學堂C課程》詳情請到B站搜索《老九零基礎學編程C入門》-------------簡單的事情重復做,重復的事情用心做,用心的事情堅持做(老九君)---------------包裝基本類,封裝一些算法。 需求…

lua與C++粘合層框架

一. lua調用C 在lua中是以函數指針的形式調用函數, 并且所有的函數指針都必須滿足如下此種類型: typedef int (*lua_CFunction) (lua_State *L);   也就是說, 偶們在C中定義函數時必須以lua_State為參數, 以int為返回值才能被Lua所調用. 但是不要忘記了, 偶們的lua_State是…

leetcode147 對鏈表進行插入排序

丟人,我就是按插入排序老老實實寫的啊。。。。 別人肯定map了hhh。 對鏈表進行插入排序。 插入排序的動畫演示如上。從第一個元素開始,該鏈表可以被認為已經部分排序(用黑色表示)。 每次迭代時,從輸入數據中移除一個…

PaperNotes(13)-Conditional Image Generation with PixelCNN Decoders

conditional Image generation with PixelCNN DecodersICML的best paperpixel cnn 屬于完全可見的信念網絡,需要對 概率密度 建模。給定圖像數據x,想要對概率分布p(x)建模。概率分布p(x)可以看做,每一像素分布同時作用結果的一個聯合分布。一…

Expression : invalid operator 解決方法

從技術上說,用于排序關聯容器的比較函數必須在它們所比較的對象上定義一個“嚴格的弱序化(strict weak ordering)”。(傳給sort等算法的比較函數也有同樣的限制),就是兩個對象比大小或先后的規則,比如兩個 string對象比大小的規則…