Come abbiamo ottenuto i server di VALORANT con le migliori prestazioni di sempre

Scoprite come il nostro team di sviluppatori ha trasformato una situazione sfortunata nei migliori server che abbiamo mai avuto fin dal lancio del gioco.

Avere server con 128 di tickrate è stata una priorità per VALORANT sin da prima del lancio. Il nostro obiettivo è sempre stato quello di creare un'esperienza competitiva di altissimo livello con server a 128 di tickrate per tutti. Per saperne di più su come abbiamo raggiunto questo obiettivo prima del lancio, leggete il nostro articolo riguardante i server di VALORANT con 128 di tickrate.

Mantenere le prestazioni dei server è una battaglia costante. Quando aggiungiamo nuove funzioni, dobbiamo stare molto attenti a non superare il budget per le prestazioni dei nostri server al fine di continuare a garantire un tickrate di 128. Con il tempo, i problemi di deterioramento delle prestazioni più piccoli vanno ad accumularsi creando occasionalmente criticità che necessitano di attenzioni immediate.

Nell'agosto 2022, abbiamo avuto il più grande deterioramento nelle prestazioni dei server dal lancio del gioco. Questo problema ha influenzato le partite di VALORANT con più dei normali 10 giocatori (es. partite personalizzate e tornei di eSport). Risolvere il problema ha richiesto l'intervento di un piccolo esercito di ingegneri, produttori e coordinatori e del team di eSport a Istanbul a ridosso di uno degli eventi competitivi più importanti dell'anno.

I nostri sforzi per identificare e risolvere il problema hanno portato alla luce diverse opportunità per migliorare significativamente il tempo di elaborazione dei frame dei server, cosa che ha portato a enormi miglioramenti delle prestazioni. Dalla patch 5.07, i giocatori hanno potuto godere dei server a 128 di tickrate più stabili di quanto siano mai stati dal lancio di VALORANT nel giugno 2020.

Sono Aaron Cheney, un ingegnere informatico del team delle prestazioni di VALORANT. Ecco una panoramica di ciò che è incluso in questo articolo:

  • Viene descritto come il team delle prestazioni si occupa dei deterioramenti delle prestazioni
  • Viene discusso del grande deterioramento delle prestazioni scoperto prima del Champions 2022
  • Viene esaminato il nostro processo di diagnostica, con alcuni dettagli riguardanti la gestione delle emergenze da parte dei nostri team, spiegando cosa abbiamo imparato da questo incidente

Prima di tutto, vi spiegherò come identifichiamo i deterioramenti delle prestazioni, illustrandovi alcune basi per capirne la gravità.

Come identifichiamo i deterioramenti delle prestazioni?

I deterioramenti delle prestazioni sono comuni nello sviluppo di videogiochi. I giochi sono composti da sistemi estremamente complessi che interagiscono tra loro e che contribuiscono alle prestazioni generali. Nel tempo, con l'aggiunta di funzioni e sistemi nuovi, questa complessità tende ad aumentare. È importante identificare precisamente quando avvengono i deterioramenti delle prestazioni per attribuirli a una specifica causa scatenante.

VALORANT ha un team dedicato alle prestazioni che si occupa proprio di questo. Il nostro team è incaricato di monitorare, mantenere e migliorare le prestazioni del client e dei server per un'ampia varietà di hardware. Sfruttiamo diversi strumenti e processi per identificare i deterioramenti il prima possibile e correggerli prima che raggiungano i giocatori.

Obiettivi delle prestazioni dei server

Mantenere dei server con un tickrate di 128 significa che ciascun frame del server deve essere completato in meno di 7,8125 millisecondi (ms), ma, se così fosse, una singola partita richiederebbe l'uso di un intero core della CPU. Per andare incontro ai nostri rigorosi requisiti e obiettivi operativi, e rispettare i 128 tick al secondo, i server di VALORANT sono ottimizzati per elaborare 3 frame in circa 7,8 ms. Questo significa che ciascun frame del server deve essere, in media, più breve di 2,6 ms. In realtà, puntiamo a una durata dei frame di 2,34 ms. Questo obiettivo per le prestazioni è stato posto per due scopi ben precisi:

  1. Fornisce il margine necessario. Questo margine nelle prestazioni aiuta ad ammortizzare i frame più lunghi per evitare che un server scenda sotto i 128 tick al secondo. Questo rende i server più resistenti a una gran varietà di scenari e lascia spazio al sistema operativo, ai processi e ad altri software in funzione
  2. Aiuta ad assicurarci che VALORANT resti economicamente sostenibile. Le infrastrutture server sono costose. Anche se sarebbe bello poter ospitare ciascuna partita di VALORANT su una macchina a parte, non è economicamente fattibile

AskVal_Feb22_Champions_Article_Graph_3_IT.jpg

Valutare il presente e prevedere il futuro

Il team delle prestazioni utilizza due fonti primarie di dati per identificare i deterioramenti:

  1. Dati di pre-pubblicazione, generati da diverse fonti, inclusi i test di gioco interni, i test automatizzati e il PBE
  2. Dati sulla versione ufficiale del gioco, generati dai giocatori in tutto il mondo

I dati di pre-pubblicazione ci permettono di fare previsioni per il futuro analizzando i contenuti e le funzioni non ancora pubblicati. Questi dati sono in numero inferiore a quelli che raccogliamo dalla versione ufficiale del gioco, il che significa che è spesso difficile trarre conclusioni per via della varianza e del rumore statistico, in quanto, con un numero così limitato di campioni, le tendenze non risaltano altrettanto chiaramente. In alcuni casi limite, certe cose non vengono mai testate perché, per quanto proviamo, non è possibile testare ogni minima cosa.

Di contro, i dati sulla versione ufficiale del gioco ci permettono di comprendere l'attuale esperienza dei giocatori misurando esattamente ciò che vedono in partita. Questi dati vengono raccolti in numero estremamente maggiore rispetto a quelli interni (generando miliardi di informazioni), il che però può renderli difficili da elaborare. Per dare un senso a questi dati, li aggreghiamo.

Generalmente, i dati pre-pubblicazione ci consentono di essere previdenti per quanto riguarda i contenuti non ancora pubblicati, mentre i dati sulla versione ufficiale del gioco ci permettono di essere reattivi alle condizioni che si vengono a creare. Quando vengono usati assieme, questi due set di dati permettono di identificare la maggior parte dei problemi.

Una tipica partita di VALORANT

La maggior parte dei giocatori di VALORANT gioca alle modalità Non competitiva e Competitiva. Entrambe hanno la stessa struttura di gioco, con esattamente 10 giocatori, anche se ovviamente la posta in gioco cambia. Nonostante ci siano molti altri modi di giocare a VALORANT (Replicazione, Assalto Spike, Deathmatch ecc.), spendiamo un'ampia parte delle risorse per garantire che le modalità di piazzamento della Spike offrano l'esperienza migliore possibile.

Nonostante la maggior parte delle partite di VALORANT abbiano esattamente 10 giocatori, sono presenti alcune situazioni speciali (e importanti) che necessitano di più di 10 giocatori.

Partite atipiche di VALORANT

Durante una partita in modalità di piazzamento della Spike di una trasmissione di eSport, vengono connessi fino a 22 client. Queste sono partite personalizzate che supportano gli osservatori. In queste partite, è normale vedere la seguente distribuzione:

  • 10 slot sono dedicati ai giocatori (5 per ciascuna squadra)
  • 2 slot sono dedicati agli allenatori (1 per ciascuna squadra)
  • 10 slot sono dedicati agli osservatori gestiti dal nostro team di trasmissione. Questi slot in più permettono ai fan a casa, o nell'arena, di osservare le partite da più prospettive!

Queste partite da 22 client sono ben lontane dalla tipica partita di VALORANT. Ciascuno dei client connessi alla partita deve ricevere dal server le informazioni necessarie per mostrare la partita sullo schermo. Questo normalmente sarebbe un problema nelle nostre condizioni di gioco normali. Tuttavia, per le partite di eSport, usiamo macchine locali dedicate, in modo da mantenere l'integrità di gioco per tutti i partecipanti.

Obiettivi delle prestazioni per le partite atipiche di VALORANT

Ricordate gli obiettivi per le prestazioni dei server menzionati prima? Il nostro obiettivo di 2,34 ms per frame è pensato per le tipiche partite di VALORANT in cui sono presenti esattamente 10 giocatori. Per le situazioni che coinvolgono più di 10 utenti, le nostre aspettative per le prestazioni aumentano linearmente in base al numero di utenti aggiuntivi.

Per esempio, con 22 client il tempo medio di un frame aumenta per un fattore 2,2, passando così da 2,34 ms a 5,2 ms. Questo valore è comunque al di sotto dei 7,8 ms necessari per mantenere i server a 128 di tickrate.

In base alla nostra esperienza con le partite atipiche di VALORANT, e in base alla nostra profonda comprensione delle prestazioni dei server di VALORANT, questo finora è stato un metodo efficace di estrapolare dati riguardanti le prestazioni dalle partite tipiche e atipiche.

Ma cosa succede quando cambia qualcosa? Cosa succede quando le prestazioni dei server non aumentano più linearmente con il numero di client connessi?

Il deterioramento nelle prestazioni

Torniamo all'agosto del 2022. Il primo segno di problemi si è manifestato durante un test di gioco da 22 client. I giocatori nel test hanno notato fluttuazioni nel tickrate del server e una mancanza generale di stabilità durante la partita. I video che abbiamo registrato sulla partita hanno confermato che qualcosa non andava. Siamo stati abbastanza fortunati a individuare questo problema poiché, al tempo, i test di gioco con 22 client non erano una procedura standard. Durante le preparazioni per il Champions 2022, un membro cruciale del team di sviluppo di VALORANT si è ricordato di richiedere un test di gioco con 22 client da far condurre ai nostri tester.

Anche se non era ancora il momento di allarmarsi, volevamo diagnosticare il problema, testarlo rapidamente e lavorare per trovare una soluzione.

Identificare il problema

Un singolo valore nei dati non indica una tendenza. Abbiamo iniziato a elaborare la telemetria dal nostro ambiente di gioco ufficiale per comprendere la gravità e l'estensione del problema, separando le partite in base al numero di client coinvolti (tra 10 e 22). Ciò che abbiamo scoperto è stato sconvolgente.

Anche se non ne comprendevamo la causa precisa, i grafici mostravano una correlazione allarmante tra il numero di client connessi e le prestazioni del server. Il problema aumentava in maniera non lineare in base al numero di utenti connessi.

I dati confermavano che avevamo per le mani un grosso problema, specialmente con il Champions 2022 alle porte, che si sarebbe giocato con la patch 5.04. Abbiamo allertato tutti e iniziato subito la diagnostica.

(Questo grafico mostra i tempi di elaborazione dei frame dei server in base alla patch. Ciascuna linea rappresenta il numero di client connessi, a partire dalle normali partite da 10 client fino a un massimo di 22 client. Come ci aspettavamo, le prestazioni andavano peggiorando con ciascun client connesso, ma il picco della patch 5.03 significava che i cali di prestazioni non erano lineari.)

Diagnosticare i deterioramenti delle prestazioni

Tamponare un problema generalmente implica mitigarne gli effetti senza comprenderne pienamente le cause. Questa tecnica è usata in medicina per valutare la situazione e "fermare l'emorragia"; Riot la sfrutta per rispondere rapidamente a problemi urgenti.

Durante la diagnostica vengono applicati contemporaneamente due processi.

Creare piani d'emergenza

Prima di tutto, la direzione di VALORANT ha lavorato con alcuni dei nostri collaboratori a Istanbul per creare dei piani d'emergenza. Questo serviva a determinare cosa sarebbe accaduto se non fossimo riusciti a risolvere il problema prima del Champions 2022.

Poiché avevamo capito che il problema cresceva in base al numero di client connessi, il nostro interesse principale era determinare il numero minimo di osservatori necessari per garantire un'esperienza di visione dell'eSport completa. Dal momento che avere 22 client era fuori discussione, qual era il nostro limite massimo in questa situazione? Collaborando con i nostri amici nell'eSport, abbiamo stabilito che 15 client connessi avrebbero garantito server a 128 di tickrate stabili, lasciando 5 slot agli osservatori per creare l'esperienza migliore possibile nella trasmissione. Questo era consentito dal margine che abbiamo volutamente incluso nel tempo standard di elaborazione dei frame del server.

Stabilire la causa scatenante

In un secondo momento, gli sviluppatori di VALORANT hanno continuato a indagare sul problema in cerca della causa scatenante alla base del deterioramento nelle prestazioni. Quando un problema di questa portata si presenta, difficilmente è coinvolto contemporaneamente più di un sistema.

Con un pizzico di fortuna, contavamo di identificare rapidamente la radice del problema e distribuire una soluzione prima del Champions 2022. Purtroppo, non è andata così.

Risolvere il deterioramento nelle prestazioni

Il deterioramento nelle prestazioni è stato identificato per la prima volta il 25 agosto 2022; la soluzione al problema è arrivata la settimana dopo. Nel corso di 7 giorni, svariati ingegneri di VALORANT sono stati assegnati al problema in cerca di soluzioni.

Il primo giorno, è stata stabilita la parte di codice base responsabile per il deterioramento: la replicazione (no, non la modalità). La replicazione è il metodo con cui Unreal Engine garantisce la coerenza tra server e client sincronizzando le proprietà di attori e componenti. Ulteriori informazioni riguardo al sistema di replicazione di Unreal Engine sono disponibili qui.

Così, inizialmente abbiamo dato priorità ad analizzare le modifiche tra la patch 5.02 e 5.03 per trovare cosa potesse essere cambiato nella replicazione. Questo si è dimostrato un processo difficile, dato che eravamo appena passati a Unreal Engine 4.26 e di conseguenza diverse parti fondamentali del motore di gioco erano state modificate (per maggiori informazioni sugli aggiornamenti di Unreal Engine per VALORANT, consultate questo post di Twitter scritto dal capo tecnico di VALORANT, Marcus Reid).

Indagare sulla replicazione non è stato facile. Non è un sistema che richiede particolari attenzioni da parte degli sviluppatori di VALORANT, poiché abbiamo delle pratiche stabilite da anni. Non è neppure un sistema creato da ingegneri Riot; abbiamo modificato il motore di rete di base perché soddisfacesse le nostre necessità, ma la conoscenza completa dei meccanismi interni non è così comune.

Dopodiché, abbiamo analizzato approfonditamente varie parti del gioco per valutare le differenze tra le patch 5.02 e 5.03 con l'obiettivo di identificare più precisamente la causa. Abbiamo sfruttato vari strumenti di analisi del rendimento offerti da Unreal e quelli interni di Riot per confrontare le caratteristiche di prestazioni tra le due patch. Alla fine, questo ci ha portati alla conclusione che i personaggi, le armi e le abilità venivano replicati molto più spesso nella patch 5.03 rispetto alla 5.02.

Da questo punto abbiamo esplorato due possibilità:

  1. Trovare IL deterioramento e risolvere il problema. Questo è lo scenario ideale
  2. Trovare altre opportunità per migliorare le prestazioni. Se avessimo potuto trovare altre aree da migliorare (in quantità sufficiente per far rientrare la durata dei frame entro i valori di guardia), allora avremmo potuto riportare le prestazioni nei limiti anche senza trovare e risolvere il problema originale

Diversi gruppi di ingegneri hanno seguito varie vie per identificare e testare potenziali soluzioni e miglioramenti. Durante il processo, in molti hanno raggiunto una certa familiarità ed esperienza con la replicazione. Sono state individuate diverse opportunità per migliorare le prestazioni durante questi test, ma sono state ritenute troppo rischiose da implementare subito e sono state messe da parte per essere rielaborate in futuro.

Il 1º settembre 2022, abbiamo identificato il problema: una singola riga di codice dell'aggiornamento a UE 4.26 faceva sì che la replicazione avvenisse molto più spesso in certe condizioni che si presentano frequentemente in VALORANT. Questo ha comportato un deterioramento delle prestazioni significativamente peggiore con un maggior numero di client connessi al server. Nonostante il problema fosse appena avvertibile nelle normali partite da 10 client, quelle da 22 client erano ingiocabili.

Il deterioramento era stato identificato, la soluzione non era troppo rischiosa e avevamo buone speranze. Era una situazione ideale. Non abbiamo stappato subito lo champagne, ma abbiamo introdotto un cambiamento molto soddisfacente nel nostro codice.

Dopo il deterioramento delle prestazioni

Una volta identificata e risolta la causa del deterioramento, abbiamo condotto svariati test per assicurarci che le prestazioni fossero nuovamente in linea con le aspettative e che non ci fossero bug conseguenti ai cambiamenti.

Pubblicare la soluzione

Nonostante la soluzione fosse stata identificata il 1º settembre 2022, i cambiamenti non sono stati applicati alla versione del gioco dedicata all'eSport fino all'8 settembre 2022, dopo i gironi. Questo è stato fatto per limitare i rischi e offrire più tempo per i test e le verifiche, e per ridurre al minimo i problemi per il personale di Istanbul.

La versione ufficiale del gioco ha ricevuto la soluzione al problema con la patch 5.05, portando a importanti miglioramenti.

Oltre il Champions 2022

Il divertimento non si è fermato alla patch 5.05. Durante la settimana di test del sistema di replicazione, sono state identificate diverse opportunità per migliorare ulteriormente le prestazioni da testare e sviluppare in futuro. In quel momento erano troppo rischiose da pubblicare, poiché non risolvevano il problema alla base. Dopo aver risolto il problema originale, abbiamo sfruttato l'esperienza ottenuta con la replicazione per rivalutare diverse aree che ritenevamo potessero beneficiare ulteriormente le prestazioni del server.

Queste azioni hanno condotto a miglioramenti significativi nel complesso, portando a una riduzione del 15% del tempo di elaborazione dei frame del server rispetto ai valori pre-deterioramento. Questi cambiamenti hanno ridotto anche la varianza in tutte le regioni, aumentando la stabilità dei frame dei server.

Dalla patch 5.07, oltre il 99,3% dei frame dei server rispetta i nostri stretti requisiti di 128 tick al secondo; questo vuol dire che i giocatori possono godere di server stabili e coerenti così come non sono mai stati fin dal lancio di VALORANT.

(Questo grafico mostra i tempi di elaborazione dei frame dei server in base alla patch. Ciascuna linea rappresenta il numero di client connessi, a partire dalle normali partite da 10 client fino a un massimo di 22 client. Dopo i significativi deterioramenti delle patch 5.03 e 5.04, abbiamo risolto il problema e siamo tornati ai valori normali nella patch 5.05. Ulteriori miglioramenti importanti sono stati pubblicati con la patch 5.07, che hanno portato al 15% di miglioramento nelle prestazioni dei server rispetto ai valori pre-deterioramento.)

Abbiamo imparato la lezione

Per risolvere questo problema di prestazioni è servito un piccolo esercito: una dozzina di ingegneri, collaboratori dell'eSport, tester, produttori, coordinatori dei team, e tanta generosità da parte dei team associati, che ci hanno guidati e consigliati. Abbiamo imparato molto da questo incidente, e abbiamo individuato alcune mancanze nei nostri processi che intendiamo risolvere.

  • Monitorare le partite atipiche - La maggior parte della nostra attenzione è diretta verso la tipica esperienza di VALORANT con 10 giocatori in modalità Spike classica. I nostri dati non mostravano dettagli in base al numero di giocatori connessi, cosa che ha reso la portata dei deterioramenti sconosciuta fino a quando non abbiamo creato nuovi grafici. Da allora, abbiamo ideato nuovi processi per testare e comprendere le caratteristiche delle prestazioni per le partite atipiche di VALORANT con più di 10 client
  • Aumentare i test per le partite atipiche - Nonostante la modalità Spike classica con 10 giocatori resti la nostra priorità, abbiamo intenzione di creare nuovi processi e procedure per testare e comprendere le prestazioni dei server in situazioni che coinvolgono 22 client. Il campione statistico per le partite da 22 client è piccolissimo a confronto con gli altri, quindi per ottenere queste informazioni dobbiamo tenere regolarmente dei test di gioco con 22 client. Ora è procedura standard avere dei test di gioco con 22 client a ogni patch anziché unicamente prima di tornei importanti. Probabilmente ci serviranno altre procedure più sofisticate per questi test
  • Incoraggiare la formazione di esperti in materia - Nonostante implichi un investimento di tempo significativo, formare degli esperti nel team aiuta a sopperire a eventuali lacune e migliora il team in generale. Diversi ingegneri hanno ottenuto esperienza con la replicazione nel tentativo di risolvere i deterioramenti delle prestazioni, e questo si è dimostrato un ottimo investimento
  • Minimizzare i rischi per i tornei - Giocare il Champions 2022 con una patch appena pubblicata, soprattutto avendo appena finito di integrare una nuova versione di Unreal Engine, è stato rischioso. Anche se ci teniamo a garantire che i cambiamenti al gameplay (es. bilanciamenti, personaggi, etc.) vengano pubblicati in tempo per i tornei importanti, in futuro non correremo più lo stesso rischio del Champions 2022. Se non possiamo evitarlo, come minimo verificheremo più volte tutti i possibili scenari

Continueremo a introdurre miglioramenti come questi per rendere l'esperienza di VALORANT migliore per i nostri giocatori. Godetevi i server a 128 di tickrate e buon VALORANT!