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秒実行したもの
CPU | 3.11 | Trunk | |
---|---|---|---|
Intel Q6600 | 1468 ops/s | 1822 ops/s | 124% |
Phenom 9750 | 646 ops/s | 775 ops/s | 119% |
AMDのCPUであっても、パフォーマンスが上昇するので、CPUチェックは取り外された。K10コアではなく、K8コアでもどうなのかっていうテスト結果もあって、それはこれ (このテストは2スレッドで30秒)。
CPU | 3.11 | Trunk | |
---|---|---|---|
Opeteron 246 2GHz | 533 ops/s | 628 ops/s | 117% |
20%くらいの上昇が得られるようになる
Windows x64環境での演算高速化 (まだ未コミットだから入るかどうかは未定)
Windows x64環境ではアセンブラ化した演算ライブラリを使ってなかったんだけど、VC++環境下でもアセンブラ化したものを利用するようにしたもの。これは、nssをx64ビルド化しないと意味ない話だけど。
テスト結果 (1024ビットRSAの暗号化を4スレッドで30秒実行) がこれ。
CPU | trunk | Trunk w/ patch | |
---|---|---|---|
Intel Q6600 | 1398 ops/s | 5048 ops/s | 361% |
Phenom 9750 | 1508 ops/s | 6131 ops/s | 406% |
K8コアでのテスト結果 (1024ビットRSAの暗号化を2スレッドで30秒実行)
CPU | 3.11 | Trunk | |
---|---|---|---|
Opeteron 246 2GHz | 620 ops/s | 2408 ops/s | 388% |
圧倒的に高速化する。このベンチと上のx86+SSE2でのベンチ結果を見るとおもしろいんだけど、x86-64環境では、64x64のかけ算とかをネイティブにできたりするので、速度が圧倒的に違う。しかもおもしろいのは、64ビットモードでのAMD製CPUの速さ。Core i7だと64ビットモードも速いはずなので、その結果も見たいとは思うけど。
0 件のコメント:
コメントを投稿