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

目的
ホスト間のファイルのコピーは、セキュリティの問題もあって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のデフォルトでは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 のメモリキャッシュを解放させてみる
- 【Linux小技】 sshやscpをパスワードなしで利用する方法 (複数台サーバ対応スクリプト付)
- 【Linux小技】 rsh, rcp, rloginを、rootでパスワード無しで使う方法
- 【Linux小技】 色々な方法で「mkfile」コマンド
![]() | Tweet |
このカテゴリの最新記事一覧 | |
---|---|
| ―Linux | 21時00分 | comments:2 | trackbacks:0 | TOP↑
どんなものかと思って
どれくらい差があるのかと思ってグラフにしてみましたー
http://figit.net/post/796
AESは安全だ。ってよく聞くと思っていたら、こんなところに弊害があったんですね...(コンソールだけの作業だったので違いなんか気にしてなかったです)
| benchmarker | 2010/04/12 01:48 | URL | ≫ EDIT