お世話になっております。
- 各ビルドステージ (Build / Cook / Stage / Pak)でどのようにハードウェアリソースが使われるでしょうか?重視すべき性能が知りたいと考えています。
Build:ソースコードのビルドを行うステージですが、CPU/RAM/Storage が関係します。コア数が多いCPUを利用すると、同一PC内でも並列ビルドがより多く実行できるようになりビルド時間が短縮されます。ただしその分スレッドごとに必要なメモリも増えるためRAMも同様に大きくしておくことが望ましいです。RAMはビルド時のメモリが不足しているとOSがスワップして仮想メモリを使うためビルド速度が低下するため注意が必要です。コンパイラはソースコードを解析、変換する過程で大量の中間データやキャッシュファイルを生成します。そのため Storage は SSDの方がHDDに比べて高速となりファイルIOが早くなります。
Cook:アセットをプラットフォーム毎にコンバート処理を行うステージですが、主にCPU/RAM/Storage が関係します。CPUは純粋にアセットのロード、クック処理速度に直結しますが、コア数がCPUほどシェーダーコンパイルやDDCアクセスなどの並列処理が効率的に実行できます。RAMも大きくしておくことが望ましいのは、クックするアセットを順番に処理していく過程でメモリが増加し続けてOOOが発生するのを避けるために、一定以上でGCを発生させてオブジェクトを開放する処理が行われるためです。RAMが大きいほどメモリ上限に到達しにくく、GCの発生頻度も下がりますが、GCはオブジェクトの捜査や破棄処理が行われるためそこそこの時間がかかることから出来るだけ起きさせないようにすることが望ましいです。そしてクックするファイルが多いほどファイルアクセスが頻発するため、SSDの利用は必須といっても過言ではありません。
Stage:ここではBuildで作成した実行ファイル、クックしたアセットをステージングディレクトリにコピーするステージですが、主にStrageが関係します。単なるファイルコピーなのでCPU, RAMは関与しませんが、ファイルアクセスが発生するためSSDを利用することをおすすめします。パックファイル/コンテナファイル(.pak, .utoc)もこのステージで作成されますが、ファイルを1ファイルとして保存する処理のため、主にファイルアクセスが発生するぐらいです。
Package:ここではステージングディレクトリにコピーされた実行ファイルとクック済アセットからアプリケーションパッケージを作成するステージですが、主にStorageぐらいが関与するところかと思います。アプリケーションパッケージの作成は、各プラットフォームのツールにエンジン側から指示を出すだけなので、実際にはプラットフォームのツール次第です。そのためファイルアクセスによるStorageは関与しますが、CPUもやや関与する部分です。
- このようなスペックの差異によるパフォーマンスネックを疑う場合Insightsをどのように確認すると良いでしょうか?
すべてのプロセスをInsightsで確認することはできないため、まずは各ステージの時間を計測してどの部分で差が大きいかを見てみることをおすすめします。UATで実行して各プロセスの時間を見ても良いですが、簡単に確認できるのはProject Launcherから各ステージにかかった時間を調べることです。Hordeをご利用の場合も各ステージでかかった処理をダッシュボードで確認できます。
- 上記2種類のマシンでビルド時間に倍近く差がでることは平常でしょうか?
実際に弊社でこのような検証をしていないため何ともコメントが難しいですが、CPUのスペックに有意差がない場合はここまでの差が出ることは考えにくいですが、ClockやL2/L3キャッシュなどの差が影響しているかもしれません。ビルド時間=Buildのみであればそれほど差が出ないと思われますが、最初の質問でビルドステージ(Build / Cook / Stage / Pak)と記載頂いておりましたので、ここでのビルド時間というものが全てのビルドステージについて言及しているのであれば、CookやStageでCPUの差による影響があるのかもしれません。ただし弊社ではソースコードのビルド・シェーダーコンパイルをUBAを利用して複数PCにビルドを分散させているため、1台のPCに対してそれほど有意差を計測することはありませんでした。