コンテンツにスキップ

マシン監視グラフ

Designer 内にはいくつかのマシン監視グラフがあります。

Monitoring Manager を開くには、トラックの右下にある FPS を左クリックします。 Monitoring ウィジェット

Monitoring Manager ウィンドウが開いたら、Local を左クリックして監視グラフのリストを表示します。

Monitoring Manager

このグラフは、各出力のキュー長を示します。キュー長は、プロジェクトが normal latency、low latency、ultra low latency のいずれで実行されているかによって決まります。

このグラフはドロップフレームを確認するのに使用できます。キュー長が 1 減少した場合、次のフレームがキューに追加される前にフレームが出力されたことを意味します。フレームはキューイングされるため、これは出力上ではフレームドロップとして見えません。フレームがレンダリングされ次第出力される ultra low latency で実行している場合、フレームが出力される時点で次のフレームがすでに準備できていれば、フレームドロップが見えます。

normal latency で実行しているのにグラフラインがゼロまで下がる場合、フレームの準備が間に合っておらず、フレームドロップとして現れる可能性があります。

Output latency

これは、さまざまなタスクに費やされた時間量を示す累積グラフです。たとえば、GUI に費やされた時間、DMX ダウンロードに費やされた時間などです。

ビデオを再生する際のイベントの順序は次のとおりです。

ビデオファイルからフレームをロード → RAM にデコード → GPU にアップロード → GPU でレンダリング。

GPU でフレームをレンダリングするのにかかる時間。これにはビデオ再生に関連するものだけでなく、その他のレンダリング作業も含まれます。Frame が完了すると、フレームは出力の準備が整います。

上記のイベントシーケンスで、フレームを GPU にアップロードするのにかかる時間。

すべてのトラック要素にかかった合成時間の合計。

GUI のレンダリングに費やされた時間。

Compositor と GUI 時間を構成するすべてのコンポーネントの累積。

DMX のダウンロードに費やされた時間。

グラフを見ると、プロセスの各部分にどれだけの時間が費やされているかを確認できます。いずれかのラインが点線を超えている場合、サーバーはフレームをドロップしています。点線は 50fps または 60fps のいずれかで費やせる最大時間を示しています。

GPU Profiler

フレームがレンダリングされてから出力のために表示されるまでの過程を、現在時刻 0 を基準としてミリ秒(ms)単位でグラフ化します。

フレームの準備が整った(レンダリングが完了した)時刻。フレームがレンダリングされるたびに「ready」状態になります。「Ready」は、実際に表示される前にフレームが何ミリ秒早く準備できたかを示します。この値は Disguise の負荷に応じて変動します。

フレームが present キューに追加された時刻。present キューとは、これが次の出力フレームであることを Disguise が Windows に通知するものです。フレームがレンダリングされるとすぐにキューに追加されるため、これは「ready」とほぼ同一になるでしょう。キューが満杯でフレームをすぐに追加できない場合、時刻はより高くなる可能性があります。

キューに追加された時点から、キューの長さに基づいてフレームが表示されると推定される時刻。

フレームが実際に表示された時刻で、常に 0 です。

他のグラフ化された値はすべて、これを基準としています。

Disguise の動作が遅い場合、フレームは時間内に準備されず、0 に近づきすぎたり、0 を超えたりします。これはフレームをドロップしていることを意味します。また、low または ultra low latency モードで実行している場合、「ready」から「present」までの時間が短くなり、half speed モードでは full speed モードの 2 倍早くフレームが準備されることもわかります。

Frame latency

ヘッドごとの 1 秒あたりのフレーム数(FPS)をグラフ化します。

このグラフを使用して、出力ヘッドでフレームをドロップしているかどうかを確認します。

fps グラフ

Disguise が使用しているメモリ量。

あるフレームから次のフレームまでの使用メモリの差。

リソースを追加したり削除したりすると、たとえばショーファイルのセットアップやプログラミングなどの通常の動作で値が変化することを確認できます。

このグラフは通常使用する必要はありませんが、クラッシュが発生した際にメモリ関連でないことを確認するために使用できます。メモリリークがある場合、delta は継続的に上昇傾向でスパイクします。

Process Memory

CPU が PCI デバイスから読み取っているデータをグラフ化します。

CPU が PCI デバイスに書き込んでいるデータをグラフ化します。

読み取りと書き込み以外の操作中に転送されたバイト数。

通常の操作でこのグラフが必要になることはまずありません。PCI デバイスまたはマザーボードの故障が疑われる場合に使用できます。

PCI/CPU IO

ディスクの読み取り/書き込み速度を MB/s で表示します。

どこかでボトルネックが発生していないかを確認するために使用できます。たとえば、読み取り速度が上がってからプラトーに達するなどです。

Disk

CPU グラフは累積です。

CPU に費やされた時間量。

present を待っている時間量。normal latency でプロジェクトを実行している場合はフラットになるはずですが、ultra low latency で実行している場合はキューがないためこのシリーズが「スパイキー」になります。

Total time は working time と present wait time の累積で、常に FPS に必要な ms 以下に収まるはずです。

通常のセットアップでは、Disguise はフレームを表示するために全 CPU サイクルを使うため、total time はフラットになるはずです。すべての更新ループの最後に、表示するために GPU に何かが渡されます。そのループが早く終了した場合、キューにスロットが利用可能になるまで待つ必要があります。

CPU working time が高く、present time が低い場合、これはキューが空になっているためです。このシナリオでフレームがドロップする場合、CPU 負荷が原因です。

CPU

このグラフは、GPU が現在使用しているメモリ量を示します。

GPU は自身のメモリアロケーションを処理する責任がありますが、Disguise は必要な GPU メモリをできるだけ効率的に使用しようとします。

GUI 内で画面にレンダリングされているすべてのテクスチャは、GPU にアップロードされるビットマップです。これには、すべての GUI 要素と、再生中のメディアが含まれます。

Disguise は、テクスチャが不要になった際に退避することで、使用中の GPU メモリ量を削減しようとします。テクスチャがしばらく使用されない場合、退避されます。逆に、LUT のような一部のテクスチャは GPU へのアップロードがコストが高いですが、一度アップロードされれば高速に使用できます。このため、Disguise はこれらのテクスチャを生かしておくよう GPU に指示します。

通常は必要ありませんが、メモリリークなどのバグが疑われる場合、継続的に増加する GPU Memory 値は疑わしいバグを報告する際の有用な情報です。GPU Memory はテクスチャがアップロードされるにつれて増加し、退避されるにつれて減少します。

GPU Memory

actualFrameTime は次の present のクロックで、delta は各フレーム時間の間に経過した時間量です。

この値はシステムの fps によって決まる値で一定に保たれているはずです。

Timer

RenderStream グラフの監視リファレンス

Section titled “RenderStream グラフの監視リファレンス”

RenderStream グラフはどこで見つけられますか?

Section titled “RenderStream グラフはどこで見つけられますか?”

RenderStream グラフは 2 つの場所で見つけられます。

  1. ワークロード内のいずれかのマシンの Details ビュー
    • 特定のレンダーノードマシンのエンジンおよびストリームプロファイリングを表示
    • ワークロードウィジェットの特定のマシンの横にある「Details」ボタンからアクセス可能

RenderStream グラフを見つける ワークロードウィジェットと、そこからアクセスできるストリームプロファイリンググラフ

  1. Monitoring Manager の「RenderStream」タブ
    • すべてのストリームとワークロードのすべてのグラフをリスト表示
    • ストリームを受信する Actor によってグラフがグループ化される
    • Monitoring Manager(Disguise の FPS バグを左クリック)からアクセス可能

Monitoring Manager で利用可能な RenderStream のグラフ Monitoring Manager で利用可能な RenderStream のグラフ

RenderStream グラフを見つける

レンダーノードから RenderStream プラグインによってキャプチャされた、エンジンに依存しないプロファイリングデータ。

ワークロードインスタンスによって処理されるためにフレームリクエストがキューで待機する時間。

フレームリクエストが処理される時間。これは、フレームリクエストが処理のために取得されてから、結果として得られたフレームを disguise に送り返すための呼び出しまでの時間です。

フレームを送信するのにかかる時間。

レンダーノードによってドロップされたフレームを表示します。

フレームを disguise に送り返す際の問題を表示します。

通常、time in queue は最小限で、ほとんどの時間は Engine CPU time (ms) で示されるフレーム生成に費やされるはずです。リクエストが破棄されたり、送信失敗としてマークされたりすることはあってはなりません。

Time in queue が高い: エンジンが disguise からの受信リクエストの速度に追いついていません。最終的に、キューに待機しているリクエストが多すぎる場合、レンダーノードはリクエストを破棄し、これはグラフの Discarded ラインに反映されます。

Time until frame ready が高い: 送信/ネットワークの問題を示唆します。

Profiling グラフ

ワークロードインスタンスのエンジン固有のプロファイリング情報。このデータは各 RenderStream プラグイン実装に固有で、実装によっては存在しない可能性もあります。

得られるデータは、特定のプラグイン実装がどのエンジンデータにアクセスしているかに完全に依存します。上記の画像のケースでは、Unreal Engine による UE パイプラインの各ステップにかかる時間に関する詳細なデータがあります。これらのセクションのいずれかで異常に高い値が示される場合、高い CPU 使用率(blueprint、ジオメトリ、物理など)、高い GPU 使用率(解像度、ポストプロセスなど)、またはその他の問題を示している可能性があります。たとえば、高い Unreal Idle Time は、nDisplay 同期におけるネットワークの遅延を示す可能性があります。

Stream グラフ

ストリームの受信者(actor/director)によって生成された、ストリームのレイテンシーを記述するデータ。

到着するフレームと、その前に到着したフレームとの間のタイムスタンプの差を示します。

ストリームの実際のレイテンシー: Disguise がフレームを要求してから、そのリクエストに対するフレームを受信するまでの経過時間。 これはネットワークレイテンシーとエンジンレイテンシーの合計に等しいです。

圧縮ストリームのネットワーク通信と圧縮に起因する時間。

レンダリングエンジンの CPU および GPU 操作に起因する時間。

セッション内で最も遅いストリームに基づく現在のアクティブレイテンシー。

Render frame delta は一定であるべきです(60fps で、delta は 16.6ms であるべき)。変動は、フレームリクエストのドロップまたは RenderStream コントローラーマシンのフレームレートの不安定さを示します。

レイテンシーは active latency から大きくは外れないはずです。他のストリームよりも大幅に高速なストリームがある場合、そのレイテンシーは active latency よりもはるかに低く表示されます。両者の差が 4 フレーム分の時間を超える場合、ワークロードのバランスをより良く取るための努力をすべきです。 また、手動の active latency オーバーライドを使用している場合、オーバーライド値が正確でないことを示している可能性があります。

Active latency とレイテンシーは大きく変動すべきではありません。これは、アセット側で最適化が必要であることを示している可能性があります。

Render skew グラフ

このグラフは、ワークロードのストリーム全体で受信されたフレームが時間的にどの程度よくマッチしているかを示します。

RenderStream ワークロードの表示されたフレームが active latency 予測にどれだけ近いかを示します。これは active latency に基づく期待タイムスタンプと、最も一致するフレームのグループの実際のタイムスタンプとの差です。

最も一致するフレームのグループ内で、これらのラインは個々のストリームのエラーを示します。

理想的には、active latency error はゼロで、個々のストリームエラーは 1 フレーム分の時間未満であるべきです。

  • 個々のストリームに 1 フレーム分の時間を超えるエラーがある場合、これは同じ Actor に属するフラグメント間の裂け目として知覚される可能性があります。
  • active latency error が複数の受信側 Actor 間で異なる場合(このグラフの複数のインスタンス間で)、これは 2 つの Actor の出力間のエッジで裂け目として知覚される可能性があります。

Response skew グラフ

現在処理されている RenderStream レスポンスが active latency 予測にどれだけ近いかを示します。これは active latency に基づく期待タイムスタンプと、最も一致するフレームレスポンスのグループ(レンダーノードからの「フレーム送信」通知)の実際のタイムスタンプとの差です。

これは、active latency の推定がストリームにどれだけ適合しているかを示すもう 1 つの指標として使用できます。理想的には、このグラフのエラーは 1 フレーム分の時間未満であるべきです。1 フレーム以上のエラーは、RenderStream のフレームリクエスト送信およびレンダーノードからの送信通知応答の受信に使用される d3net ネットワークアダプターのネットワーク問題を示している可能性があります。