UE4 LLM工具


LLM(Low Level Memory Tracker) 是從 4.18 開始引入的新的內存統計工具,比memreport 統計數據更加詳細精確,但又不會像 MallocProfiler 那樣有很大的本身開銷

通過LLM,可以知道游戲消耗的內存分別來自引擎的哪些模塊,讓開發者可以對內存占用高的模塊進行有針對性優化。

Debug、Development包才會啟用ENABLE_LOW_LEVEL_MEM_TRACKER宏,統計邏輯才會編譯進可執行二進制中,才能使用LLM相關的功能

Shipping包是沒有LLM功能,對於Test包可以#define ALLOW_LOW_LEVEL_MEM_TRACKER_IN_TEST 1來將LLM代碼編譯進包

相關邏輯在UnrealEngine\Engine\Source\Runtime\Core\Public\HAL\LowLevelMemTracker.hUnrealEngine\Engine\Source\Runtime\Core\Private\HAL\LowLevelMemTracker.cpp文件中

 

LLM通過插入各種tag來將所有待統計的內存划歸到某個tag下。實現原理是:插入的tag會形成一個tag的棧,將FMalloc分配的內存統計到當前棧頂的tag下。

LLM在最底層hook了FMalloc的每一個統計,如果沒有任何tag在當前棧中,那么所有內存計入在untagged這個tag下。

如果我們在代碼中插入一個基於scoped的tag,就可以把這個scope下的內存計入你的tag下。通過LLm我們不會遺漏任何Fmalloc分配的內存。

此外程序剛初始化的時候,LLM會記錄一個內存,被它估計為可執行程序本身的內存,記在ProgramSize這個tag中。

在RHI中對gpu資源的創建也會被LLM記錄 ,在額外的texture,buffer等標簽下,它們不是FMalloc內存的一部分,是對GPU的內存占用的估算。

 

LLM目前有兩個Tracker(跟蹤器):Default Tracker(默認跟蹤器)Platform Tracker(平台跟蹤器)。它們都有自己的獨立分配映射和標記堆棧。

Default Tracker(ELLMTracker::Default)的級別較高,記錄引擎中FMemoryMalloc函數進行的分配。為 stat LLM和 stat LLMFULL控制台命令提供統計信息。

Platform Tracker(ELLMTracker::Platform)的級別較低,記錄從OS進行的所有分配。例如,它會跟蹤FMemoryMalloc函數進行的內部分配。因此,Default Tracker是Platform Tracker統計信息的子集。

 

運行開關

在編譯時打開 LLM 后,要想在運行時使用 LLM 的功能,還要加上啟動命令行 -LLM -LLMCSV

-LLM:運行時打開LLM統計    或者通過定義#define LLM_AUTO_ENABLE 1默認打開   注:開了之后會導致fps下降23.7%,對性能影響很大

-LLMCSV:將內存統計信息輸出到CSV 文件中,CSV 文件保存在 Saved\Profiling\LLM 目錄下  注:設置控制台變量LLM.LLMWriteInterval xx,修改寫csv文件的頻率為xx秒,默認5秒寫一行

會得到兩個 csv 文件,一個是 LLM_ 前綴,另一個是 LLMPlatform_前綴,這兩個文件分別由兩個 Tracker 生成,這兩個文件的關注點不同

① LLM 主要關注FMalloc內存的消費者,主要就是引擎內各個部分的內存開銷

② LLMPlatform 只關注系統內存的消費者,主要有幾大類: ProgramSize, FMalloc, LLMOverhead

 

-LLMTAGSETS=Assets:顯示每個資源分配的統計,不只是有大類別的數據。   注:需打開LLM_ALLOW_ASSETS_TAGS

-LLMTAGSETS=AssetClasses:按UObject類別進行分類統計

注:寫CSV時,如果開啟了-LLMTAGSETS 命令行,CSV 文件可能會錯亂。

       因為寫 CSV 文件時預留了第一行標題欄內容的緩沖區,當每個資源或資源類很多,會導致標題欄內容溢出,覆蓋了后面的數據區域,所以這里需要自己按需求修改一下

       具體的控制台命令為:LLM.LLMHeaderMaxSize 500000

運行時開關 LLM 的處理見 FLowLevelMemTracker::ProcessCommandLine 函數

 

在UE4CommandLine.txt文件中添加命令行參數:

../../../MyGame/MyGame.uproject -LLM -LLMCSV

 

Android需要將該文件push到手機的UE4Game/MyGame/UE4CommandLine.txt

iOS需要將ue4commandline.txt注:需要全小寫)放在如下目錄中:

 

從csv生成html圖表

PerfreportTool.exe -csv F:\UAGame\Saved\Profiling\LLM\LLM_Pid23989_2021.03.30-14.14.55.csv -o c:\LLMOutput -reporttype LLM -topng. -graphxml LLMReportGraphs.xml -reportxml LLMReportTypes.xml -nostripevents

PerfreportTool.exe -csv F:\UAGame\Saved\Profiling\LLM\LLMPlatform_Pid23989_2021.03.30-14.14.55.csv -o c:\LLMOutput -reporttype LLM -topng. -graphxml LLMReportGraphs.xml -reportxml LLMReportTypes.xml -nostripevents

生成的html文件如下:

 

統計項說明

Android

LLM_Pid23989_2021.03.30-14.14.55內容如下:

Untagged,RenderingThread,Audio/AudioMisc,EngineInit,Stats,LoadMapMisc,Audio/AudioMixer,GC,Audio,AsyncLoading,UObject,FileSystem,Materials,Shaders,TextureMetaData,InitUObject,UI,EnginePreInit,Textures,Meshes,SceneRender,RenderTargets,RHIMisc,Meshes/StaticMesh,FName,MaterialInstance,PSO,Particles,Localization,ConfigSystem,TaskGraphMiscTasks,Physics/PhysXAllocator,Physics,AssetRegistry,CsvProfiler,Audio/AudioMixerPlugins,Physics/PhysX,NavigationRecast,EngineMisc,ProgramSize,GenericPlatformMallocCrash,FMallocUnused,TrackedTotal,Total,Untracked,StreamingManager,Lua,Meshes/Landscape,Animation,Meshes/SkeletalMesh,Niagara,MediaStreaming,Meshes/InstancedMesh,Physics/PhysXLandscape,Audio/AudioSynthesis, 
。。。 。。。
35.32,6.21,0.02,0.90,21.65,5.05,9.52,0.62,9.55,3.08,105.19,13.72,0.54,19.11,0.65,12.84,42.70,18.71,67.28,31.85,34.72,40.85,0.80,8.79,7.12,0.31,0.15,0.78,36.59,2.80,0.00,6.32,6.71,0.13,0.00,0.00,0.39,0.71,3.78,157.18,3.61,55.31,789.20,830.58,41.44,0.44,28.88,0.03,13.38,12.33,0.00,0.00,0.13,0.00,0.00,
35.32,6.21,0.02,0.90,21.52,5.05,9.52,0.62,9.55,3.08,105.22,13.72,0.54,19.11,0.65,12.84,42.71,18.71,67.28,31.78,34.25,40.85,0.80,8.79,7.12,0.31,0.15,0.78,36.59,2.80,0.00,6.33,6.71,0.13,0.00,0.00,0.39,0.71,3.78,157.18,3.61,56.45,789.74,842.68,52.88,0.44,28.91,0.03,13.38,12.27,0.00,0.00,0.13,0.00,0.00,
35.32,6.21,0.02,0.90,21.65,5.05,9.52,0.62,9.55,3.08,105.22,13.72,0.54,19.11,0.65,12.84,42.74,18.71,67.28,31.89,34.99,40.85,0.80,8.79,7.12,0.31,0.15,0.78,36.59,2.80,0.00,6.34,6.73,0.13,0.00,0.00,0.39,0.71,3.79,157.18,3.61,55.68,790.05,828.77,38.50,0.44,28.94,0.03,13.38,12.37,0.00,0.00,0.13,0.00,0.00,
35.32,6.21,0.02,0.90,21.59,5.05,9.52,0.62,9.55,3.08,105.25,13.72,0.54,19.11,0.65,12.84,42.72,18.71,67.28,31.86,35.13,40.85,0.80,8.79,7.12,0.31,0.15,0.78,36.59,2.80,0.00,6.32,6.71,0.13,0.00,0.00,0.39,0.71,3.81,157.18,3.61,55.56,790.05,841.99,52.15,0.44,28.96,0.03,13.44,12.34,0.00,0.00,0.13,0.00,0.00,
35.32,6.21,0.02,0.90,21.40,5.05,9.52,0.65,9.55,3.08,105.18,13.72,0.54,19.11,0.65,12.84,42.72,18.71,67.28,31.32,35.28,40.85,0.80,8.79,7.12,0.31,0.15,0.78,36.59,2.80,0.00,6.34,6.73,0.13,0.00,0.00,0.39,0.71,3.77,157.18,3.61,54.50,788.20,838.28,50.08,0.44,28.99,0.03,13.26,11.80,0.00,0.00,0.13,0.00,0.00,
35.32,6.21,0.02,0.90,21.84,5.05,9.52,0.65,9.55,3.08,105.18,13.72,0.54,19.11,0.65,12.84,42.74,18.71,67.28,31.59,35.64,40.85,0.80,8.79,7.12,0.31,0.15,0.78,36.59,2.80,0.00,6.34,6.73,0.13,0.00,0.00,0.39,0.71,3.77,157.18,3.61,55.04,789.89,837.26,46.91,0.44,29.02,0.03,13.26,12.07,0.00,0.00,0.13,0.00,0.00,
35.32,6.21,0.02,0.90,22.03,5.05,9.52,0.65,9.55,3.08,105.17,13.72,0.54,19.11,0.65,12.84,42.75,18.71,67.28,31.52,35.90,40.85,0.80,8.79,7.12,0.31,0.15,0.78,36.59,2.80,0.00,6.34,6.73,0.13,0.00,0.00,0.39,0.71,3.74,157.18,3.61,54.95,790.17,831.60,40.49,0.44,29.05,0.03,13.26,11.96,0.00,0.00,0.13,0.00,0.00,
35.32,6.21,0.02,0.90,21.46,5.05,9.52,0.65,9.55,3.08,105.19,13.72,0.54,19.11,0.65,12.84,42.73,18.71,67.28,31.74,35.36,40.85,0.80,8.79,7.12,0.31,0.15,0.78,36.59,2.80,0.00,6.34,6.73,0.13,0.00,0.00,0.39,0.71,3.75,157.18,3.61,55.90,790.32,843.07,53.02,0.44,29.07,0.03,13.31,12.22,0.00,0.00,0.13,0.00,0.00,
35.32,6.21,0.02,0.90,21.46,5.05,9.52,0.65,9.55,3.08,105.22,13.72,0.54,19.11,0.65,12.84,42.74,18.71,67.28,31.82,35.44,40.85,0.80,8.79,7.12,0.31,0.15,0.78,36.59,2.80,0.00,6.34,6.73,0.13,0.00,0.00,0.39,0.71,3.77,157.18,3.61,56.08,790.86,843.15,52.41,0.44,29.23,0.03,13.32,12.30,0.00,0.00,0.13,0.00,0.00,
35.32,6.21,0.02,0.90,21.78,5.05,9.52,0.65,9.55,3.08,105.23,13.72,0.54,19.11,0.65,12.84,42.75,18.71,67.28,31.71,36.19,40.85,0.80,8.79,7.12,0.31,0.15,0.78,36.59,2.80,0.00,6.33,6.72,0.13,0.00,0.00,0.39,0.71,3.77,157.18,3.61,55.50,791.27,842.89,51.62,0.44,29.26,0.03,13.32,12.18,0.00,0.00,0.13,0.00,0.00,

Total(830.58) = TrackedTotal(789.2) + Untracked(41.44)

TrackedTotal(789.2) = Untagged(35.32) + RenderingThread(6.21) + EngineInit(0.9) + Stats(21.65) + LoadMapMisc(5.05) + GC(0.62) + Audio(9.55) + AsyncLoading(3.08) + UObject(105.19) + FileSystem(13.72)+ Materials(0.54)

             + Shaders(19.11) + TextureMetaData(0.65) + InitUObject(12.84) + UI(42.7) + EnginePreInit(18.71) + Textures(67.28) + Meshes(31.85) + SceneRender(34.72) + RenderTargets(40.85) + RHIMisc(0.8) + FName(7.12)

            + MaterialInstance(0.31) + PSO(0.15) + Particles(0.78) + Localization(36.59) + ConfigSystem(2.8) + TaskGraphMiscTasks(0)+ Physics(6.71) + AssetRegistry(0.13) + CsvProfiler(0) + NavigationRecast(0.71)

            + EngineMisc(3.78) + ProgramSize(157.18) + GenericPlatformMallocCrash(3.61) + FMallocUnused(55.31) + StreamingManager(0.44) + Lua(28.88) + Animation(13.38) + Niagara(0) + MediaStreaming(0)

Meshes(31.85)  >  Meshes/StaticMesh(8.79) + Meshes/Landscape(0.03) + Meshes/InstancedMesh(0.13) + Meshes/SkeletalMesh(12.33)

Physics(6.71) = Physics/PhysXAllocator(6.32) + Physics/PhysX(0.39) + Physics/PhysXLandscape(0)

Audio(9.55) = Audio/AudioMisc(0.02) + Audio/AudioMixer(9.52) + Audio/AudioMixerPlugins(0) + Audio/AudioSynthesis(0)

注1:Audio內存占用,可在DefaultEngine.ini中關閉掉

[Audio]
UseAudioMixer=False

注2:帶上-NoAudioMixer命令行參數

 

LLMPlatform_Pid23989_2021.03.30-14.14.55.csv內容如下:

Untagged,FMalloc,Graphics,ProgramSize,GenericPlatformMallocCrash,TrackedTotal,Total,Untracked,LLMOverhead,OSAvailable,
。。。 。。。
0.00,511.05,115.27,157.18,3.61,918.22,961.69,43.47,131.11,3389.45,
0.00,511.61,115.27,157.18,3.61,907.32,962.20,54.88,119.64,3388.55,
0.00,511.86,115.28,157.18,3.61,920.53,961.36,40.84,132.58,3387.90,
0.00,511.86,115.27,157.18,3.61,907.62,961.63,54.02,119.69,3386.14,
0.00,510.05,115.27,157.18,3.61,905.81,957.96,52.16,119.69,3389.23,
0.00,511.74,115.27,157.18,3.61,907.49,956.95,49.46,119.69,3387.49,
0.00,511.99,115.31,157.18,3.61,919.30,962.82,43.52,131.22,3385.75,
0.00,512.18,115.27,157.18,3.61,907.96,962.80,54.84,119.72,3388.29,
0.00,512.68,115.27,157.18,3.61,908.46,962.87,54.41,119.72,3386.87,
0.00,513.11,115.27,157.18,3.61,908.93,962.64,53.72,119.75,3386.62,

Total(961.69) = TrackedTotal(918.22) + Untracked(43.47)

TrackedTotal(918.22) = Untagged(0.00) + FMalloc(511.05) + Graphics(115.27) + ProgramSize(157.18) + GenericPlatformMallocCrash(3.61) + LLMOverhead(131.11)

 

IOS

LLM_Pid0_2021.09.27-19.41.13.csv內容如下:

Untagged,Stats,EngineInit,RenderingThread,AsyncLoading,UObject,FileSystem,Materials,Shaders,TextureMetaData,FName,InitUObject,Wwise,EnginePreInit,UI,Textures,Metal Textures,Metal Buffers,SceneRender,RenderTargets,RHIMisc,Meshes/StaticMesh,PSO,MaterialInstance,LoadMapMisc,Particles,GC,Meshes,Localization,ConfigSystem,TaskGraphMiscTasks,Physics/PhysXAllocator,AssetRegistry,CsvProfiler,Physics/PhysX,NavigationRecast,EngineMisc,Physics,ProgramSize,FMallocUnused,TrackedTotal,Total,Untracked,StreamingManager,Meshes/Landscape,Lua,Animation,UI/Font,Meshes/InstancedMesh,Meshes/SkeletalMesh,Audio/AudioSoundWaves,Niagara,MediaStreaming,GCloud,Networking,Textures/MergeTexture,Physics/PhysXLandscape,   
。。。 。。。
9.39,12.94,1.13,1.22,4.16,93.28,17.82,0.28,20.41,0.53,11.50,13.35,8.13,2.47,34.46,0.56,0.10,0.12,2.62,0.01,0.65,1.23,14.10,0.29,0.97,2.05,7.74,13.00,12.56,3.55,0.00,25.29,0.89,0.00,0.46,0.07,10.36,25.76,29.87,-42.96,363.24,847.58,484.39,0.28,0.00,47.04,2.11,0.89,0.05,11.73,0.00,0.03,0.00,0.05,0.30,0.00,0.01,
9.39,13.13,1.13,1.22,4.16,93.28,17.82,0.28,20.41,0.53,11.50,13.35,8.13,2.47,34.46,0.56,0.10,0.12,2.62,0.01,0.65,1.24,14.10,0.29,0.97,2.05,7.74,13.01,12.56,3.55,0.00,25.29,0.89,0.00,0.46,0.07,10.36,25.76,29.87,-42.98,363.42,847.71,484.25,0.28,0.00,47.06,2.11,0.89,0.05,11.73,0.00,0.03,0.00,0.05,0.30,0.00,0.01,
9.39,12.88,1.13,1.22,4.16,93.28,17.82,0.28,20.41,0.53,11.50,13.35,8.13,2.47,34.47,0.56,0.10,0.12,2.59,0.01,0.65,1.20,14.10,0.29,0.97,2.05,7.74,12.95,12.56,3.55,0.00,25.29,0.89,0.00,0.46,0.07,10.36,25.75,29.87,-42.92,363.15,847.51,484.38,0.28,0.00,47.08,2.11,0.89,0.05,11.71,0.00,0.03,0.00,0.05,0.30,0.00,0.01,
9.39,13.00,1.13,1.22,4.16,93.28,17.82,0.28,20.41,0.53,11.50,13.35,8.13,2.47,34.47,0.56,0.10,0.12,2.66,0.01,0.65,1.20,14.10,0.29,0.97,2.05,7.74,12.97,12.56,3.55,0.00,25.29,0.89,0.00,0.46,0.07,10.36,25.75,29.87,-43.02,363.27,847.60,484.24,0.28,0.00,47.10,2.11,0.89,0.05,11.72,0.00,0.03,0.00,0.05,0.30,0.00,0.01,
9.39,12.88,1.13,1.22,4.16,93.28,17.82,0.28,20.41,0.53,11.50,13.35,8.13,2.47,34.47,0.56,0.10,0.12,2.62,0.01,0.65,1.24,14.10,0.29,0.97,2.05,7.74,13.01,12.56,3.55,0.00,25.29,0.89,0.00,0.46,0.07,10.36,25.76,29.87,-43.05,363.18,847.52,484.31,0.28,0.00,47.12,2.11,0.89,0.05,11.74,0.00,0.03,0.00,0.05,0.30,0.00,0.01,
9.39,13.10,1.13,1.22,4.17,99.00,17.82,0.28,20.41,0.54,11.50,13.76,8.19,2.48,44.66,0.57,0.10,0.12,2.61,0.01,0.65,1.27,14.10,0.29,0.97,2.05,7.74,13.03,14.75,3.55,0.00,25.29,0.89,0.00,0.46,0.07,10.42,25.75,29.87,-53.73,373.40,858.88,485.47,0.28,0.00,49.14,2.11,0.89,0.05,11.72,0.00,0.03,0.00,0.05,0.30,0.00,0.01,
9.39,13.04,1.13,1.22,4.17,99.02,17.82,0.28,20.41,0.54,11.50,13.76,8.16,2.48,44.67,0.57,0.10,0.12,2.65,0.01,0.65,1.20,14.10,0.29,0.97,2.05,7.74,12.96,14.75,3.55,0.00,25.29,0.89,0.00,0.46,0.07,10.46,25.75,29.87,-53.91,373.50,861.30,487.85,0.28,0.00,49.49,2.11,0.89,0.05,11.72,0.00,0.03,0.00,0.05,0.30,0.00,0.01,
9.39,12.79,1.13,1.22,4.17,99.10,17.82,0.28,20.41,0.54,11.50,13.76,8.13,2.48,44.87,0.57,0.10,0.12,2.65,0.01,0.65,1.27,14.10,0.29,0.97,2.05,7.74,13.04,14.79,3.55,0.00,25.29,0.89,0.00,0.46,0.07,10.50,25.76,29.87,-55.87,373.64,861.69,488.01,0.28,0.00,51.43,2.11,0.89,0.05,11.72,0.00,0.03,0.00,0.05,0.30,0.00,0.01,
9.39,12.98,1.13,1.22,4.17,99.10,17.82,0.28,20.41,0.54,11.50,13.76,8.14,2.48,44.86,0.57,0.10,0.12,2.65,0.01,0.65,1.25,14.10,0.29,0.97,2.05,7.74,13.01,14.79,3.55,0.00,25.29,0.89,0.00,0.46,0.07,10.50,25.76,29.87,-55.93,373.84,861.91,488.08,0.28,0.00,51.52,2.11,0.89,0.05,11.72,0.00,0.03,0.00,0.05,0.30,0.00,0.01,

Total(847.58) = TrackedTotal(363.24) + Untracked(484.39)

TrackedTotal(363.24) = Untagged(9.39) + Stats(12.94) + EngineInit(1.13) + RenderingThread(1.22) + AsyncLoading(4.16) + UObject(93.28) + FileSystem(17.82) + Materials(0.28) + Shaders(20.41) + TextureMetaData(0.53)

        + FName(11.5)+ InitUObject(13.35) + Wwise(8.13) + EnginePreInit(2.47) + UI(34.46) + Textures(0.56) + Metal Textures(0.1) + Metal Buffers(0.12) + SceneRender(2.62) + RenderTargets(0.01) + RHIMisc(0.65) + PSO(14.1)

          + MaterialInstance(0.29)+ LoadMapMisc(0.97)+ Particles(2.05)+ GC(7.74)+ Meshes(13)+ Localization(12.56)+ ConfigSystem(3.55)+ TaskGraphMiscTasks(0)+ AssetRegistry(0.89)+ CsvProfiler(0)+ NavigationRecast(0.07)

          + EngineMisc(10.36) + Physics(25.76) + ProgramSize(29.87) + FMallocUnused(-42.96) + StreamingManager(0.28) + Lua(47.04) + Animation(2.11) +  Niagara(0.03) +  MediaStreaming(0) + GCloud(0.05) + Networking(0.3)

Meshes(13) = Meshes/StaticMesh(1.23) + Meshes/Landscape(0) + Meshes/InstancedMesh(0.05) + Meshes/SkeletalMesh(11.73)

Physics(25.76) = Physics/PhysXAllocator(25.29) + Physics/PhysX(0.46)  + Physics/PhysXLandscape(0.01)

 

LLMPlatform_Pid0_2021.09.27-19.41.13.csv內容如下:

Virtual Memory,Untagged,FMalloc,Metal Textures,Metal Buffers,Metal Render Targets,ProgramSize,TrackedTotal,Total,Untracked,LLMOverhead,OSAvailable,MMIO,  
。。。 。。。
400460.56,1.05,333.55,87.24,17.30,156.70,29.87,800.97,1010.75,209.78,163.04,1088.45,12.22,
400451.62,1.05,333.30,87.24,17.30,156.70,29.87,800.72,1010.55,209.83,163.04,1088.65,12.22,
400450.56,1.05,333.42,87.24,17.30,156.70,29.87,800.84,1010.64,209.80,163.04,1088.56,12.22,
400450.50,1.05,333.30,87.24,17.34,156.70,29.87,800.76,1010.56,209.80,163.04,1088.64,12.22,
400456.47,1.05,343.53,87.82,17.25,156.70,29.87,811.49,1021.92,210.43,163.04,1077.28,12.22,
400458.53,1.05,343.62,87.82,17.34,156.70,29.87,808.43,1021.09,212.67,159.79,1078.11,12.22,
400460.06,1.05,343.77,87.82,17.34,156.70,29.87,808.57,1021.48,212.92,159.79,1077.72,12.22,
400453.75,1.05,343.97,87.82,17.34,156.70,29.87,808.77,1021.70,212.93,159.79,1077.50,12.22,
400454.81,1.05,343.78,87.82,17.30,156.70,29.87,808.54,1021.56,213.03,159.79,1077.64,12.22,
400459.12,1.05,343.66,87.82,17.30,156.70,29.87,808.46,1021.39,212.93,159.81,1077.81,12.22,
400459.06,1.05,344.19,87.82,17.30,156.70,29.87,808.96,1021.91,212.95,159.81,1077.29,12.22,

Total(1010.75) = TrackedTotal(800.97) + Untracked(209.78)

TrackedTotal(800.97) = Untagged(1.05)  + FMalloc(333.55) + Metal Textures(87.24) + Metal Buffers(17.3) + Metal Render Targets(156.7) + ProgramSize(29.87) + LLMOverhead(163.04) + MMIO(12.22)

 

以第1條采集的值為例(單位MB),說明各統計項含義:

Untagged // 未分類的內存,即分配內存時候不在 LLM_SCOPE 宏范圍內
ELLMTag::Untagged(Default Tracker): 35.32
ELLMTag::Untagged(Platform Tracker): 0

LLMOverhead // LLM本身消耗的內存
(Default Tracker): 無
ELLMTag::PlatformOverhead(Platform Tracker): 119.64

TrackedTotal // 通過調用 LLM OnLowLevelAlloc/OnLowLevelFree 統計到的所有內存   即:LLM跟蹤到的所有內存
ELLMTag::TrackedTotal(Default Tracker):789.74
ELLMTag::PlatformTrackedTotal(Platform Tracker):907.32
注:統計到的內存值ELLMTag::PlatformTrackedTotal比ELLMTag::TrackedTotal要大

Total // 總內存

ELLMTag::PlatformTotal(Platform Tracker):962.2
從操作系統獲得的實際內存,不從llm獲得。在Android上為meminfo中的Private Dirty(Total),不包含Private Clean和Swap部分

 

ELLMTag::Total(Default Tracker):842.68
PlatformTotal - LLMOverhead。即為上面的內存減去 LLM 本身消耗的內存,這個內存值可以認為是在不打開 LLM 功能下的進程內存值

Untracked // 未知的內存分配,即 LLM 無法追蹤的內存,比如第三方庫里的內存分配
ELLMTag::PlatformUntracked(Platform Tracker): 54.88  // PlatformTotal - PlatformTrackedTotal
ELLMTag::Untracked(Default Tracker):52.88  // Total - TrackedTotal

FMalloc // 通過FMemory內存分配器分配的內存,也就是一般意義上引擎分配的內存,比如各種UObject,紋理,動畫等占用的內存
(Default Tracker): 無
ELLMTag::FMalloc(Platform Tracker): 511.61

FMallocUnused  // ELLMTag::FMalloc內存分配器的內存 - 通過FMemory得到的內存。即內存分配器中未使用的內存
ELLMTag::FMallocUnused(Default Tracker): 56.45
(Platform Tracker): 無
注:LLM追蹤的內存有2種ELLMAllocType::FMalloc和ELLMAllocType::System

ProgramSize // 程序剛起來時占用的內存(具體時機是初始化某個static FName變量,在進入main函數之前),用來彌補LLM初始化之前沒有跟蹤到的部分
ELLMTag::ProgramSize(Default Tracker):157.18
ELLMTag::ProgramSizePlatform(Platform Tracker):157.18

Graphics  // 顯存
(Default Tracker): 無
ELLMTag::GraphicsPlatform(Platform Tracker): 115.27

GenericPlatformMallocCrash // 預分配的 crash 相關的內存,當 crash 發生時用來替換GMalloc
ELLMTag::GenericPlatformMallocCrash(Default Tracker):3.61
ELLMTag::GenericPlatformMallocCrashPlatform(Platform Tracker):3.61

OSAvailable // 系統當前可用的物理內存
(Default Tracker): 無
ELLMTag::PlatformOSAvailable(Platform Tracker): 3388.55

OOMBackupPool  // Out of memory 備用內存池
ELLMTag::BackupOOMMemoryPool(Default Tracker):未統計
ELLMTag::BackupOOMMemoryPoolPlatform(Platform Tracker): 未統計

Default Tracker詳細的統計項
ELLMTag::EngineMisc 3.78 // 在以下函數執行過程中分配的內存
AActor::ProcessEvent
UPackageMapClient::SerializeNewActor
FEngineLoop::Tick

ELLMTag::TaskGraphTasksMisc 0 // FTaskThreadAnyThread::ProcessTasks 函數執行過程中分配的內存

Audio  9.52 // 音頻相關的內存,包括音頻資源,音頻線程中分配的內存,具體還包含以下子類別
ELLMTag::AudioMisc   0.02
ELLMTag::AudioSoundWaves
ELLMTag::AudioMixer   9.52
ELLMTag::AudioPrecache
ELLMTag::AudioDecompress
ELLMTag::AudioRealtimePrecache
ELLMTag::AudioFullDecompress
ELLMTag::AudioVoiceChat

ELLMTag::FName 7.12 // FName占用的內存
ELLMTag::Networking // 網絡相關的內存,包含網絡包處理,連接對象內存等

ELLMTag::Meshes 31.85 // Mesh 的頂點緩存,頂點索引緩存占用的內存,還有以下子類別    注:包括VertexBuffer相關在cpu這邊的內存+估算的gpu內存
ELLMTag::StaticMesh 8.79 // StaticMesh 相關的內存,包含 StaticMesh 資源,StaticMeshComponent
ELLMTag::SkeletalMesh 12.33 // SkeletalMeshComponent, SkinnedMeshComponent, SkeletalMesh內存
ELLMTag::InstancedMesh 0.13 // InstancedStaticMeshComponent, HierarchicalInstancedStaticMeshComponent內存

ELLMTag::Landscape // LandscapeComponent, LandscapeProxy, LandscapeComponentSceneProxy內存
ELLMTag::Stats 21.65 // stat 統計相關的內存占用
ELLMTag::Shaders 19.11 // 各種類型 Shander 的內存占用
ELLMTag::PSO 0.15 // Pipeline State Object 緩存的內存占用
ELLMTag::Textures 67.28 // 紋理相關的內存占用   注:包括texture相關在cpu這邊的內存+估算的gpu內存
ELLMTag::TextureMetaData 0.65 // UTexture2D::Serialize 函數執行過程中分配的內存
ELLMTag::RenderTargets 40.85 // RT 相關的內存,包含在 Viewport 中渲染使用的內存
ELLMTag::SceneRender 34.72 // 場景渲染相關的內存占用,包含 Slate RHI Render 的窗口渲染
ELLMTag::RHIMisc 0.8 // 其它渲染相關的內存占用,如各種渲染狀態,RHI Thread 運行過程中的內存
ELLMTag::AsyncLoading 3.08 // 異步資源加載過程中的內存占用,包含 AsyncLoadingThread, Event Driven Loader
ELLMTag::UObject 105.19 // UObject 占用的內存,包含 UClass 等
ELLMTag::Animation 13.38 // 動畫相關的內存,包含 AnimInstance, AnimSequence, AnimationAsset, AnimBlueprint, MorphTarget
ELLMTag::Materials 0.54 // 材質相關的內存,包含 MaterialInterface, MaterialFunction
ELLMTag::Particles 0.78 // 特效相關的內存,包含 ParticleSystemComponent

ELLMTag::GC 0.62 // GC 過程中的內存,分別為以下兩個函數
CollectGarbageInternal
PerformReachabilityAnalysis

ELLMTag::UI 42.7 // Slate 相關的內存,包含字體,TextureAtlas
ELLMTag::PhysX // PhysX 物理相關的內存
ELLMTag::EnginePreInitMemory 18.71 // FEngineLoop::PreInit 函數執行過程中的內存
ELLMTag::EngineInitMemory 0.9 // FEngineLoop::Init 函數執行過程中的內存
ELLMTag::RenderingThreadMemory 6.21 // 渲染線程(RenderingThreadMain)執行過程中的內存

ELLMTag::LoadMapMisc 5.05   // 地圖加載過程中的內存,分別為以下兩個函數
UEngine::LoadMap
UWorld::UpdateLevelStreaming

ELLMTag::StreamingManager 0.44 // StreamableManager 相關的內存,主要是資源 streaming 函數執行過程中的內存

ELLMTag::FileSystem 13.72 // 文件系統相關的內存,主要是文件讀取時的緩沖區,比如Pak 文件
ELLMTag::Localization 36.59 // 本地化相關的內存
ELLMTag::AssetRegistry 0.13 // AssetRegistryModule 內存
ELLMTag::ConfigSystem 2.8 // 配置文件相關的內存
ELLMTag::InitUObject 12.84 // InitUObject函數執行過程中的內存
ELLMTag::MaterialInstance 0.31 // MaterialInstance, MaterialInstanceDynamic包括材質參數內存占用
ELLMTag::Lua 28.88 // Lua 內存

Windows下特有統計項

ELLMTag::WorkingSetSize  // 進程物理內存,可用這個值替代上面的PlatformTotal
ELLMTag::PagefileUsed  // 進程虛擬內存

ThreadStack  // Windows 線程棧內存
ELLMTag::ThreadStack(Platform Tracker)
ELLMTag::ThreadStackPlatform(Default Tracker)

IOS下特有統計項

Metal Buffers

ELLMTagMetal::Buffers(Platform Tracker)  17.30

ELLMTagMetal::Buffers(Default Tracker)  0.12

Metal Textures

ELLMTagMetal::Textures(Platform Tracker)87.24

ELLMTagMetal::Textures(Default Tracker)0.1

Metal RenderTargets

ELLMTagMetal::RenderTargets(Platform Tracker)156.70

MMIO

ELLMTag::PlatformMMIO(Platform Tracker,mmap / munmap文件映射)12.22

 

llm stat控制台命令

stat llm   // 顯示 Default Tracker 分組的簡要內存統計信息

 

stat llmfull  // 顯示 Default Tracker 分組的所有內存統計信息

注1:默認一個Group最多顯示的行數為25,可通過執行控制台變量stats.MaxPerGroup xx來指定新的最大行數為xx

注2:為了能查看顯示不下的內容,自定義開發了stat scroll控制台命令

stat scroll 1 // 向下滾動1行
stat scroll -1 // 向上滾動1行
stat scroll 999 // 滾動到底部
stat scroll -999 // 滾動到頂部
stat scroll restore //恢復初始

 

 Stat LLMPlatform   // 顯示 Platform Tracker 分組的內存統計信息

 

Stat LLMOverhead  // 顯示 LLM 本身使用的內存信息

 

參考

UE4 Low Level Memory Tracker 使用(知乎)

UE4 Low Level Memory Tracker 使用

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM