This document is about: QUANTUM 2
SWITCH TO

프로파일링

소개

일반적으로 프로파일링은 코드 부분 간의 상대적 성능을 찾고 개발자가 핫스팟을 심층 분석할 수 있는 좋은 도구입니다. 그러나 프로파일링 도구, 특히 유니티는 오버헤드로 성능에 영향을 미치기 때문에 절대적인 성능 측정값을 찾는 것은 유용하지 않습니다.

권장 성능 분석 경로는 다음과 같습니다.

  1. Quantum 릴리즈 빌드(quantum 솔루션)와 IL2CPP 유니티 빌드 으로 시뮬레이션 시간, 렌더링 시간 등을 측정하고 Quantum Graph Profiler를 붙여 시간에 따른 전체 개수를 주도록 해 줍니다.
  2. 그런 다음, 시뮬레이션, 렌더링 등의 대략적인 방법을 사용하여 유니티 프로파일러 또는 Quantum 태스크 프로파일러를 사용한 프로파일링 세션을 수행합니다.

Quantum 디버그 빌드는 릴리스 빌드보다 5배 느릴 수 있습니다. 또한 디버그+mono 빌드는 릴리즈+il2cpp 빌드보다 10배 더 느릴 수 있습니다.

유니티 프로파일러

퀀텀 성능 통계는 유니티 프로파일러에 통합되어 있으며 기본적으로 QuantumRunner 스크립트 내에서 시작됩니다.

C#

Quantum.Profiling.HostProfiler.Init(..)

유니티 프로파일러 패턴을 알고 있으면 Quantum 시뮬레이션 코드에 사용자 정의 섹션을 추가할 수 있습니다.

C#

HostProfiler.Start("Foo");
{
  HostProfiler.Start("Bar1");
  // do work
  HostProfiler.End();

  HostProfiler.Start("Bar2");
  // do work
  HostProfiler.End();
}
HostProfiler.End();

Quantum SDK 최신 버전(2.1)을 사용하는 Quantum은 유니티에서 타임라인 프로파일러에 대한 데이터도 제공합니다. Quantum은 디버그 구성의 프로파일링 데이터만 제공합니다.

Quantum 태스크 프로파일러

Quantum 태스크 프로파일러는 유니티 타임라인 프로파일러와 유사한 유니티용 사용자 지정 독립 실행형 그래픽 성능 프로파일러입니다. 디버그 구성에서 quantum 솔루션을 컴파일할 때만 데이터를 제공합니다. 유니티 프로파일러와 마찬가지로 원격 장치에서 실행되는 앱은 동일 로컬 네트워크 내의 TCP를 통해 유니티 편집기에 연결됩니다. 이 도구는 전체 유니티 프로파일링 패키지보다 가볍기 때문에 개발자에게 릴리즈 빌드에 이 기능을 사용할 수 있는 사용자 지정 dll을 제공할 수 있습니다.

Quantum Task Profiler
Quantum 태스크 프로파일러

원격 프로파일링

Quantum 태스크 프로파일러에 원격으로 연결하여 편집기와 동일한 네트워크에서 실행되는 빌드를 할 수 있습니다. 이 기능을 활성화하려면 QuantumEditorSettings 에셋의 맨 아래에 있는 리포트 프로파일러 확인란을 토글 하면 됩니다.

Profiling Graphs
QuantumEditorSettings에서 리모드 프로파일러 토글

리모트 프로파일링

Quantum Task Profiler에 원격으로 연결하여 편집기(UDP Port 30000)와 동일한 네트워크에서 실행되는 빌드를 만들 수 있습니다. 이 기능을 활성화하려면 QuantumEditorSettings 에셋의 하단에 있는 Remote Profiler 확인란을 전환하기만 하면 됩니다. Task Profiler View를 닫았다가 다시 엽니다.

Profiling Graphs
Toggle for the Remote Profiler in the QuantumEditorSettings

Quantum 그래프 프로파일러

Quantum Graph 프로바이더는 앱에 통합하여 성능과 네트워크 통계를 시각적으로 분석할 수 있는 추가 도구입니다.

유니티 편집기에 맞는 버전을 다운로드하십시오.

Unity Version Release Date Download
Unity 2018.4 Jan 30, 2020 QuantumProfilers_Unity2018_20230414
Unity 2019.4+ Jan 21, 2022 QuantumProfilers_20230414

실시간 프로파일링

이러한 런타임 그래프는 다양한 네트워크 조건에서 게임의 전반적인 성능과 Quantum 시뮬레이션을 추적하는 데 도움이 됩니다. 그래프와 그래프 값은 각 값이 누적 시간/카운트/등과 같은 단 하나의 유니티 프레임의 유니티 업데이트 속도를 기반으로 합니다.

프로파일러는 다음에 대한 그래프를 제공합니다:

  • Engine Delta Time: Unity 프레임 사이의 Time.unscaledDeltaTime과 같습니다. 때때로 Engine Delta Time이 목표 FPS가 반영되지 않을 수 있으므로 이를 해결하기 위해 QualitySettings.vSyncCount = 0;으로 설정합니다.
  • Frame Time: 유니티 내부 및 렌더링을 포함한 모든 스크립트 로직이지만 프레임의 끝 대기는 제외됩니다.
  • User Scripts Time: FixedUpdate() + Update() + LateUpdate()의 실행 시간
  • Render Time: 최근 LateUpdate()부터 렌더링의 마지막까지의 시간과 동일
  • Simulation Time: QuantumRunner.Default.Game.Session.Stats.UpdateTime과 동일
  • Predicted Frames: 유니티 프레임에서 시뮬레이션된 예측 Quantum 프레임의 양은 QuantumRunner.Default.Game.Session.PredictedFrames와 같습니다.
  • Verified Frames: 유니티 프레임에서 시뮬레이션된 검증된 Quantum 프레임의 양
  • Network Activity: 서버로부터의 마지막 데이터 전송 이후 시간
  • Ping: 네트워크 피어 라운드 트립 타임 (RTT);
  • Markers: 최대 8개의 사용자 지정 부울은 마커를 사용하여 값을 추적할 수 있습니다. 각 마커는 고유한 색으로 표시됩니다. 기본값 Red = 입력이 서버에 의해 교체Orange = 체크 섬 계산됨.
Profiling Graphs
실시간 프로파일링 그래프

마커에 대한 노트

판독성을 높이기 위해 마커 그래프는 다른 마커 그래프보다 2배 빠르게 실행됩니다. 이것은 프로파일러 프리팹의 Samples 속성을 통해 조정할 수 있습니다.

MarkersProfiler의 여러 인스턴스가 지원됩니다.

  1. 이름 MarkersProfiler profiler = MarkersProfiler.Get(GAMEOBJECT_NAME); 으로 인스턴스를 얻습니다.
  2. profiler.SetMarker(INDEX);를 호출합니다.

기타 도구

실시간 프로파일링 도구에는 다음과 같은 작업을 위한 기타(더 기본적인) 도구도 포함되어 있습니다.

  • 대상 FPS(Application.targetFrameRate)를 변경
  • 네트워크 상태(지연, 지터, 손실) 시뮬레이션

이러한 기능은 다양한 렌더링 속도와 불량 네트워크를 신속하게 시뮬레이션하는 데 유용합니다. 효과는 그래프(예측된 프레임, 시뮬레이션 시간 등)에서 즉시 확인할 수 있습니다.

주의: 네트워크 손실을 시뮬레이션할 때는 값을 주의하여 설정해야 합니다. 네트워크의 손실을 시뮬레이션하려면 1-3%를 사용하고 로컬 손실을 시뮬레이션하려면 더 높은 값을 사용합니다(예: 3개의 벽 뒤에 있는 라우터에 대한 연결 불량).

Back to top