专利名称:利用线程id和线程特权级的事件检测的限定的制作方法
技术领域:
一般地,本发明涉及处理器领域,尤其是用于监视多线程处理器的执行的方法和设备。
背景和相关领域在典型的处理器系统中,一个或多个应用程序正在运行(例如,由处理器执行)。在该领域中已知,应用程序的代码可以被分成多个进程,并且每个进程又可以被分成多个线程。因此线程可以是由处理器为实现一个给定任务(例如,一个子程序)执行的一系列指令。处理器通常在进程的线程之间和一个或多个应用程序的进程之间转换(例如,在多任务环境中),但是这些单线程处理器,如在当前领域中所知的,仅能支持当时执行的一个线程。换句话说,单线程处理器不能超过两个或多个线程同步执行指令,并且多线程的使用需要这些处理器在线程之间连续地来回转换。但是,处理器技术的最新进步已经允许多线程处理器的发展,能够支持同步执行的两个或多个线程。
在同步多线程发展之前,通过测量和监视影响处理器性能的不同参数,计算机设计者能够进一步改善它们的机器的性能。例如,当其执行预期的应用程序的时候,通过测量机器的系统性能,该计算机设计者能被更好的辅助他或她努力设计平衡的计算机系统。系统性能监视典型地通过使用片上性能寄存器完成,片上执行寄存器能够监视能够特征化处理器性能的确定的处理器事件。例如,在Intel Pentium处理器的几个模式中,在片上提供下面的性能寄存器64位时间标记计数器(TSC),两个可编程事件计数器(CTR0,CTR1),以及控制和事件选择寄存器(CESR)。该CESR是可编程的,以允许事件计数器(CTR0,CTR1)对特定事件的发生计数,或者当事件条件存在或者不存在的时候,对时钟信号计数。例如,通过将适当的日期值放置在CESR中,该第一计数器,即CTR0,能够设置成对由处理器执行的数据读操作的次数计数。一旦CTR0被设置为执行该任务,每一次处理器执行一个数据读操作,CTR0将其内部计数加一。类似地,该CESR是可编程的,以允许第二计数器,即CTR1,对不同的事件同步计数。该事件计数最终被存储在能够被用户访问的事件计数器(CTR0,CTR1)的寄存器中,以检测特征化处理器性能的事件。存在能够利用该系统被监视的多个事件,例如数据高速缓冲读/写失败,段寄存器装载等等。
上述的性能监视系统对于软件程序员是有用的。例如,该性能监视系统能够检测用于在软件应用程序设计中表示无效的事件。此外,处理器设计者和计算机结构设计者也能够得到收益,因为该系统允许他们观察软件应用程序将如何在处理器上执行。因此,能够优化硬件设计,以提供用于通用软件(例如,操作系统)执行的最佳性能。
前述性能监视系统的缺点是,最初关注处理器的操作,而不考虑多线程处理器的哪一个线程正在被执行。例如,在结合了音频进程和视频进程的多媒体应用程序中,用户能够使用前面的系统以确定在应用程序的执行过程中,大于已经发生的数据高速缓冲读/写失败的正常数目。但是,利用在当前领域中已知的技术,用户将不能确定哪些独立的执行线程,例如,那些包含在音频和视频进程中的线程,对数据高速缓冲读/写失败的数目起作用。在多线程处理器中该限制甚至更加有问题,其中线程同步执行,因为对处理器在线程之间的转换保持跟踪不足以正确确定事件在哪一个线程处发生。最后,如果被监视的特定事件对应用程序的操作有不利影响,将优先确定事件从哪一个线程发生以及在什么特权级发生。
那么所需要的则是用于检测由多线程处理器的特定线程、或者一组线程产生的事件的方法和装置。下面将要看到,本发明能够确定某些事件是否由单独的线程产生或者由一系列同步执行的线程产生。通常,本发明能够通过结合利用线程ID的事件限定和利用线程当前特权级(CPL)的事件限定来实现。
发明概述在本发明设备的一个实施例中,提供了一个多线程处理器,适合于在多个线程同步执行指令。该处理器包括多个事件检测器,用于检测在处理器指令执行期间特定处理器事件的发生。该处理器也包括多个特定事件选择控制寄存器,它们被编程以控制被监视的事件的选择,掩蔽和限定。通过事件的线程ID和线程当前权限级别(CPL)对事件限定,因此本发明能够将处理器事件归因于特定线程的执行。被限定的事件利用保持对被监视的所有处理器事件跟踪的几个可编程事件计数器中的一个进行最终计数。该事件计数器的内容可以通过程序指令被访问和采样,从而提供关于处理器性能的信息。
附图的简要说明根据详细描述和附图,本发明将得到更充分的理解,但是,不应当作为对本发明所示特定实施例的限制,而仅是为了解释说明和理解。
图1是本发明的性能监视器特征的框图。
图2表示了用于控制事件选择,掩蔽和限定的控制和事件选择寄存器。
详细说明下面描述了用于监视涉及多线程处理器性能的事件的方法和设备。通常,本发明用于对基于单线程的实际系统中的多线程处理器进行特征化。该特征化能够用于调整(或改善)应用程序以及操作系统的性能。这一能力是在调整的时候,获得计算机系统在需要的性能级别下操作的关键,例如,多媒体和/或实时应用程序。在下面的描述中,提出了多个特定细节,例如事件类型,位长度,寄存器数量和大小等,以便于提供对本发明的完全理解。但是,对于熟知本领域的人员显而易见这些特定细节在实现本发明的时候可以不需要。换句话说,公知的计算机体系元件和电子电路不必在特定的细节中描述,从而避免对本发明不必要的误解。
对于本发明的目的,术语“多线程处理器”应当是指任何能够超过多个内部线程同步执行一指令序列(例如,宏指令或微指令)的机器。此外,“处理器”应该包括,但是不限于此,通用微处理器,专用微处理器,图形控制器,音频控制器,多媒体控制器,微控制器,或者网络控制器。而且,术语“处理器”应当指,和其他的事物,复杂指令集计算机(CISC),精简指令集计算机(RISC),或者超长指令字(VLIW)处理器。
对于本发明的目的,术语“事件”应当指任何逻辑信号或者其它电信号,它们指出多线程处理器上一些特定活动的发生或持续时间。例如,硬件性能事件(通常是指EMON事件)和微断点事件都能够利用本发明进行检测。EMON事件用于理解应用程序或操作系统如何执行,以及指出由硬件/软件交互产生的处理器活动的发生和持续时间。一旦发生一定数量的这些事件,微断点事件用于调试并允许设计者冻结处理器的操作。典型地,包括由本发明监视的事件列表的信号是已经存在或者产生的,作为多线程处理器正常操作的部分。
所描述的本发明的特定的示范实施例最初以硬件或者软件的形式实现。尽管如此,熟知本领域的人员意识到许多特征将以硬件,软件或者硬件与软件结合的形式实现。
包括本发明的实施例的计算机结构的一个例子在图1中表示。图1表示包括多线程处理器10的集成电路,具有中央处理单元(CPU),能够执行指令序列。在集成电路上包括一个设备,用于监视多线程微处理器的性能——尤其是与处理器正常操作相关的不同参数和事件。
在本发明的一个实施例中,多线程处理器10被分成4个本地区域,并且每个本地区域进一步被分成本地子区域。处理器10中的子区域总数为24,并且每个区域中子区域的数目介于3和8之间。每个本地子区域包括两个事件选择控制寄存器(ESCR)。每个ESCR能够控制产生于其各自本地子区域的事件的检测。处理器10也包括事件计数器70,其总共包括18个40位可编程事件计数器。此外,前述4个本地区域中的每一个包括4到6个事件计数器。处理器10的每个ESCR能够耦合到一个独立的事件计数器,只要该事件计数器包括在同样的本地区域内。例如,ESCR30是用于控制事件计数器70的部分的诸多ESCR中的一个。如图1中所示,ESCR30可以耦合到可编程计数器1或者可编程计数器2,因为它们包括在和ESCR30相同的本地区域内;但是,ESCR30不可以耦合到可编程计数器18,因为它不包括在同一个本地区域内。
ESCR30控制事件选择,掩蔽以及限定。ESCR30通过几个可编程位的字段完成这些任务。如图2所示,这些字段包括一个6位事件选择(ES)字段,一个16位事件掩蔽(EM)字段,以及4个附加事件限定(EQ)位(T0_USR,T0_OS,T1_USR,T1_OS)。如前面提到的,ESCR30能够耦合到由事件计数器70代表的几个可编程事件计数器。事件计数器70中每一个事件计数器中的内容可以被来自处理器10的指令编程,以及事件计数器的编程将启动其耦合至ESCR,以便其可以开始对所选择的事件计数。应当理解,事件计数器或者ESCR的数量可以在替换实施例中有所不同,而不影响本发明的实现的结果。
当事件信号被包括在多线程处理器10中的事件检测器发送的时候,事件监视开始。这些事件信号包括下列部分高速缓冲命中,时钟脉冲,地址产生互锁等等。在本发明的一个实施例中,处理器10包括40至50个事件检测器,并且每个检测器能够在一个或多个线程(T0,T1,……TX)同步执行期间检测特定事件的发生。该事件的检测将触发将事件信号20从处理器10传输至一组串联的两个多路复用器(MUX40和50)。当ESCR30的ES字段指示MUX40选择来自事件信号20的一类事件以便进一步被MUX50多路复用的时候,事件选择的第一步骤发生。随后,ESCR30的EM字段指示MUX50选择事件的子类进行掩蔽——保留,最后,只有一个单独的事件信号被传输给逻辑块60。
可以由ES字段选择的事件类的例子为分支引退。该类进一步被分成6个分支引退的子类微,宏,不执行,执行,预测和误预测。EM字段将有效地过滤出没有被计数的事件的子类,仅留下将被限定的分支引退的一个子类(例如,微分支引退)。
在事件选择和掩蔽之后,在被事件计数器计数之前,事件必须在附加条件组下限定。事件限定发生在逻辑块60处,并且被ESCR30的4个EQ位(T0_USR,T0_OS,T1_USR和T1_OS)数值组控制。这些位的功能在下面的表1中表示。这些位以特定顺序设置,以便利用线程ID和线程当前特权级(CPL)限定一个事件。该线程ID指明事件源,即,事件发生在该处的线程。该线程CPL指明当事件发生的时候,线程正在操作的特权级。为0的CPL指明线程正在执行应用程序级指令,为1,2,或3的CPL指明线程正在执行管理级指令。例如,CPL限定使之可能在系统级(OS)高速缓冲错误率和用户(USR)级高速缓冲错误率之间区别。
表1位 名称 描述/功能0 T1_USR 如果(Thread=T1)且(T1_CPL=1|2|3),输出事件计数1 T1_OS 如果(Thread=T1)且(T1_CPL=0),输出事件计数2 T0_USR 如果(Thread=T0)且(T0_CPL=1|2|3),输出事件计数3 T0_OS 如果(Thread=T0)且(T0_CPL=0),输出事件计数应当理解本发明的使用不限于仅包括两个线程(T0和T1)的多线程处理器。本发明可以用于使用多个线程的处理器,并且通过扩展用于在事件选择控制寄存器中的EQ位的数目实现。
应该意识到,通过结合利用线程当前特权级(CPL)的事件限定和利用线程ID的事件限定,提供了比如果代替定义的两组位可获得的更好程度的限定一组被线程限定,一组被CPL限定(例如,4位T0,T1,OS和USR)。例如,仅使用T0,T1,OS和USR位,没有办法获得设置T0_USR和T1_OS位的效果。
逻辑块60通过相对于由EQ位提出的条件,进行逻辑测试其线程ID和线程CPL来限定一个事件。例如,如果T0_OS和T1_OS都被设置,则仅由T0(线程0)或T1(线程T1)产生的事件将被检测和报告给事件计数器70,而它们各自的CPL值等于0。类似地,如果仅T0_USR和T0_OS位被设置,则在任何特权级仅由T0产生的事件将被报告给事件计数器70。如果所有上述位被设置,则关于线程ID或CPL基本上没有做出限定,所有被检测的事件将被报告给事件计数器70。没有被逻辑块60限定的任何事件将被拒绝并且将不再被计数。
通过本发明的将被监视的事件可以认为分成两种类型对发生计数的事件和对持续时间计数的事件。发生事件将在一个单独的时钟周期中被计数。如果事件在一个时钟周期中发生两次,该计数器加2。对于持续时间事件,事件计数器对条件为真的时钟总数进行计数。
性能监视设备进一步包括时间标记计数器90,其在多线程处理器10的每一个时钟周期中加1。在一个实施例中,示出了时间标记计数器90是不同步的64位计数器,其持续计数除非被处理器10专门复位,预设或禁止。访问事件计数器70的一个方法是利用用户级读时间标记计数器指令。提供该指令以允许任何特限级的程序采样事件计数器的值。该操作的发生不会扰乱计数或处理器的操作。该操作系统在安全环境中也可以禁止时间标记计数器特征。
在使用为一个实施例中提供的来自模式专用寄存器的读(RDMSR)指令的任何时间,管理者模式程序能够用于对事件计数器70的18个事件计数器中的任何一个的内容进行访问和采样。应当注意,只要处理器被复位,事件计数器就被清零。使用向模式专用寄存器写(WRMSR)的指令,管理者模式程序也可以复位或者预设事件计数器。RDMSR或者WRMSR指令拷备特定计数器中的内容到一对寄存器中。这些事件计数器中的每一个也可以被编程,以对任何来自预定事件列表的事件计数。将被事件计数器70计数的事件通过对ESCR中的一个(例如,ESCR30)进行编程而被选择。
每一个事件计数器被48个事件控制寄存器中的一个独立地控制。这意味着除了编程,图1中所示的每一个事件计数器可以同步启动或者同步禁止。这一特征允许事件计数器彼此之间共同操作,因此在时间函数上获得同时计数。应当注意的是,当多个线程同步操作的时候,这一特征在多线程处理器中是决定性的,因此可以同步产生事件。而且,由于监视处理器性能的特殊方面有时需要特定比率的计算(例如,高速缓冲失败率,命中率,每个指令的时钟等等),保持事件计数器的同步操作是决定性的。
在监视进程的任何时间,通过单独指令的执行,系统软件能够对事件计数器70中每一个寄存器的内容进行编程/采样用于编程的WRMSR指令,以及用于采样的RDMSR指令。计数器的读动作不干扰计数器本身的操作;也就是说,通过使用RDMSR指令,事件计数器70的寄存器的内容可以在非干扰方式下被访问。而且,事件计数器70对多线程处理器10不干扰;也就是说,某些事件的计数不改变处理器的行为或者减慢处理器的操作。
如本发明的通用性的例子考虑的,作为其中处理器的三个线程同步操作的情况的例子,并且希望监视第一线程的用户级高速缓冲失败率,与第二和第三线程的用户级高速缓冲失败率比较。对于这种情况,一个事件计数器能够被编程,以对发生在1,2,或3的CPL上操作的第一线程中的读/写操作计数。另一个计数器能够被编程,以对失败数计数。这两个事件计数可以一起用于获得在第一线程中的高速缓冲失败率(失败数目除以读/写数目)。类似地,该方法能够应用于第二和第三线程,并且本发明将允许对由同步操作的所有三个线程产生的事件进行计数。通常,该性能监视器特征可以用于监视几个关键事件,将它们结合则能够产生关于处理器操作的统计。
在已经阅读了前面的描述后,本发明的诸多更改和修改,对本领域的技术人员无疑将是显而易见的,应当理解,通过说明的方式所表示和描述的特定实施例不能作为限制。例如,尽管本公开提到了为所示的监视的目的特定的事件,但是其它事件,条件或信号也可以被监视,而不有损于本发明的精神实质和范围。因此,参考所示附图的详细描述不限制权利要求的范围,权利要求本身仅详细叙述那些涉及本发明实质的特征。
权利要求
1.一种计算机系统,包括用于监视多线程处理器的性能的设备,所述设备包括处理器,用于同步执行多个线程,每一个线程包括一系列指令;多个可编程事件计数器,对由所述多个线程中的一个或多个产生的两个或多个独立的事件计数,所述两个或多个事件选自由所述处理器正常操作产生的预定事件列表;一个或多个寄存器,用来控制所述事件计数器的操作,每一个寄存器也从所述事件列表中选择将被计数的事件;以及访问位置,允许对所述事件计数器进行访问,以确定所述事件的当前计数。
2.权利要求1的计算机系统,其中所述访问位置允许对决定所述计数的访问,而不干扰所述计数器的操作。
3.权利要求2的计算机系统,其中每一个寄存器包括位的第一字段,用于选择将被计数的一个或多个事件。
4.权利要求3的计算机系统,其中,每一个寄存器进一步包括位的第二字段,用于选择将被掩蔽和不计数的一个或多个事件。
5.权利要求4的计算机系统,其中,每一个寄存器进一步包括位的第三字段,用于根据每一个线程的ID,从所述多个线程中选择将被计数的一个事件。
6.权利要求5的计算机系统,其中所述位的第三字段能够进一步根据每一个线程的当前特权级(CPL),从所述多个线程中选择将被计数的一个事件。
7.权利要求6的计算机系统,其中所述计数器在新的事件被选择之前能够被停止和被清零。
8.权利要求7的计算机系统,其中所述计数器能够被预设为一定状态。
9.权利要求5的计算机系统,其中所述预定事件列表包括硬件性能和断点事件。
10.用于监视多线程处理器性能的设备,包括处理装置,用于同步处理多个线程,每一个线程包括一系列指令;计数装置,用于对由所述多个线程的一个或多个产生的一个或多个事件计数,所述一个或多个事件选自由所述处理器正常操作产生的预定事件列表;控制装置,用于控制所述计数装置,以及用于从所述列表中选择所述一个或多个事件;以及访问装置,用于访问所述计数装置,以确定所述一个或多个事件的计数。
11.权利要求10的设备,其中所述计数装置包括多个可编程计数器。
12.权利要求11的设备,其中所述控制装置包括一个或多个寄存器,每一个寄存器包括位的第一字段,用于选择将被计数的一个或多个事件。
13.权利要求12的设备,其中,每一个寄存器进一步包括位的第二字段,用于选择将被掩蔽和不计数的一个或多个事件。
14.权利要求13的设备,其中,每一个寄存器进一步包括位的第三字段,用于根据每一个线程的ID,从所述多个线程中选择将被计数的一个事件。
15.权利要求14的设备,其中,所述位的第三字段能够进一步根据每一个线程的当前特权级(CPL),从所述多个线程中选择将被计数的一个事件。
16.权利要求15的设备,其中所述访问装置包括所述处理器中的指令装置,用于从每一个所述计数器中读计数。
17.权利要求14的设备,其中所述预定事件列表包括硬件性能和断点事件。
18.一种用于监视多线程处理器执行情况的方法,所述方法包括同步执行多个线程,每一个线程包括一系列指令;对由所述多个线程的一个或多个产生的多个独立事件计数,所述多个事件选自由所述处理器正常操作产生的预定事件列表;控制所述事件计数器的操作,每一个寄存器也从所述事件列表中选择将被计数的事件;以及访问所述事件计数器,以确定所述事件的当前计数。
19.权利要求18的方法,进一步包括在计数之前,选择和限定将被计数的所述多个独立事件。
20.权利要求19的方法,其中所述限定包括请求具有预选线程ID的所述多个事件。
21.权利要求20的方法,其中所述限定进一步包括请求具有预选线程当前特权级(CPL)的所述多个事件。
22.一种结合在集成电路(IC)中的设备,通过记录由所述CPU的正常操作产生的事件发生,用于监视多线程中央处理单元(CPU)的性能,每一个事件包括一个表示在所述IC中特定活动的发生的电信号,所述设备包括处理器,用于同步执行多个线程,每一个线程包括一系列指令;同时操作的第一和第二可编程计数器,分别用于记录第一和第二所选事件;逻辑电路,将所述第一和第二所选事件分别耦合至所述第一和第二可编程计数器;耦合至所述逻辑电路的控制寄存器,以选择所述第一和第二所选事件;以及访问位置,允许访问所述计数器。
23.权利要求22的设备,其中所述逻辑电路包括耦合的多个多路复用器,用于接收多个事件。
24.权利要求23的设备,其中所述逻辑电路用于根据它们的线程ID,从所述多个事件中选择所述第一和第二所选事件。
全文摘要
用于监视同步执行来自两个或多个线程的指令的多线程处理器(10)的性能特征的方法和设备。事件检测器在来自多线程处理器的线程的指令执行期间检测特定处理器事件(20)的发生。专用事件选择控制寄存器(30)被编程以控制将被监视的事件的选择,掩蔽和限定。根据其线程ID和线程的当前特权级(CPL)进行事件限定。每一个被限定的事件由几个可编程事件计数器(70)中的一个计数,这些计数器保持对被监视的所有处理器事件的跟踪。事件计数器的内容则可以通过程序指令进行访问和采样。
文档编号G06F11/34GK1500248SQ01822830
公开日2004年5月26日 申请日期2001年11月26日 优先权日2000年12月29日
发明者M·克兰福德, M 克兰福德, S·D·罗杰斯, 罗杰斯, S·卡拉法蒂斯, ǖ偎, B 斯普恩特, H·M·B·斯普恩特 申请人:英特尔公司