Cómo logramos el mejor rendimiento de servidores desde el lanzamiento de VALORANT
Contar con servidores de 128 ticks ha sido una de nuestras prioridades desde mucho antes del lanzamiento de VALORANT. Nuestro objetivo siempre fue ofrecer una experiencia competitiva de primer nivel mundial con servidores de 128 ticks disponibles para todos. Para saber más sobre cómo logramos este objetivo antes del lanzamiento, lee nuestro artículo sobre los servidores de 128 ticks de VALORANT (contenido en inglés).
Sostener el rendimiento de los servidores es una batalla constante. A medida que introducimos nuevas funciones, debemos estar siempre alerta para brindar servidores de 128 ticks ajustándonos a nuestro presupuesto de rendimiento. Con el tiempo, algunas reducciones menores de rendimiento se ajustan por sí solas, mientras que, en ocasiones, ciertas reducciones de rendimiento considerables requieren de atención inmediata.
En agosto de 2022, nos encontramos con la reducción de rendimiento más grande desde el lanzamiento de VALORANT. Este problema afectó a partidas con más de los 10 jugadores estándar (por ejemplo, partidas personalizadas o de esports). La resolución del problema requirió de los esfuerzos de un pequeño ejército compuesto por ingenieros, productores, directivos y el equipo de esports ubicado en Estambul justo antes de uno de nuestros eventos competitivos más grandes del año.
Las investigaciones realizadas para la reparación de esta reducción de rendimiento revelaron varias oportunidades para hacer mejoras significativas a la duración de los fotogramas de los servidores, lo que resultó en grandes mejoras de rendimiento. A partir de la versión 5.07, los jugadores han disfrutado de los servidores de 128 ticks con mayor consistencia desde el lanzamiento de VALORANT en junio de 2020.
Mi nombre es Aaron Cheney y soy ingeniero de software en el equipo de rendimiento de VALORANT. Este artículo hablará de los siguientes puntos:
- Una descripción sobre cómo el equipo de rendimiento lidia con estas reducciones de rendimiento
- El análisis de la gran reducción de rendimiento descubierta justo antes de Champions 2022
- Una recapitulación sobre nuestro proceso de triaje, la forma en la que nuestros equipos lidian con problemas imprevistos y lo que aprendimos de este incidente
En primer lugar, me concentraré en lo que hacemos para descubrir las reducciones de rendimiento y explicaré parte del trasfondo necesario para comprender la gravedad de una reducción.
¿Cómo descubrimos las reducciones de rendimiento?
Las reducciones de rendimiento son parte del desarrollo de videojuegos. Los videojuegos son sistemas sumamente complejos con muchos componentes en movimiento; cada uno de ellos aporta al rendimiento general. Esta complejidad se magnifica a medida en la que se agregan funciones y sistemas con el tiempo. Es importante detectar con precisión cuándo ocurren las reducciones de rendimiento y atribuirlas a una causa específica.
VALORANT cuenta con un equipo de rendimiento específicamente responsable de eso. Nuestro equipo se encarga de monitorear, mantener y mejorar el rendimiento del cliente y el servidor en diferentes tipos de hardware. Utilizamos diversos procesos y herramientas para descubrir reducciones de rendimiento de forma temprana y corregirlas antes de que lleguen a los jugadores.
Objetivos de rendimiento de servidores
Mantener servidores de 128 ticks implica que cada fotograma del servidor debería completarse en menos de 7.8125 milisegundos (ms), pero si hiciéramos eso, una sola partida ocuparía la totalidad de un procesador. Para atenernos a nuestros estrictos requerimientos y objetivos operativos de 128 ticks, los servidores de VALORANT fueron optimizados para incluir 3 fotogramas en aproximadamente 7.8 ms. Esto significa que cada fotograma debería acortarse 2.6 ms en promedio. En realidad, nuestro objetivo de rendimiento para la duración de los fotogramas del servidor es de 2.34 ms. Este objetivo de rendimiento cumple con dos propósitos importantes:
- Otorga espacio de uso. Contar con un espacio adicional para cumplir con los objetivos de rendimiento nos ayuda a absorber fotogramas más grandes sin caer por debajo de los 128 ticks. Eso le da mayor resiliencia a nuestros servidores en diferentes situaciones y permite usar más espacio para el sistema operativo, la planificación y otros programas que operan en el servidor
- Nos ayuda a garantizar que VALORANT sea financieramente viable. La infraestructura de servidores es cara. Aunque sería genial que cada partida de VALORANT corriera en un único hardware, eso no es compatible con un modelo de negocios sustentable
Cuantificar el presente para predecir el futuro
El equipo de rendimiento utiliza dos fuentes de información primara para detectar reducciones de rendimiento:
- Información anterior al lanzamiento: Se trata de información generada a partir de muchas fuentes, entre ellas pruebas de juego internas, pruebas automáticas y entorno de pruebas
- Información en vivo: Es la información generada por los jugadores en nuestros entornos en vivo en todo el mundo
La información anterior al lanzamiento nos permite hacer predicciones a través del análisis de contenido y funciones que todavía no fueron lanzados. Esta información es muy inferior en cantidad respecto de la información en vivo; muchas veces, es difícil extraer conclusiones debido al ruido y la variancia estadística; las tendencias no se revelan con claridad con una muestra pequeña. Además, los casos límite muchas veces no se prueban porque, aunque quisiéramos, no podemos probar todo exhaustivamente.
Por otra parte, la información en vivo nos permite comprender la experiencia presente de los jugadores al observar con exactitud lo que ven en las partidas. Este conjunto de datos es mucho más grande que la información interna (genera miles de millones de datos), lo que puede dificultar su procesamiento. Por ese motivo, agregamos esta información para poder comprenderla.
En términos generales, con la información anterior al lanzamiento podemos ser proactivos con el contenido no lanzado, mientras que con la información en vivo podemos ser reactivos ante las condiciones en vivo. Si utilizamos a la vez estos dos grupos de datos, podemos identificar la mayor parte de los problemas.
Una partida típica de VALORANT
La gran mayoría de los jugadores de VALORANT hace uso del juego a través de los modos normal y competitivo. Ambos cuentan con el mismo modelo de juego, es decir, con exactamente 10 jugadores, solo que en cada caso varía lo que se pone en juego. Aunque hay muchas otras formas de jugar VALORANT (Réplica, Spike Rush, Deathmatch, entre otros), invertimos una parte importante de nuestros recursos en garantizar la mejor experiencia posible en el modo de juego Spike.
A pesar de que la mayoría de las partidas de VALORANT tiene exactamente 10 jugadores, a veces aparecen situaciones especiales (y contundentes) en las que se requieren más de 10 jugadores.
Partidas atípicas de VALORANT
Durante una transmisión de esports, hasta 22 clientes están conectados a una partida en el modo Spike. Se trata de partidas adaptadas para que sean compatibles con la experiencia de transmisión. Allí, habitualmente nos encontramos con la siguiente distribución:
- 10 lugares reservados a los jugadores (5 por equipo)
- 2 lugares reservados a los entrenadores (1 por equipo)
- 10 lugares reservados a observadores, controlados por nuestro equipo de transmisión. Estos lugares adicionales son los que permiten que los fans alienten desde sus casas o en el evento
Las partidas con 22 clientes sobrepasan por mucho las escalas de las partidas típicas de VALORANT. Todos los clientes conectados a una partida deben ser considerados por el servidor para garantizar que cada uno reciba la información necesaria y pueda mostrar la partida en pantalla. Normalmente, eso representaría un problema en nuestro entorno en vivo. Sin embargo, para las partidas de esports utilizamos hardware local especialmente dedicado a garantizar la integridad de la jugabilidad para los atletas.
Objetivos de rendimiento para partidas atípicas de VALORANT
¿Recuerdan los objetivos de rendimiento de servidores que mencioné antes? Nuestro objetivo de 2.34 ms por fotograma de servidor se circunscribe a las partidas típicas de VALORANT, con exactamente 10 jugadores. Para las situaciones en las que más de 10 jugadores están conectados, nuestra expectativa de rendimiento varía de forma lineal respecto al número de jugadores adicionales.
Por ejemplo, con 22 clientes, la duración promedio de los fotogramas aumenta en un factor de 2.2, es decir que pasa de 2.34 ms a 5.2 ms. Eso todavía está muy por debajo de los 7.8 ms de duración de fotogramas requeridos para mantener servidores de 128 ticks.
Gracias a nuestra experiencia en partidas atípicas de VALORANT y a nuestra sólida comprensión del rendimiento de los servidores de VALORANT, esta ha sido una forma precisa de extrapolar la información del rendimiento de las partidas típicas a las atípicas.
¿Pero qué pasa cuando algo cambia? ¿Qué sucede si el rendimiento de los servidores no aumenta de forma lineal respecto al número de clientes conectados?
La reducción de rendimiento
Regresemos a agosto de 2022. El primer signo de problemas apareció durante la prueba de juego con 22 clientes. Los jugadores de la prueba de juego observaron fluctuaciones en los ticks y percibieron inconsistencias generales en la jugabilidad. Los registros en video confirmaron que algo andaba mal. Tuvimos bastante suerte al detectar este problema, porque las pruebas con 22 clientes no formaban parte del procedimiento estándar. En medio de cambios en los equipos y los preparativos para Champions 2022, alguien en el equipo de desarrollo de VALORANT recordó pedir una prueba con 22 clientes a nuestros proveedores de servicios de pruebas.
Aunque todavía no ameritaba activar las alarmas, nos pusimos a trabajar de inmediato para corroborar el problema, iniciar el triaje y alcanzar una solución.
Corroboración del problema
Un único dato no implica necesariamente una tendencia. Comenzamos a procesar las telemetrías de nuestro entorno en vivo para comprender cabalmente la gravedad y extensión del problema. Para eso, dividimos las partidas según el número de clientes presentes, de 10 a 22. Lo que descubrimos nos sorprendió.
Aunque no sabíamos la causa exacta del problema, los gráficos nos mostraban una relación alarmante entre el número de clientes conectados y el rendimiento de servidores. El problema aumentaba de forma no lineal respecto al número de jugadores.
Esta información confirmó que teníamos un gran problema en nuestras manos, en especial considerando que Champions 2022 estaba a la vuelta de la esquina e iba a jugarse en la versión 5.04. Entonces, activamos las alarmas y comenzamos con el triaje.
(Este gráfico muestra la duración de los fotogramas según cada versión. Cada línea representa el número de clientes, desde los 10 clientes de las partidas típicas hasta un máximo de 22 clientes. Como es de esperarse, el rendimiento empeora progresivamente con cada cliente adicional conectado, pero la subida que se ve en la versión 5.03 indicaba que el rendimiento empeoraba de manera no lineal).
Triaje
Por lo general, un triaje implica mitigar los efectos de un problema sin comprender del todo qué lo originó. Esta técnica se utiliza en medicina para evaluar la situación y “detener la hemorragia”; en Riot, la usamos para responder con rapidez a problemas imprevistos.
Para realizar el triaje del problema, emprendimos dos cursos de acción simultáneos.
Creación de planes de contingencia
En primer lugar, los líderes de VALORANT trabajaron junto a nuestros compañeros en Estambul para crear planes de contingencia. Hicimos esto para determinar qué pasaría si no podíamos resolver el problema antes del comienzo de Champions 2022.
Como sabíamos que el problema aumentaba según el número de clientes conectados, teníamos un gran interés en determinar el número mínimo de observadores necesarios para otorgar a los espectadores una experiencia de esports sin riesgos. Luego de descartar la posibilidad de tener 22 clientes conectados, ¿con cuántos clientes sería teóricamente posible operar en estas condiciones? En colaboración con nuestros compañeros de esports, determinamos que con 15 clientes conectados sería posible usar servidores de 128 ticks de forma estable y al mismo tiempo reservar un total de 5 lugares de observación para la transmisión de esports. Eso fue posible gracias al espacio de procesamiento que ganamos para mejorar nuestra duración estándar de fotogramas de servidor.
Determinación de la raíz del problema
En segundo lugar, los desarrolladores de VALORANT continuaron sus investigaciones para comprender mejor el problema y encontrar qué causaba la reducción de rendimiento. Cuando ocurre un problema tan grande como este, es poco probable que se deba a sistemas múltiples.
Pensamos que con un poco de suerte podríamos identificar rápidamente la causa del problema y corregirlo antes del inicio de Champions 2022. Desafortunadamente, eso no pasó.
Reparación de la reducción de rendimiento
La reducción de rendimiento fue identificada por primera vez el 25 de agosto de 2022 y la corregimos una semana después. A lo largo de 7 días, destinamos muchos ingenieros de VALORANT a estudiar el problema y buscar diferentes soluciones posibles.
En el primer día de investigación, logramos determinar qué parte del código base era la responsable de la reducción de rendimiento: La replicación (no, no tiene nada que ver con el modo de juego Réplica). La replicación es la forma en la que Unreal garantiza la consistencia entre servidores y clientes mediante la sincronización de propiedades en los actores y componentes. Pueden leer más sobre el sistema de replicación de Unreal aquí (contenido en inglés).
Nuestra prioridad inicial era analizar los cambios entre las versiones 5.02 y 5.03 para encontrar evidencia de qué pudo haber cambiado en la replicación. Esa tarea resultó ser demasiado difícil, ya que apenas habíamos pasado a Unreal Engine 4.26; es decir, varias partes esenciales del motor se habían modificado. (Para leer más sobre la forma en la que VALORANT realiza sus actualizaciones de Unreal Engine, visita este hilo de Twitter del líder de tecnología de VALORANT, Marcus Reid (contenido en inglés).
No fue fácil investigar la replicación. Como ya teníamos establecidas las prácticas adecuadas desde hacía varios años, no era un sistema que requiriera demasiada atención por parte de los desarrolladores de VALORANT. Además, no era una creación propia de los ingenieros de Riot; aunque habíamos hecho modificaciones al motor base para que se ajustara a nuestras necesidades, pocos tenían un conocimiento profundo del tema.
A continuación, separamos sistemáticamente distintas partes del juego para analizar las diferencias entre las versiones 5.02 y 5.03, con el objetivo de ir descartando posibles causas del problema. Utilizamos herramientas de análisis de rendimiento de software de Unreal, así como nuestras propias herramientas de Riot para comparar las características de rendimiento entre las dos versiones. Finalmente, llegamos a la conclusión de que los agentes, las armas y las habilidades se replicaban con mayor frecuencia en la versión 5.03 en comparación con la versión 5.02.
A partir de ese momento, exploramos dos caminos en paralelo:
- Encontrar LA CAUSA de la reducción de rendimiento y repararla. Este era el escenario ideal al queríamos llegar
- Encontrar otras oportunidades para mejorar el rendimiento. Si encontrábamos otras áreas con un potencial de mejora lo suficientemente grande como para restablecer la duración de fotogramas perdida, podríamos recuperar el control del rendimiento aún sin identificar y corregir el problema original
Varios grupos de ingenieros siguieron distintas pistas de investigación para probar posibles reparaciones y mejoras. En el camino, muchos de ellos ganaron familiaridad y conocimiento en torno a la replicación. Descubrimos varias oportunidades para mejorar el rendimiento, pero eran demasiado riesgosas de implementar y las guardamos para trabajar en el futuro.
El 1 de septiembre de 2022, logramos identificar el problema: una línea de código de la actualización 4.26 del motor UE hacía que la replicación se activara con mucha mayor frecuencia en determinadas condiciones que suelen ocurrir a menudo en VALORANT. Esto provocaba una reducción de rendimiento que se agudizaba significativamente a medida que más clientes se conectaban al servidor. Aunque el problema ya podía advertirse en las partidas típicas de 10 clientes, volvía imposible jugar con 22 clientes.
Ya habíamos identificado la causa de la reducción de rendimiento, su reparación no era riesgosa y nos teníamos bastante confianza. Estábamos frente al mejor escenario posible. No lo celebramos de inmediato, pero hicimos un cambio en el código que resultó muy satisfactorio.
Después de la reducción de rendimiento
Una vez identificada y reparada la causa de la reducción de rendimiento, realizamos pruebas generalizadas para convalidar que el rendimiento se ajustara otra vez a nuestras expectativas y asegurarnos de que el cambio no hubiera provocado más errores.
Implementación de la corrección
Aunque la forma de corregir el problema fue identificada el 1 de septiembre de 2022, los cambios no se implementaron en nuestro entorno de esports sino hasta el 8 de septiembre de 2022, tras la fase de grupos. Esta decisión se tomó con el fin de darle más tiempo a las pruebas y la validación, y así mitigar los riesgos y minimizar las alteraciones para los compañeros de Estambul.
Nuestros entornos en vivo recibieron la corrección con la versión 5.05, lo que condujo a mejoras significativas.
Más allá de Champions 2022
La diversión no se terminó con la versión 5.05. Durante la semana en la que investigamos el sistema de replicación, identificamos varias oportunidades de mejora en el rendimiento que fueron agendadas para futuros desarrollos. Eran demasiado riesgosas de implementar en ese momento, ya que no atacaban la causa del problema. Una vez corregida la reducción de rendimiento original, aprovechamos nuestros nuevos conocimientos sobre la replicación para abordar varias áreas y seguir mejorando el rendimiento de los servidores.
Gracias a estos esfuerzos, implementamos una serie de mejoras considerables que resultaron en una disminución general del 15% en la duración de los fotogramas de servidor en comparación a las cifras anteriores a la gran reducción de rendimiento. Estos cambios también redujeron la variancia estadística en todas las regiones, aumentando la estabilidad de la duración de los fotogramas de servidor.
Desde la versión 5.07, más del 99.3% de los fotogramas de servidor se ajustó a nuestros requerimientos estrictos de 128 ticks, lo que significa que los jugadores ahora disfrutan de la estabilidad y consistencia más altas de servidores desde el lanzamiento de VALORANT.
(Este gráfico muestra la duración de los fotogramas según cada versión. Cada línea representa el número de clientes, desde los 10 clientes de las partidas típicas hasta un máximo de 22 clientes. Después de la gran reducción de rendimiento de las versiones 5.03 y 5.04, corregimos el problema y regresamos a los valores normales en la versión 5.05. Se implementaron mejoras adicionales significativas en la versión 5.07, que experimentó una mejora del 15% en el rendimiento de servidores en comparación con las cifras anteriores a la reducción de rendimiento).
Lo que aprendimos
La resolución de este problema de rendimiento imprevisto requirió de un pequeño ejército: una decena de ingenieros, socios de esports, proveedores de pruebas, productores, líderes de equipos y la generosidad de los equipos asociados que nos acercaron su guía y consejos. Aprendimos muchísimo de este incidente y encontramos algunas lagunas en nuestros procesos que nos gustaría abordar.
- Observación de partidas atípicas: La mayor parte de nuestra atención se concentra en la experiencia típica de VALORANT en el modo de juego Spike clásico de 10 jugadores. Nuestros datos no mostraron problemas en relación al número de jugadores conectados, lo que hizo que desconociéramos la escala de la reducción de rendimiento hasta poder elaborar nuevos gráficos. Desde entonces, creamos nuevos procesos para revisar y comprender las características de rendimiento para las partidas atípicas de VALORANT con más de 10 clientes
- Aumento de la cobertura de pruebas para las partidas atípicas: Aunque las partidas típicas de 10 jugadores en modo Spike seguirán siendo nuestra prioridad, intentamos crear nuevos procesos y procedimientos de pruebas para comprender mejor el rendimiento de servidores en entornos con 22 clientes. El volumen de la muestra de las partidas de 22 clientes es pequeño en comparación con las demás, así que obtener la información necesaria implica realizar pruebas de juego con 22 clientes de manera regular. Ahora, la realización de pruebas de juego con 22 clientes con cada lanzamiento, en lugar de antes de los torneos principales, es parte del procedimiento estándar. Es probable que, además, necesitemos implementar otros procedimientos de prueba más sofisticados
- Promover el desarrollo de especialistas: Incluso si implica una inversión de tiempo considerable, formar especialistas dentro del equipo ayuda a cubrir lagunas de conocimiento y nivela hacia arriba al grupo en su conjunto. Varios ingenieros ganaron mucho conocimiento sobre la replicación en el proceso de reparar la reducción de rendimiento, lo que resultó ser una gran inversión de recursos
- Minimizar el riesgo en los torneos: Jugar Champions 2022 con una versión nueva, sobre todo considerando que acabábamos de integrar una nueva versión de Unreal Engine, nos puso en un riesgo considerable. Aunque queremos asegurarnos de que los cambios importantes de jugabilidad (por ejemplo, de balance, agentes, y demás) aparezcan en los torneos principales, es probable que los próximos torneos no se jueguen al límite de ese tipo de cambios. Como mínimo, haremos revisiones adicionales de riesgos en las situaciones en las que sea inevitable
Nuestra idea es hacer más cambios como estos para seguir mejorando la experiencia de los jugadores de VALORANT. Disfruten de los servidores de 128 ticks, ¡y felices disparos!