PART 1 · 강의 2/4

CPU Profiler 상세

stat 명령어 체계와 Task Graph Insights로 CPU 병목을 식별합니다

01

stat 명령어 체계

가장 빠른 성능 확인 방법

stat 명령어는 게임 실행 중 실시간으로 성능 데이터를 화면에 표시합니다. 가장 기본적이고 빠른 프로파일링 방법입니다.

📊 핵심 stat 명령어 매트릭스

🎯 stat unit

기본 성능 개요

Frame, Game, Draw, GPU, RHIT, DynRes 시간

📈 stat unitgraph

시각적 그래프

stat unit + 실시간 그래프

🎮 stat game

게임 로직

틱, 블루프린트, 물리 시간

🐌 stat slow

느린 작업

임계값 초과 작업 목록

⭐ 콘솔 사용 예시
코드 숨기기
# 기본 성능 확인 (가장 많이 사용) stat unit # 프로파일 기록 시작/중지 stat startfile stat stopfile # 저장 위치: Saved/Profiling/*.ue4stats
02

병목 식별 방법

stat unit 결과 해석하기

stat unit의 결과에서 가장 높은 값이 병목입니다.

📊 stat unit 출력 시각화
Frame:
16.67 ms
Game:
12.50 ms ← 병목!
Draw:
3.20 ms
GPU:
8.40 ms
RHIT:
0.15 ms

병목 유형별 진단

🔍 병목 유형 판별 가이드
Game Thread Bound
🎮

증상: Game 값이 가장 높음
원인: BP, Tick, 물리, AI
해결: Part 2 참조

Draw Thread Bound
🖼️

증상: Draw 값이 가장 높음
원인: Draw Call, 머티리얼
해결: Part 3 참조

GPU Bound
🎨

증상: GPU 값이 가장 높음
원인: 셰이더, 오버드로우
해결: Part 3 참조

핵심 원칙

60 FPS = 16.66ms 프레임 버짓. Game, Draw, GPU 모두 이 값을 넘지 않아야 합니다. 가장 높은 영역을 먼저 최적화하세요.

03

상세 stat 명령어

특정 시스템 분석

📂 시스템별 stat 명령어 분류
🎨 렌더링
scenerendering
lightrendering
shadowrendering
initviews
🎮 게임플레이
anim
physics
ai
particles
🧠 메모리
memory
memoryplatform
streaming
llm
렌더링 관련 stat 명령어
코드 보기
stat scenerendering # 씬 렌더링 시간 stat lightrendering # 조명 렌더링 시간 stat shadowrendering # 그림자 렌더링 시간 stat initviews # 뷰 초기화, 가시성 계산
게임플레이 관련 stat 명령어
코드 보기
stat anim # 애니메이션 시스템 stat physics # 물리 시뮬레이션 stat ai # AI 시스템 stat particles # 파티클 시스템 stat audio # 오디오 시스템
메모리 관련 stat 명령어
코드 보기
stat memory # 메모리 사용량 개요 stat memoryplatform # 플랫폼별 메모리 stat streaming # 텍스처 스트리밍 stat llm # Low-Level Memory Tracker
팁: 여러 stat 동시 사용

여러 stat 명령어를 동시에 활성화할 수 있습니다. 예: stat unit + stat game을 함께 사용하면 Game Thread의 세부 내역을 확인할 수 있습니다.

04

Task Graph Insights

병렬 작업 분석

UE5의 많은 작업은 Task Graph를 통해 병렬 처리됩니다. Unreal Insights에서 이를 분석할 수 있습니다.

🔄 Task 라이프사이클
1
Created
태스크 생성
2
Launched
대기열 진입
3
Scheduled
스케줄링
4
Started
실행 시작
5
Finished
실행 완료
🔍 핵심 분석 포인트
대기 시간 긴 경우

Launched → Started 간격이 큼
원인: 스레드 경합

실행 시간 긴 경우
🐢

Started → Finished 간격이 큼
원인: 해당 작업 최적화 필요

Task Graph 트레이스 활성화
코드 보기
# Task Graph 데이터를 포함한 트레이스 -trace=counters,cpu,frame,bookmark,gpu # Unreal Insights에서 Tasks 탭이 표시됨
SUMMARY

핵심 요약

  • stat unit으로 병목 식별: Game/Draw/GPU 중 가장 높은 값이 병목
  • 60 FPS = 16.66ms 프레임 버짓, 모든 스레드가 이 값 이하여야 함
  • Game Thread Bound: Tick, 블루프린트, 물리 최적화 필요
  • stat startfile/stopfile로 프로파일 기록하여 상세 분석
  • Task Graph Insights로 병렬 작업의 대기 시간과 실행 시간 분석
다음 단계

다음 강의에서는 GPU ProfilerRenderDoc, PIX, NSight 등 외부 도구를 활용한 GPU 병목 분석을 다룹니다.

PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: stat 명령어 분석

stat unit, stat game, stat scenerendering을 각각 실행하여 Game Thread, Draw Thread, GPU 시간을 비교하세요. 어떤 Thread가 병목인지 판단하고 근거를 정리합니다.

실습 2: CPU Profiler 병목 추적

Unreal Insights의 Timing View에서 가장 긴 Game Thread 함수를 찾고, Call Tree를 탐색하여 병목의 근본 원인(Tick, Physics, Animation 등)을 식별하세요.

심화 과제

csvprofile 커맨드렛을 사용하여 자동화된 성능 테스트를 구축하세요. 10분간 게임플레이를 CSV로 기록하고, Excel/Python으로 프레임 시간 분포 그래프를 생성하여 P95 프레임 타임이 16.66ms 이하인지 검증합니다.