이 페이지의 내용: Unity의 Profile Analyzer를 사용해 에셋 또는 코드 변경, 최적화 작업, 설정 수정 또는 Unity 버전 업그레이드로 인한 영향을 확인하는 방법을 소개합니다. 이 문서는 유나이트 코펜하겐 2019에서 진행된 린든 홈우드(Lyndon Homewood)의 세션을 바탕으로 작성되었습니다.
Profile Analyzer에 대한 개요
어떤 부분의 성능을 집중적으로 향상시켜야 하는지 알고 싶으신가요? 변경 전후 성능을 비교해야 하나요? Unity 버전 업데이트가 게임에 미치는 영향을 알고 있나요? 성능 분석기를 사용하면 이에 대한 정보를 개략적으로 확인할 수 있습니다.
이 툴을 사용하면 어떤 부분에 초점을 맞춰야 하는지 식별할 수 있고, 두 Unity 성능 캡처를 비교해 변경으로 인한 영향을 확인할 수 있습니다. 또한 변경 사항이 성능에 미치는 영향을 파악하는 데 도움이 되는 내용을 시각적으로 보여 줍니다.
Profile Analyzer는 Unity 프로파일러 프레임 세트에서 프레임 및 마커 데이터를 수집하고 시각화하여 여러 프레임에 대한 동작을 추론함으로써 Unity 프로파일러에서 이미 사용 가능한 단일 프레임 분석을 보완합니다.
Profile Analyzer는 여러 프레임에 대한 CPU 성능 분석을 실행합니다. 또한 통계 및 시각화를 지원하므로 해당 정보를 빠르게 이해할 수 있습니다. 포괄적인 필터링 기능을 지원하므로 관심 있는 섹션을 구체적으로 분석할 수 있습니다. 또한 두 데이터 세트를 비교하거나 다른 툴로 분석하기 위해 데이터를 익스포트할 수도 있습니다.
2018.4 LTS+에서 패키지로 Profile Analyzer를 사용할 수 있으며, Profile Analyzer를 다운로드해 프로젝트에 포함시킬 수도 있습니다. 5.6 이상의 모든 Unity 버전에서 작동합니다. Profile Analyzer를 실행하려면 Window > Analysis > Profile Analyzer로 이동하세요. 이전 Unity 버전에서는 Window 메뉴에서 바로 실행할 수 있습니다.
프로파일링 팁
Profile Analyzer를 시작하는 데 도움이 되는 몇 가지 프로파일링 팁은 다음과 같습니다.
- 대표적이고 반복 가능한 캡처를 가져옵니다.
- 다른 모든 애플리케이션을 닫습니다. C# 스크립트에서 Profile.logFile를 사용해 실행 중인 게임에서 직접 프로필 데이터를 작성할 수 있기 때문에 에디터를 따로 열 필요가 없습니다. 나중에 Unity 프로파일러에 로드할 수 있는 .raw 파일을 작성할 수 있습니다.
- CPU 성능 확장을 비활성화해 Intel SpeedStep 또는 Turbo Boost와 같은 설정으로 인해 클럭 주파수가 변경되지 않도록 합니다.
특정 함수에 대한 성능 검토하기
함수 호출이 성능에 미치는 영향을 확인하고 싶은 경우, Unity 프로파일러를 사용해 데이터를 캡처하면 됩니다. 그다음 Pull Data 버튼을 눌러 캡처한 데이터를 Profile Analyzer에 로드할 수 있습니다. 아니면 이전에 저장한 캡처를 로드할 수도 있습니다.
캡처를 로드하자마자 분석이 즉시 시작되고 데이터가 프레임 시간 그래프로 나타납니다. 그래프에서 흰색과 하늘색 바를 볼 수 있습니다. 흰색 바는 프레임 길이를 나타내고 하늘색 바는 현재 선택한 마커를 나타내기 때문에 프레임 시간에 어느 정도 기여하는지 확인할 수 있습니다.
필터를 사용해 마커를 검색할 수 있습니다. Marker Details가 자동으로 업데이트되어 선택한 하위 세트가 반영되고, Count 열에서는 발생한 횟수를 확인할 수 있습니다. 프레임 시간 그래프는 마커를 강조 표시합니다. 마커를 선택하면 Marker Summary도 업데이트됩니다.
대표 프레임 찾기
When analyzing performance, you want to make sure that the data you’re looking at is representative. If your data is noisy, it’s easy to ensure that you select an average frame by using the Frame Summary at the top right – just click on the Frame shown as the Median and the Profiler will display the relevant analysis. Or, in the frame time graph, you can right-click and select Select Median Frame.
You can also limit your analysis to a selection of frames. All of the statistics you see will be updated to reflect the specific selection.
Rather than rely on a single data point from a single frame, you can analyze multiple data points by selecting a group of representative frames. If you right-click on the frame time graph and Order by Frame Duration, you can then select a set of frames around the median frame for a representative sample that smooths out some of the noise in your data.
프로젝트 설정 변경의 효과
Profile Analyzer를 사용하면 그래픽스 작업 활성화와 같은 프로젝트 전체 설정을 적용하는 경우의 성능 차이를 확인할 수 있습니다. 이 기능을 사용하려면 기준치를 캡처하고 변경 사항을 적용한 후 다시 캡처합니다. 게임을 실행하고 Unity 프로파일러로 샘플링한 후 Profile Analyzer로 캡처를 가져온 후 두 번째 캡처도 가져오면 됩니다.
Frame Summary 섹션에서 두 캡처의 결과를 나란히 확인할 수 있습니다.
Are you GPU-bound?
성능에 병목 현상이 없는지 확인하려면 Gfx.WaitForPresent 마커를 확인합니다. 필터 영역에서 Gfx.WaitForPresent를 입력해 찾을 수 있습니다. 해당 마커의 중간값이 0이 아닌 경우, CPU는 다음 작업을 진행하기 전에 GPU가 동작을 완료하기를 기다리고 있다는 것을 의미합니다.
프레임 시간 그래프에서 해당 마커를 보고 프레임 시간에 얼마나 기여했는지 확인할 수 있습니다. CPU가 GPU를 기다리고 있는 경우, 대부분은 GPU 바운드입니다. 최적화하려면 GPU 프로파일링 툴을 살펴보세요.

데이터 세트 관리
Profile Analyzer 창 상단 섹션에서 데이터를 관리할 수 있습니다. Unity 버전과 상관없이 여기에서 Unity 프로파일러를 열고 Unity 프로파일러에서 "Pull Data"를 누르거나 이전에 저장해둔 파일을 로드할 수 있습니다.
데이터를 로드하면 프레임 시간 그래프에 데이터가 표시됩니다. 이는 샘플 범위를 선택할 수 있는 인터랙티브 영역입니다. 마커 테이블의 모든 요약 정보가 선택한 범위를 반영해 자동으로 업데이트됩니다. 선택한 부분을 마우스 오른쪽으로 클릭해 더 많은 고급 옵션을 사용할 수 있습니다.
"Save" 버튼을 클릭해 분석 데이터를 .pdata 파일로 저장할 수 있습니다. 참고로 Profile Analyzer 저장 파일(.pdata)과 프로파일러 저장 파일(.data 또는 .raw)의 두 가지 저장 파일이 있습니다. 두 파일을 같은 디렉토리에 저장하는 것이 좋습니다.
프레임 요약
Frame Summary에는 최소, 최대, 중간값을 포함해 프레임 시간에 주요 내용을 표시하며 Unity 프로파일러에서 특정 프레임으로 이동할 수 있는 버튼이 있습니다. 또한 이 영역에는 프레임 시간 분포 히스토그램과 상자 그림(box and whisker plot)이 표시됩니다.

마커 테이블
마커 세부 정보
이 섹션에서는 모든 스택 뎁스를 포함해 Unity 프로파일러의 마커 데이터에 대한 마커 테이블이 표시됩니다. 모든 마커에 대한 Unity 프로파일러 데이터는 이 표에 표시되는 중간값 및 기타 프레임 시간을 제공하기 위해 집계됩니다.
마커 요약
오른쪽의 Marker Summary 영역에는 선택한 마커에 대해 집계된 정보와 선택한 마커의 프레임 시간에 대한 기여가 표시됩니다. 이 정보 역시 시각적으로 히스토그램과 상자 그림으로 표시됩니다.
요약 하단에서 집계된 데이터 세트 내 개별 마커 인스턴스에 대한 최소 및 최대 시간을 확인할 수 있습니다.

필터
- 이름 기준
특정 이름을 가진 마커에 초점을 맞춰 검토하고 싶다면 하위 문자열 또는 하위 문자열 컬렉션을 입력하면 됩니다. 이름에 공백이 포함되어 있다면 하위 문자열 앞뒤에 따옴표를 붙여야 합니다.
검토하지 않을 마커를 제외할 수도 있습니다. 예를 들어 Jobs 내 대기 상태(idle) 시간 또는 프로파일러 자체에 포함된 마커를 기준으로 마커를 제외할 수 있습니다.
표에서 관심 있는 마커를 마우스 오른쪽으로 클릭해 필터를 채울 수도 있습니다.
- 스레드
특정 워커 스레드(worker thread) 데이터를 선택해 볼 수 있습니다. 모든 스레드를 집계해서 보고 싶은 경우 스레드 Select 팝업 창의 상단에서 "All"을 선택하면 됩니다.
- 뎁스
대부분의 Unity 하위 시스템에는 높은 수준의 마커가 있기 때문에 뎁스 3을 확인하는 것이 좋습니다. 이렇게 하면 렌더링, 애니메이션, 물리와 같은 주요 하위시스템의 기여도를 확인할 수 있습니다. 뎁스 3은 최신 Unity 릴리스에 적합합니다. 이전 릴리스의 경우 다른 뎁스로 전환하는 것이 좋습니다.
- 부모
부모별로 필터링하려면 마커 테이블에서 마커를 마우스 오른쪽으로 클릭하고 Set as Parent Marker Filter를 선택합니다.
- 분석 유형
기본값으로 Profile Analyzer는 마커에 대한 Total 시간을 표시하지만, Self 시간으로 변경할 수 있습니다. Self 시간은 세부 정보를 구체적으로 분석해 실제 시간이 소요되는 곳을 확인하려는 경우에 유용합니다.
- 단위
기본 단위는 밀리초지만 더 작은 시간으로 쪼개고 싶은 경우 마이크로초로 전환할 수 있습니다.
상위 10개 마커
Top 10 markers는 설정한 필터에 대한 상위 10개 마커를 나타냅니다. 이 툴을 사용하는 가장 좋은 방법은 뎁스 3에서 메인 스레드와 자식을 포함한 총 시간을 선택하여 Unity 하위 시스템을 확인하는 것입니다. 이렇게 하면 렌더링과 물리와 애니메이션 시간을 비교하는 등 각 주요 시스템의 기여 비율이 표시됩니다. 더 자세한 보고서 및 분석이 필요한 경우 데이터 바 위에 마우스를 올리면 정확한 백분율 및 지표를 확인할 수 있습니다.

데이터 세트 비교하기
Profile Analyzer 창 상단에서 Compare 탭으로 전환해 분석할 두 개의 데이터 세트를 선택할 수 있습니다. 한 데이터 세트는 파란색으로 표시되고 다른 데이터 세트는 주황색으로 표시됩니다. 또는 중간값 프레임과 특잇값 프레임을 비교하는 등 단일 데이터 세트의 두 하위 영역을 비교할 수도 있습니다.
Marker Comparison 표는 데이터를 파란색과 주황색으로 시각적으로 표시하기 때문에 특정 영역에서 느리게 실행되는 두 데이터 세트를 빠르게 확인할 수 있습니다.
스캔 중 하나에 마커가 없는 경우 해당 열에는 대시(-)가 표시됩니다. 예를 들어 다른 Unity 버전을 사용해 마커의 이름이 바뀐 경우 이런 현상이 일어날 수 있습니다.
데이터 익스포트하기
더 많은 커스텀 프로세싱을 위해 Profile Analyzer에서 데이터를 익스포트할 수 있습니다. 마커 테이블의 내용, 프레임 시간 그래프 또는 프레임 시간 그래프 비교를 익스포트할 수 있습니다.
Profile Analyzer나 프로파일러 또는 프로젝트에서 특정 기능을 사용하는 방법에 대한 질문이 있으면 포럼에서 토론에 참여해 주시기 바랍니다.