APP下载

基于高精度时间的时间同步方法研究

2012-07-25徐海龙罗双喜

计算机工程与设计 2012年7期
关键词:客户机计数器报文

徐海龙,罗双喜

(江苏自动化研究所,江苏 连云港222006)

0 引 言

时间同步的目的是维护一个全局一致的物理或逻辑时间[1]。确保各个节点与时间有关的事件在时间逻辑上的一致性。在各种信息处理系统中,我们对时间的应用要求可能不尽相同,怎样获取满足系统需求的时间,成为整个系统性能优劣的一个重要内容。如何低成本高精度的利用软件方式实现时间同步,成为Windows平台中一个亟待解决的问题。一些文章指出已经实现了在Windows平台上的亚毫秒级的时间同步,但是实现过程中都是基于相对虚拟时间[2],而没有与系统时间关联起来,这不是真正意义的解决问题。基于此,通过在链路层获取计数器并转换为系统时间,同时引入时钟频率调整算法,从而实现了高精度时间同步。

1 获取时间戳的误差分析

在Windows平台中,如果调用Windows API函数GetSystemTime来获取时间,这个API函数返回一个SYSTEMTIME结构,该结构包含一个wMilliseconds域,在MSDN文档中说它保存当前的毫秒时间。但是在实际应用中,由于Windows操作系统是非实时系统,故获取的时间最大精度不超过10ms[3]。这样的结果,对于毫秒级以内的时间标签需求者来说显然远远不够。下面提出几种有效获取时间戳的方法并分析其有效性。

从时间同步过程中获取时间戳的分析可知,时间戳获取点距离网络接口的远近是导致时间报文网络传输延迟计算误差的重要因素。同步报文时间戳的3个主要可能获取点如图1中描绘所示。

(1)从应用层直接获取时间报文发送/接收到时间戳,即使用原始套接字,直接获取同步报文到达应用层时的系统时间。该方法操作简单,能快速实时在系统应用层捕获数据包的发送/到达时刻。但受应用程序、操作系统、协议栈处理等因素的影响,使时间准确度有毫秒量级的不确定性;且Windows等常用系统调用当前系统时间的最低有效位是毫秒,因此造成时间戳的获取精度只能达到毫秒级。

图1 时间同步报文传递过程

(2)使用或者自行编写中间层驱动程序获取时间报文发送/接收到时间戳。该方法也是微软公司推荐使用的一种方法,用户可以根据微软提供的win2000DDK中提供的驱动程序对时间报文的发送/接收时间进行标记。具体的实现方式上可分为用户级和内核级两类。其中内核级主要是NDIS中间层捕获过滤驱动程序、NDIS捕获过滤钩子驱动程序等[4-6],它们都是利用网络驱动来实现的;而用户级的包括Windows2000包捕获过滤接口等。

利用NDIS中间驱动程序可以在网卡驱动程序和传输驱动程序之间插入一层处理程序,从而可以用来截获网络封包并进行时戳获取、重新封包及过滤等操作。由于NDIS中间驱动程序位于网卡和传输驱动程序之间,所以它可以截获较为底层的封包。从而可以完成更为低级的操作,安全系数也较高。

(3)在网卡处理处的物理层获取时间报文发送/接收到时间戳。该方法要借助于硬件从物理层获取时间报文发送/接收到时间戳,其时间戳获取精度理论上可达纳秒级,基于PTP协议的IEEE1588标准即是采用这种时间标记方法。这种方法需要给每个系统增加额外的硬件设备提高时间标记的读取精度,显然增加了系统开发的成本,也不便于已有系统的使用。

以上3种方法,时间戳获取点离网络端口越近,获得的时间戳精度就越高,但其对软硬件的要求也随之增加。在应用层获取时间戳,只需在应用程序中加入系统支持的读取时戳命令即可;在驱动层获取时间戳,需要自行编写驱动程序截获时间报文并标记时戳;而在网卡物理层获取时间戳,则需要加入硬件处理电路及相应的处理程序才能获得高精度时间戳。

2 基于高精度时间的同步算法

通过对时间戳获取途径的分析,借鉴以上第二种方法,采用以下算法,本算法通过操作系统支持的NDIS标准接口,以NPF驱动方式获取高精度的时间戳,以降低应用程序负载、操作系统任务调度等因素引起的时间偏差抖动。

2.1 通过机器链路层获取时间戳

网络时间同步过程中,客户端/服务器从发送报文前记录时间到实际从网卡发送出报文的时间,包括应用层、协议栈、网卡等多个环节的处理时间。其中,应用层、协议栈的处理时延因为受应用程序负载、操作系统任务调度、协议栈缓冲队列中的报文数量、长度及其处理等因素的影响而具有较大的不确定性。

对于现在广泛使用的Intel Pentium系列计算机,可通过其本身提供的RDTSC指令 (read time stamp counter),获得自计算机系统上电以来的64位时钟周期数 (时间计数器值),进而建立一个与系统时间关联的、支持时间偏差修正与高精度系统时间获取的虚拟时钟,其精度与CPU的时钟频率有关,由于CPU主频非常高,其短时精度可以达到纳秒级。

这种时间获取方法避开了应用层、协议栈等多个环节的处理时间以及一系列不确定因素,所以获取的时间戳非常精确有效。如图2所示。

图2 链路层获取精确时间戳

2.2 从链路层获取时间戳与系统时间建立关联

在一个小型计算机组网中,利用计算机晶振中断计数实现计时,晶体振荡器的频率并不是恒定不变的。因此,计算机节点i在时刻t的本地时间表示为[7]

式中:c0——网络节点晶振的标准频率,yi(t)——晶振在t时刻的实际输出频率,t0——本节点系统开始计时的初始时刻。yi(t0)对应i节点在t0时刻的时钟值。由于现在的Intel Pentium系列计算机,晶振频率变化非常小,所以在短时期内,可以认为节点晶振的频率为一恒值。基于这一规律,根据上式可得:第i个计算机节点的时钟模型又可表示为yi(t)=gi(t-t0)+yi(t0),其中gi=fi/f0,fi是节点i的晶体振荡器的实际频率。由于受到硬件实际性能影响,晶振的实际频率与标准频率之间存在极其微小的误差,如下所示

式中:ρ——绝对频率上限,通常ρ的值在1~100PPM之间[8]。

通过系统函数调用可以获取时钟频率 (其值一般很大),如果在链路层得到的计数器仍然使用这个时钟频率,则通过它计算的时间间隔就不够精确。所以我们从新计算一个在链路层使用的频率值,然后在需要定时的时间的两端分别调用计数器以取得计数器的数值,两次数值的差值通过这个频率即可换算成时间间隔,如图3所示。

图3 计数器与系统时间关系

假定系统运行开始时通过系统函数取得计数器为s_p,通过驱动获取计数器值d_p,一个系统任务中断后通过系统函数取得计数器为s_pl,通过驱动获取计数器值d_p1,令σs为通过系统函数取得计数器之差,σd为通过驱动获取计数器之差,则

设通过系统函数取得时钟频率为λ,由于我们基于链路层获取时间戳,设我们在链路层的实际时钟频率为λr,则

设通过系统函数取得操作系统时间t为参考时间,设tn为后续时戳,则

其中n=1,2,3,…。

2.3 时间同步算法

NTP适用于在无序的网络环境下提供精确和健壮的时间服务,只需单个标准时间源,实现成本较低[9]。

在一个简单C/S组网中,设θ为时间客户端与服务器端之间的时间偏差;设δ为时间同步过程中的网络路径延迟。那么客户机与服务器进行时间同步时的时序过程如图4所示。

图4 NTP客户机与服务器校时过程

图4 中,从客户端发送时间报文到接收到服务器的反馈报文这一个过程中,共记录了4个时戳,报文在客户端和服务器往返过程中,设总路径的网络时间延迟为δ,由于报文在从客户端到服务器与从服务器到客户端路径相等,故都等于δ/2。以服务器时钟为基准,设客户端时钟与服务器时钟的时间偏差是θ,那么可以得到如下方程式

由此可以求出客户机与服务器之间的时间偏差为

式中:T1——客户端发送的时间报文,T2——服务器接收的时间报文,T3——服务器反馈的时间报文,T4——客户端接收的服务器反馈报文。

同时可得到客户机与服务器之间的半程网络延迟为

基于即时时间和即时偏差的传统时钟调整策略会受到偶然过大即时偏差的影响,无法有效避免在得到时间偏差和延迟的基础上,传统的做法是利用这些来进行时钟调整,但是网络抖动,从而影响时统的准确性[10],针对此问题,使用了如下策略来进行时钟调整。

2.4 调整时钟频率

对于现有装备中广泛使用的Intel Pentium系列计算机,为了使获取的时间戳精确有效,首先我们介绍调整系统时钟频率的方法。抛开硬件的升级改造,我们从软件处理的角度来调整。

每台机器都有个计数器,该计数器每秒中断H次,计数器溢出时,中断处理程序就将软件时钟加1,软件时钟是从过去某一已知时间开始的所经历的tick数。下面将这个时钟的值称为C。更明确的说,当UTC时间为t时,机器p的时钟值为Cp(t)。理想情况下,对于所有的p和t应有Cp(t)=1。换句话说,理想情况下dC/dt为1。

实际的计数器不是准确的每秒中断H次。理论上说,当H=60时,计数器应每小时生成216 000次ticks。实际上,现代的计数器芯片的相对误差大约为10-5,即一台特定机器每小时的ticks数范围为215 998到216 002[11]。更准确的说,如果存在一个常数ρ,当1-ρ≤dC/dt≤1+ρ成立,就可以认为计数器是正常工作的。常数ρ是由计数器的生产者指定的,称为最大漂移率 (maximum drift rate)。图5画出了精确时钟和快慢时钟的关系。

图5 时钟快慢与准确时钟关系

为了获取时钟漂移率,从而估计出时钟频率偏差,可以采用在一定时间内获得连续时戳数据来进行线性拟合[12-13],其算法描述如下:

2.4.1 计算漂移率

设n组偏差样本值为 (t1,θ1) (t1,θ1) (t2,θ2)…(tn,,θn),其中ti代表接受到的来自服务器的第i个时间戳,θi代表即时偏差值,根据这组值我们列出线性趋势方程

式中:b0——截距,b1——漂移率。采用最小二乘法即可求得b0,b1

2.4.2 调整频率的方法

在网络时间协议 (NTP)中,客户端要与外部服务器保持时间同步,可以使用Windows提供的一个API函数SetSystemTimeAdjustment。这个API有两个参数,以100纳秒为单位的时间调节器以及一个布尔值。布尔值变量表示Windows是否禁用时间调节器。当启用时间调节器时,系统会在每个时钟中断时加上指定的时间调节器的值。当禁用时,系统会用添加缺省的时间增量取而代之。但是还有做产生了两个问题。①首先启用 (改变)时间调节器改变了参考频率——时间流;②也是一个较大的问题,就是当系统时间被修改后,系统不发送启用或禁止通知。即使以最小的156250个单位 (1单位100纳秒)缺省时间增量改变某个系统上的时间调节器,也将导致参考频率6.4PPM (1/156250)的改变。如果不加以调整,几秒之后没有进行再同步,就会偏离准确时间越来越远。为了减少这类调整带来的误差,必须监视当前时间调节的设置。对于这个问题的解决方案,我们可以通过调用SetSystem-TimeAdjustmen的伙伴函数—GetSystemTimeAdjustment来实现。在足够短的间隔内不断地执行这个检查并且根据需要调整内部频率,就能够避免客户端时间偏离服务器时间太远。

在得到时钟漂移率的基础上,每隔一定的周期调整时钟频率,下面介绍调整系统时钟频率的具体方法和步骤:

(1)获取n组偏差样本值为 (t1,θ1) (t1,θ1) (t2,θ2)… (tn,θn),采用最小二乘法即可求得漂移率η0;

(2)取int(η0)调整时钟频率 (int (η0)表示取整),然后再获取n组偏差样本值为 (t1,θ1) (t1,θ1) (t2,θ2)… (tn,θn),采用最小二乘法即可求得漂移率η1;

(3)重复步骤 (2),得漂移率η2,判断漂移率η2是否大于门限Ω。若满足则算法停止,否则继续执行步骤 (2)。

3 模拟仿真实验

3.1 Windows XP组网下时间同步

根据以上原理和方法,为了检验该时钟频率调整算法的有效性以及同步效果的精度,在基于相对时间同步[14-15]的小型实验室局域网内进行测试,网络均采用100M网卡保持较高流量,采集了超过300个网络数据来检验该时钟频率调整算法的有效性,在时间同步过程中采集了超过2000个网络数据来计算平均的时钟同步精度。

首先,选取两台装有Windows XP操作系统的电脑,组网形式为C/S模式,时间同步报文发送周期为1s,运用时钟频率调整算法后其结果如图6所示 (客户机,其中:横坐标表示样本数量 [单位:个],纵坐标表示客户机与服务器的时间差 [单位以微秒计])。

图6 调整时钟频率前后所得时间同步效果

本实验中,我们再把稳定的时间差补偿到客户机的系统时间上。再利用客户机的绝对系统时间与服务器做时间同步,并记录偏差样本2200个,同步周期分别为1s、2s,得到的时间同步效果如图7、图8所示。

3.2 实验结果分析

由图6可看出,客户机与服务器的时间差在561至564ms之间。在前50个样本内,时间差值曲线斜率较大,递减速度较快,这是由于客户端时钟和服务器时钟存在一定的频率误差所致,而又没有进行频率调整。在50个样本值后,系统进行了第一次频率调整,消除了部分漂移率,可以看到曲线斜率变得平缓一些,但是还是在递减中。再积累一定时间样本后,系统进行了第二次调整,可以看到其后的差值曲线平稳 (150个样本后),说明客户端时钟和服务器时钟频率几乎一致,漂移率控制在很小的范围内。

时钟频率调整之后,把稳定的时间偏差补偿到客户机,并调整系统时间,从图7可看出,在1s的周期下,服务器与客户机的时间偏差均在亚毫秒级 (正/副100μs以内),其偏差均值在20μs左右。图8中,在2s的周期下,服务器与客户机的偏差均值比1s周期下稍大,但仍低于50μs,且同样稳定 (正/副100μs以内)。

4 结束语

常用的基于计数器的相对时间同步方法,往往在应用层获取系统时间而精度不高,没有与系统时间建立关联,也没有考虑时钟频率漂移的影响。在我们的许多工程应用上,由于时统不准确而导致的各种问题层出不穷,如何低成本,高效率的获取精确时间,这已经成为了我们技术更新升级的瓶颈之一。本文提供的算法,避免了对外部时钟源的苛刻要求,且系统运行稳定可靠,实现也相对简单。在现代国防工业中,尤其对于小型舰载系统或者岸基系统内部,可使其同步精度达到亚毫秒级,具有很大的现实应用价值。

[1]ZHANG Yanjun,LIU Jingyu,GUO Kuo.Clock synchronization algorithm in distributed control systems [J].Industrial Control Computer,2006,19 (5):41-42 (in Chinese). [张彦军,刘靖宇,郭廓.分布式控制系统的时钟同步研究 [J].工业控制计算机,2006,19 (5):41-42.]

[2]CHEN Huajin,LUO Shuangxi,HE Jiazhou.New mechanism of realizing time-synchronization in LAN by using CPU time stamp[J].Journal of Computer Applications,2009,29(11):2920-2924 (in Chinese). [谌华金,罗双喜,何佳洲.利用CPU时间戳实现局域网时间同步的新机制 [J],计算机应用,2009,29 (11):2920-2924.]

[3]CHEN Huajin,HE Jiazhou.New mechanism of realizing timesynchronization in LAN based on data link layer [J].Journal of Computer Applications,2010,30 (5):1183-1187 (in Chinese).[谌华金,何佳洲.一种基于数据链路层的局域网时间同步新机制 [J].计算机应用,2010,30 (5):1183-1187.]

[4]HU Xiaoyuan,SHI Haoshan.Analysis and application of Win-Pcap system [J].Computer Engineering,2005,31 (2):96-98(in Chinese).[胡晓元,史浩山.WinPcap包截获系统的分析及其应用 [J].计算机工程,2005,31 (2):96-98.]

[5]ZHOU Jinling,FAN Bingbing,QIN Jie.The simulation realization of the network protocol experiments based on WinPcap[J].Computer Applications and Software,2007,24 (9):218-221(in Chinese). [周金玲,范冰冰,秦洁.基于 Win-Pcap的网络协议实验的仿真实现 [J].计算机应用与软件,2007,24 (9):218-221.]

[6]WU Liwei,YE Nianyu.The development of device driver under the Windows operation system [J].Computer & Digital Engineering,2007,35 (3):196-198 (in Chinese).[吴力炜,叶念渝.Windows平台下的设备驱动程序开发 [J].计算机与数字工程,2007,35 (3):196-198.]

[7]Shao Lei,Ray S.Rate-one space-frequency block codes with maximum diversity for MIMO-OFDM [J].IEEE Trans on Wireless Communications,2005,4 (4):1674-1685.

[8]SUN Jimin,SHEN Yulong,PEI Qingqi,et al.Abnormal time synchronization data filter algorithm in sensor networks[J].Journal of Xidian University Natural Science,2008,35(5):911-913 (in Chinese). [孙纪敏,沈玉龙,裴庆祺,等.传感器网络异常时间同步数据过滤算法 [J].西安电子科技大学学报,2008,35 (5):911-913.]

[9]QIN Mingwei,YAO Yuancheng,LI Yun.Time synchronization in network time-delay measurement [J].Communications Technology,2008,41 (8):149-150 (in Chinese).[秦明伟,姚远程,李云.网络时延测量中的时间同步系统应用研究[J].通信技术,2008,41 (8):149-150.]

[10] WANG Yini.Clock synchronization and stability analysis based on clock drift rate[D].Beijing:Beijing University of Chemical Technology,2008:1-71 (in Chinese). [王旖旎.基于时钟漂移率的时钟同步及稳定性分析 [D].北京:北京化工大学,2008:1-71.]

[11]Andrew.Tanenbaum.Modern operating systems [M].CHEN Xiangqun,transl.China Machine Press,2005 (in Chinese).[Andrew.Tanenbaum.现代操作系统 [M].陈向群,译.机械工业出版社,2005.]

[12]ZHAO Ying.Analysis of clock adjusting strategy based on NTP[J].Journal of Chinese Computer Systems,2008,29 (10):1812-1815(in Chinese).[赵英.基于NTP的时钟调整策略分析[J].小型微型计算机系统,2008,29 (10):1812-1815.]

[13]LIN Guoyuan,XU Feng,HUANG Hao.Improving intrusion detection rate using high precision time stamps [J].Journal of System Simulation,2006,18 (9):2672-2675 (in Chinese).[林果园,许峰,黄皓.利用高精度时间戳提高入侵检测率 [J].系统仿真学报,2006,18 (9):2672-2675.]

[14]GUO Qisheng,DONG Zhiming,SHAN Jiayuan,et al.Simulation systems [M].Beijing:National Defence Industrial Press,2006(in Chinese). [郭齐胜,董志明,单家元,等.系统仿真 [M].北京:国防工业出版社,2006.]

[15]TANG Qingmao,CHEN Ping,SHEN Bo.Clock synchronization algorithm in simulation systems [J].Computer Engneering,2009,35 (18):37-39 (in Chinese). [唐庆茂,陈平,沈博.仿真系统中的时钟同步算法 [J].计算机工程,2009,35 (18):37-39.]

猜你喜欢

客户机计数器报文
基于J1939 协议多包报文的时序研究及应用
采用虚拟计数器的电子式膜式燃气表
低轨星座短报文通信中的扩频信号二维快捕优化与实现
CTCS-2级报文数据管理需求分析和实现
关于74LS90计数器的Multisim仿真分析
浅析反驳类报文要点
隔山亦能打牛,本本巧变远控利器
SR620型与53230A型计数器的性能测试
算盘是个“小气鬼”
升腾瘦客户机借神码翱翔“云端”