2009-03-11

NSS 3.12.3

Firefoxでも使われているnss(network security service / netscape security service)は、Mozillaのツリーの中でも異質なもので、コミット権限も非常に制限されている(mozilla-centralとかとは別管理)。現時点のコミット権限を持つのは、元Netscapeの社員とSun(iPlanet関連)の人くらい。パッチを投げたとしても、非常に無駄な労力を使う必要があんだけど、Crypto関連なので理解はするけどね。

EV-SSL関連の話があるので、現在開発中の3.12.3がFirefox 3.5に入ってくる可能性がある。このバージョンには、自分がいろいろチューニングパッチを作成していくつかコミットはされているので、いくつか説明。

x86上でバイトオーダー変換にインラインアセンブラを利用する

gccを使う環境(Unix & Mac)であれば、DESとSHA512はベンチ上では数パーセントから10パーセントくらいのパフォーマンスの上昇を見込める。VC++は?ってパッチ投げるの忘れた。

AES-NIの使用

これは元Netscape社員で現Red Hatの人から。今年の中盤に出てくるCore i7の新しいCPUでは、XMMレジスタを利用したAESの補助命令が追加されているんだけど、対応CPUであれば、それを利用するようになった。ただしこれは、gcc (x86_64) のみ。VC++で必要であれば、ってオレがやらないと誰もやらないだろうけど。

x86上での演算ライブラリのSSE2

gccを使っている場合、nss内部の演算ライブラリ (mpi) で一部の命令をSSE2で高速化していたんだけど、これをVC++の環境にも広げた。また、SSE2コードはインテル製のみでしか動かなくしていたんだけど、CPUチェックコードを外したので、SSE2をサポートしたCPUであればすべての演算が高速化する。

Sun MicrosystemsのJulienが調べた結果では、以下の通り。ベンチ内容は1024ビットRSAの暗号化を4スレッドで30秒実行したもの

CPU3.11Trunk
Intel Q66001468 ops/s1822 ops/s124%
Phenom 9750646 ops/s775 ops/s119%

AMDのCPUであっても、パフォーマンスが上昇するので、CPUチェックは取り外された。K10コアではなく、K8コアでもどうなのかっていうテスト結果もあって、それはこれ (このテストは2スレッドで30秒)。

CPU3.11Trunk
Opeteron 246 2GHz533 ops/s628 ops/s117%

20%くらいの上昇が得られるようになる

Windows x64環境での演算高速化 (まだ未コミットだから入るかどうかは未定)

Windows x64環境ではアセンブラ化した演算ライブラリを使ってなかったんだけど、VC++環境下でもアセンブラ化したものを利用するようにしたもの。これは、nssをx64ビルド化しないと意味ない話だけど。

テスト結果 (1024ビットRSAの暗号化を4スレッドで30秒実行) がこれ。

CPUtrunkTrunk w/ patch
Intel Q66001398 ops/s5048 ops/s361%
Phenom 97501508 ops/s6131 ops/s406%

K8コアでのテスト結果 (1024ビットRSAの暗号化を2スレッドで30秒実行)

CPU3.11Trunk
Opeteron 246 2GHz620 ops/s2408 ops/s388%

圧倒的に高速化する。このベンチと上のx86+SSE2でのベンチ結果を見るとおもしろいんだけど、x86-64環境では、64x64のかけ算とかをネイティブにできたりするので、速度が圧倒的に違う。しかもおもしろいのは、64ビットモードでのAMD製CPUの速さ。Core i7だと64ビットモードも速いはずなので、その結果も見たいとは思うけど。

0 件のコメント: