Comment nos serveurs ont assuré leur meilleure performance depuis le lancement

Lisez l'article pour découvrir comment nos devs ont transformé un coup de malchance en la meilleure performance enregistrée par nos serveurs depuis le lancement.

Garantir des serveurs 128 ticks était la priorité de VALORANT avant même son lancement. Notre objectif a toujours été d'offrir une expérience compétitive de haute qualité avec des serveurs 128 ticks pour toutes et tous. Pour en savoir plus sur comment nous avons atteint cet objectif avant la sortie du jeu, lisez notre article (en anglais) sur les serveurs 128 ticks de VALORANT.

Maintenir la performance de nos serveurs est une bataille sans fin. Puisque nous ne cessons d'ajouter de nouvelles fonctionnalités au jeu, nous devons rester hyper vigilants vis-à-vis de nos capacités techniques pour pouvoir continuer à fournir une performance de 128 ticks par seconde. Sur la durée, de petites dégradations accumulées et d'occasionnels problèmes majeurs requièrent une intervention immédiate.

En août 2022, nous avons subi la plus sévère baisse de performance enregistrée depuis la sortie du jeu. Le problème concernait les parties de VALORANT qui comptaient plus que les 10 joueurs habituels (comme les parties personnalisées et les matchs e-sport). Pour le résoudre, il a fallu les efforts combinés d'une petite armée d'ingénieurs, de producteurs, de responsables et de l'équipe e-sport sur le terrain à Istanbul, juste avant l'ouverture d'un des plus gros événements compétitifs de l'année.

En cherchant à réparer ces dégradations, nous avons eu plusieurs fois l'occasion d'améliorer significativement le taux d'images par seconde de nos serveurs, et de la même façon, leurs performances techniques. Depuis le patch 5.07, vous profitez de serveurs qui délivrent 128 ticks par seconde le plus régulièrement depuis la sortie de VALORANT, en juin 2020.

Je suis Aaron Cheney, ingénieur dans l'équipe de VALORANT dédiée à la performance technique. Voici un résumé des sujets abordés dans cet article :

  • Comment l'équipe Performances techniques repère les baisses de régime.
  • Des explications sur la grave baisse de performance découverte à la veille des Champions 2022.
  • Comment nous gérons les priorités, répondons aux urgences, et ce que nous avons retenu de l'incident de l'été dernier.

Je vais commencer par expliquer comment nous repérons les dégradations de performance et vous donner les informations essentielles pour évaluer la gravité des différents cas.

Comment repérons-nous les dégradations de performance ?

La baisse de performance est le lot du développement de jeux. Ceux-ci sont des systèmes extrêmement complexes constitués d'éléments en constante évolution qui contribuent chacun à la performance globale. Cette complexité s'aggrave encore quand on ajoute des fonctionnalités petit à petit. Aussi est-il essentiel de pouvoir détecter avec précision le moment où surviennent les dégradations et remonter jusqu'à leur cause.

VALORANT s'est doté d'une équipe Performances techniques spécialement dédiée à cela. Notre travaille consiste à surveiller, maintenir et améliorer les performances du client comme du serveur sur un large panel d'équipements. Nous avons à notre disposition plusieurs outils et procédures qui nous aident à repérer rapidement les dégradations et à les corriger avant qu'elles n'atteignent les joueurs.

Objectifs de performance serveur

Pour qu'un serveur ait 128 ticks, il faut que chaque image côté serveur soit traitée en moins de 7,8125 millisecondes (ms), mais cela reviendrait à consommer un cœur de processeur entier par partie. Pour atteindre les objectifs stricts de la performance 128 ticks que nous visons, les serveurs VALORANT sont optimisés pour faire rentrer 3 images en ~7,8 ms. Autrement dit, une image doit durer en moyenne moins 2,6 ms. Dans les faits, nos objectifs de performance serveur pour la durée d'une image est de 2,34 ms. Ce calcul a deux avantages majeurs :

  1. Il dégage une marge nécessaire. Avoir un peu de marge dans nos objectifs de performance nous aide à absorber les images plus lentes sans passer sous le seuil des 128 ticks. Cela rend nos serveurs résilients dans plus de situations et laisse de la place pour le système d'exploitation, la planification et les autres logiciels qui tournent sur le serveur.
  2. Il permet à VALORANT de rester financièrement viable. L'infrastructure serveur, c'est cher. On aimerait bien pouvoir dédier une pièce d'équipement à chaque partie de VALORANT, mais économiquement, ce n'est pas tenable.AskVal_Feb22_Champions_Article_Graph_3_FR.jpg

Mesurer le présent et prévoir le futur

L'équipe Performances techniques se sert de deux sources principales d'information pour repérer les baisses de régime :

  1. Données internes : elles viennent de différentes sources, comme les tests en interne, les tests automatisés et le PBE.
  2. Données externes : elles sont générées en temps réel par les joueurs du monde entier.

Les données internes nous aident à prédire le futur en analysant le contenu et les fonctionnalités qui ne sont pas encore sortis. Cela représente une quantité bien moindre d'informations, c'est pourquoi il est souvent difficile d'en tirer des conclusions à cause des scories et de la variance. Les tendances ont du mal à émerger dans les petits échantillons. Les cas marginaux peuvent aussi passer sous le radar, car (et ce n'est pourtant pas faute d'essayer) nous ne pouvons pas tout tester.

Les données externes, elles, nous permettent de bien saisir l'expérience en direct des joueurs, en mesurant exactement ce qu'ils voient dans le jeu. Ces données sont bien plus volumineuses que les données internes (on parle de milliards d'entrées), ce qui les rend difficiles à traiter. Nous les agrégeons pour pouvoir les étudier.

De manière générale, les données internes nous donnent les outils pour anticiper d'éventuels problèmes avant leur sortie, tandis que les données externes nous permettent de réagir aux conditions réelles. Combinées, ces deux méthodes détectent la majorité des problèmes.

Une partie de VALORANT type

L'immense majorité des joueuses et joueurs de VALORANT perçoivent le jeu à travers les modes non-classé et Compétition. Dans les deux, le dispositif est le même, avec exactement 10 joueurs, seuls les enjeux diffèrent. S'il existe bien d'autres façons de jouer à VALORANT (Réplication, Spike Rush, Combat à mort, etc.), nous allouons beaucoup de ressources à nous assurer que le mode avec pose de spike délivre la meilleure expérience possible.

Si la plupart des parties de VALORANT comptent exactement 10 joueurs, certaines situations (importantes) exigent la participation de plus de monde.

Les parties de VALORANT atypiques

Pendant une diffusion e-sport, c'est 22 participants qui sont connectés en même temps à une partie avec pose de spike. Ce sont des instances spéciales à destination de la retransmission en public. Ces parties sont généralement structurées ainsi :

  • 10 places sont réservées aux joueurs (5 dans chaque équipe)
  • 2 places sont réservées aux coachs (1 dans chaque équipe)
  • 10 places sont réservées aux observateurs contrôlés par l'équipe de diffusion. Ce sont ces places en plus qui permettent d'offrir le spectacle qu'acclament les fans chez eux ou dans le stade !

Ces parties à 22 places sont bien différentes des parties standard de VALORANT. Chaque compte connecté doit être calculé par le serveur pour qu'il puisse recevoir toutes les informations nécessaires et les afficher sur son écran. Cela serait difficile en temps normal dans l'environnement classique. Mais en tournoi, nous utilisons du matériel spécial sur place pour assurer l'intégrité du jeu auprès des athlètes.

Objectifs de performances pour les parties de VALORANT atypiques

Vous vous souvenez du schéma de calcul des performances qu'on a montré plus haut ? Cette distribution en 2,34 ms par image serveur est taillée pour une partie normale de VALORANT à 10 joueurs et pas plus. Quand on gère plus de 10 participants simultanément, on s'attend à ce que la performance soit affectée proportionnellement.

Par exemple, avec 22 comptes, la durée moyenne d'une image serait multipliée par environ 2,2, et passerait donc de 2,34 ms à 5,2 ms. Ce qui est toujours largement en deçà des 7,8 ms par image requis pour maintenir un serveur 128 ticks.

Cette façon d'extrapoler les données des parties standard pour comprendre les performances des parties atypiques coïncide avec notre expérience des parties atypiques de VALORANT et notre compréhension profonde de la performance de nos serveurs.

Mais que se passe-t-il quand quelque chose change ? Que se passe-t-il quand la performance du serveur n'augmente plus proportionnellement au nombre de comptes connectés ?

La dégradation

Remontons le temps jusqu'en août 2022. Les premiers signes de tempête sont apparus dans les tests internes des parties à 22 comptes. Les joueurs testeurs y ont remarqué des variations de taux d'image et fait remonter un sentiment général d'irrégularité tout au long du jeu. Les enregistrements vidéo des parties ont confirmé que quelque chose n'allait pas. Nous avons été chanceux de repérer ce problème en amont, parce que les tests à 22 comptes n'étaient pas encore la norme à l'époque. Au milieu des restructurations d'équipes et des préparatifs pour les Champions 2022, un développeur de VALORANT essentiel s'est souvenu de commander un test à 22 comptes auprès de nos partenaires.

S'il n'était pas encore l'heure de sonner l'alarme, nous nous sommes néanmoins immédiatement attaqués à confirmer, contenir et enfin corriger le problème.

Confirmer le problème

Un seul point de donnée ne constitue pas une tendance. Nous avons commencé par analyser la télémétrie du jeu en direct pour bien saisir la sévérité et l'ampleur du problème, en isolant les parties par nombre de comptes participants, allant de 10 à 22. Ce que nous avons découvert était terrifiant.

Si nous ignorions la cause précise du problème, les graphiques établissaient une relation effrayante entre le nombre de comptes connectés et la performance du serveur. Mais la dégradation n'était pas proportionnelle.

Ces données confirmaient l'existence d'un problème majeur alors que les Champions 2022, qui devaient se jouer sur le patch 5.04, approchaient à grands pas. Nous avons donné l'alerte et tenté de cerner le problème sans attendre.

(Ce graphique montre la durée d'une image serveur en fonction du patch. Chaque ligne représente un nombre de comptes connectés, allant des parties standards à 10 comptes jusqu'au maximum de 22. Comme prévu, la performance baisse progressivement chaque fois qu'on ajoute un compte, mais le pic sur le patch 5.03 signifiait que la dégradation n'était plus proportionnelle.)

Contenir la dégradation

Contenir un problème consiste généralement à en limiter les effets négatifs sans pour autant en comprendre la cause. Cette technique est utilisée en médecine pour « arrêter l'hémorragie » le temps d'évaluer la situation, et chez Riot, on s'en sert pour réagir rapidement aux problèmes urgents.

Nous avons donc tenté de contenir le problème par deux approches combinées.

Création d'un plan de confinement

D'abord, la direction de VALORANT a contacté nos partenaires à Istanbul pour créer un plan de confinement. Le but était de déterminer la marche à suivre si nous n'arrivions pas à résoudre le problème avant le début des Champions 2022.

Puisque nous avions compris que la dégradation dépendait du nombre de comptes connectés, nous voulions notamment savoir quel était le nombre minimum de comptes observateurs nécessaires pour retransmettre une expérience de qualité aux spectateurs. Puisque nous ne pouvions pas supporter 22 comptes en même temps... combien pouvions-nous en gérer, en théorie, dans les mêmes conditions ? Avec nos amis côté e-sport, nous avons estimé à 15 le nombre de comptes connectés simultanément pour garantir la stabilité de nos serveurs 128 ticks et laisser aux diffuseurs 5 places d'observateurs pour le spectacle. Cela a été permis par les marges que nous avions déjà prévues pour le taux d'IPS serveur normal.

Remonter à la source du problème

Ensuite, les développeurs de VALORANT ont poursuivi leur enquête pour mieux cerner le problème et remonter à la cause de la dégradation. Pour les phénomènes d'une telle ampleur, il est rare que la cause soit multiple.

Nous espérions le coup de chance qui nous ferait tomber rapidement sur l'origine du problème pour que nous puissions déployer un correctif avant le début de l'événement. Malheureusement, ce n'est pas ce qu'il s'est passé.

Réparer la dégradation

La baisse de régime a été identifiée le 25 août 2022 et corrigée une semaine plus tard. En l'espace de 7 jours, de nombreux ingénieurs VALORANT ont été réaffectés sur le sujet à la recherche de plusieurs solutions potentielles.

Le premier jour de l'enquête, nous avons repéré la partie du code qui était responsable de la dégradation : la réplication (non, pas le mode de jeu). La réplication est ce qui permet au moteur Unreal de garantir la cohérence entre le serveur et la sortie client en synchronisant les propriétés des acteurs et des composants. Vous pouvez en lire plus sur la réplication par Unreal ici (en anglais).

Notre priorité initiale était d'analyser la différence entre 5.02 et 5.03 pour trouver des indices de ce qui avait changé pour la réplication. Ceci s'est avéré compliqué, car nous venions tout juste de passer à la version 4.26 d'Unreal Engine, ce qui voulait dire que de nombreuses parties du code central avaient été modifiées. (Pour en savoir plus sur la façon dont VALORANT passe aux versions supérieures d'Unreal Engine, lisez ce fil Twitter (en anglais) du directeur technique de VALORANT, Marcus Reid.)

Enquêter sur la réplication n'a pas été facile. Ça n'a jamais été un système qui a demandé aux développeurs de VALORANT de beaucoup s'y pencher, grâce à la qualité de son service pendant des années. Ce n'est pas non plus un système que les ingénieurs de Riot ont créé : nous avons modifié le moteur de base pour l'adapter à nos besoins, mais une véritable expertise sur le sujet est dure à trouver.

Ensuite, nous avons méthodiquement démonté plusieurs éléments du jeu pour mesurer les différences entre 5.02 et 5.03 afin d'isoler la cause du problème. Nous nous sommes servis d'outils d'analyse fournis par Unreal et d'outils internes à Riot pour comparer les caractéristiques de performance entre les deux patchs. Finalement, nous sommes arrivés à la conclusion que les personnages, les armes et les compétences nécessitaient d'être répliqués significativement plus souvent sur 5.03 que sur 5.02.

Nous avons exploré deux grands axes pendant cette période :

  1. Trouver LA source du problème et y remédier. C'était le scénario idéal que nous espérions réaliser.
  2. Trouver d'autres façon d'améliorer la performance. Si nous pouvions dégager des marges d'amélioration ailleurs (suffisamment pour récupérer les millisecondes perdues), alors nous aurions le moyen de retrouver le contrôle sur la performance, même sans avoir à résoudre le problème d'origine.

Plusieurs petites équipes d'ingénieurs ont tiré des fils d'enquête à la recherche d'éventuels correctifs ou améliorations. Ce faisant, beaucoup d'entre eux se sont familiarisés avec la réplication. Nous avons trouvé un certain nombre de façons d'améliorer la performance, qui ont été jugées trop risquées à déployer immédiatement mais ont été programmées pour plus tard.

Le 1er septembre 2022, nous avons mis le doigt sur le problème : une seule ligne de code dans la mise à jour UE 4.26 provoquait l'activation de la réplication bien plus souvent sous certaines conditions qu'on rencontre fréquemment dans VALORANT. La performance en était gravement dégradée, notamment avec la multiplication de comptes connectés en même temps. Si le problème se faisait déjà sentir dans les parties à 10 comptes, il rendait le jeu injouable à 22.

Le problème était identifié, la solution fiable et nous étions sûrs de notre coup. Tout allait bien dans le meilleur des mondes. Nous n'avons pas tout de suite débouché le champagne, mais la modification du code nous a fait bien plaisir.

Après l'incident

Une fois que l'origine de la baisse de performance a été identifiée et corrigée, nous avons testé la mise à jour en profondeur pour vérifier que tout fonctionnait comme on le voulait et vérifier que nous n'avions pas introduit de bugs au passage.

Implémentation du correctif

Si la solution a été trouvée le 1er septembre 2022, elle n'a pas été déployée dans notre environnement e-sport avant le 8 septembre, après la phase de groupe. Nous voulions prendre le temps de tout tester et valider afin de réduire les risques de bug et ne pas trop perturber l'équipe à Istanbul.

Le jeu a intégré le correctif à partir du patch 5.05 et vu ses performances augmenter significativement.

Au-delà des Champions 2022

Mais nous n'avions pas fini de nous amuser. Le semaine que nous avons passée à enquêter sur la réplication a mis au jour de nombreux domaines qui pouvaient être améliorés et sur lesquels nous avions prévu de travailler. Sur le coup, il était trop risqué de les déployer puisqu'ils ne s'attaquaient pas à l'origine du problème. Mais une fois la première dégradation réparée, nous avons utilisé notre toute nouvelle expertise de la réplication pour aborder divers aspects qui méritaient qu'on s'y penche pour améliorer la performance de nos serveurs.

Nos efforts ont permis d'améliorer significativement la performance globale, pour atteindre une réduction de 15 % du temps d'image global par rapport à nos chiffres pré-dégradation. Nous avons aussi réduit les écarts entre les régions, en renforçant la stabilité de notre taux d'IPS.

Depuis le patch 5.07, plus de 99,3 % des images serveurs entraient dans les conditions du serveur 128 ticks. Autrement dit, vous avez profité d'un VALORANT plus stable et plus régulier que jamais depuis sa sortie.

(Ce graphique montre la durée d'une image serveur en fonction du patch. Chaque ligne représente un nombre de comptes connectés, allant des parties standards à 10 comptes jusqu'au maximum de 22. Après la grave dégradation des patchs 5.03 et 5.04, nous l'avons corrigée et sommes revenus aux valeurs normales dans le patch 5.05. D'autres correctifs ont été déployés dans le patch 5.07, entrainant une amélioration de 15 % de la performance du serveur par rapport aux chiffres pré-dégradation.)

Ce que nous avons appris

La brusque baisse de performance n'a été résolue qu'avec le concours d'une véritable petite armée : une douzaine d'ingénieurs, nos partenaires e-sport, nos testeurs externes, les producteurs, la direction et la générosité des équipes participantes qui nous ont transmis leurs conseils. Cet incident nous a beaucoup appris, notamment sur les manquements dans nos procédures qui devaient être corrigés.

  • Surveillance des conditions des parties exceptionnelles : notre attention est largement occupée par l'expérience standard de jeu dans VALORANT, avec 10 joueurs dans un mode classique avec pose de spike. Nous n'avions pas de données qui prenaient en compte le nombre de comptes connectés, ce qui a fait passer la dégradation sous nos radars jusqu'à la création d'un nouveau graphique. Depuis, nous avons mis en place de nouvelles procédures pour analyser les caractéristiques de performances des parties non-standard de VALORANT, avec plus de 10 joueurs.
  • Multiplication et élargissement des tests pour les parties exceptionnelles : si me mode normal avec spike et 10 joueurs demeure notre priorité, nous cherchons à former de nouvelles habitudes de test pour mieux comprendre la performance du serveur dans un environnement à 22 comptes. Nous avons très peu d'échantillons de parties à 22 comptes par rapport aux autres. Récolter ces données implique donc de procéder à des tests réguliers dans ces conditions. C'est désormais la règle de tester chaque nouveauté avec des parties à 22 comptes, plutôt que de se contenter de le faire juste avant les tournois. Nous allons aussi sans doute avoir besoin de mettre en place des procédures de test plus complexes.
  • Favoriser le développement d'Experts métier (EM) : même si cela demande d'y investir beaucoup de temps, créer des cellules EM dans l'équipe permet de combler le manque de connaissance et de mettre globalement tout le monde à nouveau. Plusieurs ingénieurs ont gagné de l'expertise avec la réplication en essayant de corriger la dégradation, ce qui s'est révélé être un excellent investissement de ressources.
  • Minimisation des risques en tournoi : faire jouer les Champions 2022 sur un nouveau patch, surtout alors que nous venions à peine de passer à la nouvelle version d'Unreal Engine, nous a mis en danger. Si nous tenons à ce que les nouveautés de gameplay (comme les équilibrages, les personnages, etc.) soient représentées en tournoi, nous éviterons à l'avenir qu'elles soient aussi fraîches. Dans les cas où nous n'aurons pas le choix, nous prendrons au moins deux fois plus de précautions.

Comptez sur nous pour continuer à améliorer nos performances ainsi et rendre plus agréable encore de jouer à VALORANT. Régalez-vous avec nos serveurs 128 ticks, et bonne bagarre !