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

ゲームラグ白書 › L7 サーバーOS(カーネル)

システム時刻のジャンプ(NTPステップ) Wall-clock jump (NTP step)

原因ID so-timejump · 主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ

図と実験のあるメインページでこのカードを開く →

サーバーの時刻が一度に数秒前後に調整されると、システム時刻に依存するタイマーが一斉に発火したり止まったりします。

なぜ 時刻同期が時刻を一度に大きく調整 → すると タイマーがまとめて発火したり止まったりし、タイムアウトが誤って判定される → 画面では バフ・クールタイムの異常、一斉に切断、早送り

症状
早送り, 切断, 不発・ロールバック
要因
ストール
誰に起きるか
サーバー全体
いつ
ときどきランダムに
担当
主担当 ゲーム開発チーム・サーバー開発 · 副担当 インフラチーム・サーバーインフラ
ゲーム開発チームの対応
経過時間・タイムアウト・クールタイムは、飛んだり戻ったりしないモノトニッククロック(monotonic clock)で計算、ウォールクロック(wall clock)は表示・記録用に限る。
インフラチームの対応
時刻は徐々に調整(chronyのmakestepは起動直後だけ)、時刻同期の状態(時刻のずれ)の監視。
数値の目安
ntpdは差が0.128秒を超えると一度に合わせ、それより小さければ、1秒の差を解消するのに30分余りかかる速度で徐々に合わせます。最近よく使われるchronyは、推奨設定(makestep)では起動直後の数回だけ一度に合わせ、それ以降は徐々に合わせます。仮想マシンが一時停止から復帰したときにも時刻が飛びます。
グラフでは
不定期なスパイク · タイマーの発火数・切断数、時刻調整の記録
確認箇所
時刻同期サービスのログから時刻を一度に大きく調整した記録を探し、異常が起きた時刻と突き合わせる。chronyはlogchangeで指定した値(デフォルト1秒)より大きく調整するとsyslogに記録
該当する場合
バフ・クールタイムの異常、一斉の切断、早送りが起きた時刻に時刻調整の記録があり、調整幅が異常の大きさと近い
該当しない場合
時刻調整の記録がなければこの原因ではない。仮想マシンなら一時停止から復帰した場合(「クラウドホストのメンテナンス・ライブマイグレーション」)も確認
確認手段
インフラのツールで確認(ゲームコード不要)

出典

  1. ntpd - Network Time Protocol (NTP) daemon Network Time Foundation
    ステップのしきい値128msを超える差は一度に合わせ、それより小さければ徐々に合わせる、毎秒0.5msずつなので1秒合わせるのに2,000秒(約33分)かかる
  2. chrony – Frequently Asked Questions chrony
    makestep 1 3のように起動直後の数回だけステップを許可するのが推奨、一時停止から再開した仮想マシンは時刻がずれたまま復帰することがある
  3. clock_gettime(2) — Linux manual page Linux man-pages
    CLOCK_MONOTONICはシステム時刻の不連続なジャンプの影響を受けず、逆戻りしない
  4. chrony.conf(5) chrony
    logchange:この値(デフォルト1秒)より大きく時刻を調整するとsyslogに記録

あわせて読みたい原因

同じ層:L7 サーバーOS(カーネル)

同じ症状(早送り)を起こすほかの層の原因

図と実験のあるメインページでこのカードを見る