一种提高FC网络时间同步精度的方法

    杨媛媛 王晓华 武健

    

    

    

    【摘要】? ? 本文研究了FC网络的时间同步问题,分析了系统RTC的同步误差,提出了通过实时修正和维护客户端在标准时间内的晶振跳动次数来达到提高时钟同步精度的方法。最后通过实验测试了本文所提出的时钟同步精度校准计算方法的有效性。

    【关键词】? ? FC? ? 时间同步

    引言:

    光纤通道(FC,Fiber Channel)是1998年由美国国家标准委员会(ANSI)研究出的,用于连接工作站、大型机、巨型机、存储设备、显示器以及其他IO设备的高速串行数据传输协议。FC技术可同时支持同一接口上传输多种不同的协议,提供了一种通用数据传输机制;传输速度快;可以给计算机设备提供接近于设备处理速度的吞吐量;传输距离远,采用单模光纤作为数据传输介质时,传输距离可高达10KM;连接简单灵活,支持点到点、仲裁环网、交换机结构三种拓扑结构;提供一种能够低误码率,低延迟数据传输的手段。在航空电子环境中,FC-AE[1]也可以用于综合化模块化航空电子[2](IMA,Integrated Modular Avionics)系统互联。

    对于越来越复杂的综合化航电系统而言,全局或局部的时钟同步是不可或缺的,也是FC网络为上层应用提供的必要的基础服务之一。目前广泛使用的实现基础时钟同步的方法有两种,即基于FC-ELS和基于时钟同步原语[3]。但其基本思想是一致的,在网络中存在一个节点作为时钟服务器,其余节点作为时钟客户端,在一个同步周期到达时,由时钟服务器向外发送携带时钟信息的ELS帧或时钟同步原语,客户端在收到服务器的参考时钟信息后,更新本地时钟,从而实现时钟同步。这种同步方法实现简单,能够保证在单一时钟源的情况下保证基础的全局时钟同步,但其精度不够,容易造成时钟漂移。

    本文通过仔细分析讨论基础时钟同步原理的同时,提出一种校准时钟同步的方法,提高时钟同步精度。

    一、简单时钟同步原理解析

    航电系统所有节点在上电后,逻辑依据硬件晶振的频率开始采样,从0开始记录本地RTC,晶振跳动一个TICK,RTC增加1。每个节点都维护一个本地RTC计数。当应用启动后,设置其中一个节点角色为时钟服务器,设置基准时间信息以及时钟同步周期并使能,时间信息以时钟服务器的RTC为标准逐步递增,形成全局唯一时钟信息源,其余节点均为时钟客户端并使能。每当时钟服务器设置的时钟同步周期到达时,就会将此刻服务器本地的时钟信息及本地RTC信息通过FC-ELS消息或时钟同步原语发送出去,当客户端收到ELS帧或时钟同步原语后,与本地RTC进行差值比较,将差值进行时间换算,并累加到服务器发来的标准时间上,形成时钟客户端的当前时间,时钟同步精度计算的基础是RTC同步计算的精度。由于节点启动的时机不同,时钟服务器和时钟客户端之间的本地RTC存在固定的初始相位差Δ1=RTCS(0)-RTCC(0)。另一方面,由于时钟客服务器和时钟客户端由不同的硬件晶振驱动计数,即使是同厂家同批次的晶振,也会存在相对标称频率的频率误差,且这个频率误差会随着环境温度、湿度、晶振寿命等客观因素不断发生变化,这种不断变化的频率误差会导致时间同步过程中服务器和客户端的晶振跳动不同步,继而造成守时精度不同步,我们称之为守时误差,代表在一个同步周期内存在时间保持误差Δ0。在某个采样点t,时钟客户端通过计算获取的系统RTC为:

    RTCS(t)=RTCC(t)+Δ1+Δ0

    其中Δ1 为上电RTC差,为固定值,Δ0 由晶振的频率准确度和稳定度等硬件特性决定,Δ0 的值与工作当时的温湿度、晶振寿命等不确定因素强相关。当连续同步两次时,得到RTCS(t1)-RTCS(t0)=RTCC(t1)-RTCC(t0)+(Δ01-Δ00),即

    Δf = (Δ01-Δ00)代表由于服务器和客户端晶振特性偏差而导致的时间漂移,因此,Δf 是制约系统时钟同步精度的关键因素,理想情况下,当服务器与客户端的晶振频率始终完全相同时,Δf =0。要想提高时间同步精度,就应该想办法将Δf 尽可能缩小。

    二、解决方案

    时间同步的前提是全局以服务器的时间为标准时间,以服务器的晶振频率为标准频率。为时钟服务器两次同步之间的时间差,即为应用设置的全局时间同步周期T,为时钟客户端连续收到两次同步原语之间的时间差,即以客户端的晶振频率计算得出的时间间隔差则(2)式演变为

    理想方案下,如果服务器和客户端晶振频率一致,fs = fc,则。但事实上由于晶振频率差,会导致客户端计算得到的与上一次同步的时差产生偏移,同步误差计算公式如下:

    例如,应用设置系统时钟服务器每50毫秒同步一次,但客户端两次同步间隔却为49毫秒或51毫秒,最差的情况发生在时钟客户端晶振为正偏,即fc=fn(1+ft),而时钟服务器晶振为负偏,即fs=fn(1-ft),反之,也成立,其中fn为晶振的标准频率。假设当ft为10ppm时,同步周期TP等于10ms时,同步偏差Δ0约为200ns。如上所述,要解决晶振偏差导致的时钟同步偏差就必须将服务器和客户端的晶振频率调整一致,但频率是由硬件特性决定的,无法改变,因此我们采用调整客户端晶振的单次跳动时间来达到守时的目的。

    计算并记录客户端在1秒内跳动的次数NC,之后就以1/NC作为客户端的1个Tick的标准时长来进行同步时间计算。当客户端晶振由于环境因素再次导致同步偏移时,就再次同步,通过这种实时监测同步误差的方法來持续守时。当时钟服务器到达T开始同步时,时钟客户端跳动了n次,按初始条件时钟客户端1秒钟跳动NC次,单次跳动时间(1000/NC),本次周期内客户端经过的时间为n*(1000/NC)*T,晶振频率一旦漂移,n会发生变化,此时通过实时人为更改NC,使得n*(1000/NC) = 1,即更改单次客户端晶振的单次跳动时间1/NC,使得客户端经过的时间时钟为T,即达到了与服务器同步的目的。实际实现中,逻辑可以记录客户端两次同步周期内经过的时间差,也即TICK数n之差Δf,从而得到应在原先Nc基础上调整的ΔN为? (5)

    為了使得守时精度的调整更稳妥,我们也可以采取二分法进行步进调整,即当逻辑检测到同步周期出现偏差时,首先使用二分之一Δf偏差进行微调,然后继续监控,若仍然存在偏差,再继续使用二分之一偏差进行微调,直至调整到可容忍偏差之内。需要注意的是,由于晶振受环境因素影响,可能会随机出现正偏或负偏,当前后两次同步恰好一次正偏一次负偏,会导致逻辑监测到的时间差非常大,若以此来计算,会与实际情况偏离越来越大,采用二分法逐步调整,能够在一定程度上避免一次调整过大而造成的失误。

    三、测试验证

    基于以上理论,利用逻辑不断监测两次同步周期之间的时间差Δf,当时间差超出容忍范围后,开始调整晶振跳动次数。,调整后的客户端1s跳动次数N'C=NC-ΔN,记录新的跳动次数作为新的时钟同步计算基准。

    建立如图1的测试环境,在系统时钟服务器晶振周期为1/125000000的情况下,调整客户端晶振周期为1/1258000000,采用二分法虽然使得调整的时间略微慢了一些,但同步误差的确在不断收敛,达到了预期目的。

    四、结束语

    本文研究了FC网络的时间同步问题,分析了系统RTC的同步误差,提出了通过实时修正和维护客户端在标准时间内的晶振跳动次数来达到提高时钟同步精度的方法。最后通过实验测试了本文所提出的时钟同步精度校准计算方法的有效性。

    本文仅分析了在航电局域网中的时间同步原理及提高守时精度的办法,实际上,这种方法可以扩展至全局时钟同步,多网络时钟同步等。

    参? 考? 文? 献

    [1] INCTIS.T 11/ 02-041v 1 fibre channel avionics environment[S]. Englewood, USA: INCTIS, 2002.

    [2] Wolfig, R著,牛文生等译.综合化模块化航空电子系统的分布式平台:对未来航空电子系统及其认证需求的见解.北京:航空工业出版社,2015.

    [3] Fibre Channel: Framing and Signaling[S]. New York: American National Standards? Institute, 2003.

    [4] John C. Eidson. IEEE Standard for a Precision Clock Syn-chronization Protocol for Networked Measurement and Control Systems[S].IEEE,2008.