learn
为什么 gPTP 需要频差校正
从驻留时间和路径延迟两条线理解:晶振频率差异会把本地计数器换算成错误的共同时间。
本节学习目标
- 理解为什么仅校正 offset 不足以长期维持共同时间。
- 能解释频率差如何污染 bridge 的驻留时间修正。
- 知道频差对驻留时间通常比对链路路径延迟更敏感。
建议先读
核心概念
本章目录
- 01为什么 TSN 需要共同时间从调度窗口、跨设备测量和故障复盘三个场景理解共同时间为什么是 TSN 的坐标系。
- 02时钟模型:offset、drift 与为什么时间会跑偏先理解本地时钟不是完美尺子,再理解 gPTP 为什么要持续校正 offset、drift 和路径延迟。
- 03gPTP 的基本链路:grandmaster、同步与路径延迟用工程直觉理解 802.1AS 如何把一个主时钟传播到网络设备,并校正链路延迟。
- 04同步报文怎么走:Sync、Follow_Up 与 Pdelay 的时间线用一条简化时间线理解 gPTP 报文如何传播时间、记录硬件时间戳并估计相邻链路延迟。
- 05为什么 gPTP 需要频差校正从驻留时间和路径延迟两条线理解:晶振频率差异会把本地计数器换算成错误的共同时间。
- 06RateRatio 怎么算:邻居频比与逐跳通告用 A-B-C-D 同步链路理解 802.1AS 如何测 NeighborRateRatio、通告 RateRatio,并用它修正 residence time。
- 07误差从哪里来:timestamp、链路不对称与同步间隔把 gPTP 误差拆成硬件时间戳、路径延迟估计、时钟漂移、同步间隔、设备执行和拓扑变化几类来源。
- 08时钟误差预算:调度窗口为什么要留余量把时钟漂移、同步间隔、路径延迟误差和设备执行误差转换成 Qbv 窗口设计中的安全余量。
- 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
= 448ns448ns 看起来不大,但对亚微秒同步目标、很窄的 Qbv 窗口、或多跳同步树来说,它不是可以随手忽略的数字。更重要的是,这个误差不是随机噪声,而是由频率尺度不一致造成的系统性偏差。
路径延迟也受影响,但量级通常小得多
Pdelay 测相邻链路延迟时,也会用到两端设备的本地时间戳。理论上,频率差同样会让时间跨度换算出现误差。但链路路径延迟通常是 PHY、MAC 和线缆传播延迟的组合,千兆链路上常见量级是微秒级,而不是毫秒级。
如果一条链路路径延迟约为 5us,频差约为 56ppm,那么量级估算是:
5us * 56ppm = 0.28ns这个量级通常远小于前面 8ms residence time 对应的 448ns。因此学习时可以先记住一个工程判断:频差对路径延迟测量不是没有影响,但更容易让人真正担心的是较长的 bridge residence time,尤其是软件参与同步报文处理的系统。
| 误差位置 | 时间基数 | 频差 56ppm 时的误差量级 | 工程直觉 |
|---|---|---|---|
| bridge residence time | 8ms | 约 448ns | 软件处理越慢,越需要校正 |
| peer path delay | 5us | 约 0.28ns | 通常小很多,但仍属于误差来源 |
带来了什么新问题
既然问题来自 GM 和本地节点的频率比,gPTP 就需要让每个节点知道:我的本地计数器和 GM 的时间尺度之间相差多少。这个比值就是 RateRatio。
RateRatio 不能靠某个中心节点一次性告诉全网,因为每一跳都只直接看到自己的上游邻居。802.1AS 的思路是分布式的:下游节点测量自己和上游邻居的频比,同时从 Sync 中获得上游节点已经知道的 GM 频比,再把两者相乘,得到自己相对 GM 的频比。
下一节就讲这个分布式计算方法:NeighborRateRatio 怎么测,RateRatio 怎么沿同步树逐跳累乘,以及它如何进入 correction field 的 residence time 修正。
检查点
- 为什么 residence time 越长,频差校正越重要?
- 如果某个系统声称“软件处理 gPTP 也能满足亚微秒同步”,你会追问哪些驻留时间和 RateRatio 证据?
掌握检查
读完本节后,先用下面这些问题校准自己,而不是只确认“看过了”。
- 1给定 8ms 驻留时间和 56ppm 频差,能估算约 448ns 的驻留时间换算误差。
- 2能说明为什么软件参与 Sync 处理时更容易暴露频差校正问题。
frequency correction
RateRatio 把本地计数器跨度换算到 GM 的时间尺度。
驻留时间越长,晶振频差越不能只当成一个小 ppm 数字。
frequency lab
把 ppm 频差乘到驻留时间上看量级。
调整 GM 与本地晶振频差、Sync 驻留时间和链路路径延迟,对比 residence time 与 path delay 的误差量级。
RateRatio 误差量级实验
教学估算驻留时间误差
448ns
路径延迟误差
0.28ns
驻留时间误差已经可见
频差误差按时间长度放大;毫秒级 residence time 比微秒级 path delay 更容易成为同步预算里的问题。
try it
动手调参数
机制拆解
- 1本地计数器先测出 residence time。
- 2频率差让这段 tick 跨度不能直接当成 GM 时间尺度。
- 3乘以 RateRatio 后,correction field 才更接近 GM 期望。
engineering check
为什么频差对软件处理的 Sync 更危险?
next steps