시스템 인풋랙
입력 장치가 인식한 신호를 화면에 반영하는 모든 과정을 의미하는 시스템 인풋랙(System Input Lag)은 어떤 단계로 나뉠까요? 사용자가 입력한 신호는 단순히 주변 기기와 PC, 모니터 같은 물리적인 하드웨어 외에도 운영체제 안에서 구동되는 소프트웨어와 드라이버, 게임, 렌더링 과정을 거쳐 비로소 모니터에 도달합니다. 이것을 크게 나누면 주변 기기, PC, 디스플레이로 구분할 수 있죠. 지루할 수 있겠지만 시스템 인풋랙을 구성하는 항목을 소개하겠습니다.
Mouse HW - 마우스가 신호(이벤트)를 유선으로 보낼 준비가 되었을 때 첫 번째 전기 접점으로 정의됩니다. 마우스는 버튼을 누를 때 지연 시간이 늘어날 수 있는 몇 가지 루틴이 있는데, 그 중에는 디바운스가 포함됩니다.
Mouse USB HW - 마우스는 패킷을 선으로 전송하기 위해 다음 폴링을 기다리는 과정이 포함됩니다. 이것은 해당 마우스가 지원하는 폴링레이트와 관련될 수 있습니다.
Mouse USB SW - 마우스 USB SW는 OS 및 마우스 드라이버가 USB 패킷을 처리하는 시간입니다.
Sampling - 이 과정은 CPU 프레임 레이트에 따라 늘어나거나 줄어들 수 있습니다. 일반적으로 1000Hz 폴링레이트로 마우스 클릭 신호가 OS로 들어옵니다. 이는 사용자가 입력한 클릭 신호가 게임에서 샘플링 될 다음 순서를 기다려야 할 수 있습니다. 이를 샘플링 대기 시간(sampling latency)이라고 합니다.
Simulation - 게임은 상태를 지속해서 갱신하는데, 이를 시뮬레이션이라고 합니다. 시뮬레이션에는 애니메이션, 게임 상태 및 플레이어 입력으로 인한 변경 사항이 포함됩니다. 시뮬레이션은 마우스 입력 신호가 게임에 반영됩니다.
Render Submission - 시뮬레이션이 다음 프레임에 반영되는 내용을 파악하면 렌더링 작업을 그래픽 API 런타임으로 보냅니다. 런타임은 그래픽 드라이버에 렌더링 명령을 전달합니다.
Graphics Driver – 그래픽 드라이버는 GPU와 통신하고 명령을 보냅니다. 그래픽 API에 따라 드라이버가 개발자를 위해 그룹화를 수행하거나 개발자가 렌더링 작업을 그룹화합니다.
Render Queue - 드라이버가 작업을 시작하면 렌더링 대기열로 들어갑니다. 렌더링 대기열은 항상 GPU가 수행할 작업을 지속해서 하도록 설계되었습니다. 이 과정은 지연 시간에 영향을 줄 수 있습니다.
Render - GPU가 단일 프레임과 관련된 모든 작업을 렌더링하는 데 걸리는 시간입니다.
Composition - 디스플레이 설정(전체 화면, 테두리 없음, 창)에 따라 DWM(Desktop Windows Manager)은 일부 렌더링 작업을 추가 제출하여 특정 프레임에 대해 나머지 데스크톱을 합성해야 합니다. 이 과정은 지연 시간이 추가될 수 있습니다. 따라서 디스플레이 설정을 전체 화면으로 유지하는 것이 좋습니다.
Scanout - 현재 표시된 프레임 버퍼가 새로 완성된 프레임 버퍼로 갱신되고 스캔아웃(Scanout)이 예약됩니다. 스캔아웃은 디스플레이 Hz를 기준으로 라인별로 디스플레이 신호를 전달합니다.
Display Processing - 디스플레이가 들어오는 스캔라인(Scanline)을 처리하고 픽셀 응답을 시작하는 데 걸리는 시간입니다.
Pixel Response - 픽셀이 새로운 색상 값을 받은 때부터 NVIDIA LDAT가 감지하는 변화까지 걸리는 시간입니다.
기술적으로 접근하니 매우 머리가 아프군요. 이를 간단명료하게 요약하면 ‘입력 신호가 화면에 표시되는 시간’이니 이 핵심만 잘 기억하면 이어지는 내용을 충분히 이해할 수 있으리라 생각됩니다.
|