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