한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Guia do Lag em Jogos › L8 Sockets e protocolos

Arquitetura de I/O bloqueante Blocking I/O model

ID da causa sk-blocking-io · Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento)

Abrir o card interativo, com figuras e simulações →

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.

Por quê Cada conexão espera a leitura e a escrita → Efeito O atraso de uma conexão se espalha para as outras conexões da mesma thread → Na tela Quanto mais jogadores simultâneos, mais tudo fica em câmera lenta e com input lag

Sintomas
Câmera lenta, Input lag
Fatores
Paralisação
Quem é afetado
Servidor inteiro
Quando
Quando junta muita gente, Horário de pico à noite
Responsável
Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Migrar para I/O assíncrono baseado em epoll, IOCP ou io_uring.
No gráfico
Sobe com a carga · Tempo de resposta, número de threads
Onde olhar
Ver com pidstat -w -t o número de threads do servidor do jogo e as trocas de contexto voluntárias por thread (cswch/s, quantas vezes parou esperando um recurso), e comparar com o tempo de resposta conforme o número de jogadores simultâneos
Confirma se
Com mais jogadores simultâneos, o tempo de resposta sobe de forma íngreme, e a maioria das threads (que cresceram junto com o número de conexões) só tem trocas voluntárias e quase não usa CPU (esperando o socket)
Descarta se
Threads usando CPU sem parar, sem esperar: sobrecarga de cálculo (“Estouro do tick”)
Como verificar
Ferramentas de infra (sem precisar do código do jogo)

Fontes

  1. epoll(7) — Linux manual page Linux man-pages
    Notificação de eventos de I/O que escala para vigiar muitos fds de uma vez
  2. I/O Completion Ports Microsoft
    Modelo do Windows que processa muito I/O assíncrono com um pool de threads criado de antemão
  3. pidstat(1) — Linux manual page sysstat
    cswch/s do -w: trocas de contexto voluntárias, quando a thread para sozinha esperando um recurso; -t mostra por thread

Veja também

Mesma camada: L8 Sockets e protocolos

Mesmo sintoma (Câmera lenta) em outras camadas

Ver o card interativo, com figuras e simulações