Bootstrap

UE4 LowLevelMemoryTracker(LLMT)

LLMT

LLM目前有两个跟踪器。每个跟踪器都有自己的分配映射和标记堆栈。默认跟踪器适用于引擎的所有分配。在这两个跟踪器中,它的级别较高并记录通过 FMemory 类函数 Malloc 进行的分配。该跟踪器可为 stat LLM 和 stat LLMFULL 控制台命令提供统计信息。平台跟踪器是较低级别的版本,它记录从OS进行的所有分配。例如,它会跟踪 Binned2 等函数进行的内部分配。因此,默认跟踪器统计信息是平台跟踪器统计信息的子集。

UE4 官网

LLMT
使用 -LLMCSV 命令行参数时,.CSV 文件将写入 saved/profiling/llm/。该文件将包含每个标记的列,以MB为单位显示当前值。每隔5秒写一个新行(默认情况下)。此频率可以使用 LLM.LLMWriteInterval 控制台变量更改

  1. -LLM: bIsDisabled
  2. -LLMCSV: bCsvWriterEnabled,同时使用FLLMCsvWriter

初始化

FLowLevelMemTracker() + FLLMAllocator::Initialise()
 --> FLowLevelMemTracker::InitialiseTrackers() + FLLMTracker::Initialise()


GetTracker(ELLMTracker::Platform)->SetTotalTags(ELLMTag::PlatformUntaggedTotal, ELLMTag::PlatformTrackedTotal);
GetTracker(ELLMTracker::Default)->SetTotalTags(ELLMTag::UntaggedTotal, ELLMTag::TrackedTotal);
  1. 构造FLowLevelMemTracker和FLLMAllocator
  2. 初始化Tags
    LLM init
  3. UnrealMemory.h 平台接口,每一个平台都需要分配内存
  4. FMemory::GCreateMalloc() -> FMemory_GCreateMalloc_ThreadSave() -> FPlatformMemory::BaseAllocator()[Windows] --> FMallocBinned2() --> FLLMScope::Init --> FLowLevelMemTracker::Get()–>Construt()
  5. FPlatformMemory::GetConstants(): 获取PageSize,TotalPhysical,TotalVirtual等数据

Init

  1. FLLMTracker* Trackers[(int32)ELLMTracker::Max]: 存放两个一个Default,另一个是Platform的
  2. FLLMAllocator 每个类都有引用到
  3. uint64 PlatformProcessMemory = PlatformStats.UsedVirtual; // virtual is working set + paged out memory

词汇

  1. 虚拟内存 = Working Set + Page Out Memory
  2. ProgramSize: 代码,变量,Stacked Memory存储等存储大小
  3. WokingSetSize = Physical Memory
  4. PlatformProcessMemory: 不同平台获取的值不一样,Windows平台下,代表虚拟内存

每5秒更新

//控制命令 变量
TAutoConsoleVariable<int32> CVarLLMWriteInterval(
	TEXT("LLM.LLMWriteInterval"),
	5,
	TEXT("The number of seconds between each li
;