大容量ファイルのSCP転送を高速にする方法 – RX-7乗りの適当な日々

比較的大きいサイズのファイルをSCPで転送することがあって、できるだけ高速化してみたかったので、色々試してみたメモ。

scpというかsshには、暗号化方式と圧縮有無の指定があるので、それらのベンチマークを。

尚、以下は、SSH v2が対象です。v1はかなり遅かったのと、そもそも使っていないので試していません。

ベンチマークで利用した環境

Server1 <=> Gigabit Switching Hub <=> Server2
  • Server1 (ML115 G5)
    • AMD Phenom 9950, 8GB, RAMディスク使用, Gigabit Ethernet
  • Server2 (ML115 G1)
    • AMD Opteron 1210, 4GB, RAMディスク使用, Gigabit Ethernet

※ ディスクI/Oがボトルネックにならないように、RAMディスク(tmpfs)を使いました。

暗号化方式の違いによるベンチマーク

選択できる暗号化方式は、man sshを見る限りは以下のようです。

aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour128,

arcfour256,arcfour,aes192-cbc,aes256-cbc,aes128-ctr,

aes192-ctr,aes256-ctr

何も指定しないと、デフォルトで”aes128-cbc“が選択されるようです。

尚、厳密には、”/etc/ssh/ssh_config“の”Ciphers“の指定順で優先して、暗号化方式が選択されるようなので、そちらもあわせて確認してみると良いと思います

コマンドの実行例としては以下のような感じです。

$ scp -c aes128-cbc ./filename username@hostname:/tmp

下記の結果は、暗号化方式ごとにSCP転送を行い、サーバ間で1.5GBのファイル(単一)を転送したスループットを測ったものです。

暗号化方式 スループット
aes128-cbc 36.6MB/s
3des-cbc 11.5MB/s
blowfish-cbc 41.7MB/s
cast128-cbc 32.6MB/s
arcfour128 83.3MB/s
arcfour256 83.3MB/s
arcfour 79.0MB/s
aes192-cbc 31.9MB/s
aes256-cbc 28.9MB/s
aes128-ctr 30.6MB/s
aes192-ctr 28.3MB/s
aes256-ctr 25.9MB/s

上記の結果では、arcfour, arcfour128, arcfour256のスループットが断然速い結果となりました。デフォルトの”aes128-cbc”と比較しても2倍以上のスピードが出ています。

ただし、それだけ暗号化によるオーバヘッドがかかっていない、つまり強度的に弱くなっている可能性があるので、選択は慎重に行ってください。イントラネット内等でセキュリティをさほど気にする必要のない場合は、arcfour系の選択でも良いかと思います。

その場合は、”/etc/ssh/ssh_config”の”Ciphers”の先頭に以下のようにarcfour系を、

Ciphers arcfour128,arcfour256,arcfour,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc

な感じで指定しておくと良さそうです。

尚、以降で紹介する転送時に圧縮を行うオプションを使用する事もそうですが、上記は暗号化を行う際にCPUを利用するので、スループットの大小は、サーバのCPUパワーに多少なりと依存します。↑のベンチマークで利用したサーバより高速なCPUを利用すると、もっとスループットは上がると思いますし、低速なCPUだとその逆になるかと思います。

圧縮して転送するとどうなるか

データを圧縮して転送する”-C“オプションを使うとどうなるかを試してみました。manによると圧縮に使われるアルゴリズムはgzipと同じものとのこと。

試してみたのは、以下の3種類の暗号方式のみですが、結論から言うと、経路およびスループットが高速な通信環境の場合は、あまり必要のないオプションと言えそうです。

# ナローバンドのような環境では、また違うのでしょうが。

ちなみに、実行コマンド例としては、以下のような感じです。

$ scp -c aes128-cbc -C ./filename username@hostname:/tmp

700MBの非圧縮ファイルのSCP転送比較
暗号化方式 “-C”有り “-C”無し
aes128-cbc 41.2MB/s 35.0MB/s
3des-cbc 41.2MB/s 11.5MB/s
arcfour 43.8MB/s 77.8MB/s

元々、時間がかかっていた”3des-cbc”に限っては、そこそこ速くなりました。

700MBの圧縮ファイル(gzip)のSCP転送比較
暗号化方式 “-C”有り “-C”無し
aes128-cbc 8.2MB/s 35.5MB/s
3des-cbc 5.6MB/s 11.3MB/s
arcfour 9.3MB/s 75.0MB/s

既に何らかの形で(↑は転送時の圧縮方式と同じgzipというのもあると思うが)圧縮がかかっているものについては、スピードが遅くなる結果となりました。見極めは慎重に。

広告

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中