2012-02-05

Visual Studio 2010への移行

Firefox 13でWindows x86 (not x64) のビルドをVisual Studio 2005 SP1からVisual Studio 2010 SP1に移行してる (したとは書かない) わけだけど、その際に起きた顛末をいろいろ書いておこう。

PGOでこける

PGOってのは、Profile-guided optimizationといって、コードを実行させた情報から最適化がもっと必要なところを見つけ出してさらなる最適化を行うというコンパイラの機能。2005SP1を使ってた時もコンパイラというかリンカの制限にあたってしまってビルドができなくなるという楽しい事件があったのだけど、2010 SP1に移行した時も別の問題にぶち当たった。というのも、PGOは性質上2度ビルドを行う必要 (プロファイル情報を集められるようなっているビルドと、プロファイル情報からさらなる最適化を行うビルド) があるのだけど、最初のビルドでできたバイナリがどうも壊れたバイナリを生成するらしく、ビルドに失敗してた。これは、khueyがconnect.microsoft.comへレポートしてるけど、最適化オプションを一部で無効にすることでとりあえず、回避。

ビルドマシンにVS2010SP1が入ってない

MozillaではビルドマシンはVMWare ESX上に複数存在しててラウンドロビン的にビルドマシンが選択される。大量のブランチとかを効率的に処理するためにこんな構成になってるんだけど、一部のビルドマシン上にVS2010SP1がインストールされてないという困ったことがここで発覚。ビルドはチェックイン (push) 毎に走るんだけど、そのインストールされてないビルドマシンがたまに回ってくるとビルドエラーになるというロシアンルーレットが起きてた。そのビルドマシンを外すことでこれも回避

で、

Talos (Mozillaで使ってるパフォーマンスデータ収集ツール。最近WebKitでも使うらしいよ) で見ると起動・シャットダウン・ベンチなどのデータが5%-10%くらい改善されてる。これでめでたしめでたしと思いきやそんなことはなくて、今は、BreakPad (GoogleとMozillaでやってるクラッシュ時のログ生成・ログ送信ツール) で見るとクラッシュ時のスタックトレースがキレイに取れない問題発覚。これどうなのよってところでってところ。ChromeってVS2008使ってた記憶あるけど、先にMozillaが地雷踏んでしまってる?

余談。x64はどうなの?

えっと、先ほどのBreakPadが使ってるDIA SDKが腐ってて、シンボルの列挙で30-120分ほどCPUをぐるぐる回す変なバグがあって、それをどうにか解決しないと移行できないね。。。。たぶんハッシュテーブルがかち合ったとかで、すべてのデータを列挙しなおしてるという感じに見えるけどね。これ困ってるんだけど、どうしようか、マジで。

0 件のコメント: