ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

AVB简介(二): gPTP简介

AVB简介(二): gPTP简介 AVB简介二: gPTP简介一、时间同步要解决的问题二、gPTP的主要思想2.1 体系结构2.2 主时钟选取2.3 绝对时间同步2.4 相对时间同步三、影响校时精度的因素3.1 传输时延不对称3.2 驻留时间3.3 时间戳采样点3.4 时钟频率3.5 传输路径延时测量方式3.6 时钟类型四、gPTP校时过程4.1 绝对时钟同步4.2 相对时钟同步五、参考资料本文是AVB系列文章的第二篇主要介绍AVB协议族中的精确时钟同步协议gPTP(IEEE Std 802.1AS-2011)Precision Time Protocol standardized in IEEE1588-2008 (or IEC61588-Ed.2)。拓展知识AVB是旨在实现音视频传输质量的一套网络协议带宽、延时、抖动包括几个关键组件包括如IEEE 802.1AS时间同步IEEE 802.1Qat流预留协议SRP和IEEE 802.1Qav队列及转发管理gPTP是 IEEE 802.1AS 标准定义的高精度时间同步协议它基于 IEEE 1588 PTP并针对 IEEE 802 网络进行了约束和扩展。一、时间同步要解决的问题不知道大家还记得军训练习齐步走的场景大家整齐的站成一排教官先喊出”齐步走“的口号当学生听到走字后开始以同样的步伐行走同频率同步长如果大家始终这样走那永远都会是整齐的因为同学们都是跟着自己的感觉走的每个人对时间的感觉不同最终总会乱起来。为了防止这种情况发生教练需要在同学们走正步的同时喊“幺二幺、幺二幺…”,让失调的同学在走的过程中动态调整。时钟同步原理类似教官相当于主时钟教官发出的“齐步走”相当于校时信号。各个学员类似于从时钟收到校时信号指令后校准自己的时钟。由于从时钟的晶振受到环境因素温度等变化影响随着时间流逝各各时钟会慢慢变的不同步所以需要主时钟周期性的发出校时信号供失调的节点动态调整时钟相当于教练喊的幺二幺。由此可见如果要整个网络中的节点保持时钟同步该网络必须解决以下问题选取一个主时钟主时钟动态发出同步信号其他本地时钟根据同步信号同步自己的本地时钟。本地时钟的同步包含下面两个方面通俗点讲就是找到同步点然后以同样的频率运行1. 绝对时间同步: 要求在同一时刻A和B的显示时间一致A测出来是早上8点B测出来也应该是早上8点又称为相位同步。2. 相对时间同步: 要求A和B两时钟对同一确定间隔的测量时长保持一致A测出来是1ms那也要求B测出来也是1ms又称为频率同步。gPTP就是为了解决以上问题而诞生的。和其他校时协议不同的是通过约束网络内的节点它可以达到ns级的精度6跳以内任意节点间最大时钟误差不超过1us因此在车载、工业控制等对实时性要求较高的领域得到了应用。二、gPTP的主要思想先从下图直观感受下gPTP的校时机制后面会逐步详细介绍2.1 体系结构AVB域内的每一个节点都是一个时钟由以下两个角色组成一个主时钟Grandmaster Clock它是标准时间的来源其他的都是从时钟Slave Clock它们必须把自己的时间和主时钟调整一致。下图是一个简单的gPTP网络拓扑图它包含两种类型的节点Time-aware end station是系统内的主时钟时间源Grandmaster也可是从时钟图中标注的802.1AS endpoint就是该类设备。Time-aware Bridge它可以是主时钟也可是是个中转设备类似传统的交换机连接网络内的其他设备作为中转设备他需要连接主时钟的信息并将该信息发出去在转发的时候需要矫正链路传输时延和驻留时间图中标注的802.1AS bridge的就是该类设备。从上图可以看到时钟从主时钟发出经由各各bridge分发到所有的从节点。2.2 主时钟选取gPTP中主时钟既可以默认指定也可通过BMCA(Best Master Clock Algorithm) 动态选取。 车载或其他一些网络拓扑固定的应用场景中一般不允许使用BMCA动态选取主时钟而是默认指定。有需要请查阅规范文档不详细展开2.3 绝对时间同步下图包含一个主时钟一个从时钟t1,t4为主时钟时间t2,t3为从时钟时间两步时钟 (Two-Step Clock) 主要校时流程如下Master先发送Sync命令硬件会精确记录下 t1 这个时间点但不把它放进 Sync 报文里Slave在t2时刻收到该命令Slave记录下t2这个时间点。但不知道该命令什么时候发出的。Master发出Follow_Up命令这个报文的作用就是“捎带”上刚才记录下的精确时间戳 t1Slave收到该命令后知道Sync命令是在Mater的 t1 时刻发出的。Slave在t3时刻发送Delay_Req命令Slave记录下t3这个时间点。Master在t4时刻收到Master记录了下t4这个时间点。Master发送Delay_Resp命令这个报文的作用就是“捎带”上刚才记录下的精确时间戳 t4Slave收到该命令后Slave就知道了来自Master的两个时刻 t1 和 t4Slave自己记录的 t2 和 t3 。[!CAUTION] 为什么Sync报文不直接携带时间戳t1答为了降低对硬件的要求这背后是工程上的权衡主要涉及两种实现模式两步时钟 (Two-Step Clock) - gPTP 采用的模式。一步时钟 (One-Step Clock) - PTP 支持但 gPTP 不用。IEEE 1588就是PTPPTP 协议同时支持一步时钟 (One-Step) 和两步时钟 (Two-Step) 两种模式One-Step Clock模式对硬件要求非常高当Sync命令被发送出去时携带着t1时间戳。不需要Follow_Up命令需要硬件在报文发出瞬间实时修改报文内容。假设路径传输延时是对称的即去程的传输延时和回程的传输延时相等可以用小学二年级就学过的的知识根据已知条件求取主从之间的传输延时与时间偏差(设从时钟超前主时钟clock_offset, 主从传输延时为path_delay)t2 - t1clock_offset path_delay t4 - t3-clock_offset path_delay由此可以算出path_delay(t4 – t3 t2 – t1)/2clock_offset(t3 – t4 t2 – t1)/2现在从时钟知道了自己与主时钟的时差clock_offset就可以调整自己的时间了。另外从时钟还知道自己与主时钟的路径传输延时path_delay该值对于Switch意义重大因为在gPTP的P2P校时方式中Switch需要转发主时钟的校时信号在转发的时候需要将该值放在补偿信息中。从上面流程可见传输延时path_delay的精度/稳定新会影响校时精度从而传输延时又可以划分为各段链路传输时间总和中间节点转发导致的驻留时间缓存时间。2.4 相对时间同步相对时间就是指主时钟和从时钟的晶振频率要一致可以通过以下方法估算晶振频率变化动态调整。如下图所示分别在t1和tn时刻对主时钟进行采样分别记录为t1_master, t1_slave, tn_master, tn_slave, 可得retio(tn_slave – t1_slave)/(tn_master – t1_master)如果retio等于1表明同步了如果大于1表示从时钟频率快了否则巴拉巴拉。从时钟可以根据该值调整自己的频率。三、影响校时精度的因素其实不同的校时协议原理都大同小异为什么gPTP可以达到ns级的精度我们呢不妨看一下影响校时的因素以及gPTP的对策。3.1 传输时延不对称前面2.3小结提到假设传输延时是对称的即保存从A传到B与从B传到A的时间相同实际情况中路径有可能是不对称的。这就会导致校时误差。gPTP对策要求网络内的节点都是时间敏感的传输延时分段测量P2P方式减少平均误差中间转发节点可以计算报文的驻留时间保证校时信号传输时间的准确性如果已知链路不对称可以将该值写在配置文件中对于endpoint在校时的时候会把该偏差考虑进去对于bridge设备在转发的时候会在PTP报文的矫正域中correction Field把对应的差值补偿过来。3.2 驻留时间对于Bridge设备从接收报文到转发报文所消耗的时间中间可能经过缓存称为驻留时间该值有一定随机性。从而影响校时精度。gPTP对策Bridge设备必须具有测量驻留时间的能力在转发报文的时候需要将驻留时间累加在PTP报文的矫正域中correction Field。3.3 时间戳采样点前面提到的t1、t2、t3、t4等采样时刻的值应该在哪里产生呢常规做法是在应用层采样如下图蓝色传输线路所示在发送端报文在应用层PTP校时应用产生后需经过协议栈缓冲然后才发送到网络上在接收端报文要经过协议栈缓冲才能到达接受者PTP校时应用。这样存在下面两个问题而这会影响时间同步的精度协议栈缓冲带来的延时是不固定的操作系统调度导致的随机延时为了达到高精度的时间同步必须消除软件带来的不确定因素这就要求必须把时间采集点放在最靠近传输介质的地方。从上图可以看到比较合适的采集点就是MAC层在发送方当报文离开MAC层进入PHY层的时候记录当前时刻在接收方当报文离开PHY层刚到达MAC层的时候记录当前时刻。这样可以消除协议栈带来的不确定性。MAC时间戳可以通过软件的方式打也可以通过硬件的方式打硬件方式会更精确可以消除系统调度带来的不确定性。gPTP中要求使用硬件方式也就是常说的硬件时间戳在 Linux 系统中可以通过ethtool -T 你的网卡名命令来查看。如果输出的Capabilities字段中包含hardware-transmit和hardware-receive等字样就表明网卡支持硬件时间戳。。3.4 时钟频率晶振频率越高误差越小校时越精确。gPTP要求晶振频率不小于25MHz误差不大于100PPM(每天8.64s误差。gPTP的要求并不算高主要是考虑到成本因素要求太高不利于推广。3.5 传输路径延时测量方式IEEE 1588支持两种路径延时测量方式End-to-EndE2E) 和 Peer-to-PeerP2P)二者不能在同一个网络中共存。在End-to-End机制中强调的是两个支持PTP的端点一个master port一个slave port之间的延时这两个端点可能是直接相连的也可能中间穿插了普通的交换机、时间敏感的透明时钟TC在通信双方看来信息都是在master port 和slave port之间传输所以最终slave测量到的传输延时是从master到slave的端到端延时。在Peer-to-Peer机制中要求网络内所有节点必须支持P2P所以它强调的是相邻相邻节点间的通信最终测量的是相邻节点间的传输延时。二者主要区别如下图所示P2P测量的是相邻节点间的延时路径测量报文不会跨节点传输有利于网络扩展E2E测量的是master port和slave port之间的中间节点如TC、普通switch需要转发延时测量报文网络规模较大时报文可能泛滥master节点压力较大。master节点变更时E2E需要重新测量到新master节点的路径延时P2P只需关心相邻节点。E2E方式允许网络中有普通的switch透传PTP报文即可由于驻留时间随机会影响测量精度而P2P要求网络中的switch必须全部支持P2P。E2E机制中校时报文和路径测量报文是耦合在一起的第二章第3部分描述的就是典型的End-to-End的流程它使用Sync、Follow_Up、Delay_Req、Delay_Resp四个消息同时计算时钟偏差和路径测量P2P机制中有独立的报文负责路径测量把校时和路径测量解耦了。gPTP要求使用PTP方式并且要求网络中所有设备都支持PTP协议路径传输延时测量只在相邻节点之间进行他使用Pdelay_Req、Pdelay_Resp、Pdelay_Resp_Follow_Up消息来测量路径传输延时。注意Peer-to-Peer中没有使用Sync报文而是专门为路径测量新建了几个报文降低了复杂度。具体流程如下节点 A 在 t1 时刻发送路径测量请求命令 Pdelay_Req并记录下时刻 t1节点 B 在 t2 时刻收到 Pdelay_Req节点 B 将 t2 放在报文 Pdelay_Resp 中并在 t3 时刻将该报文发给节点 A节点 B 将 t3 放在报文 Pdelay_Resp_Follow_Up 中发给节点 A节点 A 在 t4 时刻收到Pdelay_Resp_Follow_Up。至此节点A拥有t1、t2、t3、t4四个参数平均路径传输延时可以通过下面的公式计算出来path_delay(t4 – t3 t2 – t1)/2在Peer-to-Peer机制中不仅节点A会主动发起测量请求节点B也会主动发起测量请求也就是说每个节点都知道和自己紧挨着的节点的传输延时Peer-to-Peer的名字也是这样来的。不过有的场景下比如固定主时钟的情况可能会禁止 master port 进行路径测量。3.6 时钟类型PTP时钟可以分为两类One-Step Clock 和 Two-Step Clock。还记得2.2小节中Follow_Up消息的作用吗 它只是为了把t1的值传给slave节点。这种时钟就是Two-Step Clock 它的事件报文(Sync等中不携带时间信息需要用另外一条普通报文传输时间信息用来描述上一条事件报文是在什么时候发送的。如果t1能在Sync报文本身中传递给slave节点就节省了一条报文理论上来讲同一个网络内可以存在两种类型的时钟并且时钟类型不会影响校时精度。gPTP 要求使用 Two-step Clock因为这种机制对硬件要求较低方便后续扩展以及在现有的网络中普及。四、gPTP校时过程4.1 绝对时钟同步以下图为例介绍 gPTP 时间同步过程为了表述方便这里做两点假设假设下面的三个设备都是 One-Step Clock即 Sync 报文发出后不需要额外的 Follow_Up 报文告知 Sync 报文是在哪个时刻发送的。实际802.1AS要求时钟必须是Two-Step的假设各设备已经通过前面介绍的 Peer-to-Peer 机制测量出了路径传输延时 path_delay1、path_delay2校时流程如下Grandmaster时钟在 t1 时刻发送时间同步报文 Sync 到 Bridge报文 Sync 的 originTimestamp 中 填充时间信息 t1矫正域correction Field填充ns 的小数部分Sync 报文的时间戳部分只能表示秒和纳秒不足1纳秒的只能放在矫正域。Bridge收到 Sync 报文后不仅要矫正自己的时钟还要把 Sync 报文转发出去。Bridge根据 Sync 报文调整自己的时钟Bridge在 t2 时刻收到 Sync 报文并从中解析出 Grandmaster 是在t1时刻发送的以及 Grandmaster 填充的校正值 correction。在 t2 时刻Grandmaster 的时钟显示的值应该是t1 correction path_delay1由此可以计算出 Bridge 的时钟偏差并调整自己的时钟clock_offsett1 correction path_delay1 - t2Bridge 转发 Sync 报文如下图所示收到Sync报文后Bridge将自己与上级节点的路径延时path_delay1和Sync报文在自己这里的驻留时间rEsidence_time累加到Sync报文的矫正域并转发出去。此时矫正域correction值如下correctionold_value_of_correction path_delay1 residence_time注意Bridge不修改 Sync 报文的 originTimestamp 字段该字段为 Grandmaster 发出 Sync 报文的时间。End-Point在t4时刻收到Sync报文并从中解析出Grandmaster是在t1时刻发送该报文的以及Bridge矫正后的correction。在t4时刻Grandmaster的时钟显示的值应该是t1 correction path_delay2由此可以计算出End-Point和Grandmaster的时钟偏差并调整自己的时钟clock_offsett1 correction path_delay2 – t4由上面的校时流程可以看出整个校时过程像水面的波纹一样从Grandmaster开始向外一层层的扩散每个节点只关注自己和上级节点的传输延时Bridge负责将中间路径的传输延时和缓存时间逐段累加到矫正域。4.2 相对时钟同步如下图所示主时钟在时刻 master_t1 发出校时信号 Sync_1从时钟接收到该信号的时候记录两个值slave_t1接收到Sync_1信号时slave本地时钟的值这个值是当前时刻在slave时间坐标系下的采样slave_t1接收到Sync_1信号时master时间坐标系的值该值可以用下面的公式算出master_t1 传输时延 矫正域其中master_t1和矫正域的值在Sync报文中携带传输延时可以通过前面的方法测量。根据前面介绍的相对时钟同步原理可以通过下面的公式判断自己的频率和主时钟是否保持一致ratio(slave_tn – slave_t1)/(slave_tn’ – slave_t1’)理想情况下ratio的值应该是1如果大于1说明从时钟走的快了如果小于1说明走的慢了。从时钟可以根据该值调整自己的频率。五、参考资料1、gPTP简介上一篇AVB概述
返回列表