复杂CPU上的精确时间戳或导出计数器值生成的制作方法

未命名 08-27 阅读:243 评论:0

复杂cpu上的精确时间戳或导出计数器值生成


背景技术:

1.操作系统(os)或bios(基本输入/输出系统)可在中央处理单元(cpu)上采取功率节省措施,诸如将cpu从工作状态移动至睡眠状态。这类措施可能导致时间函数的不可预测的执行,并且导致以低分辨率生成时间戳。


技术实现要素:

2.计算设备上的高度精确的计时通过实施对时间函数的两次连续调用而被确定性地执行,该时间函数基于在计算设备的cpu的一个或多个核心中维护的持续运行的计数器来返回当前时间。在每次调用中,相同的固定时间计算参数被使用,并且单个变量是从计数器中读取的值。每次函数调用促使指令被加载至处理器流水线中并且相关联的数据被缓存。时间函数的执行可触发非平凡的执行分支,这可导致处理器在等待操作时进入睡眠状态。因此,执行该函数所花费的时间量是不可预测的。对于对时间函数的初始调用,处理器通过基于观察到的模式来预测函数的执行路径而优化指令执行。由于指令和数据已被缓存,并且处理器具有先前执行路径预测的结果,因此后续调用相对于初始调用快速且可预测地执行,同时处理器保持在工作状态(即,不进入睡眠状态)。与生成捕获在过去的某一随机不确定时间被确定的值的低分辨率时间戳的常规技术相比,连续调用通过减轻处理器睡眠状态延迟的不可预测性来提供具有经改善的精度的确定性时间计算。
3.有利地,本计时技术可取回具有高分辨率的运行计数器的当前值,以测量时间间隔或提供例如精确时间戳或从计数器导出的其他值。这类时间戳和导出的计数器值可用在期望精度在1至2微秒内的各种场景中。例如,云计算、机器人、工业、金融和通信系统可受益于高度精确的计时,其可改进操作性能和效率、跨分布式资源精确地同步活动以及减少底层计算基础结构的安全漏洞。
4.本发明的计时技术可跨处理器类型和配置(包括复杂的cpu)实施,而不需要对计算设备上的bios(基本输入/输出系统)设定进行修改。这类兼容性可减少配置计算设备以获得精确计时的益处所需的时间,这在例如大规模部署计算机服务器并且其需要一起同步工作的分布式和云计算环境中特别有利。本发明的计时技术可实施为操作系统特征和/或暴露给应用程序或并入其中。
5.提供本发明内容以便以简化形式介绍将在以下详细描述中另外描述的一些概念。本发明内容不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用于帮助确定所要求保护的主题的范围。另外,所要求保护的主题不限于解决在本公开的任何部分中提到的任何或所有缺点的实施方式。应当理解,上述主题可实施为计算机控制的装置、计算机进程、计算系统,或者诸如一个或多个计算机可读存储介质的制品。这些和各种其他特征将通过阅读下面的详细描述和查看相关联附图而变得显而易见。
附图说明
6.图1示出了说明性计算架构;
7.图2示出了计算设备中具有多个核心的说明性处理器的细节;
8.图3示出了说明性处理器流水线;
9.图4示出了与在计算设备的操作系统中被实例化的时间函数交互的说明性高分辨率计时模块;
10.图5说明性地示出了处理器可如何在工作状态和睡眠状态之间切换;
11.图6示出了由计时模块执行的函数调用的说明性序列;
12.图7说明性地提供了示出对时间函数的初始调用如何“准备好”处理器流水线和数据高速缓存的高级别概览;
13.图8说明性地提供了示出对时间函数的后续调用如何可预测地从处理器中取回计数器值的高级别概览;
14.图9示出了在对时间函数的初始调用期间的说明性高分辨率计时模块的工作流程;
15.图10示出了在对时间函数的后续调用期间的说明性高分辨率计时模块的工作流程;
16.图11、图12和图13是在复杂cpu上生成当前精确时间戳或导出计数器值的说明性方法的流程图;
17.图14是可至少部分地用于在复杂cpu上实施当前精确时间戳或导出计数器值生成的说明性计算设备架构的框图;
18.图15是可至少部分地用于在复杂cpu上实施当前精确时间戳或导出计数器值生成的说明性计算设备的简化框图。
19.附图中相同的附图标记指示相同的元件。除非另有说明,否则元件未按比例绘制。
具体实施方式
20.图1示出了在由用户105所采用的计算设备110上操作的说明性计算架构100。该架构是分层的,并且包括用户模式115、内核模式120和硬件层125。用户模式包括应用程序130和与应用程序通信的一组应用程序编程接口(api)135。内核模式典型地被实例化为在计算设备上操作的操作系统(os)126的内核的一部分。内核包括仲裁对内核函数的访问的内核api 140以及各种内核函数145,诸如i/o(输入/输出)150、安全性155、显示控制160(例如,访问显示器或监视器)、存储器管理165和其他特权/内核函数170。内核典型地被配置为经由设备驱动器172和其他硬件接口(i/f)174对硬件层125中的硬件进行唯一访问。
21.硬件层125在内核模式120之下,并且包括计算设备110的硬件。例如,硬件包括一个或多个处理器176、存储器178、i/o 180、其他硬件182等。在该说明性示例中,处理器作为risc(精简指令集计算)架构或其他合适的isa(指令集架构)下的加载-存储处理器来操作。在替代实施方式中,处理器可被配置成利用cisc(复杂指令集计算)架构。
22.每个处理器可配置有一个或多个核心。每个核心典型地包括多个算术逻辑单元(alu)以及相关联的寄存器和控制器(图1中未示出)。为了在说明中清楚起见,除非术语和/或上下文的具体用法另外指示,否则术语“处理器(processor)”在以下描述和图式中用于共同指代一个或多个cpu和/或一个或多个处理器核心。
23.图2示出了其中多个处理器200各自利用具有多个alu 215的多个核心205的说明
性布置。处理器可通过系统总线225可操作性地耦接至系统存储器220。如图所示,1级(l1)高速缓存230与每个核心相关联,并且2级(l2)高速缓存235由每个处理器中的核心共享。在给定处理器(未示出)中还可利用不同级别和类型的其他高速缓存,诸如变换后备缓冲器(tlb)和l3或l4高速缓存。
24.高速缓存230和235以硬件实施,并且典型地使用物理上位于处理器附近的较小和较快的存储器来配置,以存储来自系统存储器的频繁使用的数据的副本。在该说明性示例中,每个l1高速缓存230包括分别由附图标记240和245指示的单独的指令专用高速缓存和数据专用高速缓存。
25.图3是说明性处理器核心205的一部分的简化框图。如图所示,处理器核心可包括前端控制单元302、指令高速缓存304、分支预测器306、指令解码器308、指令窗口310、左操作数缓冲器312、右操作数缓冲器314、第一alu 316、第二alu 318、寄存器320和加载/存储队列322。
26.在一些情况下,总线(由箭头指示)可携载数据和指令,而在其他情况下,总线可携载数据(例如,操作数)或控制信号。例如,前端控制单元302可经由仅携载控制信号的总线与其他控制网络通信。尽管图3示出了以特定布置配置的处理器核心205的特定数目的说明性组件,但是取决于特定实施方式的需要,可利用不同地配置或布置的更多或更少的组件。
27.前端控制单元302可包括被配置成控制通过处理器核心的信息流的电路系统和协调在其内部的活动的电路系统。前端控制单元302还可包括实施有限状态机(fsm)的电路系统,在有限状态机中,状态枚举处理器核心可采用的每个操作配置。使用操作码和/或其他输入(例如,硬件级信号),前端控制单元302中的fsm电路可确定下一状态和控制输出。
28.因此,前端控制单元302可从指令高速缓存304提取指令以供指令解码器308处理。前端控制单元302可通过控制网络或总线与处理器核心205的其他部分交换控制信息。例如,前端控制单元可与后端控制单元324交换控制信息。在一些实施方式中,前端和后端控制单元可被集成至单个控制单元中。
29.前端控制单元302还可协调和管理对处理器200(图2)的各种核心和其他部分的控制。因此,例如,指令块可在多个核心上同时执行,并且前端控制单元302可经由控制网络与其他核心交换控制信息,以在需要时确保用于执行各种指令块的同步。
30.前端控制单元302还可处理关于以原子方式执行的指令块的元信息和控制信息。例如,前端控制单元302可处理与指令块相关联的块报头。块报头可包括关于指令块的控制信息和/或元信息。因此,前端控制单元302可包括组合逻辑、状态机和临时存储单元(诸如触发器)以处理块报头中的各种字段。
31.前端控制单元302可在每个时钟周期提取和解码单个指令或多个指令。经解码的指令可存储在指令窗口310中,该指令窗口在处理器核心硬件中被实施为缓冲器。在一些实施方式中,指令窗口310可支持指令调度器328,该指令调度器可保持每个经解码的指令的输入(诸如断言和操作数)的就绪状态。例如,当给定指令的所有输入(如果有的话)均准备就绪时,该指令可被指令调度器328唤醒并准备发出。
32.在发出指令之前,指令所需的任何操作数可根据需要存储在左操作数缓冲器312和/或右操作数缓冲器314中。根据指令的操作码,可使用alu 316和/或alu 318或其他功能性单元对操作数执行操作。alu的输出可存储在操作数缓冲器中或存储在一个或多个寄存
器320中。以数据流顺序发出的存储操作可在加载/存储队列322中排队,直到指令块提交。当指令块提交时,加载/存储队列322可将所提交的块的存储写入存储器。分支预测器306可处理与分支出口类型有关的块报头信息,并且在进行分支预测时将该信息考虑在内。
33.如图3所示和以上所述的构成处理器核心205的元件在逻辑上可视为处理器流水线330。处理器流水线包括各种处理级,包括提取335、解码340、执行345和回写350。在一些情况下,存储器访问(未示出)也可视为处理器流水线的一个阶段。
34.图4示出了与在计算设备110(图1)的操作系统126中被实例化的时间函数410交互的说明性高分辨率计时模块405。高分辨率计时模块被示为实施为在操作系统中被实例化的功能性元件。然而,在备选场景中,高分辨率计时模块可在应用程序层415中实施为独立应用程序420或作为另一应用程序(未示出)的特征被并入。
35.在另一备选场景中,高分辨率计时模块405可配置有应用程序编程接口(api)425,其将其功能和特征暴露给应用程序层415中的应用程序430。例如,应用程序可被配置为对高分辨率计时模块进行调用,高分辨率计时模块进而对时间函数410进行调用。以此方式,时间戳和导出值的当前确定性生成的益处可由应用程序作为操作系统函数访问或作为api以与例如其他操作系统函数435类似的方式来访问。
36.时间函数410被配置为取回由每一处理器200或核心维护的计数器440的当前值。在一些实施方式中,公共共享计数器445可在多个处理器核心之间共享。计数器典型地实施为以固定频率(即,计数器速率不变)持续运行且直到处理器复位才停止的硬件寄存器。计数器独立于外部时间基准而操作。
37.高分辨率计时模块405被配置为减轻时间函数410的不可预测执行,该不可预测执行可导致所计算的时间值在一些场景中可能需要的精度内不精确。例如,时间戳和时间间隔测量结果是计算机和网络性能测量的组成部分。这些性能测量操作包括响应时间、吞吐量和等待时间的计算以及剖析代码执行。这些操作中的每一个均涉及对在由开始和结束事件限定的时间间隔期间发生的活动的测量,该开始和结束事件可独立于任何外部日期时间基准。
38.在计算设备的处理器上运行的程序代码通常利用涉及分支逻辑的执行路径,该分支逻辑不总是以完全可预测的方式执行。当与诸如使用睡眠状态的典型处理器功率节省技术结合时,这类不可预测性会不利地影响时间戳或从在处理器的一个或多个核心中持续运行的计数器导出的值的精度。
39.在利用复杂cpu的场景下,精度问题可能会变得复杂。复杂cpu可具有可利用多级指令和数据高速缓存的多个逻辑和/或物理处理器核心。在提供极佳性能的同时,复杂cpu通常利用睡眠状态来降低其内部操作频率(即,时钟速率)以管理功率消耗和热量生成。睡眠状态设定在典型情况下存在于bios(基本输入/输出系统)设定中,并且改变设定可能需要重新启动计算设备。
40.图5说明性地示出了处理器200或核心如何可在工作状态c0(由附图标记505指示)和睡眠状态c1、c2等(由附图标记510指示)之间切换。不同的处理器类型可使用不同数目的睡眠状态。一般而言,c数目越高,处理器进入睡眠模式的程度越深。睡眠模式典型地通过逐渐切断来自处理器内部的空闲单元的时钟信号和功率来工作。当系统变换至睡眠状态时(如箭头515所示),随着更多的单元通过切断时钟、降低电压或通过完全关闭而停止,节省
了更多的能量。然而,更深的睡眠需要更多的时间才能完全唤醒至工作状态。
41.当系统从睡眠状态510变换至工作状态505时,系统正在苏醒(由箭头520指示)。如流控制线525和530所示,系统典型地需要在变换至另一睡眠状态之前返回至工作状态。因为处于中间睡眠状态的系统已经丢失了一些操作上下文,因此在它可进行附加的状态变换之前它必须返回至工作状态以恢复该上下文。
42.高分辨率计时模块405(图4)被配置为执行对时间函数410的连续调用以实施睡眠状态减轻。如图6所示,连续函数调用605包括初始调用610和后续调用615。连续调用被设计成在执行指令时利用固有的处理器行为。
43.如图7中所示,初始调用610旨在“准备好(prime)”处理器,使得其将时间函数指令705加载至处理器流水线330中并将相关联的时间函数数据710缓存至数据高速缓存245中。也就是说,对时间函数的初始调用操作为将适当的指令和数据分级到位。当执行时间函数指令时,可发生程序性分支(programmatic branching),并且处理器可从工作状态变换至一个或多个睡眠状态并再次返回,这可将随机可变性注入至计数器值的精度中。然而,由于初始调用旨在通过设计来对指令和数据进行分级,因此作为响应返回的计数器值的精度是无关紧要的。
44.如图8所示,对时间函数的后续调用615用于以可预测的方式取回计数器值。由于处理器200已经利用来自初始函数调用的指令705和数据710被准备好,因此当第二次执行时间函数时,它将保持在工作状态505中,而不变换至睡眠状态。对连续函数调用的观察表明,处理器在被准备好以保持在工作状态时,将在基本上固定的时间间隔内可预测地和一致地执行时间函数。因此,利用从处于恒定工作状态的处理器中取回的计数器值而生成的时间戳更精确,因为它不包括由于变换至睡眠状态和从睡眠状态变换而导致的不可预测的延迟。
45.图9和图10分别示出了高分辨率计时模块405在对时间函数410的初始和后续调用期间的工作流程的细节。在图9中,工作流程由高分辨率计时模块启动,该模块唤起时间函数(由附图标记905指示)并传递函数参数910。函数参数可包括例如指向接收当前计数器值的变量的指针。初始调用的时间函数可从处理器流水线330(图3)中读取执行时间计算所需的计算参数,该计算参数包括开始时间值、计数器至时间转换参数等,并且从维护计数器440的处理器200中取回当前计数器值(915)。
46.处理器200从主存储器中取回时间函数指令和相关联的函数数据,并且将它们加载至相应的高速缓存240和245中(920)。如同所有指令一样,处理器将试图优化指令执行以减少总执行时间并改进总体处理器性能(925)。这类优化可包括由分支预测器306(图3)执行的执行路径预测(930),该分支预测器工作以预见并且然后提取其预测可在稍后时间点使用的指令和数据并将其排队。执行路径预测旨在减少或消除处理器等待适当指令或数据到达以用于指令执行中的下一步骤时的空闲时间。
47.虽然执行路径预测在整体上是精确的,但是程序和函数本质上是复杂的,并且由于指令中的程序性分支(programmatic branching),可能难以完全精确地预测接下来将需要哪些指令。处理器将指令从指令高速缓存加载至流水线330(图3)中以供执行(935)。当预测不正确时,可从流水线中清除错误提取的数据和指令,并且处理器加载适当的新指令。执行路径预测的结果典型地由处理器(940)例如使用寄存器保留或存储为历史,以实现多级、
动态或自适应预测。在流水线清除和再填充期间,处理器200可一次或多次变换至睡眠状态,因此完全执行函数的指令的时间可能是不可预测的。
48.处理器200将当前计数器值945返回至时间函数410(950)。时间函数使用计算参数计算时间(955),并且响应于初始调用(965)将计算的时间值960返回至高分辨率计时模块405。
49.在图10中,后续调用工作流程从高分辨率计时模块405唤起时间函数(1005)并传递函数参数910开始。从后续调用传递的函数参数(例如,指向接收当前计数器值的变量的指针)与初始调用相同。如前所述,被后续调用的时间函数可从处理器流水线330(图3)中读取执行时间计算所需的计算参数,并且从维护计数器440的处理器200中取回当前计数器值(1010)。
50.当指令240和数据245先前在初始调用期间被缓存时,处理器可从高速缓存230中提取指令和数据(1015)。处理器将鉴于先前预测历史来执行先前被缓存的指令和数据(1020)。处理器将当前计数器值1025返回至时间函数410(1030)。时间函数计算时间(1035)。在每次调用中使用相同的固定时间计算参数,其中单个变量是从计数器中读取的值。
51.响应于初始调用,时间函数410将计算的时间值1040返回至高分辨率计时模块405(1045)。高分辨率计时模块可使用计数器值(1055)产生时间戳或导出值1050。
52.图11是用于确定性地生成时间戳或从与计算设备上的至少一个处理器相关联的持续运行的计数器导出的值的说明性计算机实施的方法的流程图1100,该处理器包括处理器流水线和数据高速缓存。除非特别说明,否则在流程图中示出并在所附文本中描述的方法或步骤不限于特定的顺序或次序。此外,其中的一些方法或步骤可同时发生或执行,并且并非所有的方法或步骤均必须在给定的实施方式中执行,这取决于这类实施方式的要求,并且可任选地利用一些方法或步骤。
53.在步骤1105,执行对在计算设备上被实例化的时间函数的连续调用,连续调用包括初始调用和在后的后续调用,该时间函数与计数器对接以取回计数器的当前值。在步骤1110,响应于对时间函数的初始调用,将与时间函数相关联的指令加载至处理器流水线中,并且将与时间函数相关联的数据缓存在数据高速缓存中。
54.在步骤1115,使用被缓存的数据来执行流水线中的指令以将计数器的当前值初始返回至时间函数。在步骤1120,响应于对时间函数的后续调用,重新执行流水线中的指令,并且重新使用被缓存的数据以将计数器的当前值后续返回至时间函数。
55.图12是可由执行存储在一个或多个基于硬件的非瞬时性计算机可读存储介质上的指令的计算设备中的至少一个处理器执行的说明性方法的流程图1200。在步骤1205。在计算设备上实例化计时模块。在步骤1210,在计算设备上实例化操作系统,其中操作系统包括时间函数。
56.在步骤1215,操作计时模块以对时间函数进行背靠背调用(即,连续调用),其中背靠背调用包括初始调用和在后的后续调用。在步骤1220,响应于初始调用将时间函数指令加载至处理器的流水线中。在步骤1225,将与时间函数相关联的数据存储在处理器可响应于初始调用而访问的存储器中。
57.在步骤1230,响应于初始调用,做出关于时间函数指令将如何在处理器上执行的
预测,并且根据预测使用所存储的数据在处理器上执行指令。在步骤1235,保留(例如,使用寄存器)根据预测的执行历史。在步骤1240,响应于后续调用,根据保留的结果使用所存储的数据重新执行时间函数指令。
58.图13是可由配置有定时器的计算设备执行的说明性方法的流程图1300,该定时器可使用上述高分辨率计时模块来实施。该计算设备包括具有持续运行的计数器、指令高速缓存和分支预测器的处理器。计算设备具有工作状态和一个或多个睡眠状态。在步骤1305,执行对在计算设备上被实例化的时间函数的连续调用,连续调用包括初始调用和在后的后续调用,其中时间函数与计数器对接以取回计数器的当前值。
59.在步骤1310,响应于对时间函数的初始调用,将与时间函数相关联的指令缓存在指令高速缓存中。在步骤1315,通过使用分支预测器预测时间函数指令的执行路径来尝试对时间函数指令的执行的优化。在步骤1320,响应于该预测,执行时间函数的指令以将计数器的当前值初始返回至时间函数。
60.在步骤1325,响应于对时间函数的后续调用,根据预测的结果重新执行时间函数指令,以将计数器的当前值后续返回至时间函数,其中处理器在重新执行时间函数指令的同时保持在工作状态中。
61.图14示出了用于诸如服务器的设备的说明性架构1400,该设备能够执行本文所描述的用于在复杂cpu上生成当前精确时间戳或导出计数器值的各种组件。图14所示的架构1400包括一个或多个处理器1402(例如,中央处理单元、专用ai芯片、图形处理单元等)、包括ram(随机存取存储器)1406和rom(只读存储器)1408的系统存储器1404以及操作性地和功能性地耦接架构1400中的组件的系统总线1410。含有诸如在启动期间帮助在架构1400内的元件之间传送信息的基本例程的基本输入/输出系统典型地存储在rom 1408中。架构1400还包括用于存储软件代码或用于实施应用程序、文件系统和操作系统的其他计算机执行代码的大容量存储设备1412。大容量存储设备1412通过连接至总线1410的大容量存储控制器(未示出)连接至处理器1402。大容量存储设备1412及其相关联的计算机可读存储介质为架构1400提供非易失性存储件。尽管本文所含有的计算机可读存储介质的描述指代诸如硬盘或cd-rom驱动器的大容量存储设备,但是本领域技术人员应当理解,计算机可读存储介质可为可由架构1400存取的任何可用存储介质。
62.作为示例而非限制,计算机可读存储介质可包括以用于存储诸如计算机可读指令、数据结构、程序模块或其他数据等信息的任何方法或技术实施的易失性和非易失性、可移动和不可移动介质。例如,计算机可读介质包括但不限于ram、rom、eprom(可擦除可编程只读存储器)、eeprom(电可擦除可编程只读存储器)、闪存或其他固态存储器技术、cd-rom、dvd、hd-dvd(高清晰度dvd)、蓝光或其他光学存储件、磁带盒、磁带、磁盘存储件或其他磁存储设备,或者可用于存储所期望信息并可由架构1400存取的任何其他介质。
63.根据各种实施例,架构1400可在使用通过网络到远程计算机的逻辑连接的网络化环境中操作。架构1400可通过连接至总线1410的网络接口单元1416连接至网络。应当理解,网络接口单元1416还可用于连接至其他类型的网络和远程计算机系统。架构1400还可包括输入/输出控制器1418,用于接收和处理来自多个其他设备的输入,这些设备包括键盘、鼠标、触摸板、触摸屏、诸如按钮和开关的控制设备笔或电子指示笔(图14中未示出)。类似地,输入/输出控制器1418可向显示屏、用户接口、打印机或其他类型的输出设备(在图14中也
未示出)提供输出。
64.应当理解,本文所描述的软件组件在被加载至处理器1402中并被执行时可将处理器1402和整体架构1400从通用计算系统转变为专用计算系统,该专用计算系统被定制以便于本文所呈现的功能性。处理器1402可由任何数目的晶体管或其他离散电路元件构造,其可个别地或共同地呈现任何数目的状态。更具体地,处理器1402可响应于在本文所公开的软件模块内含有的可执行指令而作为有限状态机来操作。这些计算机可执行指令可通过指定处理器1402如何在状态之间变换来转变处理器1402,从而转变构成处理器1402的晶体管或其他离散硬件元件。
65.对本文呈现的软件模块进行编码还可转变本文所呈现的计算机可读存储介质的物理结构。在本说明书的不同实施方式中,物理结构的特定转变可取决于各种因素。这些因素的示例可包括但不限于用于实施计算机可读存储介质的技术、计算机可读存储介质的特征在于主存储器还是辅助存储器等。例如,如果计算机可读存储介质被实施为基于半导体的存储器,则本文所公开的软件可通过转变半导体存储器的物理状态而被编码在计算机可读存储介质上。例如,软件可转变构成半导体存储器的晶体管、电容器或其他分立电路元件的状态。软件还可转变这类组件的物理状态以便在其上存储数据。
66.作为另一示例,本文所公开的计算机可读存储媒体可使用磁学技术或光学技术来实施。在这类实施方式中,当在其中编码软件时,本文所呈现的软件可转变磁学介质或光学介质的物理状态。这些转变可包括改变给定磁学介质内特定位置的磁特性。这些转变还可包括改变给定光学介质内特定位置的物理特征或特性,以改变这些位置的光学特性。在不脱离本说明书的范围和精神的情况下,物理介质的其他转变是可能的,其中提供前述示例仅是为了便于本论述。
67.依据上述内容,应当理解,在架构1400中发生许多类型的物理转变,以便存储和执行本文所所呈现的软件组件。还应当理解,架构1400可包括其他类型的计算设备,包括可穿戴设备、手持式计算机、嵌入式计算机系统、智能电话、pda以及本领域技术人员已知的其他类型的计算设备。还可设想,架构1400可不包括图14所示的所有组件,可包括图14中未明确示出的其他组件,或者可利用与图14所示完全不同的架构。
68.图15是诸如pc、客户机或服务器等说明性计算设备1500的简化框图,利用该计算设备可实施在复杂cpu上生成当前精确时间戳或导出计数器值。计算设备1500包括处理器1505、系统存储器1511和将包括系统存储器1511的各种系统组件耦接至处理器1505的系统总线1514。系统总线1514可为若干种总线结构类型中的任一种,包括存储器总线或存储器控制器、外围总线或使用各类总线架构中的任一种的局部总线。系统存储器1511包括只读存储器(rom)1517和随机存取存储器(ram)1521。基本输入/输出系统(bios)1525存储在rom 1517中,它含有诸如在启动期间帮助在计算设备1500内的元件之间传送信息的基本例程。计算设备1500还可包括用于从内部设置的硬盘(未示出)读取和向其写入的硬盘驱动器1528、用于从可移除磁盘1533(例如,软盘)读取或向其写入的磁盘驱动器1530,以及用于从可移除光盘1543(诸如cd(压缩盘)、dvd(数字多功能盘)或其他光学介质读取或向其写入的光盘驱动器1538。硬盘驱动器1528、磁盘驱动器1530和光盘驱动器1538分别通过硬盘驱动器接口1546、磁盘驱动器接口1549和光盘驱动器接口1552连接至系统总线1514。驱动器及其相关联的计算机可读存储介质为计算设备1500提供计算机可读指令、数据结构、程序模
块和其他数据的非易失性存储。尽管该说明性示例包括硬盘、可移除磁盘1533和可移除光盘1543,但是可存储可由计算机存取的数据的其他类型的计算机可读存储介质,诸如磁带盒、闪存卡、数字视频盘、数据盒带、随机存取存储器(ram)、只读存储器(rom)等,也可用于在复杂cpu上的当前精确时间戳或导出计数器值生成的一些应用程序中。此外,如本文所使用的,术语计算机可读存储介质包括介质类型的一个或多个实例(例如,一个或多个磁盘、一个或多个cd等)。出于本说明书和权利要求书的目的,短语“计算机可读存储介质”及其变体旨在涵盖非瞬时性实施例,并且不包括波、信号和/或其他瞬时性和/或无形通信介质。
69.多个程序模块可存储在硬盘、磁盘1533、光盘1543、rom 1517或ram 1521上,多个程序模块包括操作系统1555、一个或多个应用程序1557、其他程序模块1560和程序数据1563。用户可通过诸如键盘1566的输入设备和诸如鼠标的指向设备1568向计算设备1500输入命令和信息。其他输入设备(未示出)可包括麦克风、操纵杆、游戏垫、圆盘式卫星天线、扫描仪、跟踪球、触摸板、触摸屏、触摸敏感设备、语音命令模块或设备、用户运动或用户手势捕捉设备等。这些和其他输入设备常常通过耦接至系统总线1514的串行端口接口1571连接至处理器1505,但是也可通过其他接口,诸如并行端口、游戏端口或通用串行总线(usb)连接。监视器1573或其他类型的显示设备也经由诸如视频适配器1575的接口连接至系统总线1514。除了监视器1573之外,个人计算机典型地包括其他外围输出设备(未示出),诸如扬声器和打印机。图15所示的说明性示例还包括主机适配器1578、小型计算机系统接口(scsi)总线1583和连接至scsi总线1583的外部存储设备1576。
70.计算设备1500可在使用到诸如远程计算机1588等一个或多个远程计算机的逻辑连接的网络化环境中进行操作。远程计算机1588可被选择为另一个人计算机、服务器、路由器、网络pc、对等设备或其他公共网络节点,并且典型地包括以上相对于计算设备1500描述的许多或所有元件,尽管在图15中仅示出了单个代表性远程存储器/存储设备1590。图15所示的逻辑连接包括局域网(lan)1593和广域网(wan)1595。这类网络化环境常常部署在例如办公室、企业范围的计算机网络、内联网和因特网中。
71.当在lan网络化环境中使用时,计算设备1500通过网络接口或适配器1596连接至局域网1593。当在wan网络化环境中使用时,计算设备1500典型地包括宽带调制解调器1598、网络网关或用于在诸如因特网等广域网1595上建立通信的其他设备。可为内部或外部的宽带调制解调器1598经由串行端口接口1571连接至系统总线1514。在网络化环境中,与计算设备1500有关的程序模块或其部分可被存储在远程存储器存储设备1590中。注意,图15中所示的网络连接是说明性的,并且可使用在计算机之间建立通信链路的其他手段,这取决于复杂cpu上的当前精确时间戳或导出计数器值生成的应用程序的具体要求。
72.现在以说明的方式而不是作为所有实施例的详尽列表来呈现复杂cpu上的本发明精确时间戳或导出计数器值生成的各种示例性实施例。一个示例包括用于确定性地生成时间戳或从与计算设备上的至少一个处理器相关联的持续运行的计数器导出的值的计算机实施的方法,该处理器包括处理器流水线和数据高速缓存,该计算机实施的方法包括:执行对在计算设备上实例化的时间函数的连续调用,连续调用包括初始调用和在后的后续调用,该时间函数与计数器对接以取回计数器的当前值;响应于对时间函数的初始调用,将与时间函数相关联的指令加载至处理器流水线中并将与时间函数相关联的数据缓存在数据高速缓存中;使用被缓存的数据来执行流水线中的指令以将计数器的当前值初始返回至时
间函数;以及响应于对时间函数的后续调用,重新执行流水线中的指令并重新使用被缓存的数据以将计数器的当前值后续返回至时间函数。
73.在另一示例中,计算机实施的方法还包括使用后续返回的计数器值来生成时间戳。在另一示例中,计算机实施的方法还包括使用后续返回的计数器值来生成导出值。在另一示例中,处理器具有工作状态和一个或多个睡眠状态,并且对时间函数的连续调用使处理器在重新执行指令并重新使用被缓存的数据以将计数器的当前值后续返回至时间函数的同时保持在工作状态中。在另一示例中,处理器响应于初始调用应用预测执行而优化指令的执行,并且响应于后续调用使用预测执行的结果而重新执行指令。在另一示例中,处理器流水线配置有包括提取、解码、执行和回写的阶段。在另一示例中,处理器流水线配置有预测执行能力。在另一示例中,至少一个处理器包括多级指令高速缓存或多个核心中的一个或多个,其中多个核心中的每一个包括单独的计数器,或者多个核心共同共享计数器。
74.另外的示例包括存储计算机可执行指令的一个或多个基于硬件的非瞬时性计算机可读存储器设备,该计算机可执行指令在由计算设备中的至少一个处理器执行时促使计算设备:在计算设备上实例化计时模块;在计算设备上实例化操作系统,该操作系统包括时间函数;操作计时模块以对时间函数进行背靠背调用,其包括初始调用和在后的后续调用;响应于初始调用,将时间函数指令加载至处理器的流水线中;响应于初始调用,将与时间函数相关联的数据存储在可由处理器存取的存储器中;响应于初始调用,预测时间函数指令将如何在处理器上执行,并且根据预测使用所存储的数据来执行指令;根据预测保留执行的历史;以及响应于后续调用,根据保留的历史使用存储的数据重新执行时间函数指令。
75.在另一示例中,计时模块可操作为应用程序特征或操作系统特征中的一种。在另一示例中,指令另外促使计算设备响应于所执行和重新执行的时间函数指令中的每一个而提供处理器上持续运行的计数器的值。在另一示例中,指令另外促使计算设备利用所提供的计数器值来生成时间戳或生成导出值。在另一示例中,预测由处理器执行。
76.另一示例包括配置有高分辨率定时器的计算设备,包括:至少一个处理器,其具有持续运行的计数器、指令高速缓存和分支预测器,该处理器具有工作状态和一种或多种睡眠状态;以及至少一种其上存储有计算机可执行指令的非瞬时性计算机可读存储介质,该计算机可执行指令在由至少一个处理器执行时促使计算设备执行对在计算设备上实例化的时间函数的连续调用,其包括初始调用和在后的后续调用,该时间函数与计数器对接以取回计数器的当前值;响应于对时间函数的初始调用,将与时间函数相关联的指令缓存在指令高速缓存中;尝试通过使用分支预测器预测时间函数指令的执行路径来优化时间函数指令的执行;响应于预测,执行用于时间函数的指令以初始地将计数器的当前值返回至时间函数;以及响应于对时间函数的后续调用,根据预测的结果重新执行时间函数指令以随后将计数器的当前值返回至时间函数,其中处理器保持在工作状态,同时重新执行时间函数指令。
77.在另一示例中,该指令另外促使计算设备将与时间函数相关联的数据缓存在与处理器相关联的数据高速缓存中。在另一示例中,对时间函数的初始调用和后续调用中的每个调用使用相同的缓存数据。在另一示例中,该指令另外促使计算设备暴露应用程序编程接口(api)以使得连续调用能够从在计算设备上操作的一个或多个应用程序唤起。在另一示例中,对时间函数的连续调用是从在计算设备上操作的应用程序发出的,并且将时间函
数实例化为操作系统函数。在另一示例中,处理器被配置为在工作状态和睡眠状态之间切换,其中工作状态包括正常操作模式,并且睡眠状态包括一个或多个节能c-模式。在另一示例中,保持在工作状态包括不进入睡眠状态。
78.虽然已经用结构特征和/或方法动作专用的语言描述了本主题,但是应当理解,所附权利要求中定义的主题不必限于上述具体特征或动作。相反,上述具体特征和动作是作为实施权利要求的示例形式而公开的。

技术特征:
1.一种用于确定性地生成时间戳或从与计算设备上的至少一个处理器相关联的持续运行的计数器导出的值的计算机实施的方法,所述处理器包括处理器流水线和数据高速缓存,所述计算机实施的方法包括:执行对在所述计算设备上被实例化的时间函数的连续调用,所述连续调用包括初始调用和在后的后续调用,所述时间函数与所述计数器对接以取回所述计数器的当前值;响应于对所述时间函数的所述初始调用,将与所述时间函数相关联的指令加载至所述处理器流水线中,并且将与所述时间函数相关联的数据缓存在所述数据高速缓存中;使用被缓存的所述数据来执行所述流水线中的所述指令,以将所述计数器的所述当前值初始返回至所述时间函数;以及响应于对所述时间函数的所述后续调用,重新执行所述流水线中的所述指令并且重新使用被缓存的所述数据,以将所述计数器的所述当前值后续返回至所述时间函数。2.根据权利要求1所述的计算机实施的方法,还包括使用被后续返回的所述计数器值来生成所述时间戳。3.根据权利要求1所述的计算机实施的方法,还包括使用被后续返回的所述计数器值来生成导出值。4.根据权利要求1所述的计算机实施的方法,其中所述处理器具有工作状态和一个或多个睡眠状态,并且其中对所述时间函数的所述连续调用使所述处理器在重新执行所述指令并且重新使用被缓存的所述数据以将所述计数器的所述当前值后续返回至所述时间函数的同时,保持在工作状态中。5.根据权利要求1所述的计算机实施的方法,其中所述处理器响应于所述初始调用而应用预测执行以优化所述指令的执行,并且响应于所述后续调用而使用所述预测执行的结果以用于所述指令的重新执行。6.根据权利要求1所述的计算机实施的方法,其中所述处理器流水线配置有包括提取、解码、执行和回写的阶段。7.根据权利要求6所述的计算机实施的方法,其中所述处理器流水线配置有预测执行能力。8.根据权利要求6所述的计算机实施的方法,其中所述至少一个处理器包括多级指令高速缓存或多个核心中的一个或多个,其中所述多个核心中的每个核心包括单独的计数器,或者所述多个核心共同共享计数器。9.一种配置有高分辨率定时器的计算设备,包括:至少一个处理器,具有持续运行的计数器、指令高速缓存和分支预测器,所述处理器具有工作状态和一个或多个睡眠状态;以及至少一个非瞬时性计算机可读存储介质,其上存储有计算机可执行指令,所述计算机可执行指令在由所述至少一个处理器执行时使所述计算设备:执行对在所述计算设备上被实例化的时间函数的背靠背调用,所述背靠背调用包括初始调用和在后的后续调用,所述时间函数与所述计数器对接以取回所述计数器的当前值;响应于对所述时间函数的所述初始调用,将与所述时间函数相关联的指令缓存在所述指令高速缓存中;尝试通过使用所述分支预测器预测所述时间函数指令的执行路径来优化所述时间函
数指令的执行;响应于所述预测,执行针对所述时间函数的指令,以将所述计数器的所述当前值初始返回至所述时间函数;以及响应于对所述时间函数的所述后续调用,根据所述预测的结果重新执行所述时间函数指令,以将所述计数器的所述当前值后续返回至所述时间函数,其中所述处理器在重新执行所述时间函数指令的同时保持在所述工作状态中。10.根据权利要求9所述的计算设备,其中所述指令还使所述计算设备将与所述时间函数相关联的数据缓存在与所述处理器相关联的数据高速缓存中。11.根据权利要求10所述的计算设备,其中对所述时间函数的所述初始调用和所述后续调用中的每个调用使用相同的被缓存的所述数据。12.根据权利要求9所述的计算设备,其中所述指令还使所述计算设备暴露应用程序编程接口(api),以使得所述背靠背调用能够从在所述计算设备上操作的一个或多个应用程序唤起。13.根据权利要求9所述的计算设备,其中对所述时间函数的所述背靠背调用是从在所述计算设备上操作的应用程序发出的,并且所述时间函数被实例化为操作系统函数。14.根据权利要求9所述的计算设备,其中所述处理器被配置为在工作状态和睡眠状态之间切换,其中所述工作状态包括正常操作模式,并且所述睡眠状态包括一个或多个节能c-模式。15.根据权利要求14所述的计算设备,其中保持在所述工作状态中包括不进入睡眠状态。

技术总结
通过实施对时间函数的两次连续调用来确定性地执行计算设备上的计时,该时间函数基于在设备的CPU的一个或多个核心中维护的持续运行的计数器来返回当前时间。在每次调用中使用相同的固定时间计算参数,其中单个变量是从计数器读取的值。对于对时间函数的初始调用,处理器通过基于观察到的模式预测函数的执行路径来优化指令执行。由于指令和数据已经被缓存,并且处理器具有先前执行路径预测的结果,因此后续调用相对于初始调用快速且可预测地执行,同时处理器保持在工作(即,非睡眠)状态中。这一系列调用通过减轻处理器睡眠状态延迟的不可预测性来提供具有改进精度的确定性时间计算。间计算。间计算。


技术研发人员:S
受保护的技术使用者:微软技术许可有限责任公司
技术研发日:2021.12.03
技术公布日:2023/8/24
版权声明

本文仅代表作者观点,不代表航空之家立场。
本文系作者授权航家号发表,未经原创作者书面授权,任何单位或个人不得引用、复制、转载、摘编、链接或以其他任何方式复制发表。任何单位或个人在获得书面授权使用航空之家内容时,须注明作者及来源 “航空之家”。如非法使用航空之家的部分或全部内容的,航空之家将依法追究其法律责任。(航空之家官方QQ:2926969996)

飞行汽车 https://www.autovtol.com/

分享:

扫一扫在手机阅读、分享本文

相关推荐