ゲーム

人気シューティングゲーム「VALORANT」のサーバー側処理時間を50ミリ秒から2ミリ秒未満へ短縮した方法とは?


オンラインゲームの開発ではクライアント側とサーバー側の両面に気を配る必要があり、特に数ミリ秒の違いが勝敗に影響するシューティングゲームではサーバーも含めた徹底的な最適化が必要となります。人気シューティングゲーム「VALORANT」の開発者ブログでは「サーバーでの処理時間を50ミリ秒から2ミリ秒未満へ短縮した手法」が詳しく解説されています。ブログ記事の公開時期はVALORANTの正式リリースから2カ月後の2020年8月ですが、記事作成時点でも通用する有用な知見が詰まっています。

VALORANT's 128-Tick Servers | Riot Games Technology
https://technology.riotgames.com/news/valorants-128-tick-servers

VALORANTはサーバー側で1秒間に128回の処理を行うように設計されています。仮にサーバーの1コアごとに1つの試合を処理する場合、1回の処理に割ける時間は7.8ミリ秒です。しかし、コストの面から1コアで処理する試合の数はなるべく増やす必要があります。最終的に1コアごとに3試合を処理することに決まり、各試合の1回ごとの処理に割ける時間はわずか2.6ミリ秒となりました。


VALORANTの開発初期は1回の処理に50ミリ秒かかっていたとのこと。開発チームはゲームのコードを「Replication」「FoW」「Network」「Animation」「Gameplay」「Movement」「Equippable」「Character」「Physics」「Other」の10カテゴリに分類し、カテゴリごとの処理時間を測定することで、処理時間増加の原因となっている箇所を特定できるようにしました。

以下のグラフはカテゴリごとの処理時間を示したもので、横軸がビルド番号、縦軸が処理時間を示しています。グラフを見ると、ビルド445887とビルド446832の間に実施された変更によってReplication(オレンジ)の処理時間が大幅に増加していることが分かります。こんな感じに、コードをカテゴリごとに分類することで問題箇所の特定が容易になったというわけです。


以下の表は最適化後(FInal Conc)と2018年5月28日時点の各種カテゴリの処理時間を比べた表です。Replicationというカテゴリでは4.54ミリ秒かかっていた処理が0.4505ミリ秒まで短縮されていることが分かります。


Replicationカテゴリには「プレイヤーの体力が減ったらサーバー側でも体力を減らす」といったようにクライアントとサーバーのデータを同期する処理が含まれています。開発処理はReplicationカテゴリの処理の大部分をUnreal Engine 4の「プロパティレプリケーション」という機能を用いていましたが、「RPC」という関数を用いて実装しなおすことで処理時間の大幅な短縮に成功しました。

VALORANTでは他にもさまざまな手法で処理時間を短縮しています。例えば、開発初期段階ではクライアント側とサーバー側で同一のアニメーションを処理していましたが、「武器の購入などを行う購入フェーズ中はサーバー側のアニメーション処理を停止する」といった工夫によって処理時間を短縮しています。


さらに、開発チームはIntelと協力してCPUレベルの分析も実施し、パフォーマンスを最適化しました。以下のグラフは横軸が同時に稼働するインスタンスの数を示し、縦軸が処理時間を示しています。開発初期段階では、インスタンスの数が増えるにつれて処理時間が増加していました。ゲームのリリース後は大量のインスタンスを同時に稼働させることになるため、これは大きな問題となります。


以下の図はサーバーのCPUのキャッシュメモリやシステムメモリへのアクセスの様子を簡略化したものです。図を見ると、L1キャッシュとL2キャッシュは各コアに別個のものが割り当てられているのに対して、L3キャッシュは複数のコアで共有していることが分かります。


開発チームがIntelと共同で分析を進めた結果、サーバー用CPU「Intel Xeon E5」シリーズで採用されていた「L2キャッシュの内容をL3キャッシュにコピーする仕組み(インクルーシブキャッシュ)」が影響して処理速度が遅くなっていることが判明。インクルーシブキャッシュを用いない新型Xeonプラットフォームに移行した結果、同じクロック周波数でも約30%もの性能向上に成功しました。

開発チームは他にもCPUやOSレベルの最適化に取り組んだとのこと。これらの最適化によってVALORANTのサーバー側処理に必要な時間は2ミリ秒未満に抑えられました。

開発チームは上記の成果を踏まえつつ、「同じアプリケーションであっても、1年後にはパフォーマンスニーズが大きく変化している可能性もあります。唯一の確実な方法は、『再現可能なテストを作成して測定する』ということです。例えば、インターネット上のブログ記事で知った『処理時間短縮方法』を自分のアプリケーションのニーズや特記事項を考慮せずに実行すると、パフォーマンスが向上するどころか低下してしまう可能性もあります」と述べ、ゲームの最適化における測定の重要性を強調しています。

この記事のタイトルとURLをコピーする

・関連記事
「ゲームのチーターを追放するために生まれてきた」というRiot Gamesのチート対策責任者がチート開発者との壮絶な戦いを語る - GIGAZINE

VALORANTで有害プレイヤーにハードウェアBANを実施すると運営が発表、「他のゲームをプレイしてください」と害悪プレイヤーとの決別を宣言 - GIGAZINE

VALORANTの開発元がゲームからチーターを排除するためにとってきた数々の奇抜な対策とは? - GIGAZINE

VALORANTの世界大会を観戦に来たイーロン・マスクがゲーマーから「Twitterを返せ!」のブーイングを浴びる - GIGAZINE

AMDがゲームの遅延低減技術「Radeon Anti-Lag 2」を開発し「Counter-Strike 2」に統合 - GIGAZINE

「Counter-Strike」に10年以上存在し続けるバグの原因がついに判明 - GIGAZINE

VLCの開発者が手がける超低遅延動画ストリーミングを可能にするオープンソースキット「Kyber」とは? - GIGAZINE

極限まで遅延を削減することを目指したゲームストリーミング向け動画コーデック「PyroWave」 - GIGAZINE

ゲームをするならキーボードは「磁気式一択」 - GIGAZINE

in ソフトウェア,   ゲーム, Posted by log1o_hf

You can read the machine translated English article How did the popular shooter game VALORAN….