发明内容
申请人认识到需要一种用于确定处理器在执行代码部分、特别是当在多任务操作系统上执行时所消耗的实际时间量的可靠系统和方法。
由此,本文中描述了确定处理器在执行代码部分中消耗的实际时间量的系统和方法。如在本文中所使用,代码部分的“活动时间”是指处理器在执行该代码部分中所消耗的实际时间量。代码部分的活动时间可通过将对应于该代码部分的上下文切换和/或额外开销时间纳入考虑范围来准确地确定。
如在本文中所使用,代码部分的“经过时间”是指在该代码部分执行的开始和结束时间之间经过的绝对时间(即,由所记录的该代码的执行开始和结束时间所定义的时间间隔)。代码部分的经过时间可包括处理器在换出间隔期间所消耗的时间。如本文中所使用,“换出间隔”是指在经过时间间隔期间发生的时间间隔,在该时间间隔期间,处理器执行不同于对应于正被测量的代码部分的处理线程的另一处理线程。经过时间还可包括获得代码部分的开始和结束时间值所导致的额外开销时间。此外,应当理解,代码部分可包括除导致记录开始和结束时间以外的其它探针。例如,可能有其它探针被放置在正被测量的代码部分内的其它代码部分(例如,函数、过程或其它逻辑组件)的开始和结束处。执行这些其它探针产生经过时间内的其它额外开销时间。
确定代码部分的活动时间可包括记录在该代码部分的执行期间所发生的上下文切换和时间值。此信息以及额外开销测量可被用来生成代码部分的活动时间,如将在以下更加详细地描述。例如,可从经过时间减去上下文切换所导致的换出时间间隔以及与时间测量相关联的额外开销时间来得到代码部分的活动时间。
在本发明的一个实施例中,多任务操作系统的处理器在执行第一处理线程的一个代码部分中所消耗的实际时间量被确定。指示定义该代码部分的执行开始和结束时间的第一时间间隔的第一信息被接收。指示在第一时间间隔内所发生的、期间处理器执行不同于第一处理线程的处理线程的一个或多个第二时间间隔的第二信息被接收。基于第一和第二信息,执行该代码部分中所消耗的实际时间量被确定。
在此实施例的一个方面,从第一时间间隔减去了这一个或多个第二时间间隔的总合时间。
在此实施例的另一个方面,指示在第一时间间隔期间获得第一信息中所消耗的额外开销时间的第三信息被接收。确定实际时间量包括从第一时间间隔减去该额外开销时间以及这一个或多个第二时间间隔的总合时间。
在此实施例的另一个方面,第二信息包括多个信息元素。每个第一信息元素指定一特定时间、在该特定时间处理器从其切换上下文的旧线程、以及在该特定时间处理器将上下文切换到的新线程。确定实际时间量包括基于这些信息元素,为这一个或多个第二时间间隔中的每一个确定该第二时间间隔的开始和结束时间。
在此实施例的又一个方面,第一信息包括多个第一信息元素,每个第一信息元素指定一时间、处理线程及事件类型。确定实际时间量包括基于这多个第一信息元素确定第一时间间隔的开始和结束时间的动作。
在此实施例的另一个方面,第二信息包括多个第二信息元素。每个第二信息元素指定一特定时间、在该特定时间处理器从其切换上下文的旧线程、以及在该特定时间处理器将上下文切换到的新线程。包括一个或多个第三信息元素的第三信息被接收,其中每个第三信息元素指定在执行一种类型的事件中所消耗的时间。确定实际时间量包括基于这些第二信息元素,为这一个或多个第二时间间隔中的每一个确定该第二时间间隔的开始时间和结束时间。确定实际时间量还包括从第一和第二信息元素确定处理器在获得第一信息中所消耗的总的额外开销时间,以及确定执行该代码部分中所消耗的实际时间量。
在另一个方面,在计算机系统上执行上述实施例的一个或多个上述动作和/或方面。
在本发明的另一个实施例中,提供了一种计算机程序产品。该产品包括计算机可读介质以及存储在该计算机可读介质上的计算机可读信号,这些信号定义了在由计算机执行时将指示计算机执行在以上段落中所描述的本发明的实施例的方法和/或在以上段落中所描述的本发明的一个或多个方面的指令。
在本发明的另一个实施例中,提供一种用于确定多任务操作系统的处理器在执行第一处理线程的一个代码部分中所消耗的实际处理器时间量的系统。该系统包括实际时间生成器,用于接收指示定义代码部分执行开始时间和结束时间的第一时间间隔的第一信息,接收指示在第一时间间隔内发生的、期间处理器执行不同于第一处理线程的另一处理线程的一个或多个第二时间间隔的第二信息,以及基于第一和第二信息,生成执行该代码部分中所消耗的实际处理器时间量。
在此实施例的一个方面,实际时间生成器用于从第一时间间隔减去这一个或多个第二时间间隔的总合时间。
在此实施例的另一个方面,实际时间生成器用于接收指示在第一时间间隔期间获得第一信息中所消耗的额外开销时间的第三信息,以及从第一时间间隔减去该额外开销时间以及这一个或多个第二时间间隔的总合时间。
在此实施例的另一个方面,第二信息包括多个信息元素。每个第一信息元素指定一特定时间、在该特定时间处理器从其切换上下文的旧线程、以及在该特定时间处理器将上下文切换到的新线程。实际时间生成器用于基于这些信息元素,为这一个或多个第二时间间隔中的每一个确定该第二时间间隔的开始和结束时间。
在此实施例的又一个方面,第一信息包括多个第一信息元素,每个第一信息元素指定一时间、处理线程及事件类型。实际时间生成器用于基于这多个第一信息元素确定第一时间间隔的开始和结束时间。
在此实施例的另一个方面,第二信息包括多个第二信息元素。每个第二信息元素指定一特定时间、在该特定时间处理器从其切换上下文的旧线程、以及在该特定时间处理器将上下文切换到的新线程。实际时间生成器用于接收包括一个或多个第三信息元素的第三信息,其中每个第三信息元素指定在执行一种类型的事件中所消耗的时间。实际时间生成器用于基于这些第二信息元素,为这一个或多个第二时间间隔中的每一个确定该第二时间间隔的开始时间和结束时间,从第一和第二信息元素确定处理器在获得第一信息中所消耗的总的额外开销时间,以及基于在动作(C)(1)-(C)(3)中所作的确定,来确定执行该代码部分中所消耗的实际时间量。
当结合附图考虑以下对本发明、包括对本发明的各方面和实施例的详细描述,本发明的其它优点、新颖特征和目的将会明确,其中附图是示意性的,而并不旨在按比例绘制。在附图中,不同的图中所示出的每个完全相同或几乎相同的组件由单个附图标记表示。为清楚起见,在不必说明即可允许本领域普通技术人员理解本发明的地方,每个图中的每个组件并不是都被标记,本发明的每个实施例或方面的每个组件也不是都被示出。
具体实施方式
本发明的实施例的功能和优点将从下述示例中更加充分地理解。以下示例旨在便于更好地理解本发明的益处及说明本发明的益处,但并不例示本发明的完整范围。
如本文中所使用,无论是在书面描述还是在所附权利要求书中,术语“包含”、“包括”、“携带”、“具有”、“含有”、“涉及”等都应被理解为是开放式的,即,意味着包括而非限于。只有过渡语“由……组成”和“本质上由……组成”才应当是封闭式或半封闭式的过渡语,如美国专利局专利审查过程手册(第八版,修订2,2004年5月)第2111.03节中就权利要求书所阐述。
示例
图1是示出代码部分的执行的经过时间和活动时间的示例的时序图100。图100纯粹是一代码部分的时序图的示例性实施例,而并不试图限制本发明的范围。例如图100的变体等这样的图的许多其它实现中的任何一种都是可能的,并旨在落入本发明的范围之内。
时间轴112示出时序图100表示从0到12毫秒(ms)的一段时间。应当认识到,可使用例如处理器周期等其它时间单位来示出这一时序图。图形102示出处理器在执行线程1的时间,从1.5-3ms,以及从6-9ms。图形104示出从0.5-1.5ms及从9-10ms获得的指示代码部分的开始和结束执行时间的计时器读。因此,图形104表示为该代码部分获得时间值中的额外开销。
图形106示出期间处理器在执行不同于线程1的一个或多个线程的换出时间间隔。
基于图形102、104和106,经过时间间隔(图形108)在0.5ms开始并在9.0ms结束,这产生了8.5ms的经过时间。时序图100示出,基于图形102-108,代码部分的活动时间(图形110)是(3-1.5)+(9-6)=4.5ms。现在将参考图2-8描述用于确定图100中所示的代码部分的活动时间的本发明的实施例。
图2是示出确定处理器在执行代码部分中消耗的实际时间的方法200的示例的流程图。方法200纯粹是确定代码部分的实际执行时间的方法的一个示例性实施例,而并不试图限制本发明的范围。例如方法200的变体等这一方法的许多其它实现的任何一种都是可能的,并且旨在落入本发明的范围之内。
在动作202,为代码部分记录计时器测量。例如,该代码部分所属的线程可在一个或多个位置包括探针,这些位置包括标记该代码部分的开始和结束的位置,还可能包括该代码部分内的位置(例如,其它逻辑组件的开始和结束)。在该代码部分的执行期间,可在每个探针位置处进行计时器测量。这些测量可被记录在记录介质上,诸如本地(例如,易失性)存储器中的临时缓冲区内或诸如磁盘等非易失性存储介质上。表示计时器测量的信息单位的示例在以下参考图4描述。
暂时离开图2,图3是表示代码的线程300的示例的伪码。代码300纯粹是代码线程的示例,而并不试图限制本发明的范围。例如线程300的变体等代码线程的许多其它的实现中的任何一种都是可能的,并且旨在落入本发明的范围之内。
图3和即将讨论的图4-6在整个说明书中将作为可从其确定代码部分的活动时间的信息的非限制性示例而被参考。应当认识到,提供这些示例是出于说明目的,且它们并不试图限制本发明的范围。其它信息也可被使用。
线程300包括代码部分302,它包括函数F(),其中F()包括函数G()。用于记录函数F()的开始和结束(也是代码部分302的开始和结束)的探针可被放在代码部分302内的位置304和306处。此外,指示函数G()执行开始和结束的探针可被放在位置308和310处。
图4是示出表示计时器测量的信息元素表400的示例的框图。图4纯粹是表示计时器测量的信息元素表的示例性实施例,而并不试图限制本发明的范围。例如表400的变体等这样的表的许多其它实现中的任何一种都是可能的,并且旨在落入本发明的范围之内。例如,表400可包括多于或少于图4中所示的条目和列,并且各条目和列可按不同顺序排列。
每个信息元素可包括时间值字段402、线程ID字段404和事件字段406。字段402(及表500的字段502和表600的字段604)中所使用的时间单位是处理器(例如,CPU)周期。但是,应当认识到,这些字段中所使用的时间单位可以是诸如毫秒等许多其它类型的单位中的任何一种。例如,信息元素408指定在线程1中,在900个处理器周期处进入函数F()。执行在以上参考图3所描述的代码部分302的位置304处的探针可产生信息元素408。应当认识到,尽管在本文中所描述的多个示例中,处理器周期是时间单位,但是也可使用其它时间单位。
又如,信息元素410指定在线程2中,在1010ms进入函数S()。此外,代码部分302的位置308、310和306处的探针分别可产生信息元素516、520和522。
回到图2,在动作204,上下文切换事件可被记录。即,从一个线程到另一个的处理器上下文的切换可被记录。上下文被切换到的线程或者从其切换上下文的线程中的一个可以是包括该代码部分的线程,而上下文切换到其中或从其切换上下文的一个或多个线程可以是不同于包括该代码部分的线程的另一线程。在一些操作系统上(例如,可从Microsoft公司购买的
),可提供使上下文切换事件能被捕捉的应用程序编程接口(API)。
如本文中所使用,“应用程序编程接口”或“API”是一个或多个计算机可读指令的指令集,它提供对一个或多个其它定义函数的计算机可读指令的指令集的访问,以使这些函数可被配置成结合应用程序在计算机上被执行。API可被视为应用程序和特定计算机环境或平台(例如,以下所讨论的任何一个)之间的“胶合物”,并可使程序员能够编出在一个或多个特定计算机平台上或在一个或多个特定计算机环境中运行的应用程序。
例如,包括Windows事件跟踪(ETW)API,它提供用于记录上下文切换事件的特征。此特征可被启用(即,开启)以使其记录上下文切换事件(例如,记录到本地存储器缓冲中或磁盘上)。因此,在OS上多个线程的并行执行期间,上下文切换事件、包括在代码部分执行期间的上下文切换事件可被记录。现在将参考图5描述表示上下文切换事件的信息元素的示例。
暂时离开方法200,图5是示出表示上下文切换事件的信息元素表500的示例的框图。表500纯粹是表示上下文切换事件的信息元素表的示例性实施例,而并不试图限制本发明的范围。诸如表500的变体等这样的表的许多其它实现中的任何一种都是可能的,并且旨在落入本发明的范围之内。例如,表500可包括其它条目和/或列,并且各条目和列可按不同方式来组织。
每个信息元素可在字段502中指定一特定时间值,在旧线程ID字段504中指定从其切换上下文的线程的线程ID,并在新线程ID字段506中指定上下文被切换到的线程的线程ID。例如,信息元素508指示,在1000个处理器周期(例如,从预定的开始时间起)处,上下文被从线程1切换到线程2,而信息元素610指示在1028个处理器周期处,上下文被从线程2切换到线程3。
在一些实施例中,不是使用字段504和506,而是每个条目可包括单个指定线程ID的字段,以及另一指定指示该线程ID所标识的线程是被切换到其中(即,换入)还是从其切换(即,换出)的值(例如,标志)的字段。条目的其它实施例也可被使用。
回到图2,在动作206,特定类型的事件(例如,函数进入、函数退出及其它类型的事件)的额外开销测量可被获得。这些测量可从较早时在例如受控的测试环境中对不同事件类型所作的先前的测量获得。或者,额外开销测量可在代码部分的执行被测量期间被测量和记录。现在将参考图6描述表示额外开销测量的信息元素的示例。
图6是示出包括多个表示额外开销测量的信息元素的表600的示例的框图。表600纯粹是表示额外开销测量的信息元素表的示例性实施例,而并不试图限制本发明的范围。诸如表600的变体等这样的表的许多其它实现中的任何一种都是可能的,并且旨在落入本发明的范围之内。例如,表600可包括其它条目和/或列,并且各条目和列可按不同方式来组织。
表600可包括信息元素606和608,其中每个信息元素具有指定事件类型的事件类型字段602以及指定与事件类型相关联的额外开销时间的额外开销时间字段604。例如,信息元素606指示函数进入事件类型有3个处理器周期的额外开销时间,而信息元素608指示函数退出事件类型具有2个处理器周期的额外开销。条目606和608假定每次进入或退出函数时分别消耗相同的时间量(分别是3个和2个处理器周期)。但是,在一些实施例中,额外开销可在每次进入或退出函数时被测量和记录,并且此信息可用不同于表600中所示的格式来记录。
回到图2,在动作208,可基于计时器测量、上下文切换事件和额外开销测量,以例如以下参考图7所描述的方式来确定代码部分的实际时间。方法200或其部分可使用以下参考图8所描述的系统800来实现。
方法200可包括其它动作。此外,作为方法200的一部分所执行的动作的顺序并不局限于图2中所示的顺序,因为这些动作可按其它顺序来执行和/或其中一个或多个动作可串行或至少部分地并行执行。例如,可与作为动作202的一部分记录一个或多个计时器测量并行地或在其之前记录一个或多个上下文切换事件作为动作204的一部分。
图7是示出例如作为执行方法200的动作208的一部分,基于计时器测量、上下文切换事件和额外开销测量确定处理器执行代码部分中所消耗的实际时间的方法700的示例的流程图。方法700纯粹是确定处理器在执行代码部分中消耗的实际时间的方法的一个示例性实施例,而并不试图限制本发明的范围。诸如方法700的变体等这样的方法的许多其它实现中的任何一种都是可能的,并且旨在落入本发明的范围之内。方法700及其动作可使用以下参考图8所描述的系统800的一个或多个元件来实现。
在动作702,可从计时器测量确定表示代码部分的经过时间的时间间隔。例如,给定一组计时器测量(例如,在动作202所记录的那些测量)和线程标识符,即可确定表示所标识的线程的代码部分的经过时间的时间间隔。
例如,使用表400中所提供的信息,线程ID为1的线程表示图3中所示的线程300。动作702可包括以下。表400中不对应于线程1的信息元素可被移除(例如,信息元素410、412、414和418),而其余信息元素可按时间值字段402排序。选择已排序的信息元素所表示的最早时间值和最晚时间值来分别定义经过时间间隔的开始时间和结束时间。例如,对表400的信息元素应用动作702可导致(900,1550)的经过时间间隔。动作702可由以下参考图8所描述的经过时间间隔生成器830执行。
在动作704,可从计时器测量和额外开销测量(例如,分别在动作202和206记录与获得的计时器测量和额外开销测量)确定表示计时器测量的额外开销的一组时间间隔。即,与正被讨论的线程对应的每个计时器测量相关联的额外开销时间可被确定和表示为时间间隔。使用图3、4和6的示例,动作704可包括首先移除表500中不对应于线程1的信息元素,然后其余信息元素可按时间值字段502排序。对于每个对应于线程1的信息元素,与事件字段406中所标识的事件相关联的额外开销可从表600确定。例如,信息元素508对应于进入函数F()事件,该事件是函数进入事件类型。表600的信息元素606指示与函数进入事件类型相关联的额外开销是三个处理器周期。额外开销时间间隔随即可被定义如下:(时间值,时间值加上额外开销时间)。因此,对于信息元素408,可得到额外开销时间间隔(900,903)。
又如,信息元素520指定退出函数G()事件,该事件具有函数退出的事件类型。表600的信息元素608指示函数退出事件类型具有两个处理器周期的额外开销。由此,动作702可包括从信息元素420得到额外开销时间间隔(1500,1502)。应当认识到,动作704可不包括为指定由已排序信息元素(即,对应于正被讨论的线程的信息元素)所指定的时间的最后时间的时间测量信息元素指定额外开销时间间隔。此信息元素可被排除在动作704以外是因为与这一测量时间相关联的额外开销时间不会对处理器在执行代码部分中消耗的实际时间添加任何额外开销。即,这一最后时间测量指示经过时间的结束,因此获得这一结束时间测量中的额外开销发生在被记录的结束时间本身以后,因此不会影响活动时间。
因此,对表400和600的信息元素执行动作704可导致一组额外开销时间间隔:{(900,903),(1200,1203),(1500,1502)}。
在动作706,可从诸如在动作204记录的上下文切换事件等上下文切换事件确定一组换出时间间隔。换出时间间隔表示在经过时间期间的时间间隔,期间处理器正在执行不同于该代码部分的线程的另一线程。例如,在图1的时序图100中,图形106指示从3ms到6ms的换出时间间隔。
使用图5的表500的示例来确定线程1的一组换出时间间隔,表500中不在字段604或606中引用线程1的信息元素被移除。其余上下文切换信息元素可按时间字段602排序。对应于从线程1切换到另一线程的每个上下文切换事件(即,“换出事件”)可被标识(例如,由信息元素608和616表示的上下文切换事件)。对于其中每一个换出事件,切换回线程1的对应的上下文切换事件(即,换入事件)可被标识。对于由信息元素608和616所表示的换出事件,对应的换入事件可被标识为由信息元素614和618所表示的事件。每个换出事件/换入事件对可定义一换出时间间隔。因此,对表500中所表示的上下文切换事件执行动作706可导致一组换出时间间隔:{(1000,1190),(1225,1411)}。
在动作708,处理器在执行代码部分中所消耗的实际时间量可从经过时间、额外开销时间间隔集与换出时间间隔集来确定。例如,可从经过时间减去所有额外开销时间间隔和所有换出时间间隔所定义的累计时间来得到代码部分的活动时间。即,活动时间等于经过时间减去(额外开销时间间隔加上换出时间间隔)。
使用来自上述动作702、704和706的示例性结果,线程300的代码部分302的活动时间:
=650-[(900,903)+(1200,1223)+(1500,1502)+(1000,1190)+(1225,1411)]
=650-(3+3+2+190+186)
=650-384
=266。
因此,对图3-6中所提供的信息应用方法700得到266个处理器周期的值作为处理器在执行代码部分302中消耗的实际时间。
方法700可包括其它动作。此外,作为方法700的一部分所执行的动作的顺序并不局限于图7中所示的顺序,因为这些动作可按其它顺序来执行和/或其中一个或多个动作可被串行或至少部分地并行执行。例如,动作702-706中的任何一个可在另一个以前、以后或与之并行执行。
方法200和700及其动作、以及这些方法和这些动作的各种实施例及变体可由在诸如非易失性记录介质、集成电路存储器元件等一个或多个计算机可读介质或其组合上有形地具体化的计算机可读信号个别或结合地定义。计算机可读介质可以是可由计算机访问的任何可用介质。作为示例,而非限制,计算机可读介质可包括计算机存储介质和通信介质。计算机存储介质包括以用于存储诸如计算机可读指令、数据结构、程序模块或其它数据等信息的任何方法或技术实现的易失性和非易失性、可移动和不可移动介质。计算机存储介质包括,但不限于,RAM、ROM、EEPROM、闪存或其它存储器技术,CD-ROM、数字多功能盘(DVD)或其它光存储,磁带盒、磁带、磁盘存储或其它磁存储设备,其它类型的易失性和非易失性存储器,任何其它可被用来存储所需信息并可由计算机访问的介质,以及前述的任何适当组合。
通信介质通常具体化为诸如载波或其它传输机制等已调制数据信号中的计算机可读指令、数据结构、程序模块或其它数据,并包括任何信息传递介质。术语“已调制数据信号”是指以在信号中将信息编码的方式设置或改变其一个或多个特性的信号。作为示例,而非限制,通信介质包括诸如有线网络或直接连线连接等有线介质,诸如声学、RF、红外和其它无线介质等无线介质,其它类型的通信介质,以及前述的任何适当组合。
一个或多个计算机可读介质上所包含的计算机可读信号可定义指令为一个或多个程序的部分,当计算机执行这些指令时,指示计算机执行本文中所描述的一个或多个功能(例如,方法500、方法700或前述的任何动作)和/或其各种实施例、变体和组合。此类指令可用多种编程语言中的任何一种来编写,例如,Java、J#、Graphical Basic、C、C#或C++、Fortran、Pascal、Eiffel、Basic、COBOL、其它编程语言,或上述的各种组合中的任何一种。其上包含此类指令的计算机可读介质可驻留在本文中所描述的任一系统800、900和1000的一个或多个组件上,可被分布在一个或多个此类组件上,并可在其间转移。
计算机可读介质可以是便携式的,从而存储在其上的指令可被加载到任何计算机系统资源上以实现本文中所讨论的本发明的诸方面。此外,应当认识到,上述存储在计算机可读介质上的指令并不局限于被具体化为在主计算机上运行的应用程序的一部分的指令。相反,这些指令可被具体化为可被使用以将处理器编程为实现以上所讨论的本发明的诸方面的任何类型的计算机代码(例如,软件或微码)。
应当认识到,例如参考图9和10所描述的执行本文中所描述的功能的计算机系统等计算机系统的任何单个组件或多个组件的集合一般可被视为控制这些功能的一个或多个控制器。这一个或多个控制器能用许多方式来实现,诸如用专用硬件和/或固件、使用被编程为使用微码或软件来执行上述功能的处理器,或前述的任何适当组合。
图8是示出一种用于确定处理器在执行一个代码部分中消耗的实际时间的系统800的示例的框图。系统800可实现方法200和/或方法700或其部分。系统800纯粹是用于确定处理器在执行代码部分中消耗的实际时间的系统的一个示例性实施例,而并不试图限制本发明的范围。例如系统800的变体等这样的系统的许多其它实现中的任何一种都是可能的,并且旨在落入本发明的范围之内。
系统800可包括以下任何元件:处理器816、记录介质818、活动时间生成器828以及其它组件。处理器816可以是能够进行多线程执行的,并可被配置成并行接收一个或多个线程802、806和810。每个线程802、806和810分别可包括一个或多个探针805、808和812。线程802可包括代码部分804,该代码部分804可包括一个或多个探针805,可用来确定执行的活动时间。
处理器816可被配置成执行探针805、808和812,并且响应于此,如以上参考图2的动作202所描述地记录时间测量820。此外,处理器816可被配置成生成表示包括任何线程802、806和810在内的多个线程之间的上下文切换的上下文切换事件822。处理器816可响应于处理一个或多个API调用814,如以上参考图2中的动作204所描述地记录上下文切换事件822。例如,处理器816可由
NT操作系统控制,它通过使用如上所述的ETW API来记录上下文切换事件。记录介质818上还可记录额外开销测量824。
活动时间生成器828可基于计时器测量820、上下文切换事件822和额外开销测量824生成给定线程的活动时间844。活动时间生成器828可包括以下任何组件:经过时间间隔生成器830、换出时间间隔生成器834、额外开销时间间隔生成器838、活动时间引擎842以及其它组件。
经过时间间隔生成器830可被配置成接收计时器测量820和线程ID 826,并如以上参考动作702所述地生成经过时间间隔832。
换出时间间隔生成器834可被配置成接收线程ID 826和上下文切换事件822,并如以上参考图7的动作704所述地生成换出时间间隔836。
额外开销时间间隔生成器838可被配置成接收线程ID 826、计时器测量820和额外开销测量824并如以上参考动作706所述地生成额外开销时间间隔840。
活动时间引擎842可被配置成接收经过时间间隔832、换出时间间隔836和额外开销时间间隔840并生成表示处理器816在执行代码部分804中消耗的实际时间的活动时间844。活动时间引擎842可被配置成如以上参考动作708所述地生成活动时间844。
系统800及其组件可使用各种技术中的任何一种来实现,包括软件(例如,C、C#、C++、Java或其组合)、硬件(例如,一个或多个专用集成电路)、固件(例如,电可编程存储器)或其任意组合。系统800的一个或多个组件可驻留在单个设备上(例如,计算机),或者其中一个或多个组件可驻留在若干单独的、离散的设备上。此外,每个组件可被分布在多个设备上,并且其中一个或多个设备可被互相连接。
此外,在包括系统800的一个或多个组件的一个或多个设备中的每一个设备上,每一个组件可驻留在系统的一个或多个位置。例如,这些系统的组件的不同部分可驻留在设备上的存储器(例如,RAM、ROM、磁盘等)的不同区域。这一个或多个设备中的每一个设备可包括诸如一个或多个处理器、存储器系统、磁盘存储系统、一个或多个网络接口、以及将各组件相互连接的一个或多个总线或其它内部通信链路等多个公知组件等等。系统100及其组件可使用诸如以下参考图9和10所描述的计算机系统等来实现。
根据本发明的各实施例可被实现在一个或多个计算机系统上。这些计算机系统可以是诸如基于Intel PENTIUM类型处理器、Motorola PowerPC、SunUltraSPARC、Hewlett-Packard PA-RISC处理器、可从Advanced Micro Device(AMD)购买的各种处理器中的任何一种、或任何其它类型的处理器等的通用计算机。应当认识到,一个或多个任意类型的计算机系统可被用来实现本发明的各实施例。
根据本发明的一个实施例的通用计算机系统被配置成执行上述一个或多个功能。应当认识到,该系统可执行其它功能,并且本发明并不局限于具有任何一个或一组特定功能。
例如,本发明的各个方面可被实现为在诸如图9中所示的通用计算机系统900中执行的专用软件。计算机系统900可包括连接到诸如磁盘驱动器、存储器或其它用于存储数据的设备等一个或多个存储器设备904的处理器903。存储器904通常被用来在计算机系统900的操作期间存储程序和数据。计算机系统900的组件可由互连机制905耦合,该机制可包括一个或多个总线(例如,在被集成在同一机器内的组件之间)和/或网络(例如,在驻留在若干单独的离散机器上的组件之间)。互连机制905使通信(例如,数据、指令)能在系统900的系统组件之间被交换。计算机系统900还包括例如键盘、鼠标、跟踪球、话筒、触摸屏等一个或多个输入设备902,以及例如打印设备、显示屏、扬声器等一个或多个输出设备901。此外,计算机系统900可包含将计算机系统900连接到通信网络的一个或多个接口(未示出)(除互连机制905以外,或作为其替换方案)。
在图10中更加详细地示出的存储系统906通常包括计算机可读并可写的非易失性记录介质1001,其中存储了定义要由处理器执行的程序的信号或存储在介质1001之上或之中要由程序处理的信息。该介质可以是例如磁盘或闪存。通常,在操作中,处理器使数据从非易失性存储介质1001中被读入允许由处理器以比访问介质1001的速度更快的速度访问的另一存储器1002中。此存储器1002通常是诸如动态随机存取存储器(DRAM)或静态存储器(SRAM)等易失性的随机存取存储器。它可位于存储系统906中(如图所示)或可位于系统存储器904中(未示出)。处理器903一般在集成电路存储器904、1002内操纵数据,然后在处理完成以后将数据复制到介质1001中。有各种公知技术用于管理介质1001和集成电路存储器元件904、1002之间的数据移动,并且本发明不限于此。本发明不局限于特定的存储器系统904或存储系统1006。
本发明的诸方面可用软件、硬件或固件、或其任意组合来实现。此外,本发明的这些方法、动作、系统、系统元件和组件可被实现为上述计算机系统的一个部分,或可被实现为独立组件。
尽管是以例示为可在其上实施本发明的各个方面的一类计算机系统的方式示出计算机系统900,但是应当认识到,本发明的诸方面不局限于被实现于如图9中所示的计算机系统上。本发明的各个方面可在具有不同于图9中所示的体系结构或组件的一个或多个计算机上实施。
计算机系统900可以是能使用高级计算机编程语言编程的通用计算机系统。计算机系统900还可使用专门编程的、专用的硬件来实现。在计算机系统900中,处理器903通常是诸如可从Intel公司购买的公知的Pentium类处理器等可购买的处理器。还有许多其它处理器可用。此类处理器通常在可以是例如可从Microsoft公司购买的
2000
或
操作系统,可从Apple Computer购买的MACOS系统X,可从Sun Microsystems购买的Solaris操作系统,可从各种来源得到的Linux以及可从各种来源得到的UNIX等操作系统上执行。各种其它操作系统中的任何一种可被使用。
处理器和操作系统一起定义了为其用高级编程语言编写应用程序的计算机平台。应当理解,本发明并不局限于特定计算机系统平台、处理器、操作系统或网络。同样,本领域技术人员应当明确,本发明并不局限于特定编程语言或计算机系统,并且其它适当的编程语言及其它适当的计算机系统也可被使用。
该计算机系统的一个或多个部分可被分布在耦合到一通信网络的一个或多个计算机系统(未示出)上。这些计算机系统也可以是通用计算机系统。例如,本发明的各个方面可被分布在配置成向一个或多个客户计算机提供服务的(例如,服务器)或作为分布式系统的一个部分执行总的任务的一个或多个计算机系统中间。例如,本发明的各个方面可在包括分布在执行根据本发明的各个实施例的各种功能的一个或多个服务器系统中间的组件的客户机-服务器系统上实施。这些组件可以是可执行的、中间的(例如,IL)或解释的(例如,Java)代码,它们使用通信协议(例如,TCP/IP)通过通信网络(例如,因特网)通信。
应当认识到,本发明并不局限于在任何一个或一组特定系统上执行,并且本发明并不局限于任何特定的分布式体系结构、网络、或通信协议。
本发明的各个实施例可使用诸如SmallTalk、Java、J#(J-Sharp)、C ++、Ada或C#(C-Sharp)等面向对象的编程语言来编程。其它面向对象的编程语言也可被使用。或者可使用功能的、脚本的和/或逻辑编程语言。本发明的各个方面可在非编程环境(例如,以HTML、XML或其它格式创建的文档,当在浏览器程序的窗口中查看这些文档时,它们呈现图形用户界面(GUI)的方面或执行其它功能)中实现。本发明的各个方面可被实现为编程的或非编程的元素,或其任何适当的组合。此外,本发明的各个实施例可使用可从Microsoft公司获得的Microsoft.NET技术实现。
在已描述了本发明的一些示例性实施例以后,本领域技术人员应当明确,前述纯粹是示例性而不是限制性的,它们仅是作为示例而给出的。许多修改和其它示例性实施例是在本领域普通技术人员范围之内的,并且构想它们落入本发明的范围之内。特别地,尽管本文中所给出的许多示例涉及方法动作或系统元件的特定组合,但是应当理解,那些动作和那些元件能以其它方式组合来实现相同的目的。仅结合一个实施例讨论的动作、元件和特征并不旨在被排除在其它实施例中的类似角色之外。此外,对于所附权利要求书中所述的一个或多个手段加功能限制,这些手段并不旨在被局限于本文中所解释的用于执行所述功能的手段,而是旨在将任何已知或有待开发的、用于执行所述功能的等效手段覆盖在范围之内。
在所附权利要求书中使用序数项“第一”、“第二”、“第三”等等来修饰权项元素本身并不意味着任何优先级、优先权、或是一个权项元素排在另一个之前、或者执行方法的动作的时间顺序,而是纯粹被用作标记以将具有特定名称的一个权项元素与另一具有相同名称(除了使用了序数项以外)的元素区别开来,以区别各权项元素。