More Related Content Similar to UE4におけるLoadingとGCのProfilingと最適化手法 (20) More from エピック・ゲームズ・ジャパン Epic Games Japan (20) UE4におけるLoadingとGCのProfilingと最適化手法6. Load時間のProfilingと最適化手法
• Profiling
– Stat Levels
– Loadtimes.dumpreport
– 注意点: ENABLE_LOADTIME_TRACKING defineに関して
– PERF_TRACK_DETAILED_ASYNC_STATS
• Optimization
– おさらい
– FileOpenOrder
– 不要なデータの削除例
• Material: Shader Permutation Reduction
• Vertex: Reverse Index Bufferの削除
– AssetManagerによるPreloading
– AddToWorldをフレーム分散させる
– EventBeginPlayの負荷を減らす
8. Load時間のProfiling
Loadtimes.DumpReport (Loadtimes.reset)
• LoadTimes.DumpReport
– 各種パッケージがのロード時間をリスト
• FILEとつけると.loadreportファイルにダンプ
• LOWTIME=0.05コマンドつけると、0.05s以下のパッケージはダンプされない。
Dumping all loaded assets by exclusive load time:
2158.6ms: /Game/Product/Assets/Maps/AAAAAAAAA
1201.3ms: /Game/Product/Assets/Maps/BBBBBBBBB
635.9ms: /Game/Product/Assets/Maps/CCCCCC
598.0ms: /Game/Product/Resources/Environments/StaticMeshAAAA
525.3ms: /Game/Product/Resources/Environments/StaticMeshBBBB
Dumptimes出力例
12. Load時間のProfilingと最適化手法
• Profiling
– Stat Levels
– Loadtimes.dumpreport
– 注意点: ENABLE_LOADTIME_TRACKING defineに関して
– PERF_TRACK_DETAILED_ASYNC_STATS
• Optimization
– おさらい
– FileOpenOrder
– 不要なデータの削除例
• Material: Shader Permutation Reduction
• Vertex: Reverse Index Bufferの削除
– AssetManagerによるPreloading
– AddToWorldをフレーム分散させる
– EventBeginPlayの負荷を減らす
15. Load時間のProfilingと最適化手法
• Profiling
– Stat Levels
– Loadtimes.dumpreport
– 注意点: ENABLE_LOADTIME_TRACKING defineに関して
– PERF_TRACK_DETAILED_ASYNC_STATS
• Optimization
– おさらい
– FileOpenOrder
– 不要なデータの削除例
• Material: Shader Permutation Reduction
• Vertex: Reverse Index Bufferの削除
– AssetManagerによるPreloading
– EventBeginPlayの負荷を減らす
24. Load時間のProfilingと最適化手法
• Profiling
– Stat Levels
– Loadtimes.dumpreport
– 注意点: ENABLE_LOADTIME_TRACKING defineに関して
– PERF_TRACK_DETAILED_ASYNC_STATS
• Optimization
– おさらい
– FileOpenOrder
– 不要なデータの削除例
• Material: Shader Permutation Reduction
• Vertex: Reverse Index Bufferの削除
– AssetManagerによるPreloading
– EventBeginPlayの負荷を減らす
30. 削除コストの詳細
GCのフレーム分散
GCのコスト = 検索コスト + 削除コスト
と記載しましたが、正確ではありません
削除コスト = 依存関係の切断 + 実際のオブジェクトの削除
GCが呼び出されたフレームのインパクト = 検索コスト + 依存関係の切断
こちらはフレーム分散可能
今日はこれを便宜上「削除コスト」と呼びます
35. GC関連コストの確認方法
1. Log loggarbage log (Log loggarbage verbose)
2. Stat dumphitches
3. (Stat Startfile/Stopfile)
4. CBD Profiling Tools
5. Obj –list / Bluerprint Stats
36. 1/5: LogGarbage log
• GC負荷の大まかなプロファイルのメインコマンド
• “log LogGarbage log”コマンドでGC時に以下のようなログが出る。
LogGarbage: 74.040701 ms for GC
LogGarbage: 2.808510 ms for unhashing unreachable objects. Clusters removed: 0.
検索コスト
削除コスト
37. 2/5: ヒッチ時のCPU負荷のロギング
Command: “stat dumphitches”
----------------- Game Thread 325.24ms
325.216ms ( 4) - Thread_189a1_0 - GameThread - STATGROUP_Threads
325.208ms ( 2) - FrameTime - STAT_FrameTime - STATGROUP_Engine
322.049ms ( 1) - GameEngine Tick - STAT_GameEngineTick -
316.684ms ( 1) - World Tick Time - STAT_WorldTickTime -
293.497ms ( 1) - CollectGarbageInternal -
145.057ms ( 1) - FRealtimeGC::PerformReachabilityAnalysis -
40. 4/5: 削除コスト調査用Define
# define PROFILE_GCConditionalBeginDestroy
# define PROFILE_GCConditionalBeginDestroy_byClass
LogGarbage: Collecting garbage
LogGarbage: 9.762678 ms for GC
LogGarbage: 59.374099 ms for unhashing unreachable objects. Clusters removed: 111. Items 18567
Cluster Items 735
LogTemp: 1090 cnt 2.23us per 2.43ms total /Game/Blueprints/Character/AAAAAAAAA
LogTemp: 615 cnt 2.58us per 1.59ms total /Game/Blueprints/Character/BBBBBBBBBB
LogTemp: 698 cnt 2.11us per 1.48ms total /Game/Blueprints/Character/CCCCCCCCCC
LogTemp: 489 cnt 2.64us per 1.29ms total /Game/Blueprints/Gimmick/GimmickAAAAA
LogTemp: 261 cnt 4.22us per 1.10ms total /Game/Maps/MAPMAPMAP
42. 5/5 シーン内にどんなUobjectがあるかを調査するコマンド
Total,DOBP, NumNodes, …,PureTotal,UserFnCount,UserMacroCount,NumSubobjects,NumPropertyObjects
1268,338,105592,18571,2893,2341,19076,15812,2099,305,669,193895,85528
Bluerprint Stats Plugin
56. 効率的なクラスタの模索: 効果
Actor Clustering
Garbage collection (StaticMeshActor is NOT in GC clusters):
25.840614 ms for GC
Garbage collection (StaticMeshActor is in GC clusters):
14.977702 ms for GC
-------------------------
Blueprint Clustering
Garbage collection (BlueprintGeneratedClass does NOT create GC clusters):
42.674898 ms for GC
Garbage collection (BlueprintGeneratedClass creates GC clusters):
33.523061 ms for GC
60. Macro -> FunctionによるUPropertyの削減: 確認方法
Bluepirnt Stats Plugin
Blueprint stats for 1268 blueprints in XXXXXXXXXXX
Total,DOBP, NumNodes,
…,PureTotal,UserFnCount,UserMacroCount,NumSubobjects,NumPropertyObjects
1268,338,105592,18571,2893,2341,19076,15812,2099,305,669,193895,8552
8
LogBlueprintStats: -------------------------------------------
LogBlueprintStats: MacroName,NumFlatInstances,NumProperties
LogBlueprintStats: ForEachLoop,850,954
LogBlueprintStats: ForEachLoopWithBreak,225,396
LogBlueprintStats: PlayTalkEndAnimation,319,294
LogBlueprintStats: PlayerMoveTo,12,144
LogBlueprintStats: CS Character Setting,0,116
LogBlueprintStats: End Cutscene Matinee,9,99
マクロに特化した情報が出るように
拡張されたコードがあり。。
(4.17で正式採用予定)
欲しい人はご連絡ください。