Cómo conseguimos el mejor rendimiento en los servidores de VALORANT desde el lanzamiento

Descubrid cómo el equipo de desarrollo transformó la mala suerte en el mejor rendimiento de servidores que hemos tenido desde el lanzamiento.

Conseguir servidores con una tasa de 128 tics fue una prioridad para VALORANT desde mucho antes del lanzamiento. Nuestro objetivo siempre ha sido ofrecer una experiencia competitiva de primera a nivel mundial con servidores con una tasa de 128 tics para todos. Para saber más acerca de cómo logramos este objetivo antes del lanzamiento, echad un vistazo a nuestro artículo sobre los servidores con 128 tics de VALORANT.

Mantener el rendimiento de un servidor es una batalla constante. La introducción de nuevas características a lo largo del tiempo significa que tenemos que prestar muchísima atención a los límites del rendimiento con el fin de seguir ofreciendo servidores con 128 tics. Con el tiempo, las pequeñas degradaciones se acumulan y ocasionan degradaciones importantes que requieren atención inmediata.

En agosto de 2022, nos encontramos con la mayor degradación de los servidores desde el lanzamiento. El problema afectó a las partidas de VALORANT que superaban el estándar de 10 jugadores (como partidas personalizadas y de esports). Solucionar el problema requirió el esfuerzo de un pequeño ejército de ingenieros, productores, jefes y el equipo de esports sobre el terreno en Estambul justo antes de uno de nuestros mayores eventos competitivos del año.

Las investigaciones que llevamos a cabo mientras intentábamos solucionar la degradación revelaron varias oportunidades para realizar mejoras importantes al tiempo entre fotogramas de los servidores, lo que resultó en grandes mejoras de rendimiento. A partir de la versión 5.07, los jugadores han podido experimentar los servidores con 128 tics más consistentes desde el lanzamiento de VALORANT en junio de 2020.

Me llamo Aaron Cheney y soy ingeniero en el equipo de rendimiento de VALORANT. Aquí tenéis un sumario de lo que cubre este artículo:

  • Describe cómo el equipo de rendimiento detecta las degradaciones.
  • Habla de una degradación importante descubierta justo antes del Champions 2022.
  • Repasa nuestro proceso de triaje, proporciona información sobre cómo nuestros equipos gestionan los problemas que surgen y explica lo que aprendimos de este incidente.

Primero, hablaré de cómo detectamos las degradaciones de rendimiento y explicaré una parte importante del trasfondo para comprender la severidad de la degradación.

¿Cómo detectamos las degradaciones de rendimiento?

Las degradaciones de rendimiento son una realidad en el desarrollo de videojuegos. Los juegos son sistemas complejos enormes con muchos componentes que contribuyen al rendimiento global. Esta complejidad se va incrementando conforme se añaden características y sistemas. Es importante detectar con precisión las degradaciones cuando aparecen y atribuirlas a un problema de raíz específico.

VALORANT cuenta con un equipo de rendimiento responsable de ello. Nuestro equipo se encarga de monitorizar, mantener y mejorar el rendimiento del servidor y del cliente en una variedad de hardware. Utilizamos distintas herramientas y procesos para detectar las degradaciones en una fase temprana y corregirlas antes de que lleguen a los jugadores.

Objetivos de rendimiento para los servidores

Mantener los servidores con una tasa de 128 tics implica que cada fotograma del servidor debe completarse en menos de 7,8125 milisegundos (ms). Pero si hiciéramos eso, una sola partida utilizaría todo un núcleo de la CPU. Para cumplir con el estricto requisito de los 128 tics y los objetivos operativos, los servidores de VALORANT están optimizados para procesar 3 fotogramas en aproximadamente 7,8 ms. Lo que significa que cada fotograma del servidor debe tardar menos de 2,6 ms. De hecho, nuestro objetivo de rendimiento para los fotogramas del servidor es de 2,34 ms. Este objetivo de rendimiento atiende a dos propósitos importantes:

  1. Proporciona un margen necesario. Contar con cierto margen en el objetivo de rendimiento ayuda a mitigar los fotogramas más largos sin bajar de 128 tics. Esto hace que nuestros servidores sean más sólidos en más situaciones y da espacio al SO, el calendario y demás software que ejecuta el servidor.
  2. Nos ayuda a asegurarnos de que VALORANT siga siendo económicamente viable. La infraestructura de servidores es costosa. Aunque molaría que cada partida de VALORANT tuviera lugar en un solo componente de hardware, no es un modelo de negocio sostenible.

AskVal_Feb22_Champions_Article_Graph_3_ES.jpg

Medir el presente y predecir el futuro

El equipo de rendimiento utiliza dos fuentes de datos principales para detectar las degradaciones:

  1. Los datos previos al lanzamiento. Estos datos se generan a partir de varias fuentes, como pruebas de juego internas, pruebas automáticas y la beta pública.
  2. Datos en tiempo real. Estos datos los generan los jugadores de todo el mundo en los entornos en tiempo real.

Los datos previos al lanzamiento nos permiten predecir el futuro analizando contenido y características que todavía no se han publicado. El conjunto de datos es mucho más pequeño que el de los datos en tiempo real, lo que implica que es mucho más difícil sacar conclusiones a causa del ruido y la varianza, pues las tendencias no se muestran tan claramente con pocas muestras. Los casos extremos también pueden pasar desapercibidos, ya que, aunque lo intentemos, no podemos probarlo todo de forma exhaustiva.

Por otra parte, los datos en tiempo real nos permiten entender la experiencia de los jugadores en esos momentos al medir exactamente lo que ven en el juego. Este conjunto de datos es mucho mayor que el de los datos internos (se generan miles de millones de registros), lo que puede hacer que sea difícil de procesar. Agrupamos estos datos para que tengan sentido.

En general, los datos previos al lanzamiento fomentan nuestra proactividad en relación al contenido no publicado, mientras que los datos en tiempo real nos permiten reaccionar a las condiciones existentes. Cuando los usamos en combinación, estos dos conjuntos de datos detectan la mayoría de los problemas.

Una partida típica de VALORANT

La gran mayoría de jugadores de VALORANT juegan en las colas normal y clasificatoria. Ambas colas representan el mismo modo de juego con exactamente 10 jugadores, aunque lo que está en juego sea diferente. A pesar de que existen muchas otras formas de jugar a VALORANT (Copia, Fiebre de la Spike, Combate a muerte, etc.), empleamos una gran cantidad de recursos para garantizar que el modo de juego con la Spike sea la mejor experiencia posible.

Aunque la mayoría de las partidas de VALORANT tienen exactamente 10 jugadores, a veces surgen situaciones especiales (e importantes) donde se necesitan más de 10 jugadores.

Partidas no estándar de VALORANT

Hasta 22 clientes se conectan a una partida del modo de juego con Spike durante una retransmisión de esports. Hay partidas personalizadas que permiten tener espectadores. En esas partidas, es habitual la siguiente distribución:

  • 10 plazas son para los jugadores (5 en cada equipo).
  • 2 plazas son para los entrenadores (1 en cada equipo).
  • 10 plazas son para los observadores que controlan nuestro equipo de retransmisión. Estas plazas permiten la experiencia de visionado para que los fans puedan animar desde sus casas o en el estadio.

Estas partidas con 22 clientes se alejan mucho de la típica partida de VALORANT. El servidor debe tener en cuenta cada cliente conectado a una partida para garantiza que todos reciben la información necesaria del servidor y que se muestra la partida en la pantalla. Normalmente, esto supondría un problema en nuestro entorno en tiempo real. Sin embargo, para las partidas de esports, empleamos hardware local específico con el fin de mantener la integridad de la experiencia de juego para los deportistas.

Objetivos de rendimiento para partidas no estándar de VALORANT

¿Recordáis los objetivos de rendimiento de los servidores de antes? El objetivo de 2,34 ms para cada fotograma del servidor está dirigido a la partida típica de VALORANT con exactamente 10 jugadores. Para las situaciones en las que más de 10 jugadores están conectados, la expectativa es que el rendimiento progrese de forma lineal con el número adicional de jugadores.

Por ejemplo, con 22 clientes, el tiempo medio para cada fotograma progresaría aproximadamente con un factor de 2,2 y pasaría de 2,34 ms a 5,2 ms. El resultado sigue estando bastante por debajo de los 7,8 ms por fotograma necesarios para mantener los servidores con 128 tics.

Basándonos en nuestra experiencia con las partidas no estándar de VALORANT y en nuestra gran comprensión del rendimiento de los servidores de VALORANT, esta ha sido una forma precisa de extrapolar datos de rendimiento de partidas estándar para comprender las partidas no estándar.

Pero ¿qué pasa cuando algo cambia? ¿Qué sucede cuando el rendimiento del servidor no progresa de forma lineal con el número de clientes conectados?

La degradación

Retrocedamos en el tiempo hasta agosto de 2022. Los primeros indicios del problema aparecieron durante una prueba de juego con 22 clientes. Los jugadores de la prueba notaron fluctuaciones en los tics del servidor y experimentaron inconsistencias generales durante la partida. Las grabaciones en vídeo de la partida confirmaron que algo fallaba. Tuvimos mucha suerte de descubrir el problema, porque las pruebas con 22 clientes no eran la norma en esa época. En una época en la que llevábamos a cabo cambios en el equipo interno y los preparativos para el Champions 2022, un intrépido desarrollador de VALORANT se acordó de solicitar una prueba de juego con 22 clientes a nuestros proveedores de testing.

Aunque todavía no había ninguna razón para hacer sonar las alarmas, nos pusimos a trabajar de inmediato en la validación del problema, el triaje y la búsqueda de una solución.

Validar el problema

Un solo caso en los datos no indica una tendencia. Empezamos por procesar la telemetría de nuestro entorno en tiempo real para comprender por completo la severidad y el alcance del problema, y separamos las partidas según el número de clientes, desde 10 hasta 22. Lo que descubrimos fue impactante. 

Aunque no conocíamos la causa exacta del problema, los gráficos mostraban una relación alarmante entre el número de clientes conectados y el rendimiento del servidor. El problema aumentaba con una progresión no lineal en función del número de jugadores.

Los datos corroboraron que teníamos un problema grave entre manos, con el Champions 2022 a la vuelta de la esquina, que se iba a jugar en la versión 5.04. Hicimos sonar la alarma y comenzamos con el triaje del problema inmediatamente.

(Este gráfico muestra los tiempos de fotogramas del servidor en cada versión. Cada línea representa el número de clientes, desde las partidas estándar con 10 clientes hasta las partidas con el máximo de 22 clientes. Como esperábamos, el rendimiento empeoró progresivamente con cada cliente conectado, pero el pico de la versión 5.03 significaba que el rendimiento se degradaba de una forma no lineal).

El triaje de la degradación

Durante el triaje de un problema solemos mitigar los efectos sin comprender del todo el origen del problema. Esta técnica se utiliza en medicina para evaluar la situación y "detener la hemorragia", y en Riot la usamos para proporcionar una respuesta rápida a los problemas que surgen.

Llevamos a cabo dos procesos simultáneos durante el triaje del problema.

Crear planes de contingencia

Primero, la dirección de VALORANT trabajó con nuestros socios en Estambul para crear planes de contingencia. El objetivo era determinar qué pasaría si no lográbamos solucionar el problema antes del comienzo del Champions 2022.

Como sabíamos que el problema progresaba con el número de clientes conectados, queríamos saber en concreto el número mínimo de observadores que se necesitaban para ofrecer una experiencia de visionado de esports que no se viese afectada. Contar con 22 clientes quedaba descartado... Así qué ¿cuántos clientes podíamos aceptar en teoría con estas condiciones?

En colaboración con nuestros amigos del equipo de esports, determinamos que 15 clientes conectados ofrecerían servidores con una tasa de 128 tics y tendríamos 5 plazas en total para que los observadores de esports creasen la experiencia de retransmisión. Esto fue posible gracias al margen que teníamos en el tiempo entre fotogramas estándar de nuestros servidores.

Determinar la raíz del problema

En segundo lugar, los desarrolladores de VALORANT siguieron investigando para entender mejor el problema y encontrar el origen de la degradación. Cuando aparece algo así de grande, es improbable que la causa esté vinculada a varios sistemas.

Pensábamos que quizá tendríamos suerte, que encontraríamos rápidamente la raíz del problema y lo solucionaríamos antes del comienzo del Champions 2022. Por desgracia, no fue así.

Corregir la degradación

La degradación se identificó por primera vez el 25 de agosto de 2022 y quedó corregida una semana más tarde. A lo largo de 7 días, muchos ingenieros de VALORANT se involucraron en el problema para explorar posibles soluciones.

Durante el primer día de investigación, determinamos qué parte del código base era responsable de la degradación: el sistema Replication (que no tiene nada que ver con el modo de juego Copia). El sistema Replication es la parte de Unreal que garantiza la consistencia entre los servidores y los clientes, mediante la sincronización de propiedades para agentes y componentes. Podéis leer más acerca del sistema Replication de Unreal aquí.

Nuestra prioridad inicial consistió en analizar los cambios entre las versiones 5.02 y 5.03 para encontrar pruebas de qué alteraciones se podían haber producido en el sistema Replication. Esto resultó complicado porque acabábamos de actualizar Unreal Engine a la versión 4.26 y muchas partes centrales del motor se habían modificado. (Para saber más acerca de cómo VALORANT actualiza Unreal Engine, echad un vistazo a este hilo de Twitter del jefe de tecnología de VALORANT, Marcus Reid).

Investigar el sistema Replication no fue tarea fácil. No es un sistema que necesite mucha atención por parte de los desarrolladores de VALORANT, porque ya llevamos muchos años trabajando con buenas prácticas. Tampoco es un sistema que hayan creado los ingenieros de Riot; hemos modificado el motor básico para que se adapte a nuestros requisitos, pero un conocimiento profundo en este campo es poco habitual.

A continuación, dividimos de forma sistemática varias partes del juego para medir las diferencias entre las versiones 5.02 y 5.03 con el objetivo de ir acercándonos a la raíz del problema. Utilizamos herramientas de elaboración de perfiles de Unreal y herramientas internas de Riot para comparar características de rendimiento entre las dos versiones. Esto nos llevó finalmente a la conclusión de que los personajes, las armas y las habilidades se replicaban mucho más a menudo en la versión 5.03 que en la 5.02.

En ese momento, exploramos dos tipos de escenarios:

  1. Encontrar la degradación y corregirla. Este era el escenario ideal que intentábamos conseguir.
  2. Hallar otras oportunidades para mejorar el rendimiento. Si encontrábamos otras áreas de mejora (suficiente para recuperar el tiempo por fotograma perdido), podíamos tener de nuevo el rendimiento bajo control, incluso en el caso de que no localizáramos y corrigiéramos el problema original.

Varios grupos de ingenieros siguieron múltiples rutas de investigación para probar posibles soluciones y mejoras. Durante ese proceso, muchos ingenieros se familiarizaron con el sistema Replication. En ese tiempo, descubrimos bastantes oportunidades de mejora del rendimiento, que consideramos demasiado arriesgadas como para implementarlas y que decidimos registrar para trabajar en ellas en el futuro.

El 1 de septiembre de 2022, dimos con el problema: una sola línea de código de la actualización del motor UE 4.26 provocaba que el sistema Replication se activase con mucha más frecuencia en determinadas condiciones que sucedían a menudo en VALORANT. Esto causó una degradación del rendimiento que empeoraba en gran medida según se conectaban más clientes al servidor. Aunque el problema no se notaba en las partidas estándar con 10 clientes, hacía injugables las partidas con 22 clientes.

Habíamos identificado la degradación, la solución no era arriesgada y teníamos un alto grado de confianza. Era el mejor escenario posible. No descorchamos el champán todavía, pero ya teníamos un cambio muy satisfactorio en nuestro código.


Tras la degradación

Cuando el origen de la degradación quedó identificado y corregido, realizamos pruebas exhaustivas para corroborar que el rendimiento volvía a estar en los márgenes esperados y para garantizar que no surgía ningún error a partir del cambio.

Implementar la solución

Aunque la solución se identificó el 1 de septiembre de 2022, los cambios no se implementaron en el entorno de esports hasta el 8 de septiembre de 2022, después de la fase de grupos. Se hizo así para mitigar el riesgo y disponer de más tiempo para realizar pruebas y validar la solución, así como para reducir al máximo las molestias ocasionadas a nuestros colegas de Estambul.

Implementamos la solución en nuestros entornos en tiempo real durante la versión 5.05, lo que supuso una gran mejora.

Después del Champions 2022

Pero la diversión no acabó con la versión 5.05. Durante la semana en la que investigamos el sistema Replication, pudimos identificar oportunidades de mejora para el rendimiento y programamos un desarrollo posterior. En su momento, era demasiado arriesgado implementar las mejoras porque no estaban dirigidas a la raíz del problema. Tras corregir la degradación original, aprovechamos nuestros nuevos conocimientos del sistema Replication para corregir ciertas cuestiones que considerábamos que mejorarían el rendimiento de los servidores.

Estos procesos tuvieron como resultado una mejora significativa del rendimiento general, que redujo un 15 % el tiempo entre fotogramas de los servidores de forma global en comparación con los números previos a la degradación. Estos cambios también redujeron la diferencia entre las distintas regiones, lo que aumentó la estabilidad en los tiempos entre fotograma de los servidores.

Desde la versión 5.07, más del 99,3 % de los fotogramas de los servidores han cumplido nuestro estricto requisito de 128 tics, así que los jugadores están disfrutando de los servidores más estables y consistentes desde el lanzamiento de VALORANT.

(Este gráfico muestra los tiempos de fotogramas del servidor en cada versión. Cada línea representa el número de clientes, desde las partidas estándar con 10 clientes hasta las partidas con el máximo de 22 clientes. Tras la relevante degradación de las versiones 5.03 y 5.04, corregimos la degradación y volvimos a los valores normales en la versión 5.05. Posteriormente, implementamos otras mejoras importantes en la versión 5.07, lo que supuso una mejora del rendimiento de los servidores del 15 % en comparación con los datos previos a la degradación).

Lecciones aprendidas

Hizo falta un pequeño ejército para resolver el problema de rendimiento que emergió: una docena de ingenieros, socios de esports, proveedores de testing, productores, liderazgo de equipo y la generosidad de los equipos asociados que ofrecieron consejos y orientación. Aprendimos mucho de este incidente y encontramos grietas en nuestros procesos que queremos abordar.

  • Supervisar las partidas no estándar: Solemos prestar más atención a la experiencia típica de VALORANT del modo de juego de bomba clásico con 10 jugadores. Nuestros datos no mostraban fallos en función de la cantidad de jugadores conectados, por lo que no tuvimos constancia de la magnitud de la degradación hasta que creamos nuevos gráficos. Desde entonces, hemos creado nuevos procesos para verificar y comprender las características de rendimiento de las partidas no estándar de VALORANT con más de 10 clientes.
  • Aumentar la cobertura de las pruebas para las partidas no estándar: Si bien el modo de juego de bomba estándar con 10 jugadores seguirá siendo nuestra principal prioridad, vamos a crear nuevos procesos y procedimientos de pruebas para comprender el rendimiento de los servidores en entornos con 22 clientes. El tamaño de la muestra de partidas con 22 clientes es muy reducido en comparación con el resto, por lo que necesitamos realizar pruebas frecuentes con 22 clientes para recopilar esta información. Ahora la norma es realizar pruebas de juego con 22 clientes en cada lanzamiento, en vez de hacerlas solo antes de los grandes torneos. Es probable que también necesitemos otros procedimientos de pruebas más sofisticados.
  • Fomentar el desarrollo de expertos en la materia: Aunque eso requiere una inversión importante de tiempo, contar con expertos en el equipo ayuda a tener un conocimiento más completo y eleva el nivel general de todos. Varios ingenieros adquirieron conocimientos del sistema Replication durante el proceso llevado a cabo para corregir la degradación, lo que resultó ser una gran inversión de recursos.
  • Minimizar el riesgo para los torneos. Jugar el Champions 2022 con una nueva versión supuso un riesgo, sobre todo teniendo en cuenta que acabábamos de integrar una nueva versión de Unreal Engine. Aunque queremos garantizar que los cambios en la experiencia de juego (por ejemplo, de equilibrio, personajes, etc.) estén presentes en los torneos principales, lo más probable es que no asumamos tantos riesgos en futuras competiciones. Como mínimo, comprobaremos dos veces los riesgos en los escenarios en los que no se puedan evitar.

Veréis que seguimos llevando a cabo mejoras como esta para que jugar a VALORANT sea todavía mejor. ¡Disfrutad de los servidores de 128 tics y buena suerte con las balas!