「Bungie Farm」という大規模な分散処理環境


以前、別件で調べ物をしていた時にBungieが社内で運用する「Bungie Farm」という大規模な分散処理環境のスライドを発見しました。

Bungie Farmに関するスライド

※Download articleで、PPTファイルが落とせます。

最初はてっきり「俺たちの環境スゲェー!分散環境マンセー」的な内容かと思って読んでいたのですが、実際はもっと謙虚で「俺たちは苦労してゼロから分散環境作ったけど、最近、良いミドルウェア出てるから、それを上手く使えばそんなに苦労しないよ。」って感じでした。

詳細は、スライドをご覧いただくとして、自分に分かる範囲で読み解いてみました。

Bungie Farmって何?
  • Bungieが抱える、大規模なサーバー群
  • 約180台のマシン(約300のプロセッサ)と、数台のXbox devkitで構成されており、レンダリング・ビルドなど複数の作業をこなす
  • このシステムが無ければ、Halo3を作り上げる事は出来なかったと言わしめる、Bungieのクリティカル・システム。
Bungie Farmのコンセプト
  • 時間がかかるタスクを、分散処理で高速化
    • 空いた時間で、さらにゲームをブラッシュアップする
  • 複雑なフローを自動化し、簡略化
    • ヒューマンエラーを軽減
Bungie Farmでやる事
  • バイナリ ビルド (binary builds)
    • ゲームの実行ファイルとツール
    • ソースの静的解析
  • ライトマップ レンダリング (lightmap rendering)
    • Precomputed lighting
    • 影の焼付け
  • コンテント ビルド (Content builds)
Halo3制作期間内でのジョブ処理
  • 期間内で、約50,000件のジョブを処理
    • バイナリ ビルド 11,000 回以上
    • ライトマップ レンダリング 9,000 回以上
    • その他のジョブ 28,000 回以上
エンドユーザエクスペリエンス
  • エンドユーザは、Webインターフェースからジョブを投げ、結果はメールで受け取る
  • もちろん、各種作業についての進捗も、Webインターフェースからモニタリングできる
Bungie Farmが出来るまで
  • Halo1:
    • ほとんどマニュアルで処理する
    • 少数のタスクのみが自動化されていた
  • Halo2:
    • 複雑なタスクを自動化し分配する、いくつかの異なるシステム
  • Halo3:
    • 単一の拡張可能なシステムへこれらのシステムを統一しました
アーキテクチャ
  • 一つのサーバマシン、複数のクライアントマシン
  • サーバーは、ジョブをクライアントに送信
  • クライアントはジョブを処理して、サーバーに結果を送信
  • すべてのコードは、C# .NET

※この辺りは詳しくないので、詳細はスライドで

この辺りまでが、Bungie Farmの概要です。
そして最後に、Your Farmと題して、これから分散処理環境を作る方のために、いくつかのメッセージと、ミドルウェアの紹介をしていました。

Your Farm.
  • Bungieは、いくつかのタイトルで成果をあげてきた環境を構築してきました。しかし現状では、自動化・分散処理などの恩恵を得るために大規模なFarmを必要としません…。たぶん、自分の手で全体のシステムを書く必要さえありません。
  • 現在、このような問題を解決する為に設計された、ミドルウェアがあります。もし自分が、もう一度ゼロからFarmを構築するとすれば、これらのミドルウェアの評価をしているでしょう。Bungie Farmを作り始めた時、ミドルウェアの大半は存在しなかったか、十分熟していませんでした。
PipelineFX Qube (レンダーファームの管理ソフト)
Incredibuild (分散ビルド環境)

ココで紹介されていた、ミドルウェアについては、Incredibuild以外は、あんまり知らないのですが、この辺りのツールの活用により、分散環境を作る時の手助けになるようです。

スライドの最後にもありましたが、ビルドプロセスは、まず第一にシステムの完成度なので、まずは1,2台のPCで処理を自動化させ、ゆっくりシステムを発達させる事が重要だとも書かれていました。


そんなわけで、Bungie Farmの概要を読み解いてみました。いつもはなんとなく読んでいる英語のスライドですが、こんな感じでキッチリ書いたの初めてなので、誤訳や内容に対しての突っ込みあれば、助かります。ドキドキ…。