暗号処理をH/Wに委託することの問題

opencryptoフレームワークを使ってH/Wに暗号処理を委託する取り組みは、組み込み機器のようにCPUの性能が低い場合には優れた効果を発揮する。Philip Paeps氏の発表でも処理速度が高速化された例が紹介された。しかしこれがCPUの性能が早い汎用PCになると話が違ってくる。ユーザランドにおけるOpenSSLによる暗号処理の方が速いということになると、H/Wに処理を委託することで逆に処理速度を低下させることになる。

またH/Wで提供されている暗号化処理には限りがあり、H/Wで提供されているアルゴリズムと提供されていないアルゴリズムを混在するような使い方をすると、H/Wの処理の恩恵に預かるよりもカーネルランドとユーザランドの間のデータコピーがシステム性能の劣化を引き起こすことになるという。

OpenSSLでH/Wを利用するためにOpenSSLエンジンが提供されているが、デフォルトではこの機能は無効にされている。汎用PCのようにCPUの性能が高い状態でこうした暗号処理H/Wの処理を活用するようにすると逆に性能が悪くなるからというのがその理由のようだ。

H/Wを使わないようにする方法

現在のFreeBSDの実装では、対応するドライバがあり暗号処理H/Wを検出した場合には自動的にこれらH/W機能が使われる仕組みになっている(前述したとおりOpenSSLエンジンはその限りではない)。これを無効にするにはデバイスが認識されないようにカーネルを再構築するか、または、カーネルモジュールをアンロードすればいい。

将来の開発方向性 - 並列処理と汎用化

Philip Paeps氏が紹介した今後の開発方向性は次のとおり。

  • 最新の暗号処理H/Wやまだ対応していないH/Wへの対応
  • オフロードを実施するかどうかの判定処理の実装
  • プライオリティを加味した処理の実現
  • ドライバ間におけるセッションマイグレーションの実現
  • 複数のドライバにまたがるロードバランスの実現
  • H/Wに対するフロー制御の実現
  • 特定コアで処理を固定するための機能の提供
  • 並列処理における性能向上の取り組み

H/Wは並列処理の必要性を強めており、暗号処理H/Wが複数搭載されることもある。こうした状況で処理性能を向上させるには並列処理で性能が発揮できる構造へ変える必要がある。またプライオリティを加味して処理の入れ換えを実現させたり、オフロードを使うか使わないかの判定をヒューリスティックに行う部分を開発および調整するなどに取り組むことになるという。方向性としては並列処理性能の向上と、汎用PCでも自動的に性能が発揮できる仕組みの実現ということになる。