# Guia do Lag em Jogos (Game Lag White Paper) > Guia que explica 228 causas de lag em jogos online (engasgos, teleporte, rubber banding, avanço rápido, input lag, travamento, desconexão e outros), da sua tela até o banco de dados do servidor, organizadas em 13 camadas e 3 temas (design de sincronização, problemas que só afetam alguns, retransmissão TCP). Os exemplos vêm principalmente de MMOs, mas a maior parte vale para jogos online de qualquer gênero. Cada causa traz as três etapas por quê → efeito → na tela, os sintomas relacionados, números de referência, quem resolve (equipe de desenvolvimento, equipe de infraestrutura ou externo) e o que cada equipe deve fazer, o formato do gráfico e como confirmar, além de fontes confiáveis (RFCs, documentação oficial de kernel, SO, nuvem, engines e bancos de dados, artigos científicos). Cada causa tem um ID (ex.: mem-gc) e uma página própria (ex.: https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/mem-gc.html). Os números são valores típicos de um ambiente de produção comum; valores padrão e versões têm base nas fontes de cada página de causa. Para citar, use o endereço da página da causa. Licença MIT. O original é em coreano, e esta versão é uma tradução: https://jungrok5.github.io/mmo-lag-anatomy/ ## Documentos - [Conteúdo completo (Markdown)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/llms-full.txt): Todas as causas, sintomas, responsáveis, termos e fontes em um único arquivo - [Versão em texto](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/text.html): O mesmo conteúdo em uma única página HTML que funciona sem JavaScript - [Guia do Lag em Jogos](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/): Versão interativa, com figuras e simulações para você mexer ## Causas por sintoma - [Engasgos](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/s/stutter.html): 60 causas. O movimento perde a fluidez e alterna breves paradas com movimento, várias vezes seguidas. - [Teleporte](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/s/teleport.html): 47 causas. O personagem vai de uma vez para uma posição distante, sem mostrar o trajeto. - [Rubber banding](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/s/rubber.html): 14 causas. Seu personagem avança e é puxado de volta para o ponto por onde acabou de passar. - [Avanço rápido](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/s/burst.html): 36 causas. A tela, que estava parada, volta a andar, e todos os movimentos, golpes e danos atrasados passam depressa, de uma vez só. - [Câmera lenta](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/s/slowmo.html): 24 causas. Tudo se move devagar. O cast das skills e o movimento dos monstros parecem esticados. Dependendo do design do servidor, a velocidade continua a mesma e o problema aparece como engasgos ou teleporte. - [Input lag](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/s/delay.html): 76 causas. Existe uma demora entre apertar o botão e ver o resultado. A imagem em si pode continuar fluida. - [Travamento](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/s/freeze.html): 67 causas. Tudo na tela para por um instante (de 0,5 s a alguns segundos) e depois volta a se mover. - [Ação perdida / rollback](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/s/dropped.html): 36 causas. Uma ação que você com certeza fez é desfeita, ou o resultado é revertido bem depois. - [Desconexão](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/s/disconnect.html): 51 causas. A conexão cai durante a partida e o jogo volta para a tela de login ou para a janela de reconexão. - [Não conecta / loading infinito](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/s/noconnect.html): 45 causas. Você não consegue entrar no jogo ou fica preso na tela de carregamento ou de entrada. - [Invisível / entidade fantasma](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/s/invisible.html): 20 causas. NPCs, monstros ou jogadores que deveriam estar ali não aparecem só na sua tela, ou entidades que já sumiram continuam só na sua tela. ## L1 Processo do jogo no cliente - [Picos de frame time](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-hitch.html): Um frame leva várias vezes mais que o normal para ser calculado, e a imagem para por um instante. - [Coleta de lixo (GC) no cliente](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-gc.html): O jogo inteiro para enquanto a memória usada e descartada (lixo) é recuperada. O sinal típico são engasgos em intervalos regulares. - [Carregamento síncrono e compilação de shaders na thread principal](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-sync-load.html): O jogo para porque precisa ler arquivos e compilar shaders logo antes de desenhar uma área, um monstro ou um efeito que aparece pela primeira vez. - [Streaming de assets atrasado por disco lento](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-asset-stream.html): Em armazenamento lento, como um HDD, a leitura de texturas e modelos de um mundo aberto não acompanha o deslocamento do personagem: entidades aparecem tarde ou o jogo engasga esperando a leitura. - [Carga de renderização com muitos personagens](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-crowd.html): Quando centenas de jogadores aparecem na mesma tela, como em guerras de castelo ou world bosses, o custo de desenhar tudo passa do que o aparelho aguenta. - [Gargalo no processamento de pacotes na thread principal](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-net-mainthread.html): Se o cliente processa só uma quantidade fixa de pacotes recebidos por frame, os pacotes que chegam em massa vão sendo empurrados para os frames seguintes. - [Buffer de interpolação ausente ou curto demais](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-no-buffer.html): Se o cliente desenha os pacotes do servidor assim que chegam, o jitter (variação no intervalo de chegada dos pacotes) aparece direto na tela. - [Extrapolação excessiva (dead reckoning)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-extrap.html): Enquanto os pacotes não chegam, o cliente continua mostrando o personagem andando na última velocidade conhecida e, quando percebe o erro, puxa de volta. - [Divergência na predição do cliente](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-predict.html): Seu cliente mostra o movimento antes da confirmação; se o servidor calcular de outro jeito, seu personagem é puxado. - [Espiral de recuperação do timestep fixo](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-fixed-step.html): Depois de uma parada, o jogo tenta fazer de uma vez os cálculos atrasados e, por causa desse cálculo, atrasa de novo. - [Erro na sincronização do relógio](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-clock.html): Se a hora do servidor estimada pelo cliente estiver errada, o momento da interpolação e a decisão sobre o cooldown ficam desalinhados com o servidor. - [Perda de precisão do tempo em float](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-float-time.html): Se a hora do jogo fica guardada em um formato decimal de baixa precisão (float), quanto mais tempo o jogo fica aberto, pior fica a resolução temporal (a menor diferença de tempo que dá para distinguir), e movimentos e efeitos começam a tremer. - [V-Sync e fila de renderização](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-vsync.html): O input lag aumenta enquanto alguns frames já desenhados pela GPU ficam em uma fila, esperando o ciclo do monitor para serem exibidos. - [Vazamento de memória no cliente](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-leak.html): Quanto mais tempo o jogo fica aberto, mais memória ele usa; vai ficando lento e, no fim, é fechado à força. - [Crash do cliente](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-crash.html): Um erro não tratado fecha o jogo. Para o jogador, parece uma desconexão, mas o servidor está normal. - [Verificações do anti-cheat (módulo de segurança do jogo)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/cg-anticheat.html): Para impedir trapaças, um módulo de segurança roda junto com o jogo e faz verificações periódicas. Se a verificação for pesada ou se o heartbeat (sinal periódico de que o cliente está ativo) trocado com o servidor de segurança atrasar, o jogo engasga ou a conexão cai. ## L2 SO e dispositivo do cliente - [Processos em segundo plano ocupando a CPU](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-background.html): Quando a varredura do antivírus, o Windows Update, um programa de transmissão ao vivo ou um vídeo no navegador ocupam os núcleos, a thread do jogo fica esperando, sem receber tempo de CPU. - [Modo de economia de energia e thermal throttling](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-power.html): No modo bateria do notebook, no modo de economia de energia do celular ou com o aparelho quente, a CPU e a GPU ficam mais lentas. O sinal típico do aquecimento é o jogo começar bem e ficar lento só depois de um bom tempo. - [Resolução do timer](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-timer.html): O timer padrão do Windows trabalha em passos de 15,6 ms, então um “espere só 1 ms” na prática vai até o próximo ciclo do timer, podendo chegar a 15,6 ms. - [App mobile em segundo plano](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-mobile-bg.html): Se você tira o app da tela por um instante para ver uma notificação, o SO o suspende (suspend) alguns segundos depois e, nesse meio-tempo, o servidor desconecta você. - [Troca Wi-Fi ↔ LTE/5G](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-netswitch.html): Quando você sai de casa, o Wi-Fi cai e o celular passa para LTE/5G; seu endereço IP muda e a conexão existente deixa de valer. - [Inspeção de pacotes por software de segurança](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-security.html): Quando o antivírus ou o firewall inspeciona cada pacote, a latência aumenta e, se a inspeção for agressiva demais, ele toma o jogo por um ataque e o bloqueia. - [Estouro do buffer de recepção](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-rcvbuf.html): Se o jogo está ocupado e demora para tirar os pacotes do socket (a interface de envio e recepção de rede oferecida pelo SO), o buffer do SO estoura. - [Pouca memória e swap no cliente](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-swap.html): Com dezenas de abas do navegador abertas junto com o jogo, o SO passa parte da memória do jogo para o disco. - [Falta de memória de vídeo (VRAM)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-vram.html): Quando as opções gráficas pedem mais memória do que a placa de vídeo tem, o SO tira texturas para a memória do PC e depois as traz de volta, e a imagem engasga. - [Varredura de Wi-Fi em segundo plano](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-wifi-scan.html): Enquanto o SO troca de canal periodicamente para procurar redes Wi-Fi próximas, a comunicação para por um instante. - [Economia de energia e problemas de driver da placa de rede](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-driver.html): Se a placa de rede ou o chip Wi-Fi entra em modo de economia de energia entre um pacote e outro, leva um tempo para voltar à ativa. - [Outros apps do mesmo dispositivo consumindo largura de banda](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-other-apps.html): Quando sincronização com a nuvem, downloads grandes ou patches de jogos rodam no mesmo PC, os pacotes do jogo esperam na fila. - [Limitação de processamento com a janela minimizada ou inativa](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-unfocused.html): Quando você olha outra janela ou minimiza o jogo, o jogo e o Windows passam a rodá-lo mais devagar para economizar energia. Ao voltar, os pacotes acumulados chegam de uma vez, ou a conexão já caiu. - [Interferência de programas de overlay](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-overlay.html): Mensageiros, launchers, gravadores e programas que mostram FPS entram no processo de renderização do jogo (hooking) para desenhar a própria UI por cima da tela. Cada frame ganha mais trabalho e, de vez em quando, o overlay entra em conflito com o jogo, causando engasgos ou o encerramento forçado do jogo. - [Latência da tela, do dispositivo de entrada e da geração de frames](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/co-display-input.html): Se o ping está normal, mas o controle parece pesado, o processamento de imagem da TV, o controle sem fio ou a geração de frames podem estar somando latência entre o comando e a tela. ## L3 Rede doméstica - [Interferência e sinal fraco no Wi-Fi](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/hn-wifi.html): Com sinal fraco ou interferência, o trecho sem fio precisa reenviar várias vezes, e a chegada dos pacotes fica irregular. - [Canal de Wi-Fi congestionado](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/hn-channel.html): Em lugares com dezenas de roteadores, como prédios de apartamentos, todos dividem o mesmo canal e esperam a vez de transmitir. - [Bufferbloat (fila do roteador)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/hn-bufferbloat.html): Quando alguém da família sobe um vídeo ou baixa um arquivo grande, a fila do roteador acumula centenas de ms de pacotes, e os pacotes do jogo esperam atrás deles. - [Expiração do mapeamento NAT](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/hn-nat.html): O roteador apaga da tabela NAT as conexões ociosas, sem tráfego por um tempo. É uma causa comum de a conexão cair no instante em que o jogador volta a se mexer depois de ficar parado. - [Roteador fraco ou superaquecido](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/hn-router.html): Quando um roteador barato recebe dezenas de dispositivos e milhares de conexões, o próprio roteador não dá conta de processar tudo. - [Handover entre antenas (em movimento)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/hn-handover.html): Ao se deslocar de ônibus ou metrô, a comunicação cai enquanto o celular troca de antena. - [Atraso na transição de estado RRC (economia de energia do rádio móvel)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/hn-rrc.html): Depois de um tempo sem comunicação, o celular coloca a conexão de rádio em estado de baixo consumo e, no pacote seguinte, demora para reativá-la. - [Sinal de celular fraco e áreas de sombra](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/hn-weak-cell.html): Em elevadores, subsolos e no interior de prédios, as retransmissões aumentam, a velocidade cai e, no fim, a conexão cai. - [Troca frequente 5G↔LTE (borda da cobertura 5G)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/hn-5g-flip.html): Dentro de prédios com sinal 5G fraco ou na borda da cobertura 5G, o celular alterna com frequência entre 5G e LTE e, a cada troca, o ping dá um pico ou a comunicação cai por um instante. - [Restrições em Wi-Fi público e rede corporativa](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/hn-captive.html): A página de login do Wi-Fi de um café ou o firewall da empresa bloqueiam a conexão do jogo. ## L4 Conexão de internet - [Atraso de propagação (distância física)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-distance.html): Mesmo a luz percorre só cerca de 200 mil km por segundo na fibra óptica. Um servidor distante é lento, por melhor que seja. - [Internet via satélite (órbita baixa ou geoestacionária)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-satellite.html): Na internet via satélite, o sinal precisa ir ao espaço e voltar. Com satélites geoestacionários, só a ida e volta já passa de 0,5 segundo. Satélites de órbita baixa como o Starlink costumam ser rápidos, mas no momento em que a rota é redistribuída a latência oscila e a conexão pode cair por um instante. - [Roteamento com desvio](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-routing.html): Por causa dos contratos de interconexão entre operadoras, o tráfego até um servidor próximo pode dar uma volta longa. - [Congestionamento no peering em horário de pico](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-peak.html): Mais ou menos entre 9 e 11 da noite, o tráfego de vídeo dispara e os links entre operadoras (peering) tendem a congestionar. - [Falha em cabo submarino ou link internacional](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-cable.html): Quando um cabo submarino se rompe, o tráfego faz desvios longos por semanas (às vezes meses) até o reparo, e os links que sobram ficam congestionados. - [Mudança de rota e convergência do BGP](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-bgp.html): Quando as informações de roteamento da internet mudam, pacotes se perdem enquanto as rotas convergem de novo, o que leva de alguns segundos a dezenas de segundos (raramente alguns minutos). - [Um caminho ECMP com defeito](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-ecmp.html): Operadoras e data centers mantêm vários caminhos para o mesmo destino e mandam cada conexão por um deles. Se só um caminho falha, só quem caiu nesse caminho continua com lag. - [Limitação de velocidade e gerenciamento de tráfego da operadora](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-shaping.html): Quando a franquia de dados acaba, ou em planos que gerenciam certos tipos de tráfego, os pacotes são atrasados ou descartados. - [Restrição de UDP e inspeção de pacotes por país ou operadora](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-udp-block.html): Algumas redes bloqueiam endereços e portas UDP específicos ou limitam a velocidade do UDP, e equipamentos de inspeção de pacotes filtram protocolos que não reconhecem. Jogos que se comunicam por UDP não conectam nessas redes ou caem com frequência. - [Qualidade ruim da linha](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-line.html): Mau contato nos conectores, fiação velha ou defeito no modem causam perda de pacotes constante e quedas periódicas da conexão. - [Falha ou lentidão no DNS](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-dns.html): Se o DNS, que traduz nomes de servidor em endereços, está lento ou falha, o jogo não encontra os servidores de login e de patch. - [Links compartilhados saturados por DDoS](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-ddos-path.html): Ataques volumosos contra a empresa do jogo, ou contra outro alvo na mesma rede, lotam os links compartilhados. - [IP compartilhado pela operadora (CGNAT)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-cgnat.html): Redes móveis e algumas operadoras fazem vários assinantes dividirem um mesmo IP e apagam em pouco tempo o mapeamento das conexões ociosas. - [Tráfego via VPN ou redutor de ping](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/isp-vpn.html): Com uma VPN ou um redutor de ping ligado, os pacotes passam pelos servidores intermediários (relays) dessa empresa. Se o relay estiver longe ou congestionado, a conexão pode até ficar mais lenta. ## L5 Equipamentos de rede do data center - [Tabela de sessões do firewall cheia](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dc-firewall.html): O firewall registra na tabela de sessões cada conexão que deixa passar, para rastreá-la. Quando a tabela enche, ele não aceita novas conexões. - [Desvio pela proteção contra DDoS e falsos positivos](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dc-ddos.html): Quando o tráfego é desviado para um centro de scrubbing para barrar ataques, a rota fica mais longa, e às vezes jogadores legítimos são tomados por atacantes e bloqueados. - [Timeout de inatividade do load balancer](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dc-lb-idle.html): O load balancer apaga conexões ociosas depois de um tempo definido. O jogo continua tratando a conexão como ativa e, de repente, vem a desconexão. - [Expiração do rastreamento de conexões no grupo de segurança da nuvem](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dc-cloud-conntrack.html): O firewall acoplado ao servidor na nuvem (grupo de segurança) também rastreia conexões, e as entradas de rastreamento de conexões ociosas expiram depois de um tempo definido. Mesmo em servidores acessados direto, sem load balancer, o jogador que ficou parado pode sofrer desconexão. - [Limite de conexões e portas do gateway NAT na nuvem](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dc-nat-gateway.html): As conexões que servidores em uma sub-rede privada abrem para fora (autenticação da plataforma, pagamentos, APIs externas) passam pelo gateway NAT, que troca o endereço e a porta. Se as conexões simultâneas para o mesmo destino passam do limite de portas do gateway, as novas conexões falham. - [Desbalanceamento do load balancer e health check enganoso](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dc-lb-imbalance.html): As conexões se concentram em um único servidor, ou jogadores continuam sendo mandados para um servidor que já caiu. - [Microburst no switch](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dc-microburst.html): Quando vários servidores mandam pacotes para milhares de jogadores no mesmo instante, o buffer pequeno da porta do switch onde esse tráfego converge transborda em menos de 1 ms. - [Saturação do link do data center](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dc-uplink.html): Quando distribuição de patches, envio de logs ou backups usam o mesmo link do jogo, o link lota. - [Failover de equipamento de rede](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dc-failover.html): Quando um roteador ou firewall falha e o tráfego passa para o equipamento reserva (failover), o jogo trava para todo mundo por alguns segundos. - [Cabo com defeito ou erros na porta](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dc-bad-cable.html): Com transceptor óptico ou cabo com defeito, uma proporção constante dos pacotes que passam por aquele caminho chega corrompida. - [MTU incompatível (só os pacotes grandes somem)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dc-mtu.html): Se o MTU (o tamanho máximo que dá para enviar de uma vez) diminui em algum trecho do caminho e os avisos de pacote grande demais são bloqueados, só os pacotes grandes continuam sumindo. ## L6 Placa de rede do servidor - [Interrupções da NIC concentradas em um só núcleo](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/nic-irq.html): Se a NIC manda todas as interrupções de chegada de pacote para um único núcleo de CPU, esse núcleo vira gargalo. - [Ring buffer insuficiente](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/nic-ring.html): Se o ring buffer, onde a NIC guarda os pacotes por um instante, é pequeno, um pico repentino faz o buffer transbordar e os pacotes são descartados. - [Coalescência de interrupções excessiva](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/nic-coalesce.html): Para poupar a CPU, a NIC junta pacotes e avisa uma vez só por lote. Os pacotes chegam atrasados pelo tempo gasto juntando. - [Limite de PPS da nuvem excedido](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/nic-cloud-pps.html): Cada tipo de instância na nuvem tem limites de pacotes por segundo e de largura de banda, e o excedente é descartado em silêncio. - [Saturação da largura de banda da NIC](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/nic-saturate.html): Usar uma placa de 1 Gbps ou 10 Gbps no limite faz a fila de transmissão crescer até os pacotes serem descartados. - [Overhead de virtualização e noisy neighbor](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/nic-noisy.html): Quando outras máquinas virtuais no mesmo servidor físico usam muita rede ou CPU, o processamento do servidor do jogo atrasa em momentos irregulares. - [Manutenção do host na nuvem e live migration](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/nic-host-maintenance.html): Quando o provedor de nuvem faz manutenção em um servidor físico (host), ele move as VMs para outro host (live migration) ou as pausa por um momento. Nesse tempo o servidor inteiro para, e se a pausa for longa as conexões caem. - [Problemas de driver ou firmware da NIC](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/nic-reset.html): Quando um bug no driver ou um recurso com mau funcionamento faz a placa parar de responder, todo o tráfego de entrada e saída é interrompido enquanto ela reinicia. - [Atraso pela espera de agregação GRO/LRO](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/nic-offload.html): GRO e LRO são recursos que juntam vários pacotes em um só para reduzir a carga na CPU. Dependendo da configuração, um pacote pequeno do jogo pode esperar um pouco pelo próximo pacote para ser agrupado com ele. ## L7 SO do servidor (kernel) - [Estouro da fila de conexões (backlog)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-backlog.html): Quando dezenas de milhares de jogadores se conectam ao mesmo tempo logo após a manutenção, a fila de conexões (backlog) do kernel transborda e as tentativas de conexão são descartadas. - [Limite de descritores de arquivo](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-fd.html): Cada conexão precisa de um descritor de arquivo (fd, o número que o SO atribui a cada arquivo ou socket aberto), e o número de fds que um processo pode abrir é limitado. - [Buffer de socket do kernel insuficiente](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-sockbuf.html): Com buffers de envio e recepção pequenos, quando chega um burst de tráfego, os pacotes recebidos por UDP são descartados e o envio TCP fica bloqueado por falta de espaço no buffer. - [Excesso de threads e troca de contexto](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-context.html): Com muito mais threads do que núcleos, o SO gasta CPU só para revezar as threads na execução. - [CPU steal (máquina virtual)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-steal.html): Enquanto o servidor físico (hypervisor) cede por um momento o tempo de CPU da máquina virtual a outra máquina virtual (CPU steal), o servidor do jogo fica parado. - [Throttling de CPU em contêiner (cota do CFS)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-cpu-quota.html): Quando o contêiner tem limite de CPU e gasta toda a cota dentro do período definido (em geral 100 ms), ele fica parado à força pelo resto do período (throttling). - [Picos de latência pelo gerenciamento de energia do servidor (C-states e ajuste de frequência)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-cstate.html): Núcleos de CPU ociosos entram em estados profundos de economia de energia (C-states) e baixam a frequência para economizar eletricidade. Quando chega um pacote ou dispara um timer, o núcleo leva tempo para despertar e subir a frequência, e isso soma latência ao processamento de pacotes pequenos. - [OOM killer](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-oom.html): Quando a memória acaba, o Linux escolhe o processo que mais usa memória e o mata à força. Em geral, é o servidor do jogo. - [Pausas por recuperação e compactação de memória](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-reclaim.html): O processo fica parado enquanto o SO compacta a memória para montar páginas grandes (huge pages) ou recupera memória livre. - [Salto do relógio do sistema (step do NTP)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-timejump.html): Quando o relógio do servidor é ajustado alguns segundos para frente ou para trás de uma vez, os timers que dependem do relógio do sistema disparam todos juntos ou ficam parados. - [Tarefas agendadas](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-cron.html): Compressão de logs, backups e varreduras de segurança que rodam todo dia no mesmo horário ocupam CPU e disco. - [Mudança de desempenho após atualização de SO, kernel, driver ou firmware](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-os-update.html): É quando o código do jogo continua o mesmo, mas o servidor fica lento depois de uma atualização de SO, kernel, driver ou firmware. A atualização pode mudar valores padrão, o escalonador, as mitigações de vulnerabilidades da CPU (mitigations) e o comportamento de drivers. - [Tabela do conntrack cheia no servidor](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-conntrack.html): Quando a tabela de rastreamento de conexões (conntrack), em que o firewall do Linux registra todas as conexões, chega ao limite, os pacotes novos são descartados. - [Esgotamento de portas efêmeras em conexões entre servidores](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/so-ports.html): Quando o servidor do jogo abre e fecha conexões curtas com frequência para o BD ou outros servidores, as conexões encerradas seguram a porta por um tempo e não dá para abrir conexões novas. ## L8 Sockets e protocolos - [HOL blocking no TCP](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-hol.html): Para manter a ordem, o TCP não entrega ao jogo os pacotes que chegaram depois enquanto não receber de novo o pacote perdido. - [RTO do TCP e backoff exponencial](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-rto.html): Cada vez que uma retransmissão falha de novo, o tempo de espera dobra, e uma queda curta da conexão vira uma pausa longa. - [Algoritmo de Nagle + ACK atrasado](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-nagle.html): O algoritmo de Nagle, que junta pacotes pequenos antes de enviar, e o ACK atrasado, que demora para mandar o ACK, se combinam, e cada mensagem escrita em partes atrasa 40–200 ms. - [Envio bloqueante por causa de cliente lento](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-block-send.html): Quando o buffer de envio de um jogador com conexão lenta enche e o servidor envia no modo bloqueante (em que a chamada só retorna quando abre espaço no buffer), a thread do servidor fica esperando esse único jogador. - [Política para clientes lentos (slow consumer)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-slow-client.html): Para um cliente cujos dados a enviar não param de acumular, o servidor descarta as atualizações antigas ou derruba a conexão. - [Keepalive com valor padrão de 2 horas](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-keepalive.html): Quando o outro lado some sem sinal de encerramento, o TCP só percebe muito depois. O keepalive (recurso do TCP que verifica se uma conexão ociosa continua viva) vem desligado por padrão e, mesmo ligado, só começa a verificar depois de 2 horas de inatividade. - [Fragmentação IP de pacotes UDP](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-fragment.html): Um pacote UDP maior que o MTU (o tamanho máximo que dá para enviar de uma vez) é fragmentado na camada IP, e perder um só fragmento faz o pacote inteiro ser descartado. - [Configuração de retransmissão do UDP confiável](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-reliable-udp.html): Se as regras de retransmissão implementadas sobre o UDP forem conservadoras demais, a recuperação demora. Se forem agressivas demais, congestionam ainda mais a conexão. - [Slow start após inatividade](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-slowstart.html): Depois de um tempo ocioso, o TCP volta a reduzir a janela de congestionamento (quanto dá para enviar de uma vez) e, quando de repente precisa enviar muitos dados, divide o envio em várias rodadas. - [Queda brusca da taxa de envio pelo controle de congestionamento](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-congestion.html): O TCP trata a perda como sinal de congestionamento e reduz a taxa de envio em 30–50%. Ele reage do mesmo jeito à perda no Wi-Fi. - [Perda dos últimos dados no encerramento forçado por RST](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-linger.html): Quando o servidor fecha a conexão às pressas, o último aviso enviado ou o sinal de salvamento concluído se perde. - [Arquitetura de I/O bloqueante](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-blocking-io.html): Numa arquitetura em que a thread não pode fazer mais nada enquanto espera um socket, tudo fica mais lento à medida que entram mais jogadores. - [Distribuição desbalanceada do SO_REUSEPORT](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-reuseport.html): Quando vários processos dividem a mesma porta, o kernel escolhe o processo responsável por cada conexão pelo hash do endereço e não muda mais. Se um desses processos para, só os jogadores atribuídos a ele ficam esperando. - [Erro WSAECONNRESET em socket UDP no Windows](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sk-udp-connreset.html): Quando um servidor Windows envia UDP para um cliente que já saiu, volta um aviso de “porta inexistente” (ICMP). Esse aviso faz a próxima chamada de recepção terminar com erro, e, se o código do servidor tratar esse erro como falha do próprio socket, todos que usam aquele socket são afetados. ## L9 Processo do jogo no servidor - [Estouro do tick](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-tick-overrun.html): Quando o trabalho de um tick passa do orçamento, o intervalo entre ticks do servidor se alonga, e a área inteira fica lenta ou com engasgos. - [Explosão N² no cálculo de visibilidade (AOI)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-aoi.html): Se o servidor compara todos com todos para saber quem pode ver quem, quando o número de jogadores aumenta 10 vezes, o cálculo aumenta 100 vezes. - [Explosão de broadcast](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-broadcast.html): Se o movimento de cada jogador é enviado a todos que o veem, o número de atualizações a enviar cresce com o quadrado do número de jogadores reunidos. - [Sobrecarga de zona em thread única (hotspot)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-hotzone.html): Numa arquitetura em que cada área fica com uma thread, quando todo mundo se junta num lugar, só aquele núcleo vai a 100%. - [Contenção de lock](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-lock.html): Quando várias threads esperam o mesmo lock para usar os mesmos dados, só uma roda por vez, por mais threads que se acrescentem. - [Deadlock](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-deadlock.html): Quando duas threads esperam, cada uma, o lock que a outra segura, as duas ficam paradas para sempre. - [Chamadas síncronas na thread do jogo](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-sync-call.html): Se o tick espera uma resposta do BD ou uma escrita em arquivo, todo o andamento do jogo no servidor para por esse tempo. - [Acúmulo na fila de mensagens](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-queue.html): Quando os pedidos chegam mais rápido do que são processados e se acumulam na fila, os últimos da fila só são processados segundos depois ou são descartados. - [Timers disparando todos ao mesmo tempo](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-timer-burst.html): Se todos os respawns de monstros, todas as expirações de buff e as recompensas da hora cheia caem no mesmo tick, aquele tick fica dezenas de vezes mais pesado. - [Tempestade de pathfinding](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-pathfinding.html): Quando centenas de monstros perseguem jogadores ao mesmo tempo calculando rotas, o consumo de CPU é grande. - [Custo de serialização e compressão](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-serialize.html): Converter os dados a enviar em bytes e comprimi-los também gasta CPU, e com muitos jogadores esse custo explode. - [Crash do servidor](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-crash.html): Quando um erro não tratado derruba o processo do servidor, todos que estavam naquele servidor são desconectados ao mesmo tempo. - [Esgotamento do pool de threads](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-threadpool.html): Quando todas as worker threads que processam tarefas ficam presas em trabalhos lentos, os pedidos novos ficam esperando indefinidamente. - [Loop infinito e lógica descontrolada](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-infinite-loop.html): Quando um bug impede um tick de terminar, o servidor para e o watchdog o reinicia à força. - [Combate concentrado em um só alvo (world boss)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-hot-entity.html): Quando centenas de jogadores atacam o mesmo boss ao mesmo tempo, o cálculo daquele boss se concentra num só ponto, e as informações de cada golpe vão para todos que estão vendo. - [Avalanche de spawns ao entrar em área lotada](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-spawn-burst.html): Quando o jogador se teletransporta para uma cidade lotada, o servidor precisa enviar de uma vez a aparência, o equipamento e o estado das centenas de jogadores que acabaram de entrar no campo de visão. - [Acúmulo de entidades (itens e invocações não removidos)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-entity-buildup.html): Quando itens no chão, invocações e timers encerrados que deveriam sumir não são limpos e se acumulam, quanto mais tempo o servidor fica ligado, mais trabalho cada tick tem. - [Mudança no padrão de tráfego após um patch](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sp-patch-traffic.html): Quando novos conteúdos, efeitos e campos sincronizados aumentam o tamanho e a frequência dos pacotes, um servidor que ia bem passa a bater nos limites de MTU, largura de banda e número de pacotes depois do patch. ## L10 Memória - [Pausa stop-the-world do GC no servidor](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/mem-gc.html): Para coletar o lixo, um servidor em Java ou C# interrompe todas as threads (stop-the-world), e o servidor inteiro fica parado enquanto isso dura. - [Pausa do GC na engine de script](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/mem-script-gc.html): Mesmo em um servidor em C++, se quests, IA e skills rodam em uma linguagem de script como Lua, a zona fica parada enquanto o GC da engine de script roda. - [Pico de alocação](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/mem-alloc.html): Quando um evento cria objetos temporários em grande quantidade, o GC roda com muito mais frequência que o normal. - [Vazamento de memória](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/mem-leak.html): Memória que não é liberada vai se acumulando aos poucos e, depois de alguns dias, faz o GC rodar sem parar, causa swap ou leva a um encerramento forçado. - [GC thrashing (pouca folga no heap)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/mem-gc-thrash.html): Quando os dados vivos chegam perto do limite do heap, o GC roda, mas quase não tem o que recuperar, e passa a se repetir sem parar. - [Swap](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/mem-swap.html): Quando falta memória e o SO manda parte dela para o disco, cada uso dessa memória passa a esperar pelo disco, que é mais de 1.000 vezes mais lento. - [Cache miss](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/mem-cache-miss.html): Quando os dados estão espalhados pela memória, a CPU precisa ir até a RAM, que é lenta, e esperar a cada acesso. - [Fragmentação de memória](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/mem-fragment.html): Quando alocações e liberações repetidas quebram o espaço livre em pedaços pequenos, o processo passa a ocupar muito mais memória do que realmente usa. - [Acesso a memória NUMA remota](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/mem-numa.html): Em servidores com duas CPUs, usar a memória ligada à outra CPU deixa o acesso mais lento. ## L11 Disco - [Escrita síncrona de logs](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dk-sync-log.html): Se a thread do jogo espera o disco confirmar cada linha de log, o jogo também para quando o disco está ocupado. - [Tempestade de fsync](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dk-fsync.html): Pedir que os dados sejam gravados “de verdade” no disco leva de 0,1 ms a dezenas de ms por chamada, conforme o disco, e, quando os pedidos se acumulam, a fila cresce. - [Esgotamento dos créditos de burst do disco na nuvem](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dk-burst.html): Alguns discos na nuvem e instâncias pequenas têm créditos de burst, que permitem passar do desempenho base por um tempo; quando o período de uso intenso se prolonga e os créditos acabam, a velocidade cai de repente. - [Limite de IOPS e saturação da fila](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dk-iops.html): Quando as requisições passam do que o disco consegue atender em 1 segundo, a fila cresce e a latência dispara. - [Disco cheio](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dk-full.html): Quando logs e dumps se acumulam e o disco enche, as escritas falham e, se o código não estiver preparado para isso, o servidor cai. - [Backup, compressão e varreduras](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dk-backup.html): Quando backups de madrugada, compressão de logs e varreduras de segurança monopolizam o disco, as leituras e escritas do servidor do jogo ficam na fila. - [Lazy loading no servidor](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dk-lazy-load.html): Se o servidor lê do disco os dados de uma dungeon ou de um mapa só quando alguém pede pela primeira vez, todos ficam parados durante aquele tick. - [Gravação de core dump](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dk-coredump.html): Quando o servidor cai, gravar no disco vários GB de memória pode atrasar o reinício em vários minutos. - [Latência de seek do HDD](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/dk-hdd.html): No HDD, a cabeça de leitura precisa se mover sobre o prato (seek), então cada leitura ou escrita de dados espalhados leva perto de 10 ms. ## L12 Banco de dados - [Query sem índice](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-no-index.html): Sem índice, para achar as linhas que atendem à condição é preciso ler a tabela inteira (full scan). - [Contenção de lock em hot row](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-hot-row.html): Quando todos tentam alterar a mesma linha (baú da guilda, item popular na casa de leilões, contador global do servidor), só um de cada vez consegue o lock. - [Deadlock no banco de dados](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-deadlock.html): Quando duas transações (operações do BD processadas como um bloco único) esperam, cada uma, pela linha em que a outra pôs lock, o BD cancela uma delas à força. - [Esgotamento do pool de conexões](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-pool.html): O número de conexões abertas com o BD é fixo; quando queries lentas ocupam as conexões, as demais requisições esperam. - [Atraso de replicação](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-replica-lag.html): Com as escritas no BD primário e as leituras em uma réplica, se a réplica fica para trás, o que acabou de ser gravado não aparece. - [Checkpoint e flush de log](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-checkpoint.html): O BD grava periodicamente no disco, de uma vez, as alterações acumuladas na memória, e nesse momento as queries ficam lentas. - [Cache frio (logo após reiniciar)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-cold-cache.html): Quando o BD reinicia, o cache em memória está vazio, e por um tempo todas as leituras vêm do disco. - [Avalanche de logins e queries N+1](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-login-storm.html): Se carregar um personagem exige dezenas de consultas separadas, dezenas de milhares de logins simultâneos viram milhões de queries. - [Jobs em lote pesados](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-batch.html): Rodar com o jogo no ar o cálculo de rankings, o envio de correio em massa ou a limpeza de dados antigos ocupa locks e disco. - [Failover do banco de dados](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-failover.html): Quando o BD primário cai, não dá para gravar durante a troca para o BD reserva, e os últimos dados que não foram replicados podem se perder. - [Perda de progresso por intervalo de salvamento longo](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-save-interval.html): Se, para reduzir a carga, o salvamento só acontece a cada alguns minutos, uma queda do servidor nesse intervalo apaga o progresso. - [Cache stampede](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-cache-stampede.html): Quando o cache de dados populares expira todo ao mesmo tempo, milhares de requisições caem de uma vez no BD. - [Transação aberta por muito tempo](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-long-tx.html): Uma transação aberta por muito tempo continua segurando locks, e o BD não consegue limpar as versões antigas dos dados (purge), então tudo vai ficando mais lento. - [Comandos lentos no Redis](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-redis-block.html): O Redis processa um comando de cada vez, então um único comando lento bloqueia todas as requisições que vêm atrás. - [Query lenta por mudança no plano de execução](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-plan-flip.html): O código continua igual, mas, se o BD muda a forma de executar a mesma query (plano de execução), uma query que levava 2 ms ontem passa a levar centenas de ms hoje. - [Lock de alteração de schema (DDL) em produção](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/db-ddl-lock.html): Adicionar uma coluna ou um índice a uma tabela com o jogo no ar exige um lock por um instante, e só esse lock pode deixar esperando todas as requisições que usam a tabela. ## L13 Arquitetura e operação de servidores - [Tráfego via gateway ou proxy](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/in-gateway.html): Quando há um servidor intermediário entre o cliente e o servidor do jogo, cada passagem por ele soma tempo de processamento, e esse servidor vira um ponto único de falha. - [Troca de mapa (transferência entre servidores)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/in-zone-transfer.html): Ao entrar em outro mapa ou dungeon, os dados do personagem passam para outro servidor, e esse processo gera atrasos e falhas. - [Falha em cascata](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/in-cascade.html): Quando um serviço fica lento, os servidores que o chamam ficam presos esperando a resposta, e até funções sem relação com ele param. - [Falha em servidor auxiliar](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/in-subservice.html): Quando falha um servidor que roda separado do servidor do jogo, como chat, party ou casa de leilões, só aquela função para de funcionar. - [Deploy e reinício](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/in-deploy.html): Quando os servidores são reiniciados para uma atualização sem transferir as conexões, os jogadores daquele servidor são desconectados, e os salvamentos logo antes do desligamento e as reconexões chegam todos de uma vez. - [Demora do autoscaling](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/in-autoscale.html): Quando o número de jogadores dispara, novos servidores sobem automaticamente, mas a preparação leva alguns minutos, e nesse meio-tempo os servidores existentes ficam sobrecarregados. - [Sobrecarga de logs e monitoramento](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/in-monitoring.html): Quando há uma falha, o volume de logs explode, e servidores que enviam logs de forma síncrona ficam ainda mais lentos por causa deles. - [Diferença de relógio entre servidores](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/in-clock-skew.html): Quando cada servidor tem o relógio um pouco diferente, as decisões sobre cooldown, buffs e início de eventos divergem de um servidor para outro. - [Excesso de macros e bots](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/in-bots.html): Bots mandam requisições com muito mais frequência que pessoas e consomem a capacidade de processamento do servidor. - [Dependência de serviços externos](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/in-external.html): Quando um serviço externo, como login da plataforma, pagamento ou verificação de identidade, fica lento ou para, o jogador fica preso nessa etapa. - [Erro de matchmaking ou de atribuição de região](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/in-region-match.html): Quando o jogador é mandado para um servidor de uma região distante, mesmo havendo uma região próxima, só o ping dele fica sempre alto, ainda que a conexão esteja boa. - [Certificado TLS expirado ou mal configurado](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/in-cert.html): Quando o certificado do servidor de login, de API ou de patch expira, ou falta o certificado intermediário, a conexão TLS dos clientes que se conectam a partir desse momento falha. - [Limite da fila de login e pouca tolerância para reconexão](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/in-login-queue.html): Quando as conexões se acumulam logo após um lançamento ou manutenção, a fila de login bate no limite e passa a recusar novas entradas, e quem estava esperando e cai por um instante perde a posição e volta para o fim da fila. ## Design de sincronização - [Feedback só depois da resposta do servidor (requisição-resposta)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-request-response.html): Ao apertar o botão, não há animação nem som até a resposta do servidor chegar. O ping vira o tempo de resposta. - [Protocolo com muitas idas e voltas em sequência (chatty)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-chatty.html): Se uma única ação precisa de várias idas e voltas ao servidor, uma depois da outra, o ping é multiplicado por esse número. - [Sem buffer de comandos para skills](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-no-queue.html): Se a próxima skill só pode ser usada depois que o servidor confirma o fim da anterior, cada combo ganha um tempo de ida e volta no meio. - [Janela de tempo curta consumida pelo ping](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-short-window.html): Quando o tempo para reagir é curto, como em esquiva, parry ou defesa, o ping consome esse tempo e surgem ataques impossíveis de evitar. - [Registro de acerto sem compensação de lag](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-no-lagcomp.html): Se o servidor decide o acerto só pela “posição atual no servidor”, a decisão diverge do que você viu na tela. - [Compensação de lag excessiva](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-lagcomp-overreach.html): Se o servidor volta no tempo demais a favor do atacante, quem leva o tiro é atingido mesmo já tendo se escondido. - [Autoridade do cliente](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-client-auth.html): Quando cada um decide o próprio resultado, sua tela fica fluida, mas os resultados divergem da tela dos outros e o jogo fica vulnerável a hacks. - [Lockstep esperando o jogador mais lento](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-lockstep.html): Em uma arquitetura em que todos calculam juntos o mesmo turno, se o input de um jogador atrasa, todos esperam. - [Erro de predição no netcode de rollback](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-rollback.html): O jogo prevê o input do adversário e mostra o resultado antes; se errou, volta no tempo e recalcula. Quanto maior o ping, maior o trecho que precisa voltar. - [Eventos reproduzidos ao chegar, sem timestamp](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-no-timestamp.html): Se o cliente reproduz os eventos do servidor assim que chegam, sem o horário em que aconteceram, o jitter da rede passa direto para o ritmo das animações e efeitos, que fica irregular. - [Espera dupla de tick](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-double-tick.html): Se a requisição espera até o próximo tick para ser processada e o resultado também só sai no tick seguinte, o intervalo entre ticks se soma duas vezes. - [Validação rígida demais no servidor](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-strict-check.html): Se o servidor checa com rigidez demais a velocidade de movimento, o cooldown e o alcance, rejeita até inputs normais que chegaram juntos por causa do jitter. - [Arquitetura com host (dono da sala)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-host.html): Quando o PC de um jogador faz o papel de servidor, a conexão e o desempenho do PC dele definem o que todos sentem. - [Servidor rejeita o que o feedback no cliente já mostrou](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-optimistic-reject.html): Se o servidor não reconhece depois um golpe ou uma skill que sua tela já mostrou, o resultado que você viu claramente deixa de ter acontecido. - [Divergência no cálculo de caminho na sincronização de comandos](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-path-mismatch.html): Se cliente e servidor trocam só “vá para cá” e cada lado calcula o caminho por conta própria, basta uma pequena diferença no cálculo para um personagem ou monstro seguir outro caminho e depois ser puxado de volta para o lugar certo. - [Taxa de envio de snapshots baixa](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/sy-low-send-rate.html): Se o servidor manda as atualizações de posição (snapshots) só algumas vezes por segundo, o buffer de interpolação precisa ser mais longo na mesma medida, e você vê os outros personagens mais no passado. ## Problemas que só afetam alguns - [Jogador com lag em avanço rápido na tela dos outros](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-slow-burst.html): Para quem tem conexão ruim, os inputs chegam ao servidor irregulares e agrupados. Se o servidor aplica a cada tick o que recebeu, na tela dos outros esse personagem engasga e depois anda vários passos de uma vez. - [Avanço rápido em servidor que processa tudo ao chegar](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-event-server.html): Em um servidor que processa e avisa assim que cada pacote chega, as ações agrupadas de um jogador com lag são executadas imediatamente, uma atrás da outra. - [Tamanho do buffer de input por jogador](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-input-buffer.html): Se o servidor acumula um pouco os inputs de cada jogador e consome um por tick, os outros veem tudo suave, mas a ação do próprio jogador é confirmada no servidor mais tarde, na mesma medida. - [Falsos positivos da validação concentrados em uma operadora](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-isp-validation.html): Quem usa conexão com jitter alto tem os inputs chegando agrupados e cai com frequência nas checagens de velocidade e cooldown do servidor. - [Um membro da party com lag e a mecânica do boss](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-raid-member.html): Em mecânicas de raid em que todos precisam reagir juntos em um momento definido, a reação atrasada de um jogador com lag vira falha da party inteira. - [Autoridade do monstro em um cliente com lag](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-mob-control.html): Alguns jogos, para reduzir a carga do servidor, entregam o cálculo do movimento dos monstros ao cliente de um jogador próximo. Se a conexão dessa pessoa é ruim, o monstro se move de um jeito estranho na tela de todos. - [Personagem com dados grandes demais](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-heavy-char.html): Um personagem com milhares de itens ou mensagens no correio acumulados, ou com listas de amigos e bloqueados ou buffs fora do comum, tem várias vezes mais dados para carregar no login, salvar e enviar aos jogadores próximos. Fica lento só com esse personagem, seja qual for a conexão. - [Diferença de canal, instância ou phasing](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-phase.html): Se dois personagens estão em canais ou instâncias diferentes, ou em “fases” (phasing) diferentes, em que os NPCs visíveis dependem do progresso das quests, eles veem mundos diferentes. - [Mensagens de spawn descartadas durante o carregamento](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-loading-drop.html): Assim que o personagem entra na zona, o servidor envia as mensagens de spawn dos NPCs próximos, mas o cliente ainda está carregando o mapa e descarta essas mensagens. - [Condição de corrida no registro da área de interesse (AOI)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-aoi-race.html): Se o momento em que o personagem é registrado na grade da área de interesse coincide com o momento em que um NPC muda de célula, a mensagem de spawn desse NPC pode se perder. - [Perda do snapshot de referência (baseline)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-baseline.html): No modelo em que o servidor só manda “o que mudou desde a última vez”, se a informação completa enviada uma vez no início (a referência) se perde, as mudanças seguintes não podem ser aplicadas. - [Mensagem de despawn perdida (entidade fantasma)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-ghost.html): No caso inverso, se a mensagem de que algo “sumiu” se perde, NPCs ou jogadores que já morreram ou saíram continuam só na sua tela. - [Perda do burst de spawns logo após a entrada](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-spawn-burst.html): No instante em que o personagem entra na zona, o servidor envia de uma vez as informações de spawn de dezenas a centenas de entidades próximas. Se isso vai por um canal não confiável (unreliable), ou se o buffer de recepção estoura enquanto o socket não é lido durante o carregamento, parte se perde e não é reenviada. - [Confusão por reutilização de ID de entidade](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-id-reuse.html): Se o servidor reutiliza o mesmo ID de entidade quando um NPC morto reaparece, o cliente que perdeu a mensagem de despawn nesse meio-tempo toma o NPC novo pelo antigo. - [Conflito de porta UDP fixa](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-port-collision.html): Se o cliente foi feito para usar uma porta local fixa, o segundo cliente no mesmo PC não consegue usar a porta ou divide os pacotes com o primeiro. - [Bug na separação de sessões por IP ou dispositivo](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-session-key.html): Se o servidor ou um servidor intermediário distingue as conexões por IP ou ID do dispositivo, dois clientes no mesmo PC (mesmo IP público) são tratados como uma só pessoa. - [Restrição a múltiplos clientes](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-multiclient.html): Se o módulo de segurança ou uma política do servidor limita vários clientes em um PC, o segundo cliente é impedido de abrir ou de conectar, ou o primeiro que foi aberto é desconectado. Alguns jogos bloqueiam só as funções dos clientes adicionais. - [Limitação de processamento da janela em segundo plano](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-background.html): Em um cliente que está em janela em segundo plano, o jogo, a engine e o SO reduzem frames e processamento. Os pacotes recebidos não são processados a tempo e acumulam ou estouram o buffer. - [Conflito de acesso simultâneo a arquivos de cache e assets](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-asset-lock.html): Se dois clientes escrevem ao mesmo tempo na mesma pasta de cache ou bloqueiam arquivos, um deles não consegue carregar modelos e texturas de NPC. - [Falha de streaming por falta de memória ou VRAM](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-vram.html): Quando dois clientes dividem a memória de vídeo, não sobra espaço para carregar os modelos e texturas novos, e parte deles não é desenhada. - [Opções de exibição diferentes](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-display-option.html): Se opções como limite de personagens exibidos, ocultar nome acima do personagem ou modelo de NPC e modo leve estão diferentes nos dois clientes, cada um vê coisas diferentes. - [Versão ou dados do cliente incompatíveis](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-version.html): Se o segundo cliente é outra instalação ou não terminou o patch, ele não conhece os novos IDs de NPC enviados pelo servidor e os ignora em silêncio. - [Orçamento de envio e prioridade por conexão](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-priority.html): Se o servidor limita quanto envia por conexão e manda primeiro o que está mais perto, o lado com limite mais baixo recebe tarde, ou nunca recebe, os NPCs distantes. - [Entidades retidas por erro na estimativa do relógio](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/pt-clock-hold.html): Se o horário do servidor estimado pelo cliente está errado, ele retém informações de entidades que acabaram de chegar, como se fossem “do futuro”, ou as descarta como “antigas demais”. ## Causas-raiz da retransmissão TCP - [Perda no trecho sem fio](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-wireless.html): O Wi-Fi e a rede móvel tentam retransmitir algumas vezes no trecho sem fio e, se ainda assim não conseguem, descartam o pacote. O TCP só reenvia o pacote descartado bem mais tarde. - [Estouro de fila no gargalo (perda por congestionamento)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-queue-drop.html): Quando enche a fila do ponto mais estreito do caminho (o roteador, a interconexão entre operadoras, o link do data center), os pacotes que chegam são descartados. - [Estouro de buffers rasos por bursts de envio](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-burst.html): Quando o servidor manda de uma vez, a cada tick, as atualizações de milhares de jogadores, o buffer pequeno do switch ou o limite instantâneo da nuvem estoura em menos de 1 ms, e parte dos pacotes é descartada. - [Descarte do excedente pelo policer](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-policer.html): Planos de operadora, limites de instâncias na nuvem e equipamentos de proteção contra DDoS podem descartar na hora, sem colocar na fila, os pacotes que passam da taxa definida. - [Erros físicos (cabo, transceptor óptico ou conector com defeito)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-physical.html): Cabos danificados, conectores ópticos sujos e transceptores ópticos no fim da vida útil geram erros de bit, e os equipamentos descartam silenciosamente os pacotes corrompidos. - [Incompatibilidade de duplex](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-duplex.html): Quando um lado usa autonegociação e o outro tem velocidade e duplex fixos, um dos lados passa a operar em half-duplex e perde pacotes por colisão sempre que a carga aumenta. - [Descarte de pacotes no servidor receptor](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-host-drop.html): O pacote chega ao servidor, mas é descartado porque o ring buffer da NIC (o buffer que guarda por um momento os pacotes que chegam) estourou ou porque o núcleo que faz o processamento de recepção no kernel está saturado. - [Descarte pelo firewall ou pelo rastreamento de conexões](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-stateful-fw.html): O firewall ou o rastreamento de conexões do Linux (conntrack, recurso que registra numa tabela as conexões que passam) descarta pacotes quando a tabela enche ou quando conclui que o estado da conexão não confere. - [Sobrecarga de equipamento intermediário (firewall, IPS, proteção contra DDoS)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-appliance-pps.html): Firewalls, sistemas de prevenção de intrusão (IPS) e equipamentos de proteção contra DDoS inspecionam um por um os pacotes que passam. Quando a carga passa da capacidade de inspeção, eles descartam os pacotes que não conseguem processar. - [Black hole de MTU (perda repetida só dos pacotes grandes)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-mtu.html): Se algum trecho do caminho passa a aceitar só pacotes menores e o aviso de “grande demais” (ICMP) é bloqueado, os pacotes grandes continuam sumindo, por mais vezes que sejam reenviados. - [Expiração do mapeamento NAT ou do load balancer no meio da conexão](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-mapping.html): Se um equipamento no caminho apaga o mapeamento de uma conexão ociosa (a entrada que diz para onde encaminhar essa conexão), o próximo pacote enviado não é entregue. A conexão fica só retransmitindo até cair, ou o equipamento devolve uma recusa (RST) e ela cai na hora. - [Mudança de rota ou caminho ECMP com defeito](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-path.html): Pacotes somem durante os segundos em que a rota na internet muda, ou nas conexões que caíram em um caminho com defeito entre vários caminhos ECMP. - [Retransmissão espúria por pico de latência](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-spurious-delay.html): O pacote só chegou muito atrasado por um instante, sem se perder. Mesmo assim, se o atraso passa do RTO, quem envia considera o pacote perdido e retransmite. - [Retransmissão rápida espúria por pacotes fora de ordem](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-reorder.html): Quando a ordem dos pacotes muda ao passar por vários caminhos ou links agregados, quem recebe avisa com ACKs duplicados que “falta um pacote”, e quem envia reenvia um pacote que tinha chegado sem problema. - [ACKs atrasados ou perdidos (upload saturado)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-ack-path.html): Os dados chegaram bem, mas, se o ACK de “recebido” atrasa ou se perde na fila de upload lotada, quem envia considera o pacote perdido e retransmite. - [Configuração de RTO inadequada para o ambiente](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-rto-setting.html): Com o RTO mínimo baixo demais, qualquer pequeno atraso gera retransmissões espúrias; já o padrão (200 ms) é longo demais para um jogo, e cada perda deixa a conexão parada por muito tempo. - [Recuperação lenta em thin streams](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-thin.html): Quando o jogo manda pacotes pequenos e espaçados, o RTO chega antes de se juntarem os “3 pacotes seguintes”. Com a mesma perda, a conexão fica parada por muito mais tempo do que em uma transferência grande. - [Remoção de opções TCP por equipamento intermediário](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-sack-stripped.html): Quando alguns firewalls ou equipamentos de aceleração apagam ou alteram opções do TCP, a conexão fica lenta: ao perder vários pacotes, ela recupera só um por ida e volta, ou a janela (quanto dá para enviar de uma vez) fica pequena. - [Janela zero (paralisação que parece retransmissão)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-zero-window.html): Quando o programa que recebe não lê o socket a tempo e o buffer enche, quem envia para de transmitir e manda só zero window probes. A causa não está na rede. - [Retransmissão do pedido de conexão (SYN)](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/c/rt-syn.html): Se o pedido de conexão se perde por estouro da fila de conexões (backlog) ou bloqueio no firewall, o SO do cliente volta a enviá-lo a partir de 1 segundo depois, com intervalos crescentes. ## Diagnóstico e casos - [Diagnóstico pelo monitoramento](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/#judge): Fluxo de diagnóstico escopo → momento → camada, tabela de sinais, 13 formatos de gráfico, como ler os números (média e p99) - [Procedimentos por situação](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/text.html#playbooks): Lag depois de um patch, lançamento em um novo país ou região - [Incidentes reais](https://jungrok5.github.io/mmo-lag-anatomy/pt-br/text.html#cases): Postmortems publicados pelas próprias empresas que desenvolvem ou operam os jogos e serviços, com as causas relacionadas ## Outros idiomas - [한국어 (Korean)](https://jungrok5.github.io/mmo-lag-anatomy/llms.txt) - [English](https://jungrok5.github.io/mmo-lag-anatomy/en/llms.txt) - [日本語 (Japanese)](https://jungrok5.github.io/mmo-lag-anatomy/ja/llms.txt) - [简体中文 (Chinese (Simplified))](https://jungrok5.github.io/mmo-lag-anatomy/zh-cn/llms.txt) - [繁體中文 (Chinese (Traditional, Taiwan))](https://jungrok5.github.io/mmo-lag-anatomy/zh-tw/llms.txt) - [Deutsch (German)](https://jungrok5.github.io/mmo-lag-anatomy/de/llms.txt) - [ไทย (Thai)](https://jungrok5.github.io/mmo-lag-anatomy/th/llms.txt) - [Tiếng Việt (Vietnamese)](https://jungrok5.github.io/mmo-lag-anatomy/vi/llms.txt) - [Русский (Russian)](https://jungrok5.github.io/mmo-lag-anatomy/ru/llms.txt) - [Español (Spanish)](https://jungrok5.github.io/mmo-lag-anatomy/es/llms.txt) - [Bahasa Indonesia (Indonesian)](https://jungrok5.github.io/mmo-lag-anatomy/id/llms.txt) ## Optional - [Repositório no GitHub](https://github.com/jungrok5/mmo-lag-anatomy): Código-fonte, formato dos dados, como contribuir - [Autor: Jeongrok Oh](https://jungrok5.github.io/resume/en/): Currículo