Unreal EngineMiddleTechnical

Как профилировать FPS, CPU, GPU и memory в Unreal Insights?

Запустите игру с -trace=cpu,gpu,frame,memory, откройте файл .utrace в UnrealInsights.exe. Timing Insights показывает CPU-треды (GameThread, RenderThread) и GPU passes с детализацией до отдельных функций через TRACE_CPUPROFILER_EVENT_SCOPE.

Профилирование в Unreal Insights

Unreal Insights — отдельное приложение (Engine/Binaries/Win64/UnrealInsights.exe) для анализа производительности UE-приложений. Оно принимает трейс-данные по UDP в реальном времени или читает файлы .utrace.

Запуск трейсинга

# Через аргументы запуска игры:
MyGame.exe -trace=cpu,gpu,memory,frame,log,bookmark

# Подключение к уже запущенной игре:
# В консоли игры:
Trace.Start cpu,gpu,frame
Trace.File "C:/Traces/session.utrace"
Trace.Stop

# Запись в сеть (для мобильных устройств):
Trace.Start cpu,frame
Trace.SendTo 192.168.1.100  # IP машины с Insights

Анализ FPS и Frame Time

В Unreal Insights откройте вкладку Timing Insights. Верхняя дорожка — Frame timeline: каждый прямоугольник — один кадр. Цвет кодирует длительность: зелёный (<16ms), жёлтый (<33ms), красный (>33ms). Кликните на кадр для детализации.

CPU Profiling

CPU-дорожки разбиты по тредам: GameThread, RenderThread, RHIThread, AsyncThread. Каждая именованная область — это SCOPE_CYCLE_COUNTER или TRACE_CPUPROFILER_EVENT_SCOPE.

// Добавление собственной области в трейс:
#include "ProfilingDebugging/CpuProfilerTrace.h"

void UMyComponent::TickComponent(float DeltaTime, ...)
{
    TRACE_CPUPROFILER_EVENT_SCOPE(UMyComponent::Tick);
    // ... код ...
}

В Insights используйте Timers панель (F3) для сортировки по Inclusive/Exclusive Time и поиска самых дорогих функций.

GPU Profiling

GPU-дорожка появляется при трейс-канале gpu. Требует DirectX 11/12 или Vulkan с поддержкой GPU timestamps. Показывает GPU passes: ShadowDepths, BasePass, Translucency, PostProcess. Кликните по пассу для просмотра вложенных draw calls.

// GPU scope в C++:
RDG_GPU_STAT_SCOPE(GraphBuilder, MyCustomPass);
// или через SCOPED_GPU_STAT:
SCOPED_GPU_STAT(RHICmdList, MyRenderPass);

Memory Profiling

Канал memory записывает аллокации/деаллокации. Вкладка Memory Insights показывает timeline аллокаций, heap usage и live allocations. Для поиска утечек: отфильтруйте по тегу аллокатора (например, UObject) и найдите объекты, не удалённые GC.

# Включение LLM (Low Level Memory) тегов:
-LLM -LLMCSV="C:/llm_output.csv"

Bookmarks и Log

Добавляйте маркеры в код для навигации по трейсу:

#include "Misc/Trace/Detail/Trace.h"
Bookmark(TEXT("Level_Loaded"));

Они отображаются как вертикальные линии в Timing Insights — удобно для привязки событий к временной оси.

Подводные камни

  • GPU трейс требует правильного RHI — на DX11 без Stable Power State (nvidia-smi -pm 1) GPU timestamps нестабильны. Используйте DX12 или Vulkan для точных данных.
  • Трейс в Editor нерепрезентативен — Editor UI, PIE overhead и hotreload влияют на результаты. Профилируйте Packaged Build или Standalone.
  • Слишком много каналов замедляет игру — канал memory особенно тяжёл: перехватывает все malloc/free. Включайте только нужные каналы.
  • GameThread != полный CPU — задачи в Task Graph могут выполняться на Worker Threads; смотрите все треды, а не только GameThread.
  • Frame boundary — Insights измеряет Game Thread frame time, не включая GPU. GPU может быть behind на несколько кадров; учитывайте это при анализе.
  • Файл .utrace не читается старой версией Insights — версии Insights и Engine должны совпадать.

Common mistakes

  • Отвечать определением без production-сценария.
  • Не называть runtime boundary, security boundary или failure mode.
  • Игнорировать версию API, observability и тестовую проверку.

What the interviewer is testing

  • Объясняет механизм своими словами и без выдуманных API.
  • Называет реальные риски, диагностику и критерий корректности.
  • Связывает ответ с текущей документацией и миграционными ограничениями.

Sources

Related topics