VALORANT's 128-Tick Servers

안녕, 나는 "Brentmeister" Brent Randall이고 VALORANT의 게임플레이 무결성 팀 엔지니어다. 우리 팀은 VALORANT의 빌드 시스템, 자동화 프레임워크, 게임 클라이언트 성능, 그리고 서버 성능을 담당한다. 이 글에서는 마지막 주제에 집중할 것이다 - 최적의 서버 성능을 찾기 위한 우리의 기술적 이야기를 들려줄 것이다.

개발 초기부터 우리는 VALORANT가 매우 엄격한 서버 성능 요구사항을 가질 것이라는 점을 알고 있었다. 왜 그런지, 그리고 어떻게 우리의 야심찬 목표를 달성했는지에 대한 통찰을 제공할 수 있기를 바란다. 시작할 때 서버 프레임은 50ms가 걸렸는데, 마지막에는 프레임당 2ms 미만에 도달했다 - 모두 코드 최적화, 하드웨어 조정, OS 튜닝을 통해서였다.

함께 여행을 떠나보자.

넷코드의 중요성

모든 온라인 슈터(VALORANT 포함)는 어느 정도의 피커스 어드밴티지(peeker's advantage)를 가진다. 우리는 넷코드와 피커스 어드밴티지에 대한 비디오 블로그와 같은 주제에 대한 이전 테크 블로그 글을 만들었다.

간단히 요약하면 - VALORANT에서 게임플레이의 핵심 부분은 전략적 위치를 잡고 지키는 것이다. 다른 플레이어가 모서리를 돌아와서 레이턴시로 인해 수비자가 반응하기 전에 수비자를 죽일 수 있다면 위치 수비는 불가능해진다. 그 레이턴시는 부분적으로 네트워크에 기반하고 부분적으로 서버 틱 레이트에 기반한다. 수비자가 공격자에게 반응하는 데 필요한 시간을 제공하기 위해 우리는 VALORANT가 128-tick 서버를 필요로 한다고 결정했다. 우리가 어떻게 그 결론에 도달했는지에 관심이 있다면, 피커스 어드밴티지에 대한 우리의 테크 블로그 포스트에서 자세히 다룬다.

코드 최적화

128-tick 속도로 서버를 호스팅할 때를 생각해보면, 우리의 가장 큰 제약은 CPU 리소스다. 7.8125ms 내에 전체 프레임을 처리할 수 있어야 하는데, 그렇게 한다면 단일 게임이 전체 CPU 코어를 차지하게 된다!

이 다이어그램은 코어당 몇 개의 게임을 실행할 수 있는지를 보여준다:

image.png

(진행되는 게임)

게임당 1개의 전체 코어를 사용하는 것은 우리가 128-tick을 플레이어가 지불해야 하는 프리미엄 서비스가 아닌 무료로 제공하고 싶다는 것을 알고 있었기 때문에 대규모로 게임 서버를 호스팅하기에는 비용이 너무 많이 들 것이다. 숫자를 계산한 후, 우리는 코어당 3게임(gpc)보다 더 잘해야 한다는 것을 알았다. 이를 관점에서 보면 우리는 일반적으로 36코어 호스트를 실행하므로 각 물리 게임 서버는 108게임 또는 1080명의 플레이어를 호스팅해야 했다. 3 gpc조차도 엄청난 투자였지만 Riot 리더십은 우리의 야심찬 서버 성능 목표를 이해하고 지원했다.

그 7.8125ms를 3 gpc로 나누면 2.6ms가 나온다. 하지만 잠깐 - 우리는 또한 OS, 스케줄링, 그리고 호스트에서 실행되는 다른 소프트웨어의 오버헤드를 위해 10%를 예약해야 한다. 이러한 계산 후 우리는 프레임당 단 2.34ms의 목표 예산에 도달한다. VALORANT의 초기 데이터를 보았을 때 우리는 50ms에 있었다; 갈 길이 멀었다. 이것은 전체 개발팀이 참여해야 하는 노력이 될 것이었다.

문제 분해하기