2009-03-20

Internet Explorer 8雑感

Internet Explorer 8をインストールしてみた。Internet Explorer 7以降からは、Explorerが使うシェルとして重要なDLLをInternet Explorerが上書きしないようにしているので (解決したアイデアがすべてのライブラリをスタティッ...(略))、バージョンアップしてもシェルの動作への影響は少なくなったし。

彼らのタイムフレームからして、10年以上も前に作った基本設計の古いレンダリングエンジン Tridentへの修正を少なくして、ブラウザのユーザービリティへフォーカスしてきたのは当然だし、理解できる。

またScript Engineの強化ははやりのJIT系じゃないけど、たぶん、次のバージョンくらいにはMicrosoft Research製のJITとかが投入されるんじゃないかなぁ。そもそもActiveScriptというプラガブルなアーキテクチャを採用しているから、置き換えることについては技術的には難しくない。互換性の面では厳しいかもしれないけど。

あと、

  • 一番最初に起動して気付いたのが、メニューバーが表示されててダサイ。Vista準拠のUIを使っている以上 (Vistaの為に作ったのをXPに持ってきている以上)、メニューを表示すると、ツールバーのど真ん中になるのはしょうがないんだけど、XP版だけメニューを表示している大人の事情をある程度は知っているため、それに対してはこれ以上ノーコメント。
  • プロセス一覧を見ると、Google Chromeの用に各タブにアサインされた複数のプロセスが起動されている。Internet Explorerの構造的に各ウィンドウは個別のスレッドを割り当てられるように設計されていたし (プロセス分離も可能になっていた)、7でタブが追加された時も、各タブ毎にスレッドを分離していたので、構造的にプロセスに分けることはそんなに難しくもないはず。できる範囲でトレンドを入れることはしてきている。
  • アクセラレータ (アクセラレーターじゃないのかよ) にはリリース時点でいろいろ登録されている。ここらはMicrosoftが一番得意なパートナー向けの交渉だから、さすがというところだけど、ちゃっかりGoogleのアクセラレーターがいろいろ登録されているところが、Googleらしいというか。

少なくともMicrosoftがブラウザに再び投資を始めているということは、競争という面ではMozillaにもGoogleにもいいことだ。競争があるからこそ新しいイノベーションが生まれるから!。

Thunderbird 3.0へアップグレードしたらメールが消えた

普通のメールクライアントを家ではそんなに使ってないのだけど、会社では当然使っている。会社の環境をちょっと前にThunderbird 3.0 Beta 2に変えたのだけど、笑えるバグを昨日気づいてしまった。

自分の使い方として、どういうメールクライアントを使っていても、メールを整理するためにarchivesという名前のフォルダを作って、古いメールをメール分類毎や受信日時で分ける使い方をしてる。

先日古いメールを検索しようとして、メールを探し始めたら、メールが一切見つからない。。。あれれ?と思ったんだけど、よくよく考えると、3.0に変えてからそのフォルダ内の検索をしてなかった。

Thunderbird 3.0では、アーカイブフォルダというのが追加されているから、もしやと思って、ファイルシステム上のファイルをみたら、archivesというファイルとArchivesというファイル両方が存在してて、Thunderbirdは自分で(アーカイブフォルダ用に)勝手に追加したArchivesを参照するので、2.0を使っている時に存在してたarchivesを無視してた。構造上Thunderbirdはアルファベットの大小を区別しない仕組みになっているので、当然だよねって、おい!!!!。メールデータはロストしてないけど、ある意味致命的というか。

デバッグする気も失せたので、バグファイルしておいた。Bug 484329 - Upgrading to 3.0 causes "archives" folder disappears。ちなみにWindowsではファイルシステムが大小を区別しないので起きないとは思うけど。

Android Dev Phoneのファームウェア更新

Android Dev PhoneのファームウェアもG1と同じようにバージョン1.1がリリースされたので、更新を行った。その際のメモ。

  • fastbootコマンドが< waiting for device >で応答が返ってこない場合は、デバイスマネージャでUSB大容量記憶装置デバイスに黄色のビックリマークが付いているので、ドライバの更新を選んで、Android Dev Phoneのドライバを指定すること
  • ユーザデータを消すようにするので、当然APN情報も消える。

ファームの更新方法は、OTAで出来ると思いこんでいたけど、Dev Phoneだけに古典的な方法をとるのね

2009-03-17

Firefox 3.1/3.5 のVIDEO再生のパフォーマンス

3.1 beta 3のリリースノートにも載っているが、

Some users with older computers or slower Internet connections may experience choppy OGG video/audio playback (see bug 462667)

Firefoxに内蔵されたビデオ再生機能のパフォーマンスは非常に良くない。

動画系のコードをみればわかるけど、iDCT (逆離散コサイン変換) やYUV->RGB変換など、SIMDで高速化できるような処理をMMXやSSE2を使わずに処理しているので、パフォーマンスが悪くて当然 (oggを扱えるアプリケーションは、本家のライブラリを使わずにチューニングした別のライブラリを使っているのが見受けられるくらい、本家のライブラリはチューニング不足)。最新のliboggplayとかであれば、YUV->RGB変換などをMMXやSSE2等を利用してスピードを稼いでいるので、Firefoxで利用している各ライブラリがバージョンアップされれば、ある程度はパフォーマンスが向上するとは思う。

そもそもNVIDIAなどのGPUだと、(動画再生支援機能として) iDCTくらいは自前で実装されているので、本当はGPU側でやるのがそもそも一番だとは思うのだけど、そこらを含めた抽象化ライブラリって、意外にないんだよね (DirectXにはあるけど、OS非依存のものがない)。また、DirectXとかで動画再生する場合は、YUVで直接描画できるから、ARGBへの変換なんていらないから、よりCPUに優しいんだけど。。。

OpenCLが早く来ないかな...

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ビットモードも速いはずなので、その結果も見たいとは思うけど。

2009-03-09

SourgeForge.jpのやっつけ記事

インテルから金が出ているかどうかは知らないけど、この記事に対して、一言コメント。

  • Firefox3.0/3.1(3.5)は、Visual C++ 2005でコンパイルしてるんだから、それとインテルコンパイラを比較しないと意味ない。というより、自分でビルドしなくても、オフィシャルビルドと比較すればいいじゃん。バージョン新しい == 高速と思ってるひとなのかな?
  • Visual C++ 2005でjemallocとPGO有効にすれば、SunSpiderの結果なんて、インテルのコンパイラよりもVisual C++ 2005の方が高速になる(はず)。jemallocを使うだけでSunSpiderの結果なんて5%-10%くらいスコアが上がるから。Visual C++ 2008でビルドしてもjemallocは有効にならない。
    コード見ればわかるけど、Mozillaでは、CRTのソースコードにパッチを当てて、独自のMSVCRTを使っているから、特定のバージョン (Visual C++ 2005 SP1) のみしかjemallocを使わない。(2008のパッチを入れてほしいという要望はもちろんある)
    所詮 Windowsのヒープマネージャなんてクリティカルセクション使いまくりの設計古いやつだから、遅いに決まってる。(Windows 7でチューンナップされてるらしいが)。もちろん、Windowsのヒープマネージャは、グローバルフラグの変更のみでデバッグヒープ (2重解放の検出、リークの検出、アンダーラン・オーバーランの検出) を使えるとかいい点もあるけどね。
  • インテルコンパイラの場合ってPGOのオプション有効にできないんだっけ?。それ有効にしないと真価が発揮できないと思うんだが

2009-03-04

Net Applicationsの調査が非常に微妙

Net Applications調査の2月のモバイルブラウザシェアのデータを見たところ、納得いかないというか、この数字おかしいだろ。

まず、OS。

iPhoneが66.44%、Java MEが9.11%、Windows Mobileが6.9、Androidは6.26%、Symbianは6.17%。

これだけみるとへぇーと思ったんだけど、別のデータを見てみる。User-Agent別のデータ

Safariが77.53%??、Opera Mini 9.11%???、Microsoft Internet Explorer 5.1%、Netspcae????が 2.71%

Safariは、モバイル上ではiPhone上でしか動かないのに、OSのシェア超えてるってどういうことやねん。おそらく、WebKitベースをすべて入れたってこと?。iPhone上のブラウザは、Safariしかない (自身のWebKitを使ったアプリしかインストール不可だし)という条件と、AndroidとSymbianを足してみると。

iPhone 66.44 + Android 6.26 + Symbian 6.17 = 78.87%

Symbianの一部 (S60 3rd以降はWebKitベース。そのまえは別)だから、1.34%がS60 2ndとUIQとAndroidの一部 (Opera Mini) にすれば一致するか。それをSafariを計算することがそもそも変。WebKitを使えば、すべてSafariってねぇ。

また、モバイルなのにNetscapeって何だよ?と思ったけど、おそらくSkyfireじゃないな?。あれ、Gecko1.8ベースのものだし。

あと、Symbianのシェアがそんなに低いんだぁと思ったけど、よくよく考えたら、ACCESS NetFrontのシェアが低いというから考えれば、ヨーロッパおよびアジアのデータが入ってない。おそらく、モバイルブラウザのシェアは、全世界で考えたら、ACCESS Compact NetFront (i-modeのブラウザおよびSoftbankのブラウザ) がシェアNo.1の可能性が高いはず。日本のモバイルにおけるトラフィックはおそらく世界一。

結局のところ、アメリカの未熟なモバイルマーケットの情報をみても役にたたないというか、こんなシェア、どこの会社でもひっくり返すことができる数字としか見えなかった。たったそれだけ。

2009-03-01

ソフトバンクかドコモで一日データ定額プランがほしい

仕事で地方に行くこともあるんだけど、今のノートがExpressCard仕様なので、会社で確保しているPCMCIAのWILLCOMのカードは使えない。今はどうにか無線LAN(というかマクドナルド)を使える場所でいろいろするんだけど、EMモバイルを使おうかどうか迷ってる。

スペイン行った時に売っていたプリペイドなんてのはそういう用途には非常に助かるんだよね。一日パケット通信定額とかあったりするので、数十ユーロくらいのプリペイド買って、現地滞在してても通信には困らない。そういうのを経験すると、いつの間にか日本がネットワーク後進国になりつつあるんじゃないかとつくづく思ったりする。

日本のEMモバイルにも定額プランがあるんだけど、あれにプリペイドバージョンでかつ2.1GHz帯であれば、契約を考えるのにってつくづく思う。(SIMカードのみの契約を受け付けてないんだよね、彼らは。独自の1.7GHz帯だから、SIMカードのみの契約をしたとしても、使う端末は中古ということになるからだとは思うけど。)

なので、2.1GHz帯のソフトバンクかドコモでやってくれないかなぁ。一日定額650円にしてもいいから。