게임 데이터 가이드

멀티코어 스케줄링 기법, 프로세스 우선도 관리, 타이머 정밀도 제어

oneplay1 2025. 10. 3. 14:14
멀티코어 시스템에서 게임 엔진과 관련 프로세스가 안정적으로 실행되려면 스케줄링 기법과 우선도 관리, 그리고 타이머 정밀도 제어가 균형 있게 조정되어야 한다. CPU 코어가 다중 작업을 병렬로 처리하는 과정에서 입력 지연, 프레임 드랍, 오디오 지터 등이 발생할 수 있으며, 이는 운영체제의 스케줄러 정책과 긴밀하게 연결된다. 따라서 프로세스 우선도를 적절히 설정하고, 타이머 인터럽트 간격을 미세 조정해 게임 루프 주기와 동기화하는 것이 핵심이다. 특히 노트북이나 모바일 환경에서는 전력 관리 정책이 함께 작동하기 때문에 코어 파킹 여부와 타이머 해상도의 관계를 이해하는 것이 중요하다. 이 글은 멀티코어 스케줄러가 어떤 원리로 동작하는지, 게임 프로세스 우선도를 어떻게 설정해야 안정적인 성능을 유지할 수 있는지, 그리고 타이머 정밀도를 조정해 렌더링·입력·사운드 루프의 일관성을 확보하는 방법을 단계적으로 설명한다.

멀티코어 스케줄링 기법

멀티코어 스케줄링 기법은 운영체제가 여러 개의 코어에 작업을 어떻게 배분할지 결정하는 방식이다. 일반적인 라운드 로빈 스케줄링은 각 코어에 순차적으로 태스크를 할당해 균등한 처리량을 유지하지만, 게임처럼 실시간 응답성이 중요한 애플리케이션에서는 지연 시간이 커질 수 있다. 이에 따라 우선순위 기반 스케줄링과 워크 스틸링(work stealing) 기법이 병행되며, 특정 스레드가 오래 대기하지 않도록 균형을 맞춘다. 예를 들어 물리 연산, 렌더링, 네트워크, 오디오 스레드가 동시에 실행될 때, 렌더링 스레드는 고정된 프레임 주기를 맞춰야 하고, 오디오 스레드는 일정한 버퍼 주기로 데이터를 공급해야 한다. 멀티코어 환경에서 이러한 요구를 충족시키려면 OS 차원에서 우선순위를 관리하고, 게임 엔진은 자체 스레드 풀에서 중요한 태스크에 더 많은 코어 시간을 할당한다. 코어 파킹(Core Parking)은 전력 절약을 위해 일부 코어를 비활성화하는 기능인데, 고성능이 필요한 순간에는 오히려 지연을 유발할 수 있다. 따라서 게임 실행 시에는 전원 옵션을 ‘최고 성능’으로 전환하고, 코어 파킹을 비활성화하는 것이 바람직하다. 멀티코어 스케줄링의 궁극적인 목표는 전체 CPU 사용률을 높이는 것이 아니라, 지연 시간 변동성을 줄이고 안정적인 주기를 확보하는 것이다.

프로세스 우선도 관리

프로세스 우선도 관리란 운영체제가 어떤 프로세스와 스레드에 더 높은 실행 기회를 줄지를 결정하는 정책이다. 게임 클라이언트는 일반적으로 ‘높음’ 수준의 우선도를 설정해 입력·렌더링 루프가 불필요하게 대기하지 않도록 해야 한다. 단, 운영체제에서 제공하는 ‘실시간’ 우선도는 오히려 시스템 전체를 불안정하게 만들 수 있어 권장되지 않는다. 예를 들어 실시간 우선도를 가진 스레드가 CPU를 독점하면, 오디오 드라이버나 네트워크 스택 같은 핵심 프로세스가 제때 실행되지 못해 끊김이나 지연이 발생할 수 있다. 따라서 안전하게 적용할 수 있는 최적점은 게임 프로세스를 ‘높음’, 백그라운드 업데이트나 스트리밍 클라이언트는 ‘보통’ 이하로 설정하는 방식이다. 스레드 단위에서는 입력 처리, 렌더링, 오디오 루프를 상대적으로 더 높은 우선도로 두고, 로깅이나 UI 갱신, 비필수 백그라운드 작업은 낮은 우선도로 설정한다. 또한 멀티플레이 게임에서는 네트워크 패킷을 처리하는 스레드를 일정 수준 이상으로 유지해야 지연이 최소화된다. 이러한 우선도 관리가 제대로 이뤄지면 CPU 점유율이 동일해도 실제 체감 성능은 크게 향상된다. 특히 대규모 멀티코어 환경에서는 코어별 부하 분산이 불균형하게 이루어지는 경우가 많으므로, 스케줄러가 특정 스레드를 자주 이동시키지 않도록 고정 코어 바인딩(Affinity)을 병행하는 것이 효과적이다.

타이머 정밀도 제어

타이머 정밀도 제어는 게임 루프 주기와 시스템 클럭을 일치시키는 작업이다. 윈도우와 같은 운영체제는 기본적으로 15.6ms 단위의 타이머 해상도를 사용한다. 이는 배터리 효율을 위해 설계된 값이지만, 60fps 이상의 고주사율 환경에서는 지나치게 거친 주기다. 따라서 게임은 타이머 정밀도를 1ms 이하로 낮추어 루프를 제어해야 입력·렌더링·사운드가 안정적으로 동기화된다. 단, 해상도를 너무 낮추면 시스템 전체 전력 소비와 발열이 증가할 수 있으므로, 필요할 때만 동적으로 해상도를 조정하는 방식이 적합하다. 예를 들어 풀스크린 렌더링 중에는 타이머를 0.5~1ms로 유지하고, 메뉴 화면이나 로비 대기 중에는 다시 기본 값으로 되돌리는 것이다. 이렇게 하면 성능과 전력 소비의 균형을 유지할 수 있다. 더 나아가, 타이머 제어는 VRR(가변 주사율) 모니터나 고주사율 패널과 함께 활용될 때 그 효과가 극대화된다. 입력 지연을 최소화하기 위해서는 렌더링 루프의 업데이트 시점, 오디오 버퍼의 공급 주기, 네트워크 패킷 송수신 간격을 모두 같은 타임라인 위에서 정렬하는 것이 중요하다. 결국 멀티코어 스케줄링, 우선도 관리, 타이머 정밀도 제어는 독립된 기술이 아니라 하나의 통합된 최적화 프레임워크로 다뤄져야 한다. 이를 통해 동일한 하드웨어에서도 보다 일관되고 안정적인 성능을 확보할 수 있으며, 사용자는 프레임 드랍이나 입력 지연 없이 게임을 즐길 수 있게 된다.

멀티코어 스케줄링 구조 게임 엔진 스레드 운영체제 스케줄러 CPU 코어 자원
스케줄러는 게임 엔진 스레드를 코어 자원에 배분한다.
타이머 해상도와 프레임 동기화 15.6ms 1ms 정밀한 타이머는 프레임 루프와 정확히 일치
타이머 해상도를 조정해 프레임 루프와 동기화한다.