스레드 예약 분석

게임 프로세스 스레드가 최상의 성능을 위해 적절히 활용되고 예약되었는지 확인하려면 몇 가지 사항을 고려해야 합니다.

  • 프레임 속도
  • 멀티스레딩 및 스레드 병렬화
  • CPU 코어 어피니티

멀티스레드

많은 게임 및 게임 엔진은 멀티스레딩을 사용하여 CPU 작업을 논리적 작업으로 나눕니다. 이 작업은 어느 정도 독립적으로 실행될 수 있습니다. 일반적인 구성 중 하나는 입력 및 게임 로직의 게임 스레드, 그릴 객체를 준비하고 제출하기 위한 렌더링 스레드, 애니메이션 또는 오디오와 같은 기타 하위 태스크를 위한 작업자 스레드입니다.

멀티스레딩의 성능 이점을 활용하려면 스레드를 동시에 로드하는 것이 좋습니다. 게임 스레드와 렌더링 스레드가 서로 다른 코어에서 부분적으로 또는 완전히 동시에 실행되는 경우를 예로 들 수 있습니다. 데이터 종속 항목을 공유하는 경우와 같이 항상 가능하지는 않지만, 가능한 경우 CPU 시간이 단축되고 프레임 속도가 높아질 수 있습니다.

병렬 처리된 기본 및 렌더링 스레드와 작업자 스레드 및 오디오 스레드가 있는 게임
그림 1. 병렬 처리된 기본 및 렌더링 스레드와 작업자 스레드 및 오디오 스레드가 있는 게임

CPU 코어 어피니티

CPU 워크로드의 성능에 큰 영향을 미치는 한 가지 요소는 코어 워크로드의 예약 방식입니다. 이는 다음 두 가지 구성요소로 나눌 수 있습니다.

  • 게임 스레드가 성능을 위한 최상의 코어에서 실행 중인지 여부
  • 코어 간에 게임 스레드가 자주 전환되는지 여부

트레이스를 가져올 때 프로필 구성에서 CPU를 사용 설정하여 CPU 사용량의 CPU 스레드 동작을 조사할 수 있습니다. 200ms 미만의 트레이스 섹션을 확대하면 기기의 CPU 코어에서 실행 중인 개별 프로세스를 볼 수 있습니다. 일반적으로 작은 코어는 작은 인덱스 (예: CPU 0~3)에 해당하고 대형 코어는 더 높은 인덱스 (예: CPU 6~7)에 해당합니다.

일반적으로 게임이 포그라운드에 있을 때 게임 스레드 및 렌더링 스레드와 같은 영구 스레드는 고성능 대형 코어에서 실행되어야 하는 반면, 다른 프로세스 및 작업자 스레드는 더 작은 코어에서 예약될 수 있습니다.

기본 및 렌더링 스레드가 주로 대형 코어(CPU 6~7)에서 실행되는 게임(연한 파란색으로 표시됨)
그림 2. 기본 및 렌더링 스레드가 주로 대형 코어(CPU 6~7)에서 실행되는 게임(연한 파란색으로 표시됨)

기본 스레드와 렌더링 스레드가 단일 CPU 프레임 내에서 또는 연속된 두 CPU 프레임 간에 코어를 변경하는 경우 게임 스레드가 코어 간에 자주 전환되는지 관찰할 수도 있습니다. 이러한 CPU 동작은 게임 스레드가 적절하게 선언되지 않았음을 나타내는 지표일 가능성이 높습니다. 이러한 코어 스위치로 인해 컨텍스트 전환 및 코어 캐시/레지스터의 상태 손실이 발생하여 CPU 프레임 길이가 늘어납니다.

코어 간에 전환하는 기본(Thread-7)과 렌더링 스레드(Thread-8)가 있는 게임(보라색으로 표시)
그림 3. 코어 간에 전환하는 기본(Thread-7)과 렌더링 스레드(Thread-8)가 있는 게임(보라색으로 표시됨)