游戏卡顿白皮书 › 同步设计
双重 tick 等待 Double tick quantization
原因 ID sy-double-tick · 主责 研发团队·服务器开发
在含图示和实验的完整版中打开此卡片 →
请求攒到下一个 tick 才处理,结果又在再下一个 tick 才发出,tick 间隔就被叠加了两次。
起因 收到的请求在下一个 tick 处理 → 结果 处理结果也攒到下一个发送 tick 统一发出 → 画面表现 线路 ping 很低,反应却稳定地慢约 1.5 倍 tick 间隔。10 tick 服务器平均 0.15 秒,最差 0.2 秒
- 症状
- 操作延迟
- 因素
- 延迟
- 谁会遇到
- 全服
- 何时出现
- 一直
- 负责方
- 主责 研发团队·服务器开发
- 研发团队要做的事
- 在处理的那个 tick 里直接发出响应,提高 tick 率,重要响应立即发送。
- 数值参考
- 10 tick 服务器一个 tick 是 100 ms,光 tick 等待就要多出平均 150 ms、最差 200 ms。只等一次,平均是 50 ms。
- 监控图上
- 一直偏高 · 从请求到达到发出响应的时间
- 查看位置
- 在服务器侧抓包,测试账号多次做同一动作(例如使用物品)时,测量请求包到达时刻与对应响应包发出时刻的间隔。有服务器日志时,看请求到达时刻、处理所在的 tick 编号、发出响应的时刻
- 确认依据
- 在服务器内部花的时间平均约为 tick 间隔的 1.5 倍,最长约 2 倍,与 RTT 无关、保持稳定
- 排除依据
- 服务器内部时间在平均 tick 间隔的一半上下,说明 tick 等待只有一次。比 tick 间隔长且忽长忽短,看 tick 超出预算
- 确认手段
- 运维工具即可确认(无需游戏代码)
出处
- Peeking into VALORANT's Netcode Riot Games
到达的输入最多要等一个 tick 才到 tick 边界,应用和发送又要一帧。tick 率越高,这段时间越短 - VALORANT's 128-Tick Servers Riot Games
延迟一部分来自网络,一部分来自服务器的 tick 率 - NetworkTime and ticks (Netcode for GameObjects 2.5) Unity
NetworkVariable 的变更每个网络 tick 汇总发送一次,不即时发出
相关原因
同一层:同步设计
其他层中同样导致“操作延迟”的原因
查看含图示和实验的原卡片