在计算机或可编程机器中处理时间值的方法

文档序号:6480955阅读:322来源:国知局
专利名称:在计算机或可编程机器中处理时间值的方法
技术领域
本发明涉及在计算机或可编程机器中处理时间值的技术领域。计 算机或可编程机器通常配置有具有不同属性的多个不同计时电路或 软件功能(计时器),该不同属性特别是精度、所表示的时间范围和时 间参考值。
背景技术
时间跟踪和时间计算在计算机和通信系统中是必不可少的。 资源调度通常是基于时间计算。常常非常需要时间测量。例如, 当需要在数据网络上将数据分组从一台计算机发送到另一台计算机, 以便以优化的方式填充发送器中的发送缓冲器时,计算出精确的传送 时间。如果以很高的精确度测量该时间,则甚至可以提高传送速率。 另一示例是在计算机上优化程序代码。必须以高精度获知不同代码的 执行时间,以便找到优化的代码。
在计算机中处理的计时器数据结构的主要属性是分辨率、参考时 间和计时器范围。分辨率表示两个不相等的时间值之间的最小正时间 差。参考时间表示启动时间计数时的时间点。范围表示最小与最大可 能时间值之间的范围。该范围通常由存储该值的数据结构(或寄存器) 的大小限制。然而,在现代计算系统中,不同的时间系统同时处理具 有不同分辨率、参考时间和范围的不同类型的计时器。
在许多基于Unix的系统上,用户空间中的主要时间对自1970年 1月1日起经过的秒进行计数。时间范围是2"2—1秒。以毫秒对自 1900年1月1日起的、MS-Windows的主要应用程序时间进行计数。
然而,硬件支持的、具有高得多的分辨率的一些其他时间系统可 用于许多系统上。例如,对从计算机开机起的每个CPU周期进行计数 的TSC计数器(时间戳计数器)可用于基于Intel 80x86 CPU的PC平
3台上。CPU周期时间与对CPU提供时钟的时钟信号的时钟周期对应。
虽然个人计算机平台上的TSC计数器实现为64比特寄存器,但可能 存在以下缺点在现代计算机系统中给出高于3GHz的高CPU频率的 情况下,TSC计数器会在几年内回绕一圈。当然,每当开机和系统复 位之后,对TSC计数器进行复位,因此不太可能到达最大值。例如, 以3GHz速度计时的CPU中的TSC计时器可以对最多跨越194年的 事件进行计时。
如TSC计数器之类的高分辨率计数器的其他缺点是这样的计数 器的局部有效性。如果独立的操作两个或更多个计算系统,则难以对 由不同系统的TSC计数器计数的时间进行比较。然而在网络或通信系 统中,需要以高时间分辨率监控数据流和处理级。

发明内容
本发明处理如下问题定义并实现有效的代数(algebra),以由具 有如计时器范围、分辨率和参考时间之类不同属性的不同计时器对计 时器值进行计算。这些计算特别包括计算这些计时器值的和以及差 值。该代数有助于将具有高精度和减小的计算支出的时钟进行比较。
本发明在于如权利要求1所要求的在计算机或可编程机器中处理 时间值的方法。本发明还涉及如权利要求7所要求的执行该方法的设 备以及如权利要求8所要求的计算机程序产品。
根据本发明,将高精度计时器数据结构定义为由至少一个时间值 数字加上标记构成,该标记阐明了计时器是表示绝对或实际时间的全 局计时器还是表示相对时间的局部计时器。如果时间值表示绝对或实 际时间值,则计时器将得到全局计时器状态。例如,Unix的主要时间 和MS Windows应用程序时间都被归入全局计时举类型。如果时间值 表示没有参考绝对或实际时间值的相对经过时间,则计时器具有作为 局部计时器的属性,因此,例如,TSC计时器是典型的局部计时器。
高精度计时器类的定义大大有助于减小CPU更新计时器数据结 构所需的处理能力。虽然根据传统计时器数据结构,每当更新计时器 结构时,必须使与高分辨率和低分辨率有关的结构成员同步,但根据
4本发明的一种高精度计时器数据结构的定义,提出了具有不同时间标 度和不同分辨率的两个计时器系统之间的时间同步的简化方案。
于是,将并入两种不同的时间系统,更有效地执行对具有标记赋 值的所述计时器结构的计算(计算时间的和以及差)。由于对计时器值 的计算将执行得快得多,所以可以在时间关键的系统上跟踪与高分辨 率计时器相关的全局时间。由此,可以实现时间关键的工作的调度(如 分组调度)的更高精度。由于网络栈中加强的计时器计算负载,使有 效的计时器计算方法变得关键。因此,在高速网络上可以用本发明的 方法提高数据分组传送速率。
另外的有利实施例可显见于从属权利要求。为了计算时间差或时 间和,特别有利的是将时间值相减或相加,并将标记结合在逻辑运 算中,以得到结果值在标记中的条目。这些逻辑或布尔运算执行得非 常快且可以具有硬件支持。
逻辑或(OR)运算对时间值的加法而言是有利的,逻辑异或(XOR)
对时间值的减法而言是有利的。


在附图中示出了本发明的实施例,以下将说明该实施例。附图示 出了配备有多个不同计时器的、通过网络电缆彼此相连的两台计算机。
具体实施例方式
图1示出了通过用于数据通信的LAN电缆40彼此相连的两台计算 机IO、 20。计算机可以是例如大功率工作站、普通PC或单芯片PC。计 算机IO、 20所附着的网络可以是高速网络。高速网络不仅在如电影或 TV摄影棚之类的视频制造场所中越来越有用,而且在广域分发网络中 也越来越有用。典型的示例是10G以太网或无限带宽。这种网络的需 求例如但不限于
分组化数据传输
低时延
同步信息,如所包括的音频-视频时间戳 视频及有关音频内容的复用
对抗差错的鲁棒性一一比特差错不应对上层可见 硬件构件块的容易的支持
元数据(如时间、音频、视频、摄像机参数)的支持
在摄影棚中,专业视频联网表示无压縮地传送视频内容。对于HD
质量,在每秒24帧和3*10比特颜色深度的情况下,在2k (2048*1080 像素)分辨率下,得到净数据速率为1.59Gbit/s的视频流。在4k分辨率 (4096*2160像素)下,得到甚至更高的数据速率。对于HDTV格式 1080i/720p,在摄影棚环境(无压縮)下,得到从250到300Mbit/s的数 据速率。这就示出了在这种情况下高速联网意味着什么。
为了对事件进行计时和测量时间跨度,现代计算机系统配备有多 个不同的计时器、计数器和时钟。现在,将描述一些普通的计时器及 限制如下
首先,在PC中有内置实时时钟(RTC)。该时钟是电池供电的, 且在PC处于掉电(power down)模式的情况下也能运行。此处,可以
读取数据和时间,但精度不高,仅为大约+/-1秒/天。
在C编程语言中有称作"time()"的函数。为了测量时段,在开始
和停止事件之前和之后将调用该函数,计算差值将给出在两事件之间 耗费的时间。该计时器的精确度为大约+/- l秒。该计时器可以对最多 持续79年的事件进行计时。
对于需要更高精确度的事件,可以使用多媒体计时器。函数名为 timeGetTime。以与C运行期函数相同的方式使用该计时器,来调用函 数timeGetTime。该计时器具有+/- 10毫秒的精确度,且可以处理最多 持续49天的事件。
利用处理器块提供了甚至更高的精度。在具有3GHz处理器的系统 上,计时器可以测量持续小于l纳秒的事件。该计时器被称作TSC计时 器(时间戳计数器),该计时器在301^系统上的精确度为+/- 0.333纳 秒。然而,不能使用高级语言直接访问该计时器。只能使用汇编指令 读取时间戳计数器(RDTSC, Read Time Stamp Counter)来调用该计
6时器。依赖于如何存储时间值,该计时器可以处理能持续非常长时间 的事件。例如,如果将时间值存储为32比特值,则该计时器可以测量
最多仅运行1.432秒的事件。然而,如果将时间返回为64比特值,则可 以对最多跨越194年的事件进行计时。
使用该计时器时应当意识到一个缺点。例如,膝上型计算机使用 Intel Pentium II处理器,以后会内置Intel Speedstep技术。同样地, AMD处理器Athlon 64或Turion 64使用称作Cool,n,Quiet或PowerNow
的技术。虽然当膝上型计算机靠电池而运行时,这些技术对节约电量 是有益的,但改变了处理器频率。如果在目标代码运行的同时频率发 生变化,则最终的读取将会是冗余的,这是由于没有使用相同的时钟 频率来进行初始和最终的读取。该期间内出现的时钟计时单元(clock
tick)数将是精确的,但所经过的时间将是未知的。
另一种现有计时器被称作增强型计时器(Etimer),其基于两个 Windows* API 函 数 QueryPerformanceCounter 禾口 QueryPerformanceFrequency 。没有办法获知利用哪个频率来在任何给 定的平台上实现这两种函数。但可以确信的是该计时器的频率在计 时过程中绝对不会发生变化。该计时器可以是芯片集计时器、或电源 管理计时器、或其他计时器。制作Etimer以满足如下两个目的其一, 其可用作精确到纳秒的高精度计时器;其二,其与Speedstep技术或类 似的技术无关。OS将检验系统是否具有内置的高精确性时钟。如果具 有,且系统不具有节能机制,则该计时器将利用该时钟,该时钟极可 能是处理器时钟。否则,该计时器将使用另一种恒定频率的时钟,如 芯片集、BIOS或电源管理计时器。当在应用程序中使用该计时器时, 要考虑某些因素。由于Etimer使用系统调用QueryPerformanceCounter 和QueryPerformanceFrequency,所以将会引入与系统调用相关联的开 销。Etimer还具有与检验机制相关联的另一开销,该检验机制确保所 有测量都在相同的处理器上进行。如果开销对于应用程序而言太大, 则建议通过调用指令RDTSC来使用处理器时钟。
在基于Unix的系统中有称作Unix时间或POSIX时间的时钟,其对 自1970年1月1日协调世界时(UTC) 00:00:00起经过的秒进行计数。时间范围是232-1秒。普遍地,UTC的一天精确持续86400秒。PC将基 于由实时时钟(如RTC时钟,或如果更精确的时钟可用,则使用更精 确的时钟)提供的时间参考值来计算相应的值。更精确的时钟的示例 是如GPS时钟、或美国国家标准局(National Bureau of Standards)时 钟、或类似的时钟(如来自Braunschweig中的Physikalische Bundesanstalt的时间服务)。
在MS Windows中,以毫秒对自1卯0年1月1日起的、可用的主要 应用时间进行计数。
在LinuxOS中,对于秒,函数调用gettimeofday传递以32比特整数 表示的Unix时间值,以及以另一32比特无符号整数表示的微秒数量。 这是上述Unix时间的扩展。
在以上各项中,全局范围计时器是实时时钟RTC、及GPS、 NBS 或PTB时间、Unix主要时间、以及MS Windows主要应用程序时间。所 有其他的是不表示绝对或实际时间的局部计时器。
图1所示的两个计算机配备有TSC计时器11和21、 RTC计时器12和 22、以及Linux计时器13和23。计算机10还连接到外部GPS计时器30, 并因此具有更精确的机载实时时钟。现有网络时间协议NTP将用于使 计算机20内部的时钟与GPS计时器30同步。
为了以高精确度将不同工作站或PC中的时刻作比较,有利的解决 方案是将如以秒计数的Unix系统时间或以毫秒计数的MS Windows 系统时间之类的全局范围计时器,与如TSC计数器之类的一个高分辨 率计时器组合起来。 一种将(局部范围)高分辨率计时器与全局范围 计时器结合在一起的可行解决方案通常实现如下。
在计时器系统的初始化期间,必须使全局时钟(Unk时间)与局 部范围时钟(TSC)同步。标准的Unix时间(表示时间点的数据类型) 是有符号整数数据类型,传统地为32比特,直接对前述部分中描述的 Unix时间数进行编码。其为整数意味着具有一秒的分辨率;因此,许 多Unix应用程序将时间仅处理到该分辨率。其为32比特(其中的一个 比特是符号比特)意味着覆盖总共约136年的范围。可表示的最早时间 是1901-12-13T20:45:52Z,可表示的最晚时间是2038-01-19T03:14:07Z。在2038-01-19T03:14:08Z时,该表示法将会溢出。
在LinuxOS中,对于秒,函数调用gettimeofday传递以32比特整数 表示的Unix时间值,以及以另一32比特无符号整数表示的微秒数量。
为了将不同计算机中的时间值作比较,必须确定两个计时器之间 的比例因子TSCjer—microsecond。这可以例如凭经验来执行。当然, 为此,需要获知CPU时钟的频率。在如Linux或MS Windows之类的操 作系统中提供了函数调用GetFr叫uency。例如,MS Windows基于 Windows API 函 数 QueryPerformanceCounter 禾口 QueryPerformanceFrequency提供了所谓的增强型计时器(Etimer)。当 已知频率时,毫秒内的信号周期数反映了值TSCjer—microsecond。在 一个实施方式中,在表中针对所有可能的CPU时钟提供 TSC_per—microsecond值。在确定了CPU时钟频率之后,将从表中读取 对应的TSCj)er—microsecond值。这就在确定该值时避免了耗时的计 算。
此后,当复位TSC计数器时,在Unix时间中针对秒和微秒设置两 个数zeroTSC—seconds禾口zeroTSC—microseconds 。
每当更新计时器数据结构的一个组件的时间值时,必须使与高分 辨率(TSC)和低分辨率(秒、微秒)有关的结构成员彼此同步。 给岀0++编程语言中计时器类的实施方式如下
C/咖T7wer f
/禱rac,'
在每个计时器数据结构更新的情况下,必须执行至少一次加法或减法以及一个縮放(乘法或除法)运算,以使高分辨率与低分辨率部 分彼此相关。
只要针对两个计时器对象Timel和Time2通过上述方式提取高分 辨率组件(TSC),以下计算步骤对于使每个计时器对象同步而言就是 必需的
0) T7we/.rSC = i "rSC
/¥#游运#^/7^^二个^1家新,逸^必暴游。
步骤0)与TSC计数器的读数对应。如同所示,根据传统的方法, 需要几次加法和除法。仅在类的高分辨率和低分辨率组件的同步之后 才可以将两个计时器作比较。然而,在高端通信系统中,通常必须每 微秒一次或几次地执行这样的运算,这在时间关键的系统内可能成为 问题。因此,希望对时基(time base)的这种同步进行简化。以下提 出了使用具有不同分辨率和不同参考点的两个时间系统的更有效方 法。根据本发明,将实际计时器数据结构的成员数减少到仅有具有更 高分辨率的系统(TSC)的相关成员。静态成员照常跟踪两时间系统 之间的偏移和比例因子。
将在计时器系统初始化期间计算并设置这些静态成员。此处,引 入称作globalJimer标记的布尔型变量,以取代上述其余成员。现在, 计时器数据结构变为如下所示的不同的数据结构
10g7o6a/—rimer,'
wz>^32 zera7151(7—/m cro1yecow成 如果设置为全局时间(即,对于Unix或Linux自01.01.1970起的秒 和毫秒,以及对于MS Windows自01.01.1900起的秒和毫秒),则将计时 器考虑为全局计时器(代表绝对或实际时间)。由于仅有TSC变量来存 储时间,所以必须将秒和毫秒縮放到TSC分辨率,如以下公式所示
在这种情况下,必须将globa1—timer标记设置为真。该运算与根据 上述传统方法的两时间系统之间的每次转换耗费大致相同的时间。然 而,具有秒和毫秒组件的低分辨率计时器不如基于高分辨率TSC的计
时器组使用频繁。此外,低分辨率计时器所需的精确度低于高分辨率 计时器的精确度。因此,与精确值的偏离低于以毫秒表示的分辨率, 而TSC分辨率下的相同类型的计算更加关键。注意,在两种情况下需 要大致相同量的指令。
如果将计时器设置为高分辨率计时器,则TSC计时器数据结构的 成员(不是global一timer标记)被设为假。将这种计时器的意义描述为 局部计时器(相对计时器)。
在实际系统中,TSC计时器的回绕将在参考时间点(如果如上将 其计算出的话)后大约100年发生。如果发生这种情况,则秒和毫秒成 员必须仍存在于新数据结构内。然而,取决于计时器的意义(局部或 全局,见下文),TSC成员或秒和毫秒成员将会有效。这将导致所提出 的方法的一些性能损失,但所提出的方法仍然比传统方法更快速。除了将类赋值给计时器以外,性能关键(performance critical)的 大多数对计数器结构的运算是加法和减法。
在进行了上述对计时器类的每次赋值运算以及加法和减法的情 况下,仅有TSC值必须被设置,或被重新计算;这分别表示对TSC成 员赋值,或对TSC成员作加法或减法。另外,必须将表示结果值意义 的global—timer标记设置如下
a)在赋值运算(其为编程语言中的运算)时,新计时器继承所赋 的值的意义。因此,此处,将从赋值者(assignor)继承全局或局部属 性。
b)在两个计时器作加法时,得到的globa1—timer标记是这两项的 标记的逻辑或(OR)运算的结果。
操作数1操作数2结果
局部局部局部
局部全局全局
全局局部全局
全局全局全局
给出局部和全局计时器值的加法的示例如下
24:00:00Z + 2008隱01-25T16:25:00Z = 2008-01-26T16:25:00Z
显然,得到全局计数器值。
上表的最后一行中的运算不是在每种环境下都成立。然而在数学 上,它是正确的且可以用于一些普通计算。使用该运算的一种情况可 以是 一些事件到达的全局平均时间的计算。对于这种计算,必须将 多个全局计时器相加,其结果再除以计时器数目。
c)当两个计时器作减法时,得到的globalJimer标记是这两项的 异或(XOR)运算的结果。
操作数1操作数2结果
全局全局局部
局部全局全局
全局局部全局
局部局部局部
12给出一个示例如下
24:00:00Z - 2008-01-25T16:25:00Z = -2008-01-24T16:25:00Z
在这种情况下,来自全局计时器的时间值是负的。乍一看它在物 理上不成立。然而,由于性能的原因,在处理器的ALU中,经常使用 这些负时间值。此外,利用这些负值进行计算并随后对它们取反会比 互换时间参数更快速。
用于计算计时器意义的异或运算以及或运算比用于将一个计时 器数据结构转换为另一个的一个整数加法/减法和一个乘法/除法快得 多。此外,可以使用一些门,以硬件的方式实现异或运算以及或运算, 因此,执行计时器计算的这种方法将比执行传统传统方法快得多。
需要对时间值进行加法、减法或比较的典型应用是
在数据网络上传送数据分组的往返延迟RTT或单项延迟的计算、 配置管理、发动机控制、自动控制技术。
上述说明书、示例和附图完整地描述了本发明组分的制造和使 用。在不背离本发明的精神和范围的前提下,可以设计出本发明的多 种实施例。本发明在于以下所附的权利要求。可以采用软件手段或硬 件手段来实现根据本发明的方法。
权利要求
1. 一种在计算机(10、20)或可编程机器中处理时间值的方法,其中,将高精度计时器结构定义为至少包括时间值数字和标记,所述标记阐明了计时器是表示绝对或实际时间的全局计时器,还是表示相对时间的局部计时器。
2. 根据权利要求l所述的方法,其中,表示绝对或实际时间值的 所述全局计时器具有具体日期和时间的意义,并且表示相对时间的所 述局部计时器与具体日期和时间没有关联。
3. 根据权利要求1或2所述的方法,其中,当来自高精度计时器结 构的两个时间值作加法时,将时间值相加并将标记以逻辑或运算进行 组合,以得到结果值的标记中的条目,其中所述全局计时器标记是显 性的,所述局部计时器标记是隐性的。
4. 根据前述权利要求中任意一项所述的方法,其中,当来自高精 度计时器结构的两个时间值作减法时,将时间值相减并将标记以逻辑 异或运算进行组合,以得到结果值的标记中的条目,其中所述全局计 时器标记是显性的,所述局部计时器标记是隐性的。
5. 根据前述权利要求中任意一项所述的方法,其中所述时间值数 字对应于如下整数值其具有足以表示来自CPU时间戳计数器TSC的 计数器值的比特长度。
6. 根据权利要求5所述的方法,其中所述整数值是64比特整数。
7. —种适于执行根据前述权利要求中任意一项所述的方法的设备。
8. —种计算机程序产品,其适于在计算机或可编程机器中运行 时,执行根据权利要求1至6中任意一项所述的方法。
全文摘要
本发明涉及一种在计算机(10、20)或可编程机器中处理时间值的方法。现代计算机(10、20)伴随着具有如时间分辨率、支持的时间范围和时间参考之类的不同属性的不同计时器应运而生。一些是局部计时器,表示如从计算机开机或复位时起对CPU周期进行计数的TSC计数器(11、21)之类的相对时间值。一些是全局计时器,表示绝对或实际时间。计算机中有不同的计时器类,需要执行多种计算以使不同计时器彼此相关。本发明的思想是定义单一的高分辨率计时器结构,其中,用数字来表示时间值,标记阐明了计时器是全局计时器还是局部计时器。本发明实现了非常快的时间值的处理。可以快得多地跟踪与高分辨率计时器相关的全局时间。这意味着如数据传输的分组调度之类的、时间关键的工作的调度的更高精度。
文档编号G06F1/12GK101498951SQ20091000973
公开日2009年8月5日 申请日期2009年1月23日 优先权日2008年1月30日
发明者安德烈亚斯·马蒂亚斯·奥斯特, 延斯·布罗克, 弗朗克·克拉斯, 拉尔夫·克勒, 斯蒂芬·库布施, 爱德华·西蒙斯 申请人:汤姆森许可贸易公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1