Ir à lista de artigos
09/03/23Dev

Como criamos os servidores com melhor desempenho desde o lançamento do VALORANT

Compartilhar:

Os servidores de 128 ticks são uma prioridade do VALORANT desde muito antes do lançamento do jogo. Nosso objetivo sempre foi oferecer uma experiência competitiva de alto nível em servidores com essa taxa de ticks para todo mundo. Para saber mais sobre como atingimos essa meta antes do lançamento, leia o artigo VALORANT’s 128-Tick Servers ("Os servidores de 128 ticks do VALORANT", em tradução livre).

A manutenção do desempenho dos servidores é uma batalha constante. Como novos recursos são apresentados constantemente ao longo dos anos, temos que tomar muito cuidado para respeitar os orçamentos de desempenho e continuar oferecendo servidores de 128 ticks. Com o passar do tempo, pequenas degradações se agravam juntas, enquanto grandes degradações surgem de vez em quando e exigem atenção imediata.

Em agosto de 2022, enfrentamos a maior degradação no desempenho dos servidores desde o lançamento. Ela afetava as partidas do VALORANT em que havia mais do que a quantidade usual de 10 pessoas (ex.: partidas personalizadas e de Esports). A solução exigiu o empenho de um pequeno exército de engenheiros, produtores e líderes, além de integrantes da equipe de Esports que estavam em Istambul, logo antes de um dos nossos maiores eventos competitivos do ano.

Enquanto buscávamos uma correção para essa degradação, descobrimos várias oportunidades de aperfeiçoar bastante a taxa de quadros dos servidores, o que acarretou em grandes melhorias de desempenho. Desde a Atualização 5.07, a comunidade vem jogando nos servidores de 128 ticks mais constantes desde o lançamento do VALORANT em junho de 2020.

Sou Aaron Cheney, engenheiro da equipe de desempenho do VALORANT, e aqui vai uma visão geral dos assuntos de hoje. Este artigo:

  • Descreve como a equipe de desempenho detecta degradações.
  • Aborda uma grande degradação de desempenho que foi descoberta logo antes do Champions 2022.
  • Apresenta nosso processo de triagem, mostra como nossas equipes lidam com problemas urgentes e explica o que aprendemos com o incidente.

Primeiro, vou falar sobre como identificamos degradações de desempenho e explicar um pouco do contexto relevante que precisamos ter para compreender a severidade delas.

Como detectamos degradações de desempenho?

As degradações de desempenho fazem parte da realidade do desenvolvimento de jogos. Jogos são sistemas incrivelmente complexos, repletos de partes variáveis onde cada uma delas contribui com o desempenho geral. Essa complexidade se intensifica com a adição de recursos e sistemas ao longo do tempo. É importante detectar com precisão o momento em que as degradações ocorrem e a causa específica delas.

No VALORANT, temos uma equipe de desempenho encarregada disso. As tarefas desse pessoal incluem o monitoramento, a manutenção e a melhoria tanto do cliente quanto do desempenho dos servidores em vários tipos de hardware. Nós implementamos diversas ferramentas e processos para detectar degradações antecipadamente e corrigi-las antes que caiam nas mãos da comunidade.

Metas de desempenho dos servidores

Para mantermos servidores de 128 ticks, cada quadro precisaria ser concluído em menos de 7,8125 milissegundos (ms), mas, nesse caso, uma única partida ocuparia um núcleo de CPU inteiro. Para satisfazer os requisitos rigorosos e metas operacionais de sistemas de 128 ticks, os servidores do VALORANT foram otimizados para encaixarem 3 quadros em aproximadamente 7,8 ms. Sendo assim, cada quadro dos servidores deve durar menos de 2,6 ms. Na realidade, nossa meta de desempenho para a taxa de quadros é de 2,34 mse cumpre dois propósitos importantes:

  1. Concede uma margem necessária. Um pouco de espaço para variação em nossas metas de desempenho nos permite assimilar quadros mais longos sem reduzir os 128 ticks. Isso faz com que nossos servidores sejam resilientes em mais situações e deixa espaço para o sistema operacional, o escalonamento de processos e outros programas que estejam sendo executados no servidor.
  2. Ajuda a garantir que o VALORANT continue sendo financeiramente viável. Manter uma infraestrutura de servidores como essa é caro. Seria legal se cada partida do VALORANT fosse executada em uma única peça de hardware, mas, nesse caso, não teríamos um modelo de negócios sustentável.

A avaliação do presente e a previsão do futuro

A equipe de desempenho utiliza duas fontes primárias de dados para identificar degradações:

  1. Dados preliminares – são originários de várias fontes, incluindo testes internos, testes automáticos e o PBE.
  2. Dados do ambiente de jogo – são gerados por jogadores do mundo todo no nosso ambiente de jogo.

Com os dados preliminares, prevemos o futuro analisando conteúdos e recursos ainda não lançados. Eles formam um conjunto bem menor se comparados aos dados do ambiente de jogo, o que costuma dificultar a elaboração de conclusões devido à poluição e à variância presentes, já que uma quantidade menor de amostras acaba não revelando tendências muito claras. Além disso, pode ser que casos específicos não sejam verificados, porque, por mais que nós tentemos, não conseguimos testar tudo a fundo.

Por sua vez, os dados do ambiente de jogo nos permitem compreender a experiência de jogo atual ao avaliarmos exatamente o que as pessoas veem no jogo. Eles são muito mais numerosos do que os internos (chegam a gerar bilhões de registros), o que acaba dificultando seu processamento, mas os agrupamos para entendê-los.

Falando de modo geral, os dados preliminares possibilitam que sejamos proativos em relação a conteúdos não lançados, enquanto os dados do ambiente de jogo permitem que sejamos reativos às condições do jogo. Quando combinados, esses dois conjuntos de informações revelam a maioria dos problemas.

Uma partida-padrão do VALORANT

A grande maioria da comunidade do VALORANT interage com o jogo por meio das filas Sem Classificação e Competitiva. Ambas representam o mesmo modo de jogo, tendo exatamente 10 pessoas, mas com riscos diferentes. Ainda que existam outras maneiras de jogar VALORANT (Replicação, Disputa da Spike, Mata-Mata etc.), nós investimos uma quantidade significativa de recursos para garantir que o modo de jogo padrão seja a melhor experiência possível.

Embora grande parte das partidas do VALORANT tenha 10 jogadores, surgem algumas situações especiais (e relevantes) quando a presença de uma quantidade maior de pessoas é necessária.

Partidas atípicas do VALORANT

Até 22 usuários são conectados ao modo de jogo padrão durante uma transmissão de Esports. Trata-se de partidas personalizadas que dão suporte à experiência de visualização. É comum elas apresentarem a seguinte divisão:

  • 10 lugares para jogadores (5 para cada equipe).
  • 2 lugares para treinadores (1 para cada equipe).
  • 10 lugares para espectadores controlados pela nossa equipe de transmissão. Esses espaços adicionais tornam a experiência de visualização possível para os fãs que estão torcendo de casa ou na arena!

As partidas com 22 usuários são bem diferentes das disputas típicas do VALORANT. O servidor deve levar em consideração todas as pessoas conectadas à partida para que cada uma delas receba as informações necessárias para exibir o jogo na tela. Normalmente, isso seria um problema no ambiente de jogo. No entanto, em partidas de Esports, nós usamos um hardware local dedicado a manter a integridade da mecânica de jogo para os atletas.

Metas de desempenho para partidas não padrão do VALORANT

Sabe as metas de desempenho dos servidores que citamos antes? Então, nossa meta de 2,34 ms por quadro de servidor serve para uma partida comum do VALORANT, com 10 pessoas. Nos casos em que há mais gente conectada, nossa expectativa de desempenho escala linearmente conforme o número de jogadores adicionais.

Por exemplo: com 22 pessoas, a taxa de quadros média seria multiplicada por um coeficiente de aproximadamente 2,2, indo de 2,34 ms para 5,2 ms. Ainda é um valor significativamente inferior à taxa de quadros de 7,8 ms de que precisamos para manter os servidores de 128 ticks.

Com base na nossa experiência com partidas não padrão e na nossa grande compreensão do desempenho dos servidores do VALORANT, essa tem sido uma maneira precisa de extrapolar os dados de desempenho das partidas comuns para entender as não padrão.

Mas o que acontece quando alguma coisa muda? E quando o desempenho dos servidores deixa de escalar linearmente de acordo com o número de pessoas conectadas?

A degradação

Vamos voltar no tempo até agosto de 2022. O primeiro indicativo do problema surgiu durante um teste com 22 usuários. Os jogadores que estavam participando perceberam oscilações nos ticks do servidor, bem como inconsistências gerais enquanto jogavam. As gravações de vídeo da partida confirmaram que tinha alguma coisa errada. Foi muita sorte detectarmos essa falha, porque os testes com esse número de participantes não eram padronizados na época. Em meio ao embaralhamento de equipes e aos preparativos para o Champions 2022, um desenvolvedor importante do VALORANT lembrou de solicitar um teste com 22 usuários aos nossos parceiros de testes.

Mesmo que fosse cedo para fazer soar o alarme, começamos a trabalhar imediatamente para validar o erro, fazer a triagem dele e buscar uma solução.

A validação do problema

Um único dado não indica uma tendência. Nosso primeiro passo foi processar a telemetria do ambiente de jogo para entender a severidade e a extensão da falha, separando partidas pelo número de usuários envolvidos, que variava entre 10 e 22. A descoberta foi chocante.

Embora não soubéssemos a causa exata do erro, os gráficos apontavam uma correlação alarmante entre o número de pessoas conectadas e o desempenho dos servidores. A degradação escalava de maneira não linear de acordo com o número de jogadores.

Esses dados confirmaram que havia um grande problema em nossas mãos, ainda mais com o Champions 2022 logo ali, programado para acontecer na Atualização 5.04. Demos o alerta e prosseguimos para a triagem do bug sem perder tempo.

(Esse gráfico mostra as taxas de quadros dos servidores por atualização. As linhas representam o número de pessoas, indo das partidas comuns com 10 jogadores até as não padrão com o máximo de 22 usuários. Como esperado, o desempenho piora progressivamente a cada indivíduo conectado, mas, conforme aponta o pico na Atualização 5.03, ele estava se comportando de maneira não linear.)

A triagem da degradação

A triagem de um erro costuma implicar na mitigação dos seus efeitos sem uma compreensão completa da origem. Na medicina, essa técnica é aplicada para avaliar a situação e "estancar o sangramento"; na Riot, ela é usada para lidar rapidamente com problemas urgentes.

Empregamos dois esforços simultâneos para fazer a triagem da degradação.

Criando planos de emergência

Primeiro, as pessoas em cargos de liderança no VALORANT colaboraram com nossos parceiros em Istambul na criação de planos de emergência para determinar o que aconteceria caso não conseguíssemos corrigir o bug antes do início do Champions 2022.

Como tínhamos entendido que a falha se agravava conforme o número de indivíduos conectados, estávamos bastante interessados em definir a quantidade mínima de espectadores necessários para proporcionar uma experiência de visualização íntegra. Vinte e dois usuários? Sem chance... Então, na teoria, seria possível deixar quantas pessoas conectadas sob essas condições? Em parceria com nossos amigos dos Esports, concluímos que, com 15 usuários conectados, poderíamos oferecer servidores de 128 ticks estáveis, dar aos Esports um total de 5 lugares para espectadores e criar a experiência da transmissão. Tudo isso foi possível graças à margem presente na taxa de quadros padrão dos servidores.

Determinando a causa

Em seguida, os desenvolvedores do VALORANT continuaram investigando a situação para entender melhor o problema e descobrir a causa da degradação. Quando surge algo grande desse jeito, é improvável que seja causado por vários sistemas.=

Nós achamos que íamos ter sorte, encontrar logo a causa do bug e implementar uma correção antes do início do Champions 2022. Infelizmente, não foi bem assim.

Corrigindo a degradação

A degradação foi identificada no dia 25 de agosto de 2022 e resolvida uma semana depois. Ao longo de 7 dias, muitos engenheiros do VALORANT foram convocados para explorar várias possíveis soluções para o bug.

No primeiro dia de investigação, determinamos qual parte do código-base era culpado pela degradação: a Replicação (não, não estou falando do modo de jogo). Por meio da Replicação, o Unreal assegura que haja consistência entre os servidores e os usuários ao sincronizar propriedades de Atores e Componentes. Você pode ler mais sobre o sistema de Replicação do Unreal aqui (em inglês).

Nossa prioridade inicial era analisar o que mudou da 5.02 para a 5.03 para encontrarmos evidências do que poderia ter sido alterado na Replicação. Foi difícil, já que tínhamos acabado de atualizar para o Unreal Engine 4.26 e, portanto, diversas partes centrais do motor do jogo haviam sido modificadas. (Para ler mais sobre como o VALORANT atualiza o Unreal Engine, confira estes tweets em inglês do Líder Técnico do VALORANT, Marcus Reid.)

Não foi fácil investigar a Replicação. Afinal, não é um sistema que exija tanta atenção dos desenvolvedores do VALORANT, porque já tínhamos estabelecido boas práticas há muitos anos. Além disso, ele não foi criado por engenheiros da Riot. Alteramos o motor-base para satisfazer nossos requisitos, mas não é comum ter um conhecimento profundo sobre o assunto.

Logo depois, analisamos sistematicamente várias partes do jogo para avaliarmos as diferenças entre a 5.02 e a 5.03 com o objetivo de chegar à causa. Utilizamos várias ferramentas de perfilamento do Unreal e outras da própria Riot para compararmos características de desempenho entre as duas atualizações. No fim, chegamos à conclusão de que os personagens, as armas e as habilidades estavam sendo replicados com uma frequência bem maior na 5.03 do que na 5.02.

Exploramos duas possibilidades na época:

  1. Encontrar A degradação e corrigi-la. Esse era o cenário ideal que nós nos esforçamos para atingir.
  2. Encontrar outras oportunidades para melhorar o desempenho. Se encontrássemos outros pontos de melhoria (o suficiente para reaver a taxa de quadros perdida), poderíamos voltar a controlar o desempenho mesmo que não conseguíssemos identificar e solucionar o problema original.

Vários grupos de engenheiros mergulharam numa investigação para testar possíveis correções e melhorias. Durante o processo, muitos deles se familiarizaram com a Replicação e se especializaram nela. Dessa vez, eles se depararam com diversas oportunidades para aperfeiçoar o desempenho, mas elas foram consideradas arriscadas demais para serem implementadas, então acabaram sendo guardadas para futuros trabalhos.

Em 1º de setembro de 2022, encontramos o problema: uma única linha de código da atualização do motor de jogo do UE 4.26 fez com que a Replicação ocorresse com uma frequência bem maior sob certas condições que aparecem bastante no VALORANT. Isso havia provocado uma degradação de desempenho que piorava consideravelmente à medida que mais pessoas se conectavam ao servidor. Embora a falha fosse perceptível em partidas-padrão com 10 jogadores, ela tornava o jogo impossível de ser jogado com 22 indivíduos.

A degradação foi identificada, vimos que a correção dela não era arriscada e ficamos bem confiantes. Aquela era a melhor situação possível. Não comemoramos logo de cara, mas fizemos uma alteração satisfatória no nosso código.

Após a degradação

Depois que a degradação foi identificada e corrigida, nós realizamos inúmeros testes para confirmar se o desempenho tinha voltado a corresponder às expectativas e garantir que a mudança não havia causado nenhum bug.

A implementação da correção

Embora a correção tenha sido identificada no dia 1º de setembro de 2022, as alterações só foram introduzidas ao ambiente dos nossos Esports no dia 8 do mesmo mês, após a Fase de Grupos. Nossos objetivos eram mitigar riscos, dando mais tempo para testes e validação, e reduzir transtornos para o pessoal em Istambul

Implementamos a correção no ambiente de jogo na Atualização 5.05, gerando melhoras consideráveis.

Our live environments had the fix deployed in patch 5.05, leading to significant improvements.

Depois do Champions 2022

A diversão não acabou na 5.05. Durante a semana em que investigamos o sistema de Replicação, descobrimos muitas oportunidades de desempenho e fizemos planos para continuar a desenvolvê-las. Na época, era arriscado demais implementá-las, já que não resolviam a causa da falha. Depois que corrigimos a degradação original, aproveitamos nossa recém-adquirida competência quando o assunto é Replicação para abordar diversas áreas que achávamos que turbinariam ainda mais o desempenho dos servidores.

Esses esforços geraram melhorias de desempenho expressivas no geral, reduzindo em 15% a taxa de quadros dos servidores em comparação aos números que víamos na época pré-degradação. As mudanças também diminuíram a variância em todas as regiões, aumentando a estabilidade da taxa de quadros.

Desde a Atualização 5.07, mais de 99,3% dos quadros dos servidores vêm satisfazendo nossos requisitos rigorosos de 128 ticks, ou seja, a comunidade está desfrutando dos servidores mais estáveis e consistentes desde o lançamento do VALORANT.

(Esse gráfico mostra as taxas de quadros dos servidores por atualização. As linhas representam o número de pessoas, indo das partidas comuns com 10 jogadores até as não padrão com o máximo de 22 usuários. Após o erro grave nas Atualizações 5.03 e 5.04, corrigimos a falha e restauramos os valores normais na 5.05. Outras melhorias significativas foram lançadas com a 5.07, em que registramos um aprimoramento de 15% no desempenho dos servidores em comparação aos números pré-degradação.)

Aprendizados

Foi necessário um pequeno exército para resolver esse problema urgente de desempenho: uma dúzia de engenheiros, parceiros de Esports, parceiros de testes, produtores, líderes de equipes e a generosidade das equipes parceiras (que nos deram conselhos e orientações). Aprendemos bastante com esse incidente, além de encontrarmos lacunas nos nossos processos que queremos solucionar.

  • Monitoramento de partidas não padrão: nós voltamos a maior parte da nossa atenção à experiência típica do VALORANT no modo padrão com 10 jogadores. Nossos dados não mostravam falhas de acordo com o número de pessoas conectadas, encobertando a magnitude da degradação até criarmos novos gráficos. Desde então, elaboramos outros processos para verificar e compreender as características do desempenho nas partidas não padrão do VALORANT com mais de 10 indivíduos.
  • Aumento da abrangência dos testes em partidas não padrão: embora o modo de jogo padrão 5x5 vá continuar sendo nossa maior prioridade, queremos criar novos processos e procedimentos de teste para entender melhor o desempenho dos servidores em ambientes com 22 pessoas. A amostra de partidas com 22 pessoas é pequena comparada ao resto, portanto, para coletar essas informações, temos que realizar testes regularmente. Agora, é habitual realizar testes com 22 usuários a cada lançamento, e não apenas antes de grandes torneios. Provavelmente, também vamos precisar de procedimentos de teste mais elaborados.
  • Incentivo ao desenvolvimento de especialistas: mesmo que isso exija um investimento de tempo considerável, desenvolver especialistas na equipe ajuda a preencher lacunas de conhecimento e costuma fazer todo mundo evoluir. Vários engenheiros viraram especialistas em Replicação enquanto tentavam corrigir a degradação, o que acabou sendo um ótimo investimento de recursos.
  • Redução dos riscos para os torneios: nós arriscamos nossa pele realizando o Champions 2022 numa atualização recente, ainda mais considerando o fato de que tínhamos acabado de integrar uma versão nova do Unreal Engine. Embora queiramos garantir que as mudanças na mecânica de jogo (ex.: balanceamentos, personagens etc.) cheguem a tempo para grandes torneios, é improvável que os próximos sejam jogados com as mais recentes. Na pior das hipóteses, vamos averiguar os riscos nas situações em que isso for inevitável.

Você pode ter certeza de que vamos continuar fazendo melhorias como essa para tornar sua experiência no VALORANT ainda mais incrível. Curta os servidores de 128 ticks e bons abates!

Estamosesperando

Conteúdo relacionado