2011-11-21

OpenSSLのパフォーマンスに関する実験結果

By Taro Yamazaki  |  23:15

OpenVPNのスループット」でもJan Just Keijser氏の調査結果を取り上げさせていただきましたが、今度はOpenSSLに関する調査結果をOpenVPN Users MLで発表していますので、その内容をご紹介します。

テスト方法

OpenSSLの処理速度を「openssl speed -evp aes-256-cbc」などのコマンド出力で計測し、CPUのクロックスピードをもとに整理した。すべてのテストはLinux(CentOS、Fedora)で行った(Windowsとの比較データも後述)。

測定結果

  • BlowFish (BF) のパフォーマンスはCPUのクロックスピードに完全に依存する。i7とXeon Xnnnnの場合は15%の速度向上が見られた。
  • AES-NIサポートなしでのAES-256のパフォーマンスはCPUのクロックスピードに完全に依存する。
  • AES-NIサポートを有効にした場合、小さいパケット(512バイト未満)の暗号化/復号処理のパフォーマンスはおよそ8倍程度に向上する。
  • 大きいパケット(1024バイト以上)では、AES-NIサポートを有効にした場合でも速度の向上幅は1/4に低下する。

その他、ちょっとした情報

  • CPUが多くのタスクを処理している状態でなければ、Turbo Boostは速度の向上に寄与する。Turbo Boostは1つのコアのクロックスピードの上限を引き上げることができるが、他のコア/スレッドのタスクで余裕がなくなるとすぐに通常の速度に戻ってしまう。
  • RHEL/CentOS 5のopenssl-fipsでは、OpenSSLの速度が半減してしまう!
  • opensslを 'noasm' フラグ付きでコンパイル(これにより、OpenSSLから提供されるハードコードされたアセンブリファイルを使用しなくなる)し直すと、AES-NIに対応していないCPUでのAES-256のパフォーマンス(小さいパケットの場合)が2倍に向上する。
  • 明らかに言えることとして、OpenSSLが提供している暗号化ルーチンは性能をチューンナップできる余地がある。

WindowsとLinuxでの比較

Windows 7 64ビット版とFedora 14 64ビット版をインストールしたデュアルブートのマシンで同じテストを実施してみたところ、AES-NIなしのテストではLinuxよりもWindowsのほうが5%高速という結果が出た。Windows版のOpenVPN 2.2に同梱されているコンパイル済みOpenSSLは、LinuxのGCCでコンパイルされたOpenSSLよりもわずかに高速ということになる。しかし、OpenSSLのWindows版はAES-NI対応CPUでもAES-NIを使用できない。この点はOpenVPNの機能要望に追加する予定。

備考・その他

これらの結果は「素」のOpenSSLでのテストであり、OpenVPNのパフォーマンステスト結果というわけではない。OpenVPNサーバーでは、負荷を分散させる意味で、複数のOpenVPNインスタンスは別々のポートで動作させることが望ましい。
WindowsのOpenVPNクライアント/tap-win32ドライバは、Linux/*BSDバージョンに比べてまだだいぶ性能が低い。さらに、高帯域幅のクライアントを処理する場合、FreeBSDのほうがLinuxよりも若干高速という実験結果がある。


OpenVPNは暗号化/復号処理においてOpenSSLを使用しています。PolarSSLサポートも始まってはいますが、PolarSSLではPKCS#12やWindows CryptoAPIなど未対応の機能もあるため、しばらくはOpenSSLがSSLライブラリのメインになると思われます。OpenSSLのパフォーマンスはOpenVPNのパフォーマンスに大きく影響しますので、こういった実測値の情報はとても有用ですね。

以前も取り上げたように、暗号化処理の速度に対するAES-NIの効果性はかなり大きいようです。Windows版での対応も期待しましょう。

いつもながら有用な情報を提供してくださるJan Just Keijser氏に感謝です。

Author: Taro Yamazaki

© 2015 yamata::memo | Distributed By My Blogger Themes | Created By BloggerTheme9
TOP