やじうまPC Watch

LoL国際大会、3試合がやり直しの事態。遅延挿入プログラムのバグで

MSI 2022試合の一幕。右上に遅延が表示されている

 Riot Gamesは17日(中国時間)、韓国・釜山で開かれたリーグ・オブ・レジェンド(LoL)の国際大会「MSI 2022」のうち、中国のチームが参加した3試合について、レイテンシを調整するプログラムにバグがあったとし、やり直しを行なうと発表した。この件に関して、Riot Gamesは中国のWeiboで技術的な詳細を公開しており、その内容がなかなか興味深いので紹介しよう。

 今回問題となったのは、中国・上海と韓国・釜山の間のリモート試合。周知の通り上海は今、新型コロナウイルスの影響でロックダウンしており、このため中国チーム「RNG(Royal Never Give Up)」は上海からリモートで釜山の会場に接続して試合を行なった。上海と釜山は850km離れており、この間をサーバー同士が通信する必要がある。その遅延(ping値)は平均で35ms前後だという。

 そもそも、35msの遅延でも選手のパフォーマンスを十分発揮できる対戦ができるのか。Riot Gamesによれば、複数のトップレベルのプロ選手と共同で検証したところ、40msを超えた辺りから多くの選手が遅延を感じ始めることから、40ms(±5ms)以内であれば問題はないとしている。そこでRiot Gamesは今回のリモート対戦の実現のために、3つの解決法を考案した。

 1つ目は自然に発生するレイテンシを無視するものだが、RNGチームでは常時35ms前後のレイテンシが発生するのに対し、釜山会場では15ms程度であり、公平性を期すためこの案は却下された。2つ目は中国と韓国の中間地点にサーバーを設置することだが、中間地点は海上であるためこれも非現実的だとした。

 そこで今回採択されたのが3番目の「人工的にレイテンシを挿入する」案。つまり、故意に釜山側にレイテンシを挿入して、同じ35msにして公平性を期すものである。LoLの開発チームは人工的にレイテンシを挿入する「Latency Service」を開発し、実際のMSI 2022の試合で運用した。

Latency Service(白い枠の“遅延服務”)の概要。サーバー内のネットワークエンジンが釜山の選手側に遅延を自動的に挿入し、上海側の選手と整合性を取る
MSI 2022のネットワーク図
Latency Serviceはサーバー側だが、クライアント側にも遅延サービスが用意されている

 ところが、このLatency Serviceを加えた状態で試合中、サーバーの監視ツールからは特に異常なデータを得られなかったものの、釜山会場側でプレイしていた選手の声を聞くと、明らかに許容範囲外の遅延が発生したという。

 そこでチームはネットワークのパケット“だけの遅延”を監視するツールではなく、新たにエンドツーエンドの遅延を計測するツールを開発して、ネットワークをエミュレーションして監視したところ、Latency Serviceを有効にすると、確かに選手らが述べた通り、釜山側よりも上海側の遅延が少なかったのだという。

エンドツーエンドの遅延分析ツール。横が時間軸で縦が感知できる遅延。エミュレーションで釜山→上海に切り替えたところ、Latency Serviceを挿入しない場合、明らかに釜山→データセンターの遅延の方が短い値を示す
当初のLatency Serviceを挿入した場合の遅延分布。Riot Gamesの意図とは裏腹に、会場の方が遅延が高くなってしまった
パラメータ調整後の感知遅延分布。ようやく平均化された

 Latency Serviceのソースコードで問題を洗い出してみたところ、演算ミスがあり、余分なレイテンシを挿入していることがわかった。そこで、後半の試合では遅延挿入プログラムのパラメータを変更し最適化を行なった。

 ところが、パラメータ調整後の試合では、釜山側でゲーム内におけるping値表示(約22ms前後)が、上海側のping値(約35ms)よりも低いことが選手や観客から指摘された。しかしRiot Gamesによれば、エンドツーエンドの遅延を計測するプログラムでは、実際の遅延は35msとなっており、表示されている値より13ms高いとし、理解を求めている。

上海側の選手のゲーム内で表示された遅延の分布。一貫して35ms前後を示している
釜山側の選手のゲーム内で表示された遅延の分布。パラメータ変更後は明らかに低減しているのだが、実際は13ms程度の遅延が存在するという

 これらの結果を踏まえ、遅延挿入パラメータの修正前に上海のRNGが参加した3つの試合について“やり直し”を行なうこととなった。Riot Gamesは今回の件に関し、すぐさま問題を発見できず、ping値の表示についてチームとの意思疎通や、問題開示の透明性について不備があったとし謝罪している。