언리얼 인사이트 개요

언리얼 인사이트 애플리케이션 프로파일링 툴 개요

Choose your operating system:

Windows

macOS

Linux

언리얼 인사이트(Unreal Insights) 와 그 익스텐션은 개발자가 병목 구간을 파악하여 더 나은 퍼포먼스로 최적화하는 데 도움을 줍니다. 높은 수준에서 언리얼 인사이트는 언리얼 엔진과 통합되어 엔진이 방출하는 데이터를 수집, 분석, 시각화하는 단독 프로파일링 시스템입니다. 엔진의 기존 시스템이 제공하는 강력한 커버리지에 더하여 언리얼 인사이트는 프로파일링 데이터를 쉽게 추가하도록 지원합니다. 마지막으로 이 시스템은 데이터를 원격으로 기록하는 기능을 제공하여 애플리케이션이 프로젝트 실행에 미치는 영향을 최소화합니다.

구성

언리얼 인사이트 툴은 언리얼 엔진에 포함되어 있습니다. 경로는 `Engine/Binaries/Win64`입니다. UE4 소스 코드를 다운로드하여 로컬에서 컴파일하는 사용자의 경우 전체 EU4 솔루션을 개발 또는 쉽핑 모드에서 빌드하거나 'UnrealInsights' 프로젝트를 직접 빌드하여 컴파일할 수 있습니다.

UnrealInsightsProjectVisualStudio.png

컴파일된 프로그램( UnrealInsights.exe )을 찾거나 빌드했다면 데이터를 기록하거나 라이브 세션을 시청하는 데 사용할 기기에서 이 프로그램을 실행합니다. 애플리케이션의 퍼포먼스에 툴이 미치는 영향을 최소화하려면 모니터링이 필요한 프로젝트와 다른 기기에서 툴을 실행할 것을 권장합니다. 프로젝트와 툴을 하나의 컴퓨터에서 실행하는 것도 불가능하진 않습니다. 다만 프로젝트는 툴이 시작되는 즉시 연결을 시도할 것이므로 툴을 먼저 실행해야 한다는 점에 유의하세요.

툴이 원격으로 실행되는 경우 프로젝트를 다음 명령줄 옵션에서 'X'를 IP로 대체하여 실행함으로써 프로젝트에 툴의 IP를 제공합니다. -tracehost=X

  • 'tracehost=X' 실행인자는 원격 디바이스, Mac, Linux에서 실행할 때에만 필요합니다.

  • Windows에서 실행하는 경우(발견 가능하다면) 런타임이 자동으로 언리얼 인사이트와 연결됩니다.

언리얼 인사이트 — 브라우저

브라우저 모드(4.25의 신기능)에서 애플리케이션을 실행하면 Trace Sessions(트레이스 세션) (1), Trace Store Directory(트레이스 스토어 디렉터리) (2) 제어, New Connection(새 연결) (3) 메뉴가 표시됩니다.

UnrealInsightsBrowser.png

툴이 시작되면 언리얼 인사이트 창이 먼저 열립니다. 창에서 트레이스 세션(Trace Sessions) 이라고 레이블된 상단 섹션을 보면 분석을 위해 로드할 수 있는 사전 녹화된 세션 목록을 찾을 수 있습니다. 이는 트레이스 스토어 디렉터리(Trace Store Directory) .utrace 파일에 해당합니다. 이 트레이스 세션 중 하나를 더블클릭(또는 트레이스 세션을 선택하고 열기(Open) 클릭)하거나 열기(Open) 드롭다운 화살표로 다른 곳에 있는 .utrace 파일을 검색할 수 있습니다. 즉시 각 트레이스 파일의 분석을 시작하려면 .utrace 파일을 익스플로러에서 언리얼 인사이트 창으로 드래그 앤 드롭합니다.

툴에 연결되는 실시간 UE4 세션도 목록에 나타날 것입니다. 실시간 세션에는 상태 열에 실시간(LIVE) 이라는 단어가 표시되며 분석하면 실시간으로 업데이트됩니다. 그러나 그 외에는 사전 녹화된 세션과 동일합니다. 툴은 여러 세션을 동시에 연결할 수 있으며, 이렇게 하면 자동으로 모든 세션에서 스트리밍되는 데이터를 녹화합니다. 이 세션들을 사전 녹화 세션과 마찬가지로 목록에서 로드하여 실시간으로 분석할 수 있습니다.

하단 섹션( 새 연결(New Connection) )은 실험단계인 연결(Connect) 버튼과 사용자가 이미 진행 중인 세션 IP를 입력하는 텍스트 입력 필드를 제공합니다. 이 기능은 본래 게임 콘솔에 사용할 의도로 개발되었으나 아직 개발 중이며 안정적이지 않을 수 있습니다. 향후 릴리스에서 이 기능의 추가적인 반복처리를 기대해 주세요. 지금은 프로젝트를 실행하기 전에 언리얼 인사이트 툴을 시작하고 프로젝트에 -tracehost=%ADDRESS% 명령줄 옵션을 사용하는 것이 유일하게 권장되는 절차입니다.

폐기된 함수 기능

4.25에서 폐기된 트레이스 리코더(Trace Recorder) 섹션에는 툴을 닫지 않고 트레이스 녹화를 중지할 수 있는 중지(Stop) 버튼 함수 기능이 포함되었습니다. 이 기능은 충분한 데이터를 수집한 경우 세션이 끝나기에 앞서 라이브 세션에 새 데이터가 들어오는 것을 막아서 데이터를 더 쉽게 읽을 수 있게 해 주는 유용한 기능이었습니다. 이 버튼을 누르면 툴이 진행 중인 세션과 연결을 해제하여 새 세션 연결을 막을 수도 있었습니다.

녹화는 중지되었지만 시작(Start) 버튼이 중지(Stop) 버튼 자리에 나타났습니다. 녹화를 재개하면 새 원격 언리얼 엔진 세션에는 연결할 수 있었지만 트레이스 리코딩이 중지된 도중에 시작된 세션에는 연결할 수 없었고, 중지(Stop) 로 중단된 세션에 다시 연결할 수도 없었습니다.

UnrealInsightsStopped.png

언리얼 인사이트 v0.10과 시작 버튼

언리얼 인사이트 — 뷰어

4.25에서는 트레이스 세션 분석이 별도의 프로세스(뷰어 모드)로 시작됩니다. 또한 복수의 분석(뷰어) 창을 동시에 열 수 있습니다.

분석을 위해 트레이스 세션을 열면 언리얼 엔진이 세 개의 창 탭을 표시합니다. 이 세 개의 창 탭 가운데 타이밍 인사이트(Timing Insights) 창과 에셋 로딩 인사이트(Asset Loading Insights) 창은 퍼포먼스 데이터를 탐색 및 시각화하며 세션을 볼 준비가 된 이후에 나타납니다.

타이밍 인사이트 창

타이밍 인사이트 창에서는 CPU 및 GPU의 프레임당 퍼포먼스 데이터를 볼 수 있습니다. 프로젝트가 여러 작업에 소요하는 시간을 다양하게 시각화하여 볼 수 있는 몇 가지 패널이 있습니다. 보고자 하는 시간 블록을 선택하여 데이터를 종합, 정리 또는 분류하고 로그 출력을 리뷰할 수 있습니다. 각 패널은 표시 또는 숨기기가 가능합니다.

언리얼 인사이트 레퍼런스

TimingInsightsPanels.png

타이밍 인사이트 창에는 Frames(프레임) 패널 (1), Timing(타이밍) 패널 (2), Log(로그) 패널 (3), Timers and Counters(타이머 및 카운터) 탭 (4), Callers and Callees(호출자 및 피호출자) 패널 (5)이 포함됩니다.

타이밍 인사이트 창의 핵심 기능은 단일 프레임 또는 기간을 선택하면 타이밍 패널을 하이라이트 및 확대하고 타이머 탭과 통계 카운터 탭의 데이터를 종합하여 해당 시간 동안 수집된 퍼포먼스 정보를 표시하는 것입니다. 이를 위해서는 프레임 패널의 단일 프레임을 클릭하거나 타임 룰러(Time Ruler) 라 불리는 타이밍 패널 상단에서 스크럽 바 섹션을 클릭 및 드래그하면 됩니다.

!0

프레임 패널

프레임 패널은 각 프레임에 소요되는 총 시간을 바 그래프 형식으로 보여줍니다. 이 패널은 특정 레벨이 로드되었을 때의 프레임 속도 저하, 최적화되지 않은 씬의 표시, 개별 프레임이 느린 이유(예: 다수의 액터가 한꺼번에 스폰) 식별 등 일반적인 트렌드를 파악할 때 좋습니다. 더 긴 막대는 더 긴 프레임을 나타내므로 이벤트가 발생하는 정확한 순간을 집어내고 데이터를 검토하여 어떤 작업이 원인인지 찾아내기가 쉽습니다. 커서를 막대 위로 가져가면 프레임의 인덱스와 실행 시간이 표시됩니다. 막대를 왼쪽 클릭하면 해당 프레임의 데이터를 타이밍 패널, 타이머 탭, 통계 카운터 탭으로 고립시킬 수 있습니다.

FramesPanel.png

프레임 패널 내에서 선택된 프레임. 하얀 괄호 마커는 타이밍 패널 내에서 보이는 프레임 세트를 나타냅니다.

타이밍 패널

언리얼 인사이트에서 보내는 시간은 상당 부분 타이밍 패널에 소모하게 될 것입니다. 이 패널은 세션 도중에 실행된 모든 타이머 이벤트에 대한 각 인스턴스의 시각적 표현을 보여줍니다. 전체 프레임의 개요를 보여주는 프레임 패널과 달리 타이밍 패널은 개별 트레이스 이벤트를 보여주고 시간 측정을 마이크로초 이하의 정확도로 제공합니다. 이 이벤트는 세로로 스택되어 범위를 나타내며 별도의 트랙을 사용하여 여러 스레드의 활동을 표시합니다. 트랙 디스플레이 내에서 이벤트는 스레드로 생성되며 세로로 나뉘어 범위를 표시하고 시작 및 종료 시간에 따라 가로로 배치됩니다.

TimingPanel.png

타이밍 패널에서 타이머 이벤트에 마우스를 가져가면 나타나는 툴팁. (1) 같은 스레드에 배치된 이벤트 스택 (2)

패널 왼쪽 상단 구석의 트랙(Tracks) 드롭다운 메뉴에서 연관된 스레드 그룹을 켜거나 끌 수 있습니다. 마우스 커서를 트랙의 블록으로 가져가면 해당 타이머 이벤트에 대한 정보가 나타나며, 이것을 클릭하면 타이머 탭에서 해당 이벤트의 위치가 표시되고 선택됩니다.

TracksDropdown.png

타이밍 패널은 포함한 스레드에 따라 트랙 그룹을 표시하거나 숨기는 드롭다운 메뉴를 갖추고 있습니다.

타이밍 패널로 작업할 때는 특정 시간 범위로 데이터를 모으는 것이 좋습니다. 마우스 포인터를 타임 룰러에서 클릭 및 드래그하여 검토하고자 하는 기간을 선택합니다. 타이밍 탭의 이벤트에 Ctrl 키를 누르고 더블클릭을 하거나 타이밍 이벤트를 왼쪽 클릭하여 선택한 다음 엔터 키를 눌러도 됩니다. 또 다른 방법은 프레임 패널에서 프레임을 클릭하는 것입니다. 이렇게 하면 선택된 시간 범위가 상단에 표시되는 전체 길이와 함께 파란색 오버레이로 나타나며, 타이머 탭과 카운터 탭은 이 시간 범위 내에 해당되는 데이터만 보여줍니다. F 키를 눌러서 선택된 시간 범위로 직접 확대하거나 패닝할 수 있습니다.

4.25에서는 같은 유형(타이머)의 모든 타이밍 이벤트를 하이라이트(필터)하려면 타이밍 뷰에서 타이밍 이벤트를 더블클릭합니다.

UnrealInsightsEventFiltering.png

유사한 타이밍 이벤트는 하이라이트하고 나머지 모든 타이밍 이벤트는 흐린 색으로 표시한 모습.

타이머 탭

타이머 탭은 타이밍 패널에서 지정된 시간 범위 내에 실행된 모든 타이머 이벤트를 나열합니다. 이 목록은 시간 범위를 바탕으로 데이터를 종합할 뿐만 아니라 활성 열의 값을 기준으로 오름차순 또는 내림차순으로 정렬할 수도 있습니다. 정렬 순서를 바꾸거나 열을 활성화 또는 비활성화하려면 목록에서 아무 곳이나 오른쪽 클릭합니다. 타이머 탭에서 사용 가능한 열은 다음과 같습니다.

*메타 그룹 이름

  • 유형

  • 인스턴스 수

  • 총 포함 시간

  • 최대 포함 시간(ms)

  • 평균 포함 시간(ms)

  • 중위 포함 시간(ms)

  • 최소 포함 시간(ms)

  • 총 제외 시간

  • 최대 제외 시간(ms)

  • 평균 제외 시간(ms)

  • 중위 제외 시간(ms)

  • 최소 제외 시간(ms)

다음으로 그룹화(Group By)

TimersTabByName.png

타이머 이름으로 그룹화된 타이머 탭 데이터

카운터 탭

카운터 탭에는 타이머 탭과 같은 기간 동안 증가한 모든 통계가 나열됩니다. 사용자는 정렬 순서 및 열 체계를 타이머 탭과 동일한 방식으로 업데이트할 수 있습니다. 카운터 탭에서 사용 가능한 열은 다음과 같습니다.

  • 메타 그룹 이름

  • 유형

  • 합계

  • 최댓값

  • 상위 사분면(4.23에서는 구현되지 않음)

  • 평균

  • 중위값

  • 하위 사분면(4.23에서는 구현되지 않음)

  • 최소값

다음으로 그룹화(Group By)

UnrealInsightsCounters.png

플랫으로 그룹화된 카운터 탭 데이터

언리얼 인사이트 레퍼런스

카운터에 대한 그래프 시리즈를 더할 때 그래프 트랙 시각화를 활성화하려면 카운터를 더블클릭하세요.

UnrealInsightsCountersGraph.png

STAT_PageAllocatorTree 그래프 트랙

로그 패널

로그 패널은 UE4 세션의 모든 로그( UE_LOG 호출로 생성)를 표시합니다. 로그는 에디터 내의 출력 로그 창과 마찬가지로 길이와 카테고리로 걸러낼 수 있습니다. 또한 입력하는 텍스트와 일치하지 않는 모든 로그 메시지를 걸러내는 검색 박스도 제공됩니다. 필터 기능뿐 아니라, 행을 클릭하면 타임 패널이 해당 행의 텍스트가 로깅된 시간으로 패닝됩니다.

LogPanel.png

타이밍 패널에서 기간을 선택하면 해당 기간에 속하는 모든 로그 항목이 파란색으로 하이라이트됩니다. 반대로 한 항목을 선택하고 Shift 클릭으로 다른 항목을 선택하여 여러 로그 항목을 선택할 경우 타이밍 패널은 두 항목 간의 시간 범위를 하이라이트합니다.

에셋 로딩 인사이트 창

에셋 로딩 퍼포먼스를 분석하기 위해 언리얼 인사이트 툴은 에셋 로딩 인사이트 창을 제공합니다. 이 창에는 에셋 로딩과 관련된 이벤트에 초점을 맞추도록 환경설정된 타이밍 인사이트 보기의 특수 버전 타이밍 패널이 포함됩니다.

AssetLoadingInsights.png

에셋 로딩 인사이트 창은 에셋 로딩과 관련된 퍼포먼스에 초점을 맞춥니다. 여기에 나타난 세션은 '-loadtimetrace' 명령줄 옵션으로 녹화되었습니다.

채널

채널은 개발자가 이벤트를 이름이 지정된 그룹으로 나눌 수 있도록 지원하는 새 개념입니다. 채널을 사용하면 개발자는 생성된 트레이스 데이터의 양을 관리하여 퍼포먼스와 공간을 절약할 수 있습니다. 현재 채널은 기본으로 비활성화되어 있지만 라이브 세션 도중에 켜거나 끌 수 있습니다.

인사이트 데이터 소스 필터(Insights Data Source Filters 트레이스 데이터 필터링(Trace Data Filtering) 을 에디터 내부에서 활성화하려면 에디터(Editor) > 플러그인(Plugins) > 내장 플러그인(Built-In) 에서 찾으세요. 그렇지 않은 경우 이 플러그인을 프로젝트의 '*.uproject' 파일에서 활성화합니다.

{
    "FileVersion": 3,
    "EngineAssociation": "4.25",
    "Category": "",
    "Description": "",
    "Plugins": [
        {
            "Name": "TraceSourceFilters",
            "Enabled": true
        },
        {
            "Name": "TraceDataFilters",
            "Enabled": true
        }
    ]
} 

언리얼 인사이트 레퍼런스

프로젝트 출력 커스터마이징하기

엔진이나 플러그인, 프로젝트 소스 코드를 약간 변경하면 특정 언리얼 인사이트 기능을 활성화 또는 비활성화할 수 있습니다. 커스텀 로깅도 추가할 수 있습니다.

로깅 활성화 또는 비활성화하기

어떤 영역이 로깅 데이터를 전송할지 제어하거나 전체 시스템을 비활성화하려면 엔진의 소스 코드를 편집하고 특정 매크로의 값을 변경합니다. 이 매크로는 엔진 전반에 분포되어 있으며, 보통 관련 기능의 헤더 파일 또는 모듈에서 찾을 수 있습니다. 이 매크로는 로깅이 켜진 영역에서는 '1' 값을, 꺼진 영역에서는 '0' 값을 사용하지만 항상 매크로가 빌드의 컨텍스트 내에서 적절한지를 우선 판정하는 조건문 내에서 정의됩니다. LOGTRACE_ENABLED`는 로그 메시지 트레이싱을 제어하는 매크로입니다. Engine/Source/Runtime/Core/Public/Logging/LogTrace.h` 내의 다음 조건문에 자리합니다.

#if !IS_PROGRAM && !UE_BUILD_SHIPPING && (PLATFORM_WINDOWS || PLATFORM_PS4 || PLATFORM_XBOXONE)
#define LOGTRACE_ENABLED 1
#else
#define LOGTRACE_ENABLED 0
#endif

LOGTRACE_ENABLED`는 언리얼 인사이트 시스템으로 로그를 보내는 것이 적합한 빌드인 경우 기본으로 '1'로 정의됩니다. 비활성화하려면 위 코드 둘째 줄을 바꿔서 LOGTRACE_ENABLED`를 '1' 이 아닌 '0'으로 정의하면 됩니다.

언리얼 인사이트 레퍼런스

커스텀 CPU 범위 타이머 추가하기

엔진 기능이나 플러그인, 프로젝트에 로깅을 추가하려면 TRACE_CPUPROFILER_EVENT_SCOPE 매크로를 프로파일하고자 하는 스코프에서 호출합니다. 이 매크로는 생성하는 프로파일링 데이터를 소유할 트레이스 그룹을 단일 텍스트 실행인자로 식별합니다. 원하는 이름을 사용하면 되지만, 일반적인 예시는 TRACE_CPUPROFILER_EVENT_SCOPE(TEXT("MyClass::Function")) 또는 TRACE_CPUPROFILER_EVENT_SCOPE(TEXT("ReticulatingSplines")) 등입니다. TRACE_BOOKMARK`과 UE_LOG` 매크로가 언리얼 인사이트에 나타나므로 로그를 조사하고자 하는 코드 영역 근처에 넣으면 데이터를 분석할 때 필요한 정보를 더 빠르게 찾을 수 있습니다.

플랫폼 디테일

언리얼 인사이트를 사용하면 Android, PC 등 일부 플랫폼에서 트레이스 데이터를 수집할 수 있습니다.

Android

Android Debug Bridge(adb)를 사용하면 Android 툴이 TCP 트래픽을 USB 케이블로 리디렉션할 수 있습니다. 런타임 애플리케이션을 Android 디바이스에서 연결하려면 우선 adb 가 USB로 디바이스에 생성된 TCP 연결을 통과하도록 지시합니다.

adb.exe reverse tcp:1980 tcp:1980

언리얼 인사이트는 TCP 포트 1980을 수신합니다.

디바이스에서 실행할 때는 `localhost`에 연결되어야 합니다. 그러면 운영체제가 트래픽을 USB 케이블로 라우팅할 것입니다.

-tracehost=127.0.0.1

파일

트레이스는 '-tracefile=PATH' 명령줄 실행인자를 사용하여 파일을 출력할 수 있습니다. `PATH`의 값은 PC, Android 등 트레이스되는 플랫폼에 따라 다릅니다.

PC

-tracefile=d:/foo/bar.utrace

Android

-tracefile=/sdcard/UE4Game/foobar.utrace

사용자 지정 경로도 작동하지만, '/sdcard/' 경로는 Android OS 버전과 디바이스 제조사에 따라 다를 수 있습니다.

언리얼 엔진 문서의 미래를 함께 만들어주세요! 더 나은 서비스를 제공할 수 있도록 문서 사용에 대한 피드백을 주세요.
설문조사에 참여해 주세요
건너뛰기