UDN
Search public documentation:

PerfStatsKR
English Translation
日本語訳
中国翻译

Interested in the Unreal Engine?
Visit the Unreal Technology site.

Looking for jobs and company info?
Check out the Epic games site.

Questions about support via UDN?
Contact the UDN Staff

UE3 홈 > 퍼포먼스, 프로파일링, 최적화 > 언리얼 엔진 퍼포먼스 추적 시스템
UE3 홈 > 게임플레이 프로그래밍 > 언리얼 엔진 퍼포먼스 추적 시스템

언리얼 엔진 퍼포먼스 추적 시스템


문서 변경내역: Joe Graf 작성. 홍성진 번역.

개요


UE3 의 게임 퍼포먼스 추적용 메커니즘 다수를 다루는 문서입니다. 시스템에서 제공하는 데이터는 레벨 제작 및/또는 게임플레이 시스템 튜닝을 돕기 위한 것입니다. 퍼포먼스 정보를 보관하고 시간에 따라 비교하여, 시간에 따른 레벨의 퍼포먼스를 추적하는 데도 사용할 수 있습니다.

게임내 통계


퍼포먼스 정보를 확인하는 방법은 두 가지 있습니다: 게임내에서, 그리고 외부 클라이언트를 통해서 입니다. 게임내 툴은 모두 콘솔 명령으로 실행되며 (다음 부분 참고) HUD 에 표시되므로, 화면 공간상의 제약이 약간 있습니다. 렌더링 제약이 덜한 방식으로 통계를 확인하고자 한다면, 외부 클라이언트 쪽이 더 낫습니다.

통계 표시 방식은 두 가지 입니다: 그룹식 또는 계층구조식이죠. 예전 통계 시스템은 그룹식만 지원했었습니다. 그룹은 프로그래머가 설정하며, "stat groupname" 콘솔 명령으로 확인할 수 있습니다. 그러면 그룹 내 모든 통계가 표시되는 식이죠. 아래는 포함적 / 배타적 값 둘 다 포함된 타이밍 전용 데이터 스크린샷입니다 (그와 같이 셋업하는 법에 대해서는 콘솔 명령 부분을 참고하세요).

커스텀 통계 그룹은 원하는 그룹/스탯을 켜고/끈 다음 "stat save" 명령으로 그 그룹을 커스텀 이름으로 저장하여 만들 수 있습니다.

InGameStats.jpg

두 번째 방법은 계층구조식 통계 데이터 확인 방법입니다. 통계 데이터를 트리 구조로 취급, 자손 통계는 부모의 총 시간에 포함되는 식입니다. 예를 들면 모든 데이터는 stat FrameTime 의 일부로 포함되어 있습니다. 이런 식의 통계 확인은 퍼포먼스가 좋지 않은 영역을 알고 있을 때 딱 어느 부분이 문제인지 알고자 할 때 정말 큰 도움이 됩니다. 시간을 가장 많이 잡아먹는 잎새를 찾아낼 때까지 정보를 계속 파내려갈 수 있습니다. 기본적으로 통계 데이터에는 포함적 타이밍 정보가 포함됩니다. "stat exclusive" 콘솔 명령을 사용하여 배타적 시간을 표시할 수도 있습니다. 그러면 자손 통계를 제외한 소모 시간이 표시됩니다. 씬의 특정 부분 때문에 퍼포먼스 문제가 생기는 것을 추적해 내려갈 때 매우 중요한 툴이 됩니다.

InGameHierStats.jpg

각 열의 의미

의미
# 계층구조 모드에서 계층구조 통계 이동시 사용됩니다.
CallCount 해당 프레임에서 그 통계가 업데이트된 횟수를 나타냅니다.
IncAvg 지난 몇 프레임에 걸쳐 통계에 소모된 평균 포함적 시간입니다.
IncMax 지난 몇 프레임에 걸쳐 통계에 소모된 최대 시간입니다.
ExcAvg 지난 몇 프레임에 걸쳐 통계에 소모된, 자손을 포함하지 않은 평균 시간입니다.
ExcMax 지난 몇 프레임에 걸쳐 통계에 소모된, 자손을 포함하지 않은 최대 시간입니다.

콘솔 명령

콘솔 명령을 통해 게임 내 통계 시스템과 상호작용합니다. 통계 시스템은 단순한 명령 세트를 지원하여 게임 내 HUD 에 통계 정보를 표시합니다. 통계 시스템의 모든 콘솔 명령은 "stat" 으로 시작하며, 예를 들면 "stat engine" 명령은 engine 통계 그룹 렌더링을 토글합니다. 아래 표는 지원되는 콘솔 명령과 그 용도를 나타냅니다.

명령 결과
inclusive 포함적 상태를 토글합니다. 참이면 포함적 시간이 표시됩니다.
exclusive 배타적 상태를 토글합니다. 참이면 배타적 시간이 표시됩니다.
cycles 순환 카운터 상태를 토글합니다. 참이면 순환 카운터 통계가 표시됩니다.
counters 카운터 상태를 토글합니다. 참이면 카운터 통계가 표시됩니다.
grouped 렌더링 모드를 그룹 뷰 모드로 바꿉니다. 이미 그룹 모드에 있을 때는 렌더링을 끕니다.
hier 렌더링 모드를 계층구조 뷰 (콜 그래프) 모드로 바꿉니다. 이미 계층구조 모드에 있을 때는 렌더링을 끕니다.
nav "StatNum" 현재 통계 선택을 콜 그래프 계층구조 위/아래로 옮깁니다.
color "Item" "Color" 지정된 아이템이 렌더링되는 색을 바꿉니다.
list groups 모든 통계 그룹의 이름을 로그에 덤핑합니다. showlog 로 확인합니다.
list group "GroupName" 지정한 그룹의 모든 통계 이름을 로그에 덤핑합니다. showlog 로 확인합니다.
list list sets GEngineIni 에 저장되어 있는 커스텀 세트를 출력합니다.
save "SetName" 현재 통계를 GEngineIni 에 "SetName" 이란 이름의 커스텀 통계 세트에 저장합니다.
name "StatName" 개별 통계에 대한 렌더링 플랙을 토글합니다. 참이면 그 통계는 그룹과 함께 렌더링됩니다.
none 모든 그룹에 대한 통계 렌더링을 끕니다.
"GroupName" 그 그룹에 대한 렌더링 플랙을 토글합니다. 참이면 그 그룹은 렌더링됩니다. "GroupName" 이 커스텀 통계 세트 이름과 일치하는 경우, 그 커스텀 세트가 켜집니다.

통계 기록하기

이번 버전 통계 시스템에는 "stats provider" 프레임워크가 포함되어 있습니다. 이 프레임워크는 게임에서 통계 데이터를 수집하여 일정한 형태의 외부 저장 장치로 전송합니다. 각 프레임 말미의 등록된 프로바이더 목록에는 데이터 스냅샷이 주어집니다. 이 데이터를 디스크에 저장하든지, 네트워크로 전송하든지, 다른 API 시스템으로 통합시키든지 할 수 있습니다. 에픽은 파일이나 네트워크를 통한 프레임별 통계 데이터 기록 기능을 지원합니다.

파일로 통계 로그하기

이번 버전 통계 시스템에는 통계 데이터를 파일로 기록하는 기능을 지원합니다. 시스템이 작성할 수 있는 포맷은 두 가지입니다: 엑셀로 임포트할 수 있는 CSV, 통계 뷰어에서 사용되는 XML 입니다. CSV 포맷은 예전 데이터 캡처 내용과 빠른 비교를 하기에 좋습니다. 엑셀의 차트 기능 등을 전부 사용할 수 있다는 장점도 있습니다. XML 포맷은 주로 나중에 검토하기 위한 데이터 캡처시 사용됩니다. XML 파일은 통계 뷰어 본연의 포맷으로 되어 있어, 그냥 기존 XML 파일을 로드하기만 하면 통계 데이터를 확인할 수 있습니다.

네트워크 통계

또 한가지 최신 버전에 포함된 기능은 네트워크를 통한 통계 데이터 수집 기능입니다. 이를 통해 예전엔 불가능했던 데디케이티드(전용) 서버에 대한 통계 데이터를 수집할 수 있습니다. UDP 를 통해 통계를 수집하며, 다양하게 지원되는 OS/콘솔에서 작업할 수 있습니다. Xbox 360 에서는 PIX 툴로 통계를 캡쳐할 수도 있습니다.

통계 기록 환경설정하기

Stats providers (통계 프로바이더)는 MyGameEngine.ini 의 세팅을 통해 켭니다. 각 프로바이더에는 이름이 주어지며, 그 이름을 사용하여 INI 파일 내 환경설정 데이터를 검사합니다. 예를 들어 통계 XML 파일 기록 기능을 켜려면 Engine.ini 파일에 다음과 같은 줄이 들어 있어야 합니다:

  [StatNotifyProviders]
  XmlStatNotifyProvider=true
  

에픽이 기본적으로 제공하는 프로바이더 전체 목록은 아래와 같습니다:

  [StatNotifyProviders]
  XmlStatNotifyProvider=false
  CsvStatNotifyProvider=false
  StatsNotifyProvider_UDP=true
  PIXNamedCounterProvider=false
  

통계 프로바이더는 명령줄을 통해서도 켤 수 있습니다. 파라미터에 프로바이더 이름을 넣는 식입니다:

utgame.exe ons-testmap -CsvStatNotifyProvider

위의 명령은 쉼표로 구분되는 통계 로깅을 켜며, utgame_stats.csv 에 저장됩니다.

통계 뷰어


통계 뷰어는 외부 어플리케이션으로, 퍼포먼스 데이터를 수집하고 분석하는 것입니다. 그 UI 는 크게 세 가지 영역으로 나뉘어 있습니다: 가용 그룹과 그 그룹을 이루는 통계가 모두 표시되는 트리 뷰, 평균/최소/최대값과 같은 종합 정보를 표시하는 리스트 뷰, 통계 정보를 선 그래프로 표시하는 그래프 영역입니다. 그래프의 각 점은 주어진 프레임에 대해 그 통계값을 나타냅니다. 그래프는 프레임 데이터를 통해 앞/뒤로 스크롤 가능합니다. X 축 상의 수치는 사용자 개인설정에 따라 프레임 번호나 시간이 표시됩니다. Y 축 범위는 기본적으로 0 에서 100 까지이며, 통계별로 스케일은 조정 가능합니다. 항상 100 보다 크거나 0 에 근접하거나 하는 통계에 좋습니다.

데이터 구하기

이 뷰어는 (앞서 설명한) 파일 기록 방법을 사용하여 저장된 파일을 확인하는 데 사용됩니다. 네트워크를 통해 통계 정보를 수집하고 있는 실행중 게임에 접속하는 데도 사용됩니다. 네트워크를 통해 수집된 정보는 나중의 검토를 위해 저장할 수도 있습니다.

기존 통계 파일 열기

File - Open 메뉴 옵션을 선택하고 게임의 log 디렉토리로 이동합니다. 모든 통계 기록 기능은 게임의 log 디렉토리에 파일을 작성합니다.

원격 게임 접속하기

Connect - Connect To 메뉴 옵션을 사용하면 아래와 같은 대화창이 뜹니다. 이 대화창은 처음 생성될 때 모든 게임에 전송되는 안내방송 메시지를 방송합니다. 새로고침 버튼은 그 메시지를 재방송합니다. 두 방송 모두 대화창에 지정된 포트를 통해 이루어집니다. 게임 팀이 여럿 있거나 일부 서버만 따로 떼어내려는 경우, 게임이 리스닝중인 포트를 바꾸면 됩니다. 접속 편의를 위해, 실행중인 게임의 유형과 어느 플랫폼에서 실행중인지가 대화창에 나열됩니다. 아래 그림에서 보면 제 PC 에서는 에디터 UT 버전과 Onslaught 게임이, Xbox 360 에서는 Gears of War 가 실행되고 있습니다. 이 대화창에 나열된 게임에서 통계 수집을 시작하려면, 원하는 게임을 더블클릭하거나 선택한 다음 Connect 버튼을 누르면 됩니다.

ConnectTo.jpg

데이터 확인하기

아래 그림은 네트워크를 통해 다량의 데이터를 수집한 후 저장된 파일을 열어 본 모습입니다. 이 뷰에서 보면 그래프 부분에 카운터를 둘, FrameTime 과 SkelCompose 를 추가했습니다. 선의 구분을 더욱 쉽게 하고자, 선택된 통계는 항상 두꺼운 선으로 그려집니다. 표시 영역은 데이터 150 프레임을 나타내고 있습니다. 각 통계에는 그에 연계된 색이 있으며, 그래프 아래 나열된 통계를 클릭하여 바꿀 수 있습니다. 그래프의 배경색 역시 같은 방법으로 바꿉니다. 디스플레이에서 통계를 제거하려면, 리스트에서 제거하려는 통계를 선택하고 Delete 키를 누르십시오.

ViewingData.jpg

그래프에 통계 추가하기

그래프에 통계를 추가하려면, 트리 뷰에서 개별 통계를 그래프 영역으로 끌어놓거나, 그룹을 그래프 영역으로 끌어놓으면 됩니다. 그룹을 그래프 영역에 끌어놓으면 그 안의 모든 통계가 디스플레이에 추가됩니다.

종합 데이터

통계에 대한 종합 데이터는 리스트 뷰에 표시되며, 그 내용은 통계에 대한 평균/최소/최대값입니다. 기본적으로 이 값들은 전체 데이터 세트에 대한 것으로, 모든 프레임을 포함하는 것입니다. View - Ranged Aggregate Data 를 선택하면 그려지는 프레임 세트만에 대한 종합 데이터를 확인할 수 있습니다. 범위로 확인할 때는, 세트를 통과해 스크롤함에 따라 데이터가 업데이트됩니다.

뷰 영역 Zoom

X 축 스케일 조절은 F1 (View - Zoom In) 과 F2 (View - Zoom Out) 키로 합니다. 디스플레이에 뿌려지는 프레임 수가 줄고/늘지요. Y 축 스케일 조절은 통계별로 이루어집니다.

네트워크 수집 도중 자동 스크롤

원격 게임에 접속된 와중에 그래프 디스플레이는 최신 데이터 표시를 위해 자동으로 스크롤됩니다. 이 기능은 F3 (View - Auto-scroll Display) 키로 가능합니다.

콜 그래프 뷰

어느 프레임이든 통계 그래프 영역의 그 프레임 위에 우클릭하고 "View Frame N" 옵션을 선택하면 콜 그래프를 확인할 수 있습니다. 그러면 통계의 콜 그래프가 트리로 표시되는 창이 뜨는데, 아래와 같습니다:

CallGraphView.jpg

정확한 프레임 클릭은 약간 힘들지만, 클릭한 곳 주변 프레임을 잡아다가 뷰에도 추가해 줍니다. 통계를 파내려가 프레임간의 비교를 구할 수 있기에 급등락 추적에도 도움이 됩니다. 모든 시간은 포함적 시간으로 보고됩니다.

알려진 문제

스레드별 추적은 아직 지원되지 않습니다. 계층구조식 정보를 제대로 처리하지 못(하고 그룹 처리만 지원)합니다.

앞으로의 작업

그리드 페인팅을 빠르게, 더욱 똑똑하게.

계층구조식 통계 지원.

게임플레이 마커. 그래프에 표시되나 게임플레이에서의 API 호출에서 오는 아이템일 것입니다. 게임플레이/컷씬 도중의 급등락이나 증가세 추적에 좋습니다.

버그 픽스, UI 개선 (그리드, 마우스 오버 값 등)

퍼포먼스 회귀 테스트


통계 시스템에는 별개의 퍼포먼스 테스트 둘을 비교하는 어플리케이션이 포함되어 있습니다. StatsComparison.exe 어플리케이션은 두 개의 XML 파일을 읽고, (평균 등의) 종합 데이터를 계산한 다음, 그 결과를 특정 임계값과 비교합니다. 퍼포먼스가 그 임계값 범위 내에 있으면 테스트 합격(어플리케이션이 0 반환)입니다. 퍼포먼스가 임계값 범위 내에 들어오지 않으면, 어플리케이션은 1 을 반환하고, 테스트 실패입니다. 반환값이 0 보다 작으면, 데이터가 빠졌다든가 파일이 깨졌다든가 잘못된 통계를 지정했다든가, 데이터에 문제가 있었다는 뜻입니다.