moto kawasaki <m...@kawasaki3.org> wrote
  in <20130113.143242.909538342754163798.m...@kawasaki3.org>:

mo> 
mo> 川崎です。
mo> 
mo> hrs>  % openssl speed -engine cryptodev -evp aes-128-cbc
mo> hrs>  とすると変わりませんか?
mo> 
mo> やってみました。
mo> # openssl バイナリは前回測定と同一です。
mo> 
mo> $ /usr/local/bin/openssl speed -engine cryptodev -evp aes-256-cbc
mo> engine "cryptodev" set.
mo>     (snip)
mo> The 'numbers' are in 1000s of bytes per second processed.
mo> type             16 bytes     64 bytes    256 bytes   1024 bytes   8192 
bytes
mo> aes-256-cbc      68935.08k   280753.33k   666423.10k  3098652.99k 
65034780.67k
mo> 
mo> 強烈に速いです。ありがとうございます。
mo> 
mo> よくわかっていませんが、EVP (the digital EnVeloPe library) の API を
mo> 叩かないとダメだったのですね。
mo> EVP の何たるかをちょっと勉強してみます。

 作り方しだいでもあるのですが、OpenSSL は EVP の API 経由でないと
 engine をうまく使ってくれません。
 OpenSSL を使うユーザランドアプリケーション(OpenSSH など)は、
 基本的にこれを使います。

 openssl speed は、明示的に指定しないと EVP を使わず、
 engine を指定していてもアセンブラで書かれた暗号処理ルーチン等を
 個別に呼び出してしまいます。ハードウェアを使ってくれるものも
 一部ありますが、そのあたりに一貫性はありません。

 cryptodev レベルでハードウェアアクセラレータが
 動作しているかどうか調べるには、
 src/tools/tools/crypto にあるツールが便利です。

 % cd /usr/src/tools/tools/crypto
 % make

 とすると構築できます。アクセラレータが対応している cipher 全部を
 試験するには、たとえば

 % ./cryptotest -z 1024 

 のように実行します。これはアクセラレータが載っていなければ
 何も出てきません。

 また、アプリケーションがアクセラレータを使っているかどうかは、
 cryptostats というツールで分かります。具体的には、次のように
 アプリケーションの実行前後で実行します。

  % ./cryptostats 
  23290877 symmetric crypto ops (0 errors, 0 times driver blocked)
  0 key ops (0 errors, 0 times driver blocked)
  0  crypto dispatch thread activations
  0 crypto return thread activations

  % openssl speed -engine cryptodev -evp aes-128-cbc
  ...

  % ./cryptostats
  30489454 symmetric crypto ops (0 errors, 0 times driver blocked)
  0 key ops (0 errors, 0 times driver blocked)
  0 crypto dispatch thread activations
  0 crypto return thread activations

  ops の数が増えていれば、使っていることを示しています。

-- Hiroki

メールによる返信