黄学进,崔 鑫,余 婷
(中国航发控制系统研究所,江苏 无锡 214063)
时钟同步是指调整系统中网络设备或计算机的时钟,使之与其它时钟源的时间保持一致或者偏差限定在足够小的范围内的过程[1]。时钟同步是分布式仿真系统的核心技术之一,在分布式仿真系统中,数据采集、模型处理、人机交互等都分布在不同的节点上,因此进行时钟同步的目的是维护一个全局一致的物理或逻辑时钟,以使得系统中的信息、事件及各节点与时间有关的行为有一个全局一致的解释[2]或者是提供一种仿真时间的推进机制,以确保节点发送和接收消息在时间逻辑上是完全正确的。分布式仿真系统往往具有节点操作系统类型多(Windows系统、Linux系统、RTX实时系统、LabVIEWRT实时系统等)、仿真周期小(毫秒级)、结构灵活、分布范围广的特点,因此需要时钟同步系统具备兼容多种操作系统、同步精度高(优于1 ms)、灵活度高、成本低,同时能考虑系统负载,本文提出的时钟同步系统时钟校准周期要求大于1 h。目前常用于时钟同步的技术方案有:GPS(global positioning system)时钟同步技术[3]、IRIG-B(interrange instrumentation group - B)时钟同步技术[4]、NTP(network time protocol)时钟同步技术[5]、PTP(precision time protocol)时钟同步技术[6]等。各种方案应用于分布式仿真系统中各有优缺点,如表1所示。
表1 时钟同步方案对比
从表中可以看出,NTP同步与文章的同步设计目标最为接近,只是同步精度略有不足。近年来,许多文章对NTP进行了改进和优化。谌华金[7]通过CPU时间戳计数器(RDTSC,read time stamp counter)实现了同步精度1 ms以内,但是同步周期最长只有200ms,对原系统的CPU和网络负载影响较大。侯重远[8]利用交换机的IEEE802.1p 优先级调度功能,将同步精度提高到10~100,但除了需要交换机支持调度功能外,操作系统必须为实时操作系统(如文中使用的VxWorks),不能兼容非实时Windows系统。
黄沛芳[9]通过对信息包回路时延设置阈值进行数据筛选,只保留时延0.5 ms以内的数据,将同步精度提升到250,但这需要提前获取网络时延分布信息,且同步间隔只有1 min。因此,本文基于Windows系统,在NTP协议基本原理上,通过逻辑时钟构建、网络时延不对称性优化、时钟频率补偿三方面进行优化,实现设定的分布式仿真系统时间同步目标:同步精度优于1 ms且校准时间间隔大于1 h。该时钟同步方法基于UDP通讯,研究结果同样可以推广到实时操作系统中。
NTP是由RFC1305定义的时钟同步协议,最早是由美国特拉华大学的David L.Mills教授在1982年提出[10],在实际的应用过程中,可以采用NTP的简化版本SNTP(简单网络时间协议)。这里主要介绍NTP以客户机/服务器模式进行通信的过程,如图1所示。客户机首先要生成一个NTP查询信息包,通过网络发送到时间服务器;服务器收到后,根据本地时间生成一个NTP时间信息包发送给客户机[11]。两个信息包都带有发送和接收的时间戳,根据这4个时间戳T1T2T3T4来确定客户机和服务器之间的时间偏差和网络时延。
图1 NTP通讯过程
根据NTP通讯过程,可以抽象出模型如图2所示[12]。
图2 NTP通讯模型
记客户端时间落后服务器θ,请求信息在网上传播耗时为δ1,回复信息在网上传播耗时为δ2,网络传输的往返延时和为δ,则有:
(1)
4个未知数,3个方程,无法获得解析解。假设在相同的网络条件下,客户端与服务器通讯往返回路对称,网络时间延迟相等,即存在:
δ1=δ2
(1)
(3)
根据NTP基本原理设计NTP客户端和服务器进行时钟同步测试实验,具体设计如下:
1)采用Windows系统时间作为时间戳;
2)通讯网络使用内部局域网;
3)固定周期进行时钟校准,如表2所示;
表2 系统时间下同步精度实验设计
4)实验过程中每秒进行同步精度测试并记录数据。
实验数据整理如图3所示。
图3 系统时间下时钟同步精度变化
实验结论:1)基于Windows系统时间进行同步,短时间波动量约15 ms,因此同步精度最高不会优于15 ms;2)长时间看,校准周期内,同步偏差逐渐增大,分析认为这是服务器和客户端之间时钟晶振频率不同导致。
分析时钟同步过程如图4所示,客户端和服务器获取来源于晶振的系统时间,在经过Windows下的TCP/IP协议和网卡及网络传输后,实现时间戳信息交换。因此,结合NTP基本原理和时钟同步实验结果,可以将引入误差的环节分为3个部分:时间获取、时间传输、晶振偏差。
图4 时钟同步精度影响因子
Windows时间系统主要包括实时时钟(RTC)、基本输入输出系统(BIOS)时钟和操作系统(OS)时钟三部分[13]。RTC基于晶振和计时电路的硬件时钟。BIOS时钟硬件部分对RTC时间脉冲分频产生中断信号,然后通过中断响应程序进行软件计时从而产生系统时钟[14]。BIOS时钟每秒产生64个中断信号,中断周期约为15.6 ms,即系统时钟的时钟精度约为15.6 ms。因此Windows系统常用的多个与时间有关的API,其时间分辨率只能达到15 ms,当高频率调用读取时间时,会发现多次返回时间相同,然后突然跳到下一个时间刻度,出现“时间停止”和“时间跳跃”现象,跳跃量约为15.6 ms,如图5所示。
图5 系统时间分辨率测试
因此,在Windows非实时系统下进行高精度时钟同步时,首先必须获取高精度的时间戳,这是进行高精度时钟同步的基础。
时间传输部分详细过程如图6所示,通讯传输延迟的不确定性主要受协议栈不确定性时延、网络路由不确定性时延和操作系统进程调度等方面影响[15]。
图6 NTP通讯传输过程及其不确定性时延
协议栈不确定性时延。TCP/IP五层网络架构包括应用层、运输层、网络层、数据链路层和物理层,NTP是应用层的协议,下层使用运输层的UDP协议。根据UDP/IP协议,时钟同步报文的传输需要逐层进行。传输过程受到处理器处理速度、操作系统工作方式等种种因素的影响,时钟同步报文在应用程序中开始发送到报文到达物理传输介质的时间一般无法控制,从而会引入误差。
网络路由不确定性时延。网络路由时延包括固有的链路时延、路由器处理和排队时延。报文在往返过程中不同的路由选择会导致信号的往返时延不对称。进行信息传输时,发送方首先将信息发送到本地网卡的缓冲区,然后在网络空闲时发送到接收方网卡的缓冲区,因此在网络负载高、任务繁忙的时候,接收方收到发送方信息的时间具有很大的不确定性,这就是网卡的缓存效应。因此在局域网内进行同步时,时间延迟经常是不对称的,公式计算出的时差时间差也是不准确的[16]。
操作系统进程调度。Windows系统采用时间片轮转机制对进程进行调度,进程调度中内存管理、UDP协议的封装、网卡控制器里的排队等,任何一次中断或任务调度都会打断协议栈的封装或解析过程。这些操作都将会引入不可忽略的延迟波动,达到几微秒至几毫秒,造成时间延迟的不可预测。
因此,若要降低网络传输延迟对同步精度的影响,需要在处理时间戳的过程中考虑如何降低消息包在网络传输过程中不对称通信链路带来的影响。
分布式仿真系统中,长时间下时钟的准确度取决于晶振频率准确度。但是受温度变化、电磁干扰、芯片老化等因素影响,晶振频率会发生小幅度波动,其中温度对晶振频率影响最大[17]。由于工艺和材料的原因,即使同一生产线上标称频率相同的石英晶体,其实际频率也是不同的,实际频率与标称频率偏差率从量级到量级不等。以量级为例,时钟1 h误差达360 ms。因此,即使在每次时钟同步过程中,从节点的授时精度很高,但由于频率偏差带来的守时能力差,随着时间的推移,从节点和主节点的时钟同步精度也会逐渐变差。Veitch D等人[18]通过实验得出,短时间内,时钟偏差随时间的变化基本可以认为是线性的,但长时间下,时钟偏差随时间的变化是非线性的。
要提高从节点的守时能力,主要有两个思路:一是更换时钟源,选取高精度、高稳定度、守时能力更强的晶体振荡器。晶体振荡器的稳定度等级从一般晶体振荡器、温度补偿型晶体振荡器、恒温晶体振荡器、铷原子振荡器逐步提高[19],同时晶体振荡器的成本将变得十分昂贵;另外的思路则是采用数学算法对时钟进行建模,以主节点的频率作为基准对从节点进行频率偏差补偿,提高从节点的守时精度。
对于一个系统而言,时钟可分为两种:物理时钟和逻辑时钟。物理时钟又称为绝对时钟或者墙上时钟,对应于现实世界中的时间,通常通过计算机内置的时钟芯片可以获得物理时钟。逻辑时钟是指自行建立的时钟,独立于物理时钟,但一般和物理时钟有一定的换算关系[20]。分布式仿真系统中,只要求系统仿真的时间和真实的时间有一定关系,而不要求和真实时间完全相同,因此可使用逻辑时钟。
高精度逻辑时钟的构建主要有两种方案:1)基于系统硬件的高分辨率性能计数器。它从系统上电开始,以其晶振频率进行计数,可通过相应的接口函数获取其当前计数值和晶振频率;2)计算机CPU中,有一个CPU时间戳计数器,记录了自CPU上电后的时钟周期数,通过机器指令RDTSC(read time stamp counter)可以读取这个值[22]。但是,多核计算机情况下读取的RDTSC指令并不准确,原因包括:同一主板上每个核的TSC是不同步的,读取的RDTSC可能在不同CPU上;CPU时钟频率可能变化,例如某些节能模式或超频[21]。因此,本文选择基于高分辨率性能计数器构建逻辑时钟。
高分辨率性能计数器提供函数QueryPerformanceFrequency用于获取频率,提供函数QueryPerformanceCounter用于获取计数器的当前值u,利用两次获得的计数之差及时钟频率,就可算出经历的精确时间[22]:
(4)
取初始时刻计数值为u0,对应的系统时间为t0,当前计数值为u(t),建立的逻辑时钟时间为T,根据式则有:
(5)
经测试,该逻辑时钟的实用时钟分辨率约为2,远小于同步精度指标,可用于时钟同步,如图7所示。
图7 逻辑时钟分辨率测试
基于逻辑时钟设计时间同步客户端和服务器进行同步测试实验,具体设计如下:
1)采用高精度逻辑时钟作为时间戳;
2)通讯网络使用内部局域网;
3)固定周期进行时钟校准,如表3所示;
表3 系统时间下同步精度实验设计
4)实验过程中每秒进行同步精度测试并记录数据。
实验数据整理如图8和图9所示。
图8 高精度时钟下同步实验结果
图9 局部同步瞬时误差和毛刺
根据实验数据,可以得出如下结论:
1)校准周期内,同步精度变化总体呈线性变化趋势,变化速率约0.36 ms/min;
2)每5 min校准下同步精度达到1.8 ms,每20 min校准下同步精度达到7.2 ms。因此在本次测试环境下,要达到1 ms同步精度,则校准间隔至多只能160 s;
3)同步精度局部存在约0.5 ms的毛刺,无毛刺时存在0.2 ms的瞬时误差;
4)回路时延大部分在0.8~1 ms之间,部分甚至超过1.4 ms,时延高的时候,同步精度更差。
因此,建立的逻辑时钟有效,但还需要进一步优化。
(6)
其中:δ1和δ2为随机量,大小在(0,δ)之间。因此,网络时延不对称性越高,授时精度越差。
图10 不等式法通讯过程
对应每一次往返通讯过程都有:
(7)
由于δ为传输延迟,都是正值,因此可得:
(8)
记δk1是{δ11,δ21,…,δn1}中的最小值,δm2是{δ12,δ22,…,δn2}中的最小值,可得:
(9)
因此,可以将θ范围缩小为:
(Tm3-Tm4)<θ<(Tk2-Tk1)
(10)
此时取真值范围的中值作为时钟偏差估计值,即:
(11)
此时估计值和真值的关系为:
(12)
再次设计时间同步客户端和服务器进行对比实验,具体设计如下:
1)采用高精度逻辑时钟作为时间戳;
2)固定周期20 min进行时钟校准;
3)网络使用内部局域网,采用不等式法优化回路往返时延的不对称性;
4)实验过程中每秒进行同步精度测试并记录数据,如图11和图12所示。
图11 不等式法下同步实验结果
图12 不等式法下局部瞬时误差
根据实验数据,可以得出如下结论:
1)回路时延比优化前明显减小,基本在0.8 ms以内;
2)同步精度毛刺消失,瞬时误差下降到0.1 ms;
因此,经过不等式法优化,回路往返时延不对称性对同步精度的影响明显减小,同步精度线性变化的趋势得到进一步加强。
3.3.1 补偿系数模型
将客户端在t时刻的逻辑时钟表示为c(t),服务器逻辑时钟表示为s(t),定义客户端和服务器时间差为θ(t),根据式有:
(13)
(14)
θ(t)=s(t)-c(t)
(15)
其中t0为高精度时钟建立时的系统时间,是一个常量。
理论上有:
Δt=Δs(t)=Δc(t)
(16)
(17)
但随着时间的进行,客户端和服务器的时间变化量并不相等,原因在于受环境条件的影响(如温度、电压、老化),时钟频率不断的产生漂移。分布式仿真系统中,并不需要系统中时间与真实时间完全一致,只需要保持相同的时间基准即可。因此,本文以服务器时钟为基准,对客户端进行晶振频率补偿。
(18)
因此有:
(19)
当α=1时,表示客户端真实时钟晶振频率与标称频率相同,与服务器时钟快慢相同;当α<1时,表示客户端真实时钟晶振频率小于标称频率,即本身时钟相对服务器时钟较慢;当α>1时,表示客户端真实时钟晶振频率大于标称频率,即本身时钟较快。
图13 补偿系数与时钟相对快慢的关系
3.3.2 补偿系数在线求解与迭代
记C(t)为客户端补偿后的理想时钟,则有:
C(t)=s(t)
(20)
根据式(13)、式(19)和式(20),可得:
(21)
其中:θ0为建立时刻客户端与服务器的时间差,是一个常量。
因此,根据式(15)和式(21):
(22)
结合式(13),可得:
(23)
将θ(t)对c(t)求导,可得:
(24)
即:
(25)
因此,理论分析可得出,若从时钟相对主时钟是严格稳定的,即时钟晶振频率补偿系数为常数,那么时钟偏差θ(t)是按线性变化的。
(26)
而由于随着时间的推移,晶振频率会发生漂移,当前补偿得到的频率过一段时间后已经不够准确了,需要再次进行频率补偿。因此,需要继续研究时钟频率补偿系数在线迭代问题。
记αi为第i次晶振补偿系数,Ci(t)为客户端第i次迭代时的理想时钟(与服务器时间保持一致)。则进行第i次迭代时,参照式(20)和(21)有:
(27)
此时客户端逻辑时钟c(t)为上次迭代时的理想时钟,即:
(28)
同理可解得:
(29)
将θ(t)对c(t)求导,可得:
(30)
即:
(31)
应用新的αi即可实现补偿系统的动态迭代,从而使系统能够维持高精度时钟同步。
应用高精度逻辑时钟、不等式法优化回路时延不对称性和时钟晶振频率在线补偿与迭代3种方法,设计时间同步客户端和服务器进行同步实验,客户端工作过程如图14所示:
图14 客户端工作流程
1)创建逻辑时钟,使用不等式法与服务器同步一次;
4)使用记录的数据,采用最小二乘拟合得到补偿系数α,更新客户端时钟并清空记录的数据,再转步骤2)。
经过约60 h的长试实验,结果如图15所示,从图和数据中可以得出:1)实验在137s后进入在线迭代环节,初次拟合得到补偿系数为α=0.999 993 35;2)时钟补偿系数α迭代次数达到12次,平均可以维持时间达到5 h;3)α在0.999 993 05~0.999 993 79之间波动,由于标称频率为3.58 MHz,所以实验过程中实际晶振频率与标称频率之间偏差量在22.2~24.9 Hz之间波动,波动量约2.7 Hz。
图15 频率补偿在线迭代下同步效果
本文在介绍NTP基本原理的基础上进行了时钟同步精度影响因子分析,并针对性采用了构建高精度逻辑时钟、不等式法优化回路时延不对称性、时钟晶振频率在线补偿3种解决策略,进行了时钟同步优化。通过长试实验,验证了优化后的时钟同步系统,能有效的实现时钟同步精度优于1 ms且平均校准周期达到5 h。项目应用时,可以将时钟同步客户端封装为DLL,集成到各分布式仿真系统软件中实现时钟同步,具有较好的工程应用价值。