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

Guia do Lag em Jogos › L7 SO do servidor (kernel)

Salto do relógio do sistema (step do NTP) Wall-clock jump (NTP step)

ID da causa so-timejump · Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Infraestrutura de servidores (Equipe de infraestrutura)

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

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.

Por quê A sincronização de horário ajusta o relógio de uma vez, com um salto grande → Efeito Timers disparam todos juntos ou ficam parados, e timeouts são avaliados errado → Na tela Buffs e cooldowns errados, desconexão de todos ao mesmo tempo, avanço rápido

Sintomas
Avanço rápido, Desconexão, Ação perdida / rollback
Fatores
Paralisação
Quem é afetado
Servidor inteiro
Quando
Aleatoriamente, de vez em quando
Responsável
Responsável principal Desenvolvimento do servidor (Equipe de desenvolvimento) · Também envolvidos Infraestrutura de servidores (Equipe de infraestrutura)
O que fazer (Equipe de desenvolvimento)
Calcular tempo decorrido, timeouts e cooldowns com o monotonic clock, que não salta nem volta para trás, usar o wall clock só para exibição e registro.
O que fazer (Equipe de infraestrutura)
Ajustar o relógio aos poucos (makestep do chrony só logo após iniciar), monitorar o estado da sincronização de horário (diferença do relógio).
Números de referência
O ntpd corrige de uma vez quando a diferença passa de 0,128 s. Abaixo disso, ajusta aos poucos, num ritmo que leva pouco mais de 30 minutos para eliminar 1 s de diferença. O chrony, muito usado hoje, na configuração recomendada (makestep) só corrige de uma vez algumas vezes logo após iniciar e depois ajusta aos poucos. O relógio também salta quando uma máquina virtual para por um momento e volta.
No gráfico
Picos aleatórios · Disparos de timer e desconexões, registros de ajuste do relógio
Onde olhar
Procurar nos logs do serviço de sincronização de horário ajustes grandes feitos de uma vez e cruzar com o horário do problema. O chrony registra no syslog os ajustes maiores que o valor de logchange (padrão de 1 s)
Confirma se
Há registro de ajuste do relógio no momento dos buffs e cooldowns errados, da desconexão em massa ou do avanço rápido, e o tamanho do ajuste é parecido com o tamanho do problema
Descarta se
Sem registro de ajuste do relógio: não é esta causa. Em máquina virtual, verificar também se ela parou e voltou (“Manutenção do host na nuvem e live migration”)
Como verificar
Ferramentas de infra (sem precisar do código do jogo)

Fontes

  1. ntpd - Network Time Protocol (NTP) daemon Network Time Foundation
    Corrige de uma vez quando a diferença passa do limiar de step de 128 ms e ajusta aos poucos quando é menor; a 0,5 ms por segundo, corrigir 1 s leva 2.000 s (cerca de 33 minutos)
  2. chrony – Frequently Asked Questions chrony
    Recomenda-se permitir o step só algumas vezes logo após o início, como em makestep 1 3; uma máquina virtual que parou e retomou pode voltar com o horário errado
  3. clock_gettime(2) — Linux manual page Linux man-pages
    CLOCK_MONOTONIC não é afetado por saltos descontínuos do relógio do sistema e não anda para trás
  4. chrony.conf(5) chrony
    logchange: ajustes do relógio maiores que este valor (padrão de 1 s) são registrados no syslog

Veja também

Mesma camada: L7 SO do servidor (kernel)

Mesmo sintoma (Avanço rápido) em outras camadas

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