트레이스 채널
트레이스(Trace)는 대량의 데이터를 송신할 수 있습니다. 채널(Channels)은 트레이스 시 데이터 속도를 제어할 수 있습니다. 각 이벤트 타입은 하나 이상의 채널에 연결되며, 필수 채널이 활성화되지 않은 경우 이벤트는 트레이스 스트림에 송신되지 않습니다.
채널 프리셋은 여러 채널을 그룹화하여 시나리오 기반 엔트리 포인트를 제공합니다. 사용자는 [Trace.ChannelPresets] 카테고리에 추가된 환경설정 파일을 사용하여 자신만의 프리셋을 정의할 수 있습니다.
아래 테이블에 사용할 수 있는 트레이스 채널이 포함되어 있습니다. 각 채널의 파일 경로, 지원되는 플랫폼 및 참고 사항 에 대한 세부 사항이 포함된 채널 목록을 확인할 수 있습니다.
| 채널 | 참고 사항 | 지원되는 플랫폼 | 파일 경로 |
|---|---|---|---|
| Log | 메시지를 로그합니다. | Runtime\Core\Private\Logging\LogTrace.cpp |
|
| BookMark | 중요 트랜지션을 나타내는 저주파 마커로, 사용자가 레벨 로딩 또는 엔진 부팅 단계 등을 빠르게 살펴볼 수 있습니다. | Runtime\Core\Private\ProfilingDebugging\MiscTrace.cpp |
|
| Frame | 게임 및 렌더링 프레임입니다. | Runtime\Core\Private\ProfilingDebugging\MiscTrace.cpp |
|
| Stats | 통계 카운터입니다. 통계 시스템을 기반으로 합니다. | Runtime\Core\Private\Stats\StatsTrace.cpp |
|
| Counters | 일반 카운터입니다. 시간 경과에 따라 값(float, integer)을 추적할 수 있습니다. 카운터 트레이스 API입니다. CSV 프로파일러 트레이스도 활성화합니다. | Runtime\Core\Private\ProfilingDebugging\CountersTrace.cpp |
|
| CPU | 명명된 CPU 타이머입니다. -statnamedevents 명령줄 실행인자를 사용하여 타이머를 더 추가할 수 있습니다. |
Runtime\Core\Private\ProfilingDebugging\CpuProfilerTrace.cpp |
|
| ContextSwitch | 트레이스 컨텍스트 스위치 이벤트입니다. Windows에서 게임/에디터 런타임은 '관리자 권한으로 실행'되어야 합니다. |
|
Runtime\Core\Private\ProfilingDebugging\PlatformEvents.cpp |
| Task | 태스크 그래프(Task Graph) 트레이스 채널입니다. | Runtime\Core\Private\Async\TaskTrace.cpp |
|
| GPU | 명명된 GPU 타이머입니다. GpuProfiler 데이터를 기반으로 합니다. | Runtime\RHI\Private\GpuProfilerTrace.cpp |
|
| RHICommands | RHI 명령에 대한 명명된 CPU 및 GPU 타이머입니다. | Runtime\RHI\Private\RHICommandList.cpp |
|
| RenderCommands | 렌더링 스레드에서 실행되는 명령에 대한 명명된 CPU 및 GPU 타이머입니다. | Runtime\RenderCore\Private\RenderingThread.cpp |
|
| File | 파일 I/O 트레이스 채널입니다(Open, ReOpen, Read, Write, Close 이벤트). |
|
Runtime\Core\Private\ProfilingDebugging\PlatformFileTrace.cpp |
| LoadTime | 에셋 로딩 인사이트(Asset Loading Insights) 트레이스 채널입니다. 패키지 로드 시간(특정 트레이스 이벤트) + 패키지 로딩에 관련된 명명된 CPU 타이머입니다. 'CPU' 채널이 필요합니다. 메타데이터와 함께 'LoadPackageInternal' CPU 타이밍 이벤트도 추가합니다. SCOPED_LOADTIMER 및 SCOPED_CUSTOM_LOADTIMER 매크로 사용을 참조하세요. | Runtime\Core\Public\ProfilingDebugging\LoadTimeTracker.h Runtime\Core\Private\Serialization\LoadTimeTrace.cpp |
|
| SaveTime | 패키지 저장에 관련된 명명된 CPU입니다. 'CPU' 채널이 필요합니다. 'UPackage_Save_' 접두사가 있는 명명된 CPU 타이머를 추가합니다. 자세한 내용은 SCOPED_SAVETIMER 매크로 사용을 참조하세요. | Runtime\CoreUObject\Private\UObject\SavePackage\SavePackageUtilities.h / .cpp |
|
| Cook | 쿠킹에 관련된 명명된 CPU 타이머를 표시합니다. 'CPU' 채널이 필요합니다. 메타데이터와 함께 'CookByTheBook' CPU 타이밍 이벤트 및 'SaveCookedPackage' CPU 타이밍 이벤트를 추가합니다. | Editor\UnrealEd\Private\Cooker\CookProfiling.h/.cpp |
|
| Net | 네트워킹 트레이스 채널입니다. 해당 'frame' 채널을 활성화하는 -NetTrace=1이 필요합니다. | Runtime\Net\Core\Private\Net\Core\Trace\Reporters\NetTraceReporter.cpp |
|
| Module | 모듈 로딩 정보입니다 | Runtime\Core\Private\ProfilingDebugging\ModuleDiagnostics.cpp |
|
| Callstack | 콜스택 설명입니다. 할당을 콜스택과 연결할 수 있습니다. |
Runtime\Core\Private\ProfilingDebugging\CallstackTrace.cpp |
|
| MemAlloc | 메모리 할당입니다. Module 및 Callstack 채널을 사용합니다. | Runtime\Core\Private\ProfilingDebugging\MemoryAllocationTrace.cpp |
|
| MemTag | 메모리 태그 통계입니다. 일반 속도로 태그당 메모리 사용량 스냅샷을 트레이스합니다. 트레이스를 위해 LLM 서브시스템에 의존합니다. '-llm'을 의미합니다. Init() 뒤에 사용할 수 있습니다. | Runtime\Core\Private\HAL\LowLevelMemTracker.cpp |
|
| VisualLogger | 비주얼 로거(Visual Logger)가 파일에 기록을 시작합니다. | Runtime\Engine\Private\VisualLogger\VisualLoggerTraceDevice.cpp |
|
| Physics | 카오스 비주얼 디버거입니다. | Runtime\Experimental\Chaos\Private\ChaosVisualDebugger\ChaosVisualDebuggerTrace.cpp |
|
| Animation | Animation Insights(GameplayInsights/RewindDebugger) 플러그인입니다. | Runtime\Engine\Private\Animation\AnimTrace.cpp |
|
| Object | GameplayInsights/RewindDebugger 플러그인입니다. UObject 클래스, 월드, 인스턴스 및 이벤트입니다. | Runtime\Engine\Private\ObjectTrace.cpp |
|
| ObjectProperties | GameplayInsights/RewindDebugger 플러그인입니다. | Plugins\Animation\GameplayInsights\Source\GameplayInsights\Private\ObjectPropertyTrace.cpp |
|
| NetworkPrediction | Network Prediction Insights 플러그인입니다. | Plugins\Runtime\NetworkPrediction\Source\NetworkPrediction\Private\NetworkPredictionTrace.cpp |
|
| RDG | RDG Insights 플러그인입니다. | Runtime\RenderCore\Private\RenderGraphTrace.cpp |
|
| Slate | Slate Insights 플러그인입니다. | Runtime\SlateCore\Private\Trace\SlateTrace.cpp |
|
| Niagara | Niagara 플러그인입니다. | Plugins\FX\Niagara\Source\Niagara\Private\NiagaraTrace.cpp |
|
| Messaging | UDP Messaging 플러그인입니다. | Plugins\Messaging\UdpMessaging\Source\UdpMessaging\Private\UdpMessagingTracing.cpp |
|
| TraceSourceFilters | Trace Source Filtering 플러그인입니다. | Plugins\Developer\TraceSourceFiltering\Source\SourceFilteringTrace\Private\SourceFilterTrace.cpp |
|
| PoseSearch | PoseSearch 플러그인입니다. | Plugins\Experimental\Animation\PoseSearch\Source\Runtime\Private\Trace\PoseSearchTraceLogger.cpp |
|
| Concert | Concert 플러그인입니다. | Plugins\Developer\Concert\ConcertMain\Source\ConcertTransport\Private\ConcertLogGlobal.cpp |
|
| LevelSnapshots | Level Snapshots 플러그인입니다. | Plugins\VirtualProduction\LevelSnapshots\Source\LevelSnapshots\Private\LevelSnapshotsLog.cpp |
일부 플러그인이나 런타임 코드는 채널을 자동으로 활성화하거나 비활성화하는데, 아래 테이블에 이러한 플러그인이 나열되어 있습니다.
| 플러그인 | 채널 설명 |
|---|---|
| Gameplay Insights/Rewind Debugger | 에디터에서 플레이(Play in Editor, PIE)가 시작되면 Object 채널을 토글하고, 녹화가 시작되면 ObjectProperties, Animation 및 Frame 채널을 토글합니다. |
| TraceSourceFiltering | 이 플러그인을 활성화하면 TraceSourceFilters 채널이 켜집니다. |
| NetworkPrediction | 이 플러그인을 활성화되면 NetworkPrediction 채널이 켜집니다. |
| PoseSearch | 이 플러그인을 활성화되면 PoseSearch 채널이 켜집니다. |
| isual Logger | 녹화 시 Visual Logger 채널이 켜집니다. |
| -NetTrace=1 | 명령줄에서 활성화하면 Net 및 Frame 채널이 켜집니다. |
런타임 제어하기
매크로
사용자는 언리얼 인사이트 와 함께 제공되는 수많은 기능을 최대한 활용할 수 있도록 매크로와 명령줄 옵션으로 프로젝트의 출력을 커스터마이징할 수 있습니다. 또한 마우스 및 키보드 입력 단축키를 통해 사용자는 인사이트 창을 더욱 효율적으로 탐색할 수 있습니다. 다음 테이블을 참조하여 언리얼 인사이트에서 보려는 데이터에 따라 어떤 매크로를 조정해야 할지를 결정할 수 있습니다.
| 매크로 이름 | 기본 상태 | 소스 파일 | 영역 설명 |
|---|---|---|---|
UE_TRACE_ENABLED |
켜짐 | Engine/Source/Runtime/TraceLog/Public/Trace/Config.h |
전체 시스템의 마스터 컨트롤입니다. |
UE_TASK_TRACE_ENABLED |
켜짐 | Engine/Source/Runtime/Core/Public/Async/TaskTrace.h |
태스크 그래프(Task Graph) 이벤트 추적을 제어합니다. -trace=default,task |
LOGTRACE_ENABLED |
켜짐 | Engine/Source/Runtime/Core/Public/Logging/LogTrace.h |
로그 메시지를 언리얼 인사이트에 보고할지를 제어합니다. -trace=log |
MISCTRACE_ENABLED |
켜짐 | Engine/Source/Runtime/Core/Public/ProfilingDebugging/MiscTrace.h |
북마크, 프레임, 스레드, 스레드 그룹의 추적을 제어합니다. -trace=bookmark,frame |
CPUPROFILERTRACE_ENABLED |
켜짐 | Engine/Source/Runtime/Core/Public/ProfilingDebugging/CpuProfilerTrace.h |
CPU 타이머 및 타이밍 이벤트의 추적을 제어합니다. -trace=cpu |
LOADTIMEPROFILERTRACE_ENABLED |
켜짐 | Engine/Source/Runtime/CoreUObject/Public/Serialization/LoadTimeTrace.h |
로드 에셋과 관련된 이벤트의 추적을 제어합니다. -trace=loadtime |
STATSTRACE_ENABLED |
켜짐 | Engine/Source/Runtime/Core/Public/Stats/StatsTrace.h |
통계 카운터의 추적을 제어합니다. -trace=stats |
PLATFORMFILETRACE_ENABLED |
켜짐 | Engine/Source/Runtime/Core/Public/ProfilingDebugging/PlatformFileTrace.h |
파일 열기, 닫기, 읽기, 쓰기 같은 파일 활동 추적을 제어합니다. -trace=file |
PLATFORM_SUPPORTS_PLATFORM_EVENTS |
켜짐 | Engine/Source/Runtime/Core/Private/ProfilingDebugging/PlatformEvents.h |
플랫폼 이벤트(컨텍스트 전환 이벤트)를 지원하는 플랫폼에 적용됩니다. -trace=ContextSwitch |
GPUPROFILERTRACE_ENABLED |
켜짐 | Engine/Source/Runtime/RHI/Public/GpuProfilerTrace.h |
GPU 타이머 및 타이밍 이벤트를 제어합니다. -trace=gpu |
UE_NET_TRACE_ENABLED |
켜짐 | Engine/Source/Runtime/Net/Core/Public/Net/Core/Trace/NetTrace.h Engine/Source/Runtime/Net/Core/Public/Net/Core/Trace/Config.h |
네트워크 패킷 콘텐츠 추적을 제어합니다. -trace=net |
UE_MEMORY_TAGS_TRACE_ENABLED |
켜짐 | Engine/Source/Runtime/Core/Public/ProfilingDebugging/TagTrace.h |
태그 범위 추적을 활성화합니다. 비활성화하면 추적된 할당에 연결된 태그가 없습니다. -trace=memtag |
UE_CALLSTACK_TRACE_ENABLED |
켜짐 | Engine/Source/Runtime/Core/Public/ProfilingDebugging/CallstackTrace.h |
콜백 추적을 활성화합니다. 비활성화하면 추적된 할당에 콜스택이 포함되지 않습니다. -trace=callstack |
UnrealInsights.exe의 명령줄 옵션
| 명령줄 옵션 | 용도 | 설명 |
|---|---|---|
-OpenTraceId |
-OpenTraceId=id |
언리얼 인사이트에서 강제로 '뷰어 모드(Viewer mode)'에서 지정된 ID 분석을 시작합니다. |
-OpenTraceFile |
-OpenTraceFile=file.utrace |
언리얼 인사이트에서 강제로 '뷰어 모드'에서 지정된 파일 분석을 시작합니다. |
-Store |
-Store=address:port |
지정된 트레이스 스토어에 브라우저를 연결합니다. -StoreHost=address 및 -StorePort=port 도 사용할 수 있습니다. |
콘솔 명령
| 명령 | 설명 |
|---|---|
Trace.Send <Host> [ChannelSet] |
트레이스 스토어에 대한 추적을 시작합니다. |
Trace.File [<File>] [ChannelSet] |
파일에 대한 추적 이벤트를 시작합니다. 파일 경로가 지정되지 않은 경우, utrace 파일의 디폴트 경로 디렉터리는 YourProject/Saved/Profiling 입니다. 이름이 지정되지 않은 경우, 현재 타임스탬프에 따라 utrace 파일 이름이 자동으로 생성됩니다. 늦은 연결을 지원합니다. 사용 예시:
|
Trace.Start[ChannelSet] |
디폴트 활성화 채널을 유지합니다. |
Trace.Stop |
트레이싱 프로파일링 이벤트를 중지합니다. |
Trace.Enable[ChannelSet] |
채널 세트를 활성화합니다. |
Trace.Disable[ChannelSet] |
채널 세트를 비활성화합니다. 지정된 채널 세트가 없으면 모든 채널이 비활성화됩니다. |
Trace.Pause |
현재 이벤트 전송 중인 모든 트레이스 채널을 일시정지합니다. |
Trace.Resume |
이전에 일시정지한 추적을 재개합니다(푸시된 채널 재활성화). |
Trace.Status |
콘솔에 추적 상태를 인쇄합니다. |
언리얼 인사이트 제어하기
명령줄 옵션
다음과 같은 명령줄 옵션을 매크로와 결합하면 트레이스 데이터가 활성화됩니다.
| 명령줄 옵션 | 설명 |
|---|---|
-trace -trace=<channel1> |
명명된 그룹으로 이벤트를 분류함으로써 생성할 트레이스 데이터의 양을 관리할 수 있습니다. -trace=cpu,frame,bookmark 는 CPU 프로파일러 이벤트, 프레임 마커 및 북마크를 활성화합니다. |
-tracehost=<ip> |
지정된 IP 주소에 트레이스를 전송합니다. 기본값은 로컬 호스트 주소입니다. -tracehost 에 대한 내용은 언리얼 인사이트를 참조하세요. |
-tracefile, -tracefile =<filename> |
'WriteTo' 파일 트레이스 제어 명령을 수행합니다. 이에 따라 트레이스 디폴트 명령이 실행됩니다. |
-tracefiletrunc |
|
-tracetailmb= N |
N은 MiB 단위로 트레이스 트레일 버퍼 크기를 지정합니다. 트레이스 트레일 버퍼의 디폴트 크기는 4MiB입니다. |
-notraceserver |
이 옵션을 지정하면 게임이나 에디터에서 로컬 트레이스 서버를 시작하지 않습니다. |
-statnamedevents |
통계 명명된 이벤트에 대한 트레이스 데이터를 기록합니다. GCycleStatsShouldEmitNamedEvents = 1; 로 활성화하거나 콘솔 명령으로 'Stat NamedEvents'를 호출하여 활성화할 수 있습니다. |
-verbosenamedevents |
상세 명명된 이벤트에 대한 트레이스 데이터를 기록합니다. GCycleStatsShouldEmitVerboseNamedEvents = 1; 로 활성화하거나 콘솔 명령으로 'Stat VerboseNamedEvents'를 호출하여 활성화할 수 있습니다. 상세 주기 상태 예시는 "CPU Stall - [...]", "Other TaskGraph Stalls", "FQueuedThread::Run.WaitForWork"입니다. |
키보드 입력 단축키
타이밍 인사이트 창
다음과 같은 마우스 및 키보드 명령으로 타이밍 인사이트를 좀 더 효율적으로 탐색할 수 있습니다:
프레임 패널
| 키보드 입력 단축키 | 기능 |
|---|---|
| 좌클릭 | 프레임 선택 |
| 우클릭 | 컨텍스트 메뉴 열기 |
| 마우스 왼쪽/오른쪽 드래그 | 수평 줌 |
| 마우스 휠 | 수평 줌 |
| Shift + 마우스 휠 | 수직 줌 |
타이밍 패널
| 입력 단축키 | 기능 |
|---|---|
| 마우스 왼쪽/오른쪽 드래그 | 수평 또는 수직 패닝 |
| Ctrl + 마우스 왼쪽/오른쪽 드래그 | 수평 패닝 |
| Shift + 마우스 왼쪽/오른쪽 드래그 | 수직 패닝 |
| 마우스 휠 | 줌 |
| Ctrl + 마우스 휠 | 수평 스크롤 |
| Shift + 마우스 휠 | 수직 스크롤 |
| 우클릭 | 컨텍스트 메뉴 열기 |
| 타이밍 이벤트 좌클릭 | 타이밍 이벤트 선택 |
| 빈 공간 좌클릭 | 선택 항목 지우기 |
| Ctrl + 마우스 왼쪽 더블 클릭 | 선택한 타이밍 이벤트의 시간 범위 선택 |
| 타임 룰러(Time Ruler) 위에서 마우스 왼쪽/오른쪽 드래그 | 시간 영역 선택 |
| Ctrl+F | 빠른 찾기 메뉴 토글 |
| F | 마지막 선택 항목에 프레임을 지정한 다음, 시간 범위와 타이밍 이벤트 간에 번갈아 프레임 지정 |
| G | 그래프 트랙 비저빌리티를 토글하여 게임 및 렌더링 프레임 표시(카운터 시리즈의 자리표시자 포함) |
| Y | GPU 타이밍 트랙 비저빌리티 토글 |
| Y | CPU 타이밍 트랙 비저빌리티 토글 |
| I | I/O 개요 및 활동 트랙 비저빌리티 토글 |
| O | I/O 활동 트랙의 파일 활동과 관련된 백그라운드 이벤트의 비저빌리티 토글 |
| L | 에셋 로딩 트랙 비저빌리티 토글 |
| C | 노멀 모드와 컴팩트 모드 간에 전환하여 타이밍 이벤트의 시각화 방식에 영향을 미침 |
| V | 빈 타임라인 자동 숨김 |
| X | 다음 이벤트 뎁스 제한 선택: 단일 레인, 4레인, 무제한 |
| B | 북마크 비저빌리티 토글 |
| M | 타임 마커(북마크만이 아닌 모든 트레이스 로그) 비저빌리티 토글 |
| **-/+ | 줌 |
| Ctrl + 왼쪽/오른쪽/위/아래 화살표 | 수평 및 수직 패닝 |
| 왼쪽/오른쪽/위/아래 화살표 | 자신의 이전 또는 다음 형제/부모/가장 큰 자손인 타이밍 이벤트 선택 |
| Enter | 선택한 타이밍 이벤트의 시간 범위 선택 |
네트워킹 인사이트 창
다음과 같은 마우스 및 키보드 명령으로 네트워킹 인사이트를 좀 더 효율적으로 탐색할 수 있습니다:
| 입력 단축키 | 기능 |
|---|---|
| 패킷 좌클릭 | 해당 패킷 선택 |
| 여러 패킷을 Shift + 좌클릭 | 패킷 범위 선택 |
| Ctrl + A | 모든 패킷 선택 |
| 왼쪽/오른쪽 화살표 | 이전/다음 패키지 선택 |
| Shift + 왼쪽/오른쪽 화살표 | 선택 항목을 왼쪽/오른쪽으로 확대(여러 개의 패키지) |
| Ctrl + shift + 왼쪽/오른쪽 화살표 | 선택 항목을 왼쪽/오른쪽에서 축소(여러 개의 패키지) |
| 이벤트 더블 클릭 | 패킷 콘텐츠 뷰에서 해당 이벤트를 포함하는 모든 패킷을 하이라이트하고 다른 이벤트는 모두 숨김 |