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

遊戲 Lag 白皮書 › L7 伺服器 OS(kernel)

系統時鐘跳動(NTP step) Wall-clock jump (NTP step)

原因 ID so-timejump · 主要負責 遊戲開發團隊(伺服器開發) · 協同 基礎設施團隊(伺服器基礎設施)

在含圖解與實驗的完整版中開啟卡片 →

伺服器時鐘一次被往前或往後調整幾秒時,依賴系統時鐘的計時器會同時觸發或停住。

為什麼 時間同步一次大幅調整時鐘 → 於是 計時器集中觸發或停住,逾時判定出錯 → 畫面上 buff 與冷卻時間異常、大家同時斷線、快轉

症狀
快轉, 斷線, 吃指令/回檔
因素
停滯
誰會遇到
整個伺服器
何時
偶爾隨機發生
負責單位
主要負責 遊戲開發團隊(伺服器開發) · 協同 基礎設施團隊(伺服器基礎設施)
遊戲開發團隊要做的事
經過時間、逾時、冷卻時間都用不會跳動也不會倒退的單調時鐘(monotonic clock)計算,wall clock 只用於顯示與記錄。
基礎設施團隊要做的事
時鐘採漸進調整(chrony 的 makestep 只在剛啟動時使用),監控時間同步狀態(時鐘誤差)。
數值參考
ntpd 在差距超過 0.128 秒時會一次校正,差距較小時則慢慢校正,速度是消除 1 秒差距要花 30 多分鐘。現在常用的 chrony 在建議設定(makestep)下,只在剛啟動時一次校正幾次,之後就慢慢校正。虛擬機器短暫暫停後恢復時,時鐘也會跳動。
圖表上
偶爾隨機飆高 · 計時器觸發次數與斷線次數、時鐘調整紀錄
查看位置
在時間同步服務的 log 中找出一次大幅調整時鐘的紀錄,與發生異常的時間點對照。chrony 調整幅度超過 logchange 設定值(預設 1 秒)時會寫入 syslog
符合的跡象
buff 與冷卻時間異常、同時斷線、快轉發生的時間點有時鐘調整紀錄,且調整幅度與異常的大小相近
不符合的跡象
沒有時鐘調整紀錄就不是這個原因。在虛擬機器上時,也要查是否暫停後恢復(「雲端主機維護與即時遷移」)
確認方式
用基礎設施工具確認(不需要遊戲程式碼)

出處

  1. ntpd - Network Time Protocol (NTP) daemon Network Time Foundation
    差距超過 step 門檻 128ms 時一次校正,較小時慢慢校正;每秒校正 0.5ms,所以校正 1 秒需要 2,000 秒(約 33 分鐘)
  2. chrony – Frequently Asked Questions chrony
    建議像 makestep 1 3 這樣只在啟動後允許幾次 step;暫停後恢復的虛擬機器可能帶著錯誤的時間醒來
  3. clock_gettime(2) — Linux manual page Linux man-pages
    CLOCK_MONOTONIC 不受系統時鐘不連續跳動影響,也不會倒退
  4. chrony.conf(5) chrony
    logchange:時鐘調整幅度超過這個值(預設 1 秒)時寫入 syslog

相關原因

同一層:L7 伺服器 OS(kernel)

同一症狀(快轉)在其他層的原因

查看含圖解與實驗的完整版卡片