NEXT | PAGE-SELECT | PREV

【Linux小技】 scp(ssh)での暗号化方式の違いによる転送速度ベンチマーク


このエントリーをはてなブックマークに追加


20090908-scp2.jpg

目的 

 ホスト間のファイルのコピーは、セキュリティの問題もあってscpやsftpは普通で良く使うのですが、特に大きなファイルを転送しようとすると、同じギガビットイーサネットスイッチに二つのホストを繋いでいてもなぜか50MB/sくらいしかなりません。何か設定がおかしいかといろいろ試したのですが、ftpで転送すると普通に100MB/s出ることから、どうやらssh側の制限らしいことまでは突き止めました。

色々調べていくと、今のsshの場合は送信時に暗号化方式をいくつか選択することができ、暗号化方式によっても転送速度が異なるようです。たぶん暗号化と復号にCPUを使っているからでしょうか。

理屈はまあ脇に置いておいて、取り急ぎは暗号強度は無視して転送速度を確認したいです。というわけで、暗号方式の違いによる転送速度を比較してみました。






ssh暗号化方式の変更方法


一言でいえば、
# scp -c [暗号化タイプ encrypttype]  [ファイル名] [リモートホスト名]:[リモートホストディレクトリ

(例1 host1からhost2へ1GBfile.datというファイルを転送)
[root@host1 /dev/shm]# scp -c aes128-cbc 1GBfile.dat host2:/dev/shm/ (RAMディスクで読み書きさせることで、ディスクのオーバヘッドはほぼ無視させます)


-cオプションをつけなければ、デフォルトの暗号化方式になりますが、今回は暗号化方式の比較なので-cオプションをつけて実行ですね。

Linuxに標準搭載されているsshのデフォルトの暗号化方式は、/etc/ssh/ssh_configにかかれてます(RedHat5/CentOS5の場合)。(/etc/ssh/sshd_configじゃないことに注意!)
[root]# cat /etc/ssh/ssh_config
(38行目)
#   Ciphers aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,arcfour,aes192-cbc,aes256-cbc

この "Chiphers"行に書かれている暗号化方式は以下の7つ。これらについて転送速度を測ってみたいと思います。
  • 3des-cbc
  • blowfish-cbc
  • cast128-cbc
  • arcfour
  • aes128-cbc
  • aes192-cbc
  • aes256-cbc
ちなみに、ネットワーク構成は、こんな感じでいたって普通の構成。
JumboFrameは使ってません。
     +------------------------+
     |Gigabit Ethernet Switch |
     +----+-------------+-----+
          |             |
          |             |
     +---------+    +---------+
     |  host1  |    |  host2  |
     +---------+    +---------+




ベンチマーク結果


scpは、転送中、転送後にMB/sを表示してくれるので、その数値を用います
[root@host1 /dev/shm] scp -c 3des-cbc  1GBfile.dat  host2:/dev/shm/
1GBfile.dat                           100% 1024MB  18.3MB/s   00:56
暗号化方式 転送速度
3des-cbc 18.3MB/s
blowfish-cbc 68.3MB/s
cast128-cbc 60.2MB/s
arcfour 102.4MB/s
arcfour128 102.4MB/s
arcfour256 113.8MB/s
aes128-cbc 51.2MB/s
aes192-cbc 44.5MB/s
aes256-cbc 39.4MB/s
aes128-ctr 60.2MB/s
aes192-ctr 53.9MB/s
aes256-ctr 46.6MB/s
rcp(参考) 110.1MB/s
ftp(参考) 112.1MB/s

SSH Throughput according to the encoding

 この環境では、sshのデフォルトでは50MB/sくらいなのでrcpやftpの半分ですな。これならrcpやftpと比べて遅く感じても当然といえそうです。rcpとftpもギガビットイーサネットのワイヤースピードよりは若干遅いけど、9割近く出てるので、まあいいでしょう。
 それから、arcfourは速いですね。sshは使えるけどrcpやftpが使えないローカルな環境であれば、arcfourをデフォルトにしても良いかもですね。(もちろんセキュリティとか暗号強度はよくわからんからその辺は自己責任で)
 あと、このあたりの値は、暗号化と復号化のためのCPU処理性能にも大きく影響があるので、検証環境と違うCPUを使っていれば今回の値と結構異なります。ものによって速くなったり遅くなったりするからあくまで参考結果ってことにしてください(ほかの少し遅いマシンでやったらarcfourが80MB/sくらいにしかならなかった)。

というわけで、以上です!


(追記 2009/10/01)
次世代Intel CPUのWestmereですが、暗号化用にAES向け命令セットが追加される模様。今後はAESの方がもっと高速化されるかな?
http://techon.nikkeibp.co.jp/article/NEWS/20090924/175534/

(追記 2010/4/12)
benchmarker さんのご厚意により、表しかなかった結果データにFlashのグラフを追加しました。

(追記 2010/11/5)
10GbEthernet環境が作れたので同じことやってみた。arcfourでは120-130MB/sくらいしかでなかった。rcpだと900MB/s - 1GB/sくらいで転送できたんだけどね。

(追記 2012/3/10)
benchmarkerさんからいただいた結果データのFlash図を使っているサイトから図が見られなくなっていたので、 Google Chartで書こうと頑張ったのにIEだけは表示できなかったので、普通にエクセルの図にしました。

カテゴリ【知ったか考察―Linux小技】
【関連記事】



このエントリーをはてなブックマークに追加





このカテゴリの最新記事一覧


| ―Linux | 21時00分 | comments:2 | trackbacks:0 | TOP↑

どんなものかと思って

どれくらい差があるのかと思ってグラフにしてみましたー
http://figit.net/post/796

AESは安全だ。ってよく聞くと思っていたら、こんなところに弊害があったんですね...(コンソールだけの作業だったので違いなんか気にしてなかったです)

| benchmarker | 2010/04/12 01:48 | URL | ≫ EDIT

Re: どんなものかと思って

benchmarker さん
グラフ作っていただいて、ありがとうございます。
テーブルまで作ったのに、そういえばグラフ作るの忘れてましたねw
ありがたく、本文にはらせていただきました。


余談ですが、少し以前の追記に書いたAES-NI対応のWestmereが出ましたが、
http://www.xbitlabs.com/articles/cpu/display/clarkdale-review_6.html
旨くいけばAES256がかなり早くなりそうですね。

| kenchan3 | 2010/04/12 22:13 | URL |















非公開コメント

http://kenknown.blog42.fc2.com/tb.php/171-9ccb078b

≪ NEXT | PAGE-SELECT | PREV ≫