Telemetry

Telemetry Features

Telemetry は完全な パフォーマンス視覚化システム です。開発チーム全体がパフォーマンスを理解して最適化にあたれるように設計されています。一つのフレームの様態や実行領域を低レベルでフォーカスするのではなく、Telemetry はゲームを実行する間に進行している全てを見せてくれます。このため、間歇的にしか発生しないパフォーマンス問題(遅延やスパイク)も修正することができます。チーム全体で取りかかろう -- 最適化作業はもはやプログラマーだけの仕事ではありません!ゲーム内の任意の変数をグラフ化することで、パフォーマンスにどのように影響しているか見てみましょう -- フレーム タイムにスパイクが発生しているとき、ゲーム内変数(表示中のエネミー数など)をアーティストとゲームデザイナーが目の当たりにすることで、何がパフォーマンスに問題を起こしていたか全員で理解することができるようになりました。

パフォーマンスの ”山”(スパイク)を特定する

パフォーマンスで遅延が発生している箇所を瞬時に特定して最適化すべきエリアを決められます。タイムライン ビューでは、フレーム時間を水平軸と垂直軸で表示しますので、問題状況のホットスポットに即時にフォーカスできます。これまでのプロファイラーは、特定の関数や実行エリアにトータルでどれだけ時間がかかっているかをリポートするのですが、Telemetry は、単にスローになっている 事実 を通知するだけでなく、 いつ 重くなっているか教えてくれます! フレームレートの乱れは、すっきり解消できます!

スレッド相関関係の視覚化

今日のマルチスレッド、マルチコアの世界では、スレッド間のインタラクションを効率よくデバグ・最適化する能力が、プログラマーに要求されています。Telemetry は、スレッドが相互に関連して稼働する様をグラフィカルに表示してくれます。アイドル状態のエリア、ロックの競合、ストール、コンテキストスイッチにスポットを当ててみましょう。リソースの共有をめぐってスレッドが一本、ほんのミリセック間ストールしていませんか? 1 個のロックを過度にいじっていませんか? 稼働しているべきスレッドが数本アイドル状態になっていませんか? Telemetry は、こういった疑問の多くを解決してくれます!

実行フローの視覚化

Telemetry は、プログラム ゾーンの階層的ビューを表示して、プログラムの実行パスを明示します。何が、何を、いつ、どれだけの間、呼び出しているのか見ることができます。これまでのプロファイラーとは違って、Telemetry は、各エリアでの時間消費を表示するだけでなく、各エリア相互の関係を時間軸で提示します。

メモリーイベント

Telemetry は、メモリーイベントをそれぞれトラックして表示しますので、問題のあるメモリー使用パターンを特定することができます。 メモリーイベントをホバーすると、そのイベントがどこ(ファイルやプログラム行)で発生したか、発生したゾーンはどこか、イベント名称は何だったか、イベントのサイズ、さらに関連する解放と取得について見ることができます。

ゲームデータのグラフ表示

ゲーム内の特定の変数を Telemetry の使い易いプロッティング API で、グラフ表示します。ゲーム ステートと全体のパフォーマンスの関係を視覚的に相関させることができます。タイプ情報を値にタグ付けしてやれば、Telemetry のビジュアライザーが、そのデータを適切なフォーマット(浮動小数点数、16 進数、メモリーサイズ、時間など)でイベント表示します。

プリントエフ printf 方式のログ記録 API

printf 方式のメッセージをサーバーに送信して後でレビューします。このメッセージは、ログ メッセージ、警告、エラーなどに選別できます。オプションで、イベントマーカーをゾーンビューのトップに置くと、トラッキングをが容易になります。パス-スタイルのクラス化システムを使って、特定の見ておきたいメッセージクラスだけを表示させることもできます。


ゾーン内のメッセージ出力は、そのゾーンのツールチップの一部として表示されます。

プロファイルはローカルマシンまたはネットワーク サーバーで

Telemetry は、クライアント-サーバーのアーキテクチャーになっています -- ゲームから取得したデータは、プロファイリングデータの保存と処理の役割を持つサーバーに送られます。もちろん、サーバー自体をご自分のマシンで動かすこともできます。また、別のマシンをサーバーとして立てることも選択できます。開発環境に応じて決定してください。

バイナリ BLOB データを保存・視覚化表示

Telemetry は、既知のデータを計測し送信します。一方、ユーザー固有のカスタムデータを、Telemetry 自体のデータと並行して視覚化表示することもできます。このために、カスタム バイナリ オブジェクト("blob")API を用意しました。これを使って不透明なデータもサーバーに送信することができます。カスタムのビジュアライザー プラグインを書いてもらえれば、こういった固有の情報を、専用トラックに表示させられます。一般的には、画面写真の送信、カスタムの内部ハードウェア情報、等々に使えるでしょう。を使えます。

Xbox 360 と Windows でコンテキスト スイッチを監視

Xbox 360 と Windows 7 (および Vista)では、Telemetry は、コア毎、あるいはハードウェアスレッド毎に、スレッド活動状況をキャプチャーし表示できます。 どのコアで、どのスレッドが動作中であるかはっきりと見て取ることが可能です。アイドル状態、放置状態のコアを特定します。どのバックグラウンドタスクが無駄のない演算サイクルを充足できるか分かります。


どう使うか

Telemetry の諸機能は、実行(例、関数コール)、メモリーイベント、スレッド名などの各ゾーンを定義するマークアップをアプリケーションに装備することで発動します。このマークアップは、シンプルでインテグレートが容易です。NTELEMETRY=1 を定義して再コンパイルすれば消えて失くなります。

プログラムに実装したら、ゲームを実行すればデータのキャプチャーが開始します。このデータをリアルタイムで見ることもできますし、保存しておいて後で検証することも可能です。

Telemetry のオーバーヘッドは最小で事前想定できます。与えられたメモリーしか使いません -- 勝手にメモリーを取得するようなことはないのです -- パフォーマンスのオーバーヘッドは、生成されるデータ量に比例します。加えて、Telemetry のプロセスは、可能な限りバックグラウンド スレッドで行われますので、ゲームが使用するメイン スレッドのパフォーマンスへの影響は最小です。

Telemetry の設計は、使い易さ組み込み易さ、そして ランタイム パフォーマンスとメモリー使用への影響を最小限に、というところに最重点をおいて行っています。

システム要件

現在 Telemetry は、Microsoft Xbox 360、Sony PS3( PPU と SPU 含む)、Windows XP SP3 以降( 32-bit および 64-bit )、Linux ( x86 および x64 )そして MacOS X 10.6+ ( 32-bit と 64-bit )を、ランタイムサポートしています。に対応しています。Telemetry のビジュアライザーは、Windows および MacOS X で使用可能、コマンドライン サーバーは、Windows ( 64-bit )、MacOS X ( 64-bit )と Linux ( 64-bit )で使えます。ゲームの実行と同一システム上でキャプチャーと分析作業を行われる場合には、大容量の RAM を搭載したクアッドコアマシンの使用を強くお薦めします。