返回学习路径

learn

为什么 gPTP 需要频差校正

从驻留时间和路径延迟两条线理解:晶振频率差异会把本地计数器换算成错误的共同时间。

第三章:共同时间核心机制IEEE 802.1ASgPTP18 分钟

本节学习目标

  • 理解为什么仅校正 offset 不足以长期维持共同时间。
  • 能解释频率差如何污染 bridge 的驻留时间修正。
  • 知道频差对驻留时间通常比对链路路径延迟更敏感。

本章目录

  1. 01为什么 TSN 需要共同时间从调度窗口、跨设备测量和故障复盘三个场景理解共同时间为什么是 TSN 的坐标系。
  2. 02时钟模型:offset、drift 与为什么时间会跑偏先理解本地时钟不是完美尺子,再理解 gPTP 为什么要持续校正 offset、drift 和路径延迟。
  3. 03gPTP 的基本链路:grandmaster、同步与路径延迟用工程直觉理解 802.1AS 如何把一个主时钟传播到网络设备,并校正链路延迟。
  4. 04同步报文怎么走:Sync、Follow_Up 与 Pdelay 的时间线用一条简化时间线理解 gPTP 报文如何传播时间、记录硬件时间戳并估计相邻链路延迟。
  5. 05为什么 gPTP 需要频差校正从驻留时间和路径延迟两条线理解:晶振频率差异会把本地计数器换算成错误的共同时间。
  6. 06RateRatio 怎么算:邻居频比与逐跳通告用 A-B-C-D 同步链路理解 802.1AS 如何测 NeighborRateRatio、通告 RateRatio,并用它修正 residence time。
  7. 07误差从哪里来:timestamp、链路不对称与同步间隔把 gPTP 误差拆成硬件时间戳、路径延迟估计、时钟漂移、同步间隔、设备执行和拓扑变化几类来源。
  8. 08时钟误差预算:调度窗口为什么要留余量把时钟漂移、同步间隔、路径延迟误差和设备执行误差转换成 Qbv 窗口设计中的安全余量。
  9. 09验证共同时间:从同步状态到调度证据把 gPTP 状态、抓包时间戳、设备日志和 Qbv 窗口命中放到同一套验证证据里。

解决什么问题

前面几节已经讲到,gPTP 通过 Sync / Follow_Up 传播 grandmaster 时间,通过 Pdelay 估计相邻链路延迟,并把 bridge 内部的 residence time 写进 correction field。这里还缺一个容易被忽略的问题:这些时间量很多都是由本地晶振驱动的计数器测出来的。

如果 grandmaster 的晶振和某个 bridge 的晶振频率不同,同样增加 1000000 个 tick,在两台设备眼里对应的真实时间并不完全相同。bridge 如果只用标称频率把本地 tick 换算成时间,就会把一个带有本地频率偏差的结果写进 correction field。下游节点再用这个 correction field 校正自己的时间,误差就会沿同步树继续传下去。

驻留时间为什么会出错

设一个 bridge 收到 Sync 时,本地计数器为 c1;转发 Sync 时,本地计数器为 c2。bridge 能直接看到的是 c2 - c1,也就是 Sync 在设备内部停留期间本地计数器增加了多少。

如果这个 bridge 按标称周期 DeltaT 换算,它会得到:

ResidentDelay(local) = (c2 - c1) * DeltaT

但 grandmaster 期望 correction field 里的 residence time 使用 grandmaster 的频率尺度来解释。若 GM 晶振频率为 fGM,bridge 本地晶振频率为 fB,那么同一段本地计数器跨度在 GM 尺度上的换算近似要乘上:

RateRatio(B) = fGM / fB

所以更接近 GM 期望的驻留时间是:

ResidentDelay(GM scale) = RateRatio(B) * ResidentDelay(local)

如果不乘这个比值,驻留时间越长,误差越大。这个结论很关键:频差本身可能只有几十 ppm,但 ppm 误差会乘上 residence time。硬件快速转发时 residence time 很短,影响可能不明显;如果 Sync 处理经过 CPU、驱动或用户态程序,驻留时间达到毫秒级,误差就可能进入百纳秒甚至更高量级。

一个量级例子

假设 grandmaster 的实际频率比标称值高 8ppm,某个 bridge 的实际频率比标称值低 48ppm。二者之间的频率差约为:

8ppm - (-48ppm) = 56ppm

如果 Sync 在这个 bridge 内部停留 8ms,那么仅由频差带来的驻留时间换算误差量级约为:

8ms * 56ppm = 8ms * 56 / 1,000,000
             = 448ns

448ns 看起来不大,但对亚微秒同步目标、很窄的 Qbv 窗口、或多跳同步树来说,它不是可以随手忽略的数字。更重要的是,这个误差不是随机噪声,而是由频率尺度不一致造成的系统性偏差。

路径延迟也受影响,但量级通常小得多

Pdelay 测相邻链路延迟时,也会用到两端设备的本地时间戳。理论上,频率差同样会让时间跨度换算出现误差。但链路路径延迟通常是 PHY、MAC 和线缆传播延迟的组合,千兆链路上常见量级是微秒级,而不是毫秒级。

如果一条链路路径延迟约为 5us,频差约为 56ppm,那么量级估算是:

5us * 56ppm = 0.28ns

这个量级通常远小于前面 8ms residence time 对应的 448ns。因此学习时可以先记住一个工程判断:频差对路径延迟测量不是没有影响,但更容易让人真正担心的是较长的 bridge residence time,尤其是软件参与同步报文处理的系统。

误差位置时间基数频差 56ppm 时的误差量级工程直觉
bridge residence time8ms约 448ns软件处理越慢,越需要校正
peer path delay5us约 0.28ns通常小很多,但仍属于误差来源

带来了什么新问题

既然问题来自 GM 和本地节点的频率比,gPTP 就需要让每个节点知道:我的本地计数器和 GM 的时间尺度之间相差多少。这个比值就是 RateRatio。

RateRatio 不能靠某个中心节点一次性告诉全网,因为每一跳都只直接看到自己的上游邻居。802.1AS 的思路是分布式的:下游节点测量自己和上游邻居的频比,同时从 Sync 中获得上游节点已经知道的 GM 频比,再把两者相乘,得到自己相对 GM 的频比。

下一节就讲这个分布式计算方法:NeighborRateRatio 怎么测,RateRatio 怎么沿同步树逐跳累乘,以及它如何进入 correction field 的 residence time 修正。

检查点

  • 为什么 residence time 越长,频差校正越重要?
  • 如果某个系统声称“软件处理 gPTP 也能满足亚微秒同步”,你会追问哪些驻留时间和 RateRatio 证据?

掌握检查

读完本节后,先用下面这些问题校准自己,而不是只确认“看过了”。

  1. 1给定 8ms 驻留时间和 56ppm 频差,能估算约 448ns 的驻留时间换算误差。
  2. 2能说明为什么软件参与 Sync 处理时更容易暴露频差校正问题。

frequency correction

RateRatio 把本地计数器跨度换算到 GM 的时间尺度。

驻留时间越长,晶振频差越不能只当成一个小 ppm 数字。

timequeuebound

frequency lab

把 ppm 频差乘到驻留时间上看量级。

调整 GM 与本地晶振频差、Sync 驻留时间和链路路径延迟,对比 residence time 与 path delay 的误差量级。

RateRatio 误差量级实验

教学估算
talkerbridgelistener
rr
risk 57%

驻留时间误差

448ns

路径延迟误差

0.28ns

驻留时间误差已经可见

频差误差按时间长度放大;毫秒级 residence time 比微秒级 path delay 更容易成为同步预算里的问题。

try it

动手调参数

机制拆解

  1. 1本地计数器先测出 residence time。
  2. 2频率差让这段 tick 跨度不能直接当成 GM 时间尺度。
  3. 3乘以 RateRatio 后,correction field 才更接近 GM 期望。

engineering check

为什么频差对软件处理的 Sync 更危险?

next steps

读完这一页,下一步可以这样走。