元RX-7乗りの適当な日々 このページをアンテナに追加 RSSフィード Twitter

RX-7(FD3S)WRX STI関連のキーワードで検索されて来られた方へ。
右サイドのカテゴリ『』をクリックすると関連する項目だけが表示されます。
日々の写真は『Flickr』で公開しています。

2010/10/25

by Bohman

大容量ファイルのSCP転送を高速にする方法


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

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

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


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

[Server1] <=> [Gigabit Switching Hub] <=> [Server2]
  • Server1 (HP ML115 G5)
    • AMD Phenom 9950, 8GB, RAMディスク使用, Gigabit Ethernet
  • Server2 (HP 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-cbc36.6MB/s
3des-cbc11.5MB/s
blowfish-cbc41.7MB/s
cast128-cbc32.6MB/s
arcfour12883.3MB/s
arcfour25683.3MB/s
arcfour79.0MB/s
aes192-cbc31.9MB/s
aes256-cbc28.9MB/s
aes128-ctr30.6MB/s
aes192-ctr28.3MB/s
aes256-ctr25.9MB/s

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

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

その場合は、"/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-cbc41.2MB/s35.0MB/s
3des-cbc41.2MB/s11.5MB/s
arcfour43.8MB/s77.8MB/s

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


700MBの圧縮ファイル(gzip)のSCP転送比較
暗号化方式"-C"有り"-C"無し
aes128-cbc8.2MB/s35.5MB/s
3des-cbc5.6MB/s11.3MB/s
arcfour9.3MB/s75.0MB/s

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


参考


ursmursm 2010/10/25 01:27 OpenSSH 用の高速化パッチ、High Performance SSH/SCP なるものがあります。
http://www.psc.edu/networking/projects/hpn-ssh/

城 2010/10/25 22:05 >>"/etc/ssh/ssh_config"の"Ciphers"の先頭に以下のよう...
通常のsshの接続のデフォルトが
arcfour
になってしまうので、設定するべきではないと思います。

http://jvn.jp/niscc/CPNI-957037/
こちらにあるように、
aes256-ctr を使うことをお勧めします。

rx7rx7 2010/10/25 23:18 >id:ursm
おおっ!そいつは知りませんでした。チェックしてみます!ありがとうございます。

>城さん
コメントありがとうございます。
該当文の手前で「イントラネット内等でセキュリティをさほど気にする必要のない場合・・・」云々と前提を書いているので、その前提のもとであれば、良いのかと思っているのですが。
確かに、オープンな経路を通るのであれば、マズイと認識しています。

kento_1218kento_1218 2010/10/26 10:16 安全なHostを指定してCipherオプションを追加すれば問題ないと思いますよ。

Host hoge.intra
User kento
Cipher arcfour...

rx7rx7 2010/11/05 23:17 お、事故防止として、きちんと指定するのは良いですね!
コメントありがとうございます!

いわもとこういちいわもとこういち 2010/12/08 02:11 CPNI-957037はaes256-cbc等のCBCモードのブロック暗号使用時の問題ですね。
arcfour系はストリーム暗号なので、影響を受けません。

ただ、arcfourには別の問題が有るので、使わない方がいいです。
arcfour128/256はその問題の対処版なので、これらのみを使うようにした方がいいでしょう。

はてなユーザーのみコメントできます。はてなへログインもしくは新規登録をおこなってください。


オススメ (一部は、最近読んでいる本とも言う)
Chef実践入門 ~コードによるインフラ構成の自動化 (WEB+DB PRESS plus) クラウド Amazon EC2/S3のすべて~実践者から学ぶ設計/構築/運用ノウハウ~ [Web開発者のための]大規模サービス技術入門 ―データ構造、メモリ、OS、DB、サーバ/インフラ (WEB+DB PRESS plusシリーズ) エキスパートのためのMySQL[運用+管理]トラブルシューティングガイド [24時間365日] サーバ/インフラを支える技術 ~スケーラビリティ、ハイパフォーマンス、省力運用 Linux-DB システム構築/運用入門 (DB Magazine SELECTION) キャパシティプランニング ― リソースを最大限に活かすサイト分析・予測・配置 スケーラブルWebサイト 実践ハイパフォーマンスMySQL 第3版 ウェブオペレーション ―サイト運用管理の実践テクニック (THEORY/IN/PRACTICE) SQLアンチパターン インターネットのカタチ―もろさが織り成す粘り強い世界― ハイパフォーマンス ブラウザネットワーキング ―ネットワークアプリケーションのためのパフォーマンス最適化 Linuxの教科書―ホントに読んでほしいroot入門講座 (IDGムックシリーズ)