返回学习路径

learn

RateRatio 怎么算:邻居频比与逐跳通告

用 A-B-C-D 同步链路理解 802.1AS 如何测 NeighborRateRatio、通告 RateRatio,并用它修正 residence time。

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

本节学习目标

  • 理解 RateRatio 是 GM 频率与本节点本地频率的比值。
  • 能说明 NeighborRateRatio 如何通过两次 Pdelay 测量估计。
  • 知道 correction field 中 residence time 为什么要乘以 RateRatio。

建议先读

核心概念

RateRatioNeighborRateRatiocorrection fieldresidence time

本章目录

  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 窗口命中放到同一套验证证据里。

解决什么问题

上一节说明了为什么频差会让 residence time 换算出错。本节回答实现思路:一个非 GM 节点并不能直接观察 GM 晶振和自己的晶振,它怎么知道自己的 RateRatio?

802.1AS 的做法可以拆成两个动作。第一,节点测量自己和上游邻居之间的频率比,称为 NeighborRateRatio。第二,上游节点通过 Sync / Follow_Up 把自己已经算出的 GM 频比通告给下游。下游把这两个比值相乘,就得到自己相对 GM 的 RateRatio。

逐跳计算 RateRatio

假设同步树是一条链:

A(GM) -> B -> C -> D

A 是 grandmaster。它相对自己的频率比当然是 1:

rr(A) = 1

B 测到 A 和 B 的邻居频比 nr(A,B),于是:

rr(B) = rr(A) * nr(A,B)
      = fA / fB

C 从 B 收到 rr(B),同时自己测到 nr(B,C),于是:

rr(C) = rr(B) * nr(B,C)
      = (fA / fB) * (fB / fC)
      = fA / fC

D 继续同样的逻辑:

rr(D) = rr(C) * nr(C,D)
      = fA / fD

这个乘法链条的好处是,每个节点只需要测量相邻链路上的频率关系,不需要直接和 GM 做频率测量。RateRatio 作为“到 GM 的累计频率尺度关系”沿同步树逐跳传递。

NeighborRateRatio 怎么从 Pdelay 里看出来

NeighborRateRatio 可以利用周期性的 Pdelay 测量建立直觉。以下游节点 C 测上游节点 B 为例。C 多次发起 Pdelay,B 在每次响应时记录自己的发送时间戳,C 也记录响应到达自己的接收时间戳。

选两次测量 i 和 j。B 本地看到的响应发送时间间隔为 X,C 本地看到的响应接收时间间隔为 Y。如果 B 和 C 的晶振频率完全一致,那么这两个间隔应该相等。若 B 的时钟走得更快,它在同一段真实时间里会看到更大的计数跨度;若 C 更快,则 C 看到的跨度更大。

学习阶段可以用这个简化式理解:

nr(B,C) = fB / fC ≈ X / Y

真实实现还要考虑滤波、时间戳精度、异常样本、链路状态变化和字段表示,但核心直觉就是:用同一组相邻链路测量事件,在两台设备的本地时间尺度下比较“间隔长度”。

来源含义
X上游 B 的两个响应发送时间戳差B 的本地时间尺度
Y下游 C 的两个响应接收时间戳差C 的本地时间尺度
X / Y两个时间尺度的比例nr(B,C) 的估计值

correction field 怎么用 RateRatio

节点 C 转发 Sync 时,需要把上游到 C 的 path delay 和 C 内部的 residence time 加入 correction field。简化地写:

COR += PathDelay(B,C) + ResidentDelay(C)

考虑频差校正后,C 本地计数器换算出的 residence time 需要乘以 rr(C),变成 GM 时间尺度下的 residence time:

COR += PathDelay(B,C) + rr(C) * ResidentDelay(C)

这就是 RateRatio 在时间同步中的关键位置。它不是让业务报文直接变快,也不是替代 offset 校正,而是让 bridge 把“本地测得的一段停留时间”转换到 GM 期望的时间尺度后再写入修正信息。

带来了什么新问题

RateRatio 校正降低了由频率尺度不一致造成的系统性误差,但它不会消灭所有同步误差。NeighborRateRatio 的测量本身有噪声;硬件时间戳点可能不一致;路径延迟可能不对称;软件处理可能引入更长、更不稳定的 residence time;grandmaster 切换或 holdover 时,频率关系也可能暂时变差。

因此,RateRatio 应该进入后面的误差来源和预算讨论。你不需要把它当成独立孤岛,而要把它放回共同时间证据链:时钟模型解释 drift,Sync/Pdelay 提供测量事件,RateRatio 修正时间尺度,误差预算再判断剩余误差是否足以支撑 Qbv 和端到端测量。

检查点

  • 为什么 rr(C) 可以通过 rr(B) 和 nr(B,C) 相乘得到?
  • 如果 NeighborRateRatio 测量噪声很大,correction field 中的 residence time 会受到什么影响?
  • RateRatio 校正后,为什么仍然需要做同步误差预算和验证?

掌握检查

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

  1. 1能写出 rr(C) = rr(B) * nr(B,C) 这类逐跳关系。
  2. 2能解释为什么 GM 自己向下游通告的 rr 初始值为 1。
  3. 3能说明 RateRatio 校正主要改变的是驻留时间换算,而不是业务流调度本身。

distributed ratio

每一跳测邻居频比,再把到 GM 的频比继续传下去。

rr(C) = rr(B) * nr(B,C),不需要每台设备直接测到 grandmaster。

timequeuebound

ratio chain

RateRatio 是沿同步树逐跳累乘出来的。

调整 A-B、B-C、C-D 三段邻居频比,看下游节点相对 GM 的 rr 如何累积。

NeighborRateRatio 累乘实验

教学估算
talkerbridgelistener
rr(D)
risk 5%

rr(D) 偏离

+16ppm

修正后误差

5ns

逐跳频比正在累积

不做频差校正时,这段驻留时间的量级误差约 48ns;rr 累乘的目标是把本地时间尺度拉回 GM 尺度。

try it

动手调参数

机制拆解

  1. 1D 只直接测 C-D 的 NeighborRateRatio。
  2. 2C 通过 Sync 把 rr(C) 继续通告给 D。
  3. 3D 用 rr(D) 修正自己的 residence time。

engineering check

为什么 D 不需要直接测 GM A 的频率?

next steps

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