虚拟化性能计数器的制造方法

文档序号:6510507阅读:276来源:国知局
虚拟化性能计数器的制造方法
【专利摘要】本发明公开了用于对性能计数器进行虚拟化的装置、方法和系统的实施例。在一个实施例中,一种装置包括计数器、计数器启用存储单元、计数器启用逻辑以及虚拟机控制逻辑。计数器启用存储单元用于存储计数器启用指示符。计数器启用逻辑用于基于计数器启用指示符来启用计数器。虚拟机控制逻辑用于向客户转移该装置的控制权。虚拟机控制逻辑包括客户状态加载逻辑,其用于针对该装置的控制权向客户的转移而使来自虚拟机控制结构的客户值被加载到计数器启用存储单元中。
【专利说明】虚拟化性能计数器
[0001]本申请是2007年8月6日提交的名称为‘虚拟化性能计数器’、申请号为200780025942.3的分案申请。
【技术领域】
[0002]本公开内容属于信息处理的领域,并且更明确地属于在虚拟化环境中使用性能计数器的领域。
【背景技术】
[0003]通常,信息处理系统中虚拟化的概念允许在单个信息处理系统上运行一个或更多操作系统(每个是一个“OS”)的多个实例,即便每个OS被设计为对系统及其资源具有完全、直接的控制权也可如此。虚拟化被典型地通过使用软件(例如,虚拟机监视器或“VMM”)来实现,其为每个OS提供一个拥有虚拟资源的“虚拟机”(“VM”),该虚拟资源包括该OS可以完全且直接控制的一个或更多虚拟处理器,而VMM维护用于执行虚拟化策略(例如在各VM之间共享和/或分配物理资源)的系统环境(“虚拟化环境”)。每个OS以及任何其它运行在VM上的软件被称作“客户(guest)”或“客户软件”,而“宿主(host)”或“宿主软件”是诸如VMM这样的运行在虚拟化环境之外的软件。
[0004]信息处理系统中的物理处理器可以例如通过支持用于进入虚拟化环境以在VM中的虚拟处理器(即,受到VMM施加的限制的物理处理器)上运行客户的指令,来支持虚拟化。在该虚拟化环境中,可以截听某些事件、操作和情况(例如要求访问特权寄存器(privileged register)或者资源的外部中断或尝试),即,使处理器退出虚拟化环境以便VMM可以进行操作(例如,实现虚拟化策略)。物理处理器还可以支持其它用来维护虚拟化环境的指令,并且物理处理器可以包括指示或控制该物理处理器的虚拟化能力的存储器位或寄存器位。
[0005]支持虚拟化环境的物理处理器可以包括用于记录性能监测信息的性能计数器。典型地,每个性能计数器将会由与该计数器相关的一个或更多控制或配置寄存器、或一个或更多控制或配置寄存器的部分进行控制。为了虚拟化这些性能计数器,客户与宿主之间或者两个客户之间的每个转换将典型地需要:保存所有计数器及其相关控制寄存器的状态,以及为所有计数器及其相关控制寄存器加载新的状态。
【专利附图】

【附图说明】
[0006]在附图中以示例的方式而非限制的方式说明了本发明。
[0007]图1用一种虚拟化架构说明了本发明的一个实施例。
[0008]图2用一种用于对性能计数器进行虚拟化的方法说明了本发明的一个实施例。
[0009]图3用一种虚拟化架构说明了本发明的另一个实施例。
[0010]图4用一种用于对性能计数器进行虚拟化的方法说明了本发明的另一个实施例。【具体实施方式】
[0011]以下描述了用于对性能计数器进行虚拟化的装置、方法和系统的实施例。在该说明书中,可以给出许多特定细节,例如部件和系统配置,以供更细致了解本发明。然而,本领域的技术人员可以理解,在没有这些特定细节的情况下也可以实现本发明。此外,没有详细示出一些众所周知的结构、电路等等,以便避免不必要地模糊本发明。
[0012]通过降低在宿主和客户之间以及多个客户之间进行转换时所必须保存和加载的状态信息量,可以提高虚拟化环境的性能。本发明的实施例可以用来对性能计数器或其它计数器进行虚拟化,而不需要保存和加载计数器及其相关控制寄存器的内容。因此,可以提高当转换时要保存计数器及其相关控制寄存器的内容的虚拟化环境的性能。本发明的实施例提供了:对于任意多个宿主和客户,性能计数器都能被高效地启用(enable)或禁用(disable);分配性能计数器用于宿主或客户的排他使用;以及在任意多个宿主和/或客户之间共享性能计数器。
[0013]图1用虚拟化架构100说明了本发明的一个实施例。在图1中,裸平台硬件110可以是任何能够执行任意OS或VMM软件的数据处理装置。例如,裸平台硬件可以是个人计算机、大型计算机、便携式计算机、手持设备、机顶盒、服务器或任意其它计算系统的平台硬件。裸平台硬件110包括处理器120和存储器130。
[0014]处理器120可以是任何类型的处理器,包括通用微处理器(例如,英特尔?奔腾?系列处理器、安腾?系列处理器、或英特尔?公司的其它系列处理器中的处理器),或来自其它公司的其它处理器,或者数字信号处理器或微控制器。尽管图1仅示出一个这种处理器120,但是裸平台硬件110可以包括任意多个处理器,包括任意多个多核处理器(每个拥有任意多个执行内核)以及任意多个多线程处理器(每个拥有任意多个线程)。
[0015]存储器130可以是静态或动态随机存取存储器、基于半导体的只读或闪速存储器、磁盘或光盘存储器、处理器120可读的任何其它类型的介质、或任意这样的介质的组合。处理器120和存储器130可以根据任何已知的方法(例如,直接或间接地通过一个或更多总线、点到点的连接、或其它有线的或无线的连接)来互相耦合或进行通信。裸平台硬件110还可以包括任意多个附加的设备或连接。
[0016]除裸硬件平台110之外,图1还示出了 VMM140、VM150和160、客户操作系统152和162、以及应用程序154、155、164和165。
[0017]VMM140可以是任何被安装在裸平台硬件110上或可由其访问的软件、固件或硬件宿主,其用于向客户提供VM (即裸平台硬件110的抽象),或用于创建VM、管理VM及实现虚拟化策略。在其它实施例中,宿主可以是任何VMM、管理程序(hypervisor)、0S或其它能够控制裸平台硬件110的软件、固件或硬件。客户可以是任何OS、任何VMM (包括VMM140的另一实例)、任何管理程序、或者任何应用程序或其它软件。
[0018]每个客户希望根据VM上提供的处理器和平台的架构来访问物理资源,例如裸平台硬件110的处理器和平台寄存器、存储器以及输入/输出设备。图1示出两个VM,150和160,在VM150上安装有客户0S152及客户应用程序154和155,以及在VM160上安装有客户0S162及客户应用程序164和165。尽管图1仅示出两个VM,并且每个VM有两个应用程序,但是在本发明的范围之内,可以创建任意多个VM,并且在每个VM上可以运行任意多个应用程序。[0019]客户能够访问的资源可以或者被归类为“特权”资源,或者被归类为“非特权”资源。对于特权资源,VMM140帮助实现了客户希望的功能,但保留对该资源的最终控制权。非特权资源不需要由VMM140进行控制,并且可以被客户直接访问。
[0020]此外,每个客户OS期望处理各种事件,例如异常(举例来说,页面错误和常规保护错误)、中断(举例来说,硬件中断和软件中断)和平台事件(举例来说,初始化和系统管理中断)。这里,这些异常、中断和平台事件被一并、且被各自称作“虚拟化事件”。这些虚拟化事件中的一些事件被称作“特权事件”,这是因为它们必须由VMM140来进行处理,以确保VMl50和160的正确操作、确保VMM140免受客户的不当操作、以及确保客户免受其它客户的不当操作。
[0021]在任意给定的时刻,处理器120可能正在执行来自VMM140或任何客户的指令,因此VMM140或该客户可能正在处理器120上运行或者控制着处理器120。当发生特权事件或客户试图访问特权资源时,可以把控制权从客户转移给VMM140。这里,从客户向VMM140转移控制权被称作“VM退出(exit)”。在适当地处理该事件或帮助实现对资源的访问之后,VMM140可以把控制权归还给客户。这里,从VMM140向客户转移控制权被称作“VM进入(entry),,。
[0022]在图1的实施例中,处理器120根据存储在虚拟机控制结构(“VMCS”)132中的数据来控制VM150和VM160的操作。VMCS132是一种结构,其可以包含:一个客户或多个客户的状态、VMM140的状态、指示VMM140将如何控制一个客户或多个客户的操作的执行控制信息、关于VM退出和VM进入的信息、以及任意其它这样的信息。处理器120从VMCS132读取信息,以确定VM的执行环境并限制VM的行为。在该实施例中,VMCS132被存储在存储器130中。在一些实施例中,使用多个VMCS以支持多个VM。尽管图1示出VMCS132被存储在存储器130中,但是本发明并不要求在存储器中存储VMCS。
[0023]处理器120包括计数器171、173、175和177。在该实施例中,计数器171、173、175和177是性能计数器,其可以由运行在处理器120上的软件进行编程以便记录性能监测信息;然而,其它实施例可以包括任意多个计数器和/或任意类型或长度的计数器。例如,可以对任意一个计数器171、173、175和177进行编程,以便每次发生选定的事件时该计数器加1,或在选定的事件期间每过一个时钟周期该计数器加I。所述事件可以包括各种涉及在处理器120上执行程序代码的事件中的任意事件,例如,分支误预测、高速缓存命中、高速缓存未命中、旁路转换缓冲(translation lookaside buffer)命中、旁路转换缓冲未命中等等。因此,可以使用性能计数器171、173、175和177来调节或剖析程序代码,以在处理器120上产生可能的最优性能。
[0024]处理器120还包括分别对应于计数器171、173、175和177的计数器控制存储单元172、174、176和178。计数器控制存储单元172、174、176和178可以是寄存器或任何其它具有任意长度的结构、或一个或更多具有其它结构的寄存器的部分,分别用来存储用于对计数器171、173、175和177进行控制或配置的信息。可以对计数器控制存储单元172、174、176和178进行编程来分别存储用于对计数器171、173、175和177进行控制或配置的信息,例如这样的信息:其用于启用计数器、用于选择将要进行计数的事件、用于选择计数方法(例如,事件发生的次数或事件的持续时间)、用于选择计数条件(例如,基于检测到事件时正在执行的软件的特权等级)、以及用于设置任何其它控制、配置或其它变量。[0025]处理器120还包括全局计数器启用存储单元121,其可以是控制寄存器、配置寄存器、模式相关寄存器(model specific register)中的一个或更多比特,或用来存储全局计数器启用指示符的任意其它存储单元。在一个实施例中,全局计数器启用存储单元121可以是可编程寄存器中的一个比特,其中该比特可以被设置为逻辑1,以便将全局计数器启用指示符设置为“启用”值,或者该比特可以被设置为逻辑0,以便将全局计数器启用指示符设置为“禁用”值。
[0026]在另一个实施例中,全局计数器启用存储单元可以包括针对每个性能计数器的一个比特,其中每个比特可以被设置为逻辑1,以便将用于相对应的性能计数器的单个计数器启用指示符设置为“启用”值。在其它实施例中,全局计数器启用存储单元中的一个比特或字段可以对应于一组的任意多个性能计数器。在任意这些实施例中,全局启用存储单元可以包括对应于任意多个性能计数器的任意多个比特或字段,并且还可以包括或关联于一个或更多附加的启用指示符(其可以被用来控制任意多个更直接控制性能计数器的比特或字段)。例如,一个存储单元可以包括用于存储“计数器启用向量”的字段,该字段包括针对每个计数器的一个比特,并且该存储单元内的一个附加比特或在处理器120或虚拟化架构100的其它地方的存储单元或数据结构中的一个附加比特可以被用来启用或禁用该计数器启用向量。这样,客户根据存储在VMCS中的计数器启用向量来单独地对单个计数器进行控制,但是可以设置附加比特的默认值,以便当执行为不支持计数器启用向量模型的处理器设计的VMM或其它宿主软件时,能够自动地禁用单个计数器控制。
[0027]计数器启用逻辑170使用全局计数器启用指示符的值、以及任意其它存储在计数器控制存储单元172、174、176和178中的相关信息,来分别控制计数器171、173、175和177的操作。如果全局计数器启用指示符被设置为“启用”值,则每个计数器根据其单个控制和配置信息来进行操作。例如,因为计数器控制存储单元172的内容包括被设置为“启用”值的单个计数器启用比特以及被设置对高速缓存命中进行计数的事件选择字段,所以当高速缓存命中时计数器171会加1,而与此同时,由于计数器控制存储单元174的内容包括被设置为“禁用”值的单个计数器启用比特,所以计数器173不会加I。然而,如果全局计数器启用指示符被设置为“禁用”值,则所有计数器171、173、175和177被禁用,而不会根据它们的单个控制和配置信息进行操作。例如,即使计数器控制存储单元172的内容包括被设置为“启用”值的单个计数器启用比特以及被设置对高速缓存命中进行计数的事件选择字段,当高速缓存命中时计数器171也不会加I。
[0028]此外,处理器120包括用于支持虚拟化的控制逻辑180,该虚拟化包括对计数器171、173、175和177的虚拟化。控制逻辑180可以是处理器120内的微码、可编程逻辑、硬编码逻辑、或任何其它形式的控制逻辑。在其它实施例中,可以用处理器内部的或处理器可访问的任何部件或可读的任何介质(例如存储器130 )中的任何形式的硬件、软件或固件(例如处理器抽象层)来实现控制逻辑180。
[0029]控制逻辑180使处理器120执行本发明的方法实施例(例如,以下参考图2进行描述的方法实施例),这是例如通过以下来实现的:使处理器120在其对来自宿主或客户的虚拟化指令或其它指令进行响应期间执行一个或更多微操作(例如,用以支持虚拟化)。
[0030]控制逻辑180包括VM进入逻辑181,其用于把处理器120的控制权从宿主转移到客户(即,VM进入),以及VM退出逻辑182,其用于把处理器120的控制权从客户转移到宿主(SP,VM退出)。在一些实施例中,也可以把控制权从一个客户转移到另一个客户或从一个宿主转移到另一个宿主。例如,在支持分层虚拟化的实施例中,运行在处理器120上的VM上的软件既可以是客户又可以是宿主(例如,运行在VM上的VMM对控制该VM的VMM而言是客户,而对运行在其控制的VM上的客户而言是宿主)。
[0031]控制逻辑180还包括客户状态加载逻辑183、宿主状态加载逻辑184以及客户状态存储逻辑185。客户状态加载逻辑183用于在VM进入时把客户状态从VMCS132加载到处理器120中。宿主状态加载逻辑184用于在VM退出时把宿主状态从VMCS132加载到处理器120中。客户状态存储逻辑185用于在VM退出时把客户状态从处理器120存储到VMCS132中。在一些实施例中,控制逻辑180还包括宿主状态存储逻辑186,其用于在VM进入时,在客户状态加载逻辑183把客户状态加载到处理器120之前,把宿主状态从处理器120存储到VMCS132中。在一些实施例中,控制逻辑180可以加载并存储存在于其它系统部件(例如,输入-输出设备、存储器控制器)中的状态。
[0032]VMCS132可以包括用于支持虚拟化的字段、控制比特或其它数据结构。控制逻辑180可以检查或者以其它方式访问这些数据结构,以确定如何管理VM环境。例如,可以设置客户状态加载启用指示符133,以便针对VM进入,使客户状态加载逻辑183把客户值从客户状态存储单元137加载到全局计数器启用存储单元121中;可以设置宿主状态加载启用指示符134,以便针对VM退出,使宿主状态加载逻辑184把宿主值从宿主状态存储单元138加载到全局计数器启用存储单元121中;可以设置客户状态存储启用指示符135,以使客户状态存储逻辑185把全局启用存储单元121的内容存储到客户状态存储单元137中;并且可以设置宿主状态存储启用指示符136,以使宿主状态存储逻辑186把全局启用存储单元121的内容存储到宿主状态存储单元138中,所有这些都将会在下面进一步描述。在该实施例的该说明中,这些指示符是被设置以启用或引发期望效果的控制比特,这里,设置意味着向该比特写入逻辑1,但是在本发明的范围之内可以使用任何逻辑约定或命名。
[0033]使用这里描述的机制,VMM可以支持对仅在客户执行时发生的事件、仅在VMM执行时发生的事件、或在VMM执行和客户执行时发生的事件进行计数。此外,VMM可以,一个客户接一个客户地,启用或禁用性能计数器,作为该客户和VMM之间的转换(S卩,VM进入或VM退出)的一部分。这种机制允许VMM对客户“隐藏”它对性能计数器的影响。作为选择,这种机制允许对在VMM中客户使用的事件或在客户中VMM使用的事件进行计数。
[0034]图2用方法200,一种用于对性能计数器进行虚拟化的方法,说明了本发明的一个实施例。参考图1的虚拟化架构100来描述图2的方法实施例,但是方法实施例不限于此。
[0035]在图2的框210中,第一性能计数器被配置成对第一事件的发生进行计数。例如,可以通过对计数器控制存储单元172进行编程来把计数器171配置成对高速缓存未命中进行计数。在框212,第二性能计数器被配置成对第二事件的发生进行计数。例如,可以通过对计数器控制存储单元174进行编程来把计数器173配置成对没有异常终止(halt)的周期进行计数。在其它实施例中,性能计数器可以被配置成对任何其它事件(例如旁路转换缓冲未命中、分支误预测等等)的发生进行计数。
[0036]在图2的框220中,图1的VMM140为VM创建VMCS(例如,VMCS132)。在框222至Ij框226,VMM140配置VMCS132以实现支持对计数器171、173、175和177进行虚拟化。在框222,设置客户状态加载启用指示符133,以便针对VM进入,使客户状态加载逻辑183把客户值从客户状态存储单元137加载到全局计数器启用存储单元121中。在框224,设置宿主状态加载启用指示符134,以便针对VM退出,使宿主状态加载逻辑184把宿主值从宿主状态存储单元138加载到全局计数器启用存储单元121中。在框226,设置客户状态存储启用指示符135,以使客户状态存储逻辑185把全局启用存储单元121的内容存储到客户状态存储单元136中。
[0037]在框230,发起从宿主(B卩,VMM140)向客户转移处理器120的控制权。例如,VMM可以发起一个VM进入。VM进入可以包括:VM进入逻辑181使处理器120执行用于保存宿主状态并加载客户状态的操作或微操作。在框232,VM进入逻辑基于客户状态加载启用指示符133,确定是否把客户值从客户状态存储单元137加载到全局计数器启用存储单元121中。如果设置了客户状态加载启用指示符133,则在框234,客户状态加载逻辑183使来自客户状态存储单元137的客户值被加载到全局计数器启用存储单元121中;否则,不执行框234。在框236,完成VM进入并且控制权被转移给客户。在框238,客户开始或继续执行。
[0038]在框239,计数器启用逻辑170确定是否设置了全局计数器启用指示符。如果没有设置,则方法200继续进行到框258。如果设置了,则方法200继续进行到框240。在框240,确定是否发生了第一事件。如果发生了第一事件,则在框244,第一性能计数器如所配置的那样进行操作,即,在该实施例中,在框210中其被配置成对高速缓存未命中进行计数,因此第一性能计数器加I。在框250,确定是否发生了第二事件。如果发生了第二事件,则在框254,第二性能计数器如所配置的那样进行操作,即,在该实施例中,在框212中其被配置成对第二事件的发生进行计数,因此第二性能计数器加I。
[0039]在框258,确定是否发生了虚拟化事件。如果没有发生,则方法200继续进行到框238。如果发生了虚拟化事件,则在框260,发起从客户向宿主转移处理器120的控制权。VM退出可以包括:VM退出逻辑182使处理器120执行用于保存客户状态并加载宿主状态的操作或微操作。
[0040]在框262,VM退出逻辑基于客户状态存储启用指示符135,确定是否把全局计数器启用存储单元121的内容存储到客户状态存储单元137中。如果设置了客户状态存储启用指示符135,则在框264,客户状态存储逻辑185把全局计数器启用存储单元121的内容存储到客户状态存储单元137中;否则,不执行框264。在一些实施例中,没有客户状态存储启用指示符135。在一些实施例中,客户状态存储逻辑185总是把全局计数器启用存储单元121的内容存储到客户状态存储单元137中。在其它实施例中,客户状态存储逻辑185从来不会作为VM退出处理的一部分而把全局计数器启用存储单元121的内容存储到客户状态存储单元137中。在一些实施例中,客户软件试图访问全局计数器启用存储单元121会引起VM退出,或者是通过软件约定(例如,VMM被要求正确设置VMCS中的控制,以便在访问全局计数器启用存储单元121时引起VM退出),或者是通过处理器强制执行这种VM退出。
[0041]在框266,VM退出逻辑基于宿主状态加载启用指示符134,确定是否把宿主值从宿主状态存储单元138加载到全局计数器启用存储单元121中。如果设置了宿主状态加载启用指示符134,则在框268,宿主状态加载逻辑184使来自宿主状态存储单元138的宿主值被加载到全局计数器启用存储单元121中;否则,不执行框268。
[0042]在框270,完成VM退出并且控制权被转移到宿主。在框272,宿主开始或继续执行。
[0043]在框275,计数器启用逻辑170确定是否设置了全局计数器启用指示符。如果没有设置,则方法200继续进行到框298。如果设置了,则方法200继续进行到框280。在框280,确定是否发生了第一事件。如果发生了第一事件,则在框284,第一性能计数器如所配置的那样进行操作,即,在该实施例中,在框210中其被配置成对高速缓存未命中进行计数,因此第一性能计数器加I。在框290,确定是否发生了第二事件。如果发生了第二事件,则在框294,第二性能计数器如所配置的那样进行操作,即,在该实施例中,在框212中其被配置成对第二事件的发生进行计数,因此第二性能计数器加I。
[0044]在框298,确定是否发生VM进入。如果发生了 VM进入,则方法200继续进行到框230。如果没有发生,则方法200继续进行到框299。在框299,确定是否将要执行异常终止或其它这样的指令。如果不执行,则方法200继续进行到框272。如果执行,则方法200结束。
[0045]图3用裸平台硬件310说明了本发明的另一个实施例,该裸平台硬件可以被用在虚拟化架构100或其它虚拟化架构中。除了另外专门描述的以外,对裸平台硬件及其单元的说明也适用于裸平台硬件310及其对应的单元。裸平台硬件310包括处理器320和存储器 330。
[0046]处理器320包括计数器371、373、375和377。处理器320还包括分别对应于计数器371、373、375和377的计数器控制存储单元372、374、376和378,每个计数器控制存储单元包含用于存储计数器有效指示符的计数器有效存储单元以及其它控制或配置信息,该计数器有效指示符用于启用或禁用相对应的计数器。此外,处理器320包括分别对应于计数器371、373、375和377的计数器标识符存储单元391、393、395和397。计数器标识符存储单元391、393、395和397可以是寄存器或任何其它具有任意长度的结构、或一个或更多具有其它结构的寄存器的部分,分别用来存储用于标识或标记计数器371、373、375和377的信息。可以对计数器标识符存储单元391、393、395和397进行编程,来存储分别用于唯一地或冗余地(即,两个计数器标识符存储单元可以被用同一个值来编程)标识计数器371、373、375和377的标识符。
[0047]VMCS332包括计数器标识符字段333,在该实施例中,计数器标识符字段与每个计数器标识符存储单元391、393、395和397具有相同的比特数,但是在其它实施例中其可以具有任意多个比特。其它实施例可以包括附加的计数器标识符字段。通过创建VMCS332的VMM或通过任意其它软件,可以对计数器标识符字段333进行编程,来存储一个值,该值可以匹配或不匹配在计数器标识符存储单元391、393、395和397中存储的值中的一个或更多值。
[0048]处理器320还包括可以根据任何已知方法实现的比较逻辑322,其用于基于相对应的计数器标识符存储单元的内容与计数器标识符字段333的内容的比较结果,为每个计数器生成计数器匹配信号。在该实施例中,如果相对应的计数器标识符存储单元的内容与计数器标识符字段333的内容相匹配,则将针对该计数器的计数器匹配信号置为有效(assert)。在该实施例中,如果相对应的计数器标识符存储单元中的内容等于O值,贝U不论计数器标识符字段333中的内容怎样,也将针对该计数器的计数器匹配信号置为有效,以便使不使用本发明的计数器标识符特性的软件也能在包括该计数器标识符特性的硬件上进行期望的操作。在另一个实施例中,计数器匹配逻辑可以至少部分地基于其它因素(例如VMCS内的其它字段的内容)来确定“匹配”。例如,可以参考英特尔架构中的各种控制寄存器(例如CR0、CR3或CR4寄存器)的值。作为选择,计数器匹配逻辑可以包括确定当前执行的软件是VMM还是客户,并且基于VMCS中的一个或更多控制比特,仅当客户软件正在执行时,才启用计数器。
[0049]实施例可以包括一个或更多“计数器匹配启用”控制比特或字段,用于通过禁用比较逻辑或通过任何其它希望的方式来启用或禁用计数器匹配特性。例如,如果设置了计数器匹配启用比特,则发生上述比较。然而,如果计数器匹配启用比特被清零,则总是启用计数器而不进行比较,因此,计数器标识符存储单元中的“O”值不需要上述特别处理。
[0050]计数器启用逻辑370使用针对每个计数器的计数器匹配信号以及任意其它存储在计数器控制存储单元372、374、376和378中的相关信息,来分别控制计数器371、373、375和377的操作。如果针对一个计数器的计数器匹配信号被置为有效,则该计数器根据其单个控制和配置信息进行操作。例如,如果计数器控制存储单元372的内容包括被设置为“启用”值的单个计数器有效比特以及被设置对高速缓存命中进行计数的事件选择字段,则当高速缓存命中时计数器371可以加I。然而,如果针对一个计数器的计数器匹配信号未被置为有效,则该计数器被禁用而不根据其单个控制和配置信息进行操作。例如,即使计数器控制存储单元372的内容包括被设置为“启用”值的单个计数器有效比特以及被设置对高速缓存命中进行计数的事件选择字段,当高速缓存命中时计数器371也不会加I。
[0051]此外,处理器320包括用于支持虚拟化的控制逻辑380,该虚拟化包括对计数器371、373、375和377的虚拟化。控制逻辑380使处理器320执行本发明的方法实施例(例如,以下参考图4进行描述的方法实施例),这是例如通过以下来实现的:使处理器320在其对来自宿主或客户的虚拟化指令或其它指令进行响应期间执行一个或更多微操作(例如,用以支持虚拟化)。
[0052]图4用方法400,另一种用于对性能计数器进行虚拟化的方法,说明了本发明的一个实施例。参考图1和图3来描述图4的方法实施例,但是方法实施例不限于此。
[0053]在图4的框410中,性能计数器被配置成对一种事件的发生进行计数。例如,可以通过对计数器控制存储单元372进行编程来把计数器371配置成对高速缓存未命中进行计数。在框412,计数器标识符存储单元391被用期望的计数器标识值进行编程。
[0054]在框420,宿主为VM创建VMCS (例如,VMCS332)。在框422,宿主对VMCS332进行配置以便实现支持对计数器371、373、375和377进行虚拟化,包括用等于在框412中使用的计数器标识值的值来对计数器标识符字段333进行编程。在该实施例中,也可以用同一个值来对VMCS332或任何其它VMCS (对应于任意多个其它客户或宿主)中的任意多个其它计数器标识符字段进行编程,以允许任意多个客户或宿主共享一个或更多计数器。
[0055]在框430,处理器320的控制权从宿主转移到客户。在框432,客户开始或继续执行。在框434,基于计数器标识符存储单元391与计数器标识符字段333的比较结果,生成计数器匹配信号。在该实施例中,如果计数器标识符存储单元的内容与计数器标识符字段的内容相匹配,则将该计数器匹配信号置为有效。
[0056]在框440,识别出该事件(B卩,在该实施例中,高速缓存未命中)的发生。在框442,计数器启用逻辑370基于计数器匹配信号以及在相对应的计数器控制存储单元(例如,计数器控制存储单元372)中的计数器有效存储单元的内容,来确定性能计数器是否加I。
[0057]如果计数器匹配信号被置为有效,并且没有设置该计数器的计数器有效指示符,则在框444,性能计数器如所配置的那样进行操作,即,在该实施例中,在框410中其被配置成对高速缓存未命中进行计数,因此该性能计数器加I。如果计数器匹配信号未被置为有效或没有设置该计数器的有效指示符,则不执行框444。
[0058]在本发明的范围之内,图2和图4所说明的方法可以按不同的次序来执行,可以省略所说明的框来执行、可以添加附加的框来执行、或者可以利用重排序的、省略的或附加的框的组合来执行。例如,VMCS可以按任意次序来配置VMCS,例如,可以按照任意次序重新安排框222至226。
[0059]可以在从创造到仿真到制造的各个阶段中对处理器120或根据本发明的实施例设计的任何其它部件或部件的一部分进行设计。表示一种设计的数据可以用许多方式来表示该设计。首先,在仿真中很有用的一种情况是,可以使用硬件描述语言或其它功能描述语言来表示硬件。此外或作为选择,可以在设计过程的一些阶段中,生产出具有逻辑和/或晶体管门的电路级模型。此外,大多数设计在某一阶段上可以达到这样一种级别,其中可以用表示各种器件的物理布局的数据来对该设计进行建模。在使用常规半导体制造技术的情况下,表示器件布局模型的数据可以是这样的数据:其规定了在用于生产集成电路的掩膜的不同掩膜层上各种特性的存在与否。
[0060]在该设计的任何表示中,数据可以被存储在任何形式的机器可读介质中。被调制或以其它方式生成的用来传送这样的信息的光波或电波、存储器、或磁或光存储介质(例如磁盘)都可以是该机器可读介质。任意这些媒体都可以“携带”或“指示”该设计或在本发明的实施例中使用的其它信息。当传送指示或携带信息的电载波时,就对电信号执行复制、缓冲或重传而言,创建了一个新的拷贝。因此,通信提供者或网络提供者的行为可以构成对包含了本发明的技术的制品(例如,载波)的拷贝的生成。
[0061]这样,公开了用于对性能计数器进行虚拟化的装置、方法和系统。尽管已经描述了某些实施例并且在附图中示出,但是可以理解,这些实施例仅仅是说明而不是限制了该广泛的发明,并且由于本领域技术人员在研究本公开内容之后可以想到各种其它修改,因此本发明并不被限制于所示出和描述的特定构造和安排。在像这样的快速成长且不易预见其进一步发展的【技术领域】中,如技术进步所推动的,所公开的实施例可以被很容易地在安排和细节上进行修改,而不背离本公开内容的原理或所附权利要求的范围。
【权利要求】
1.一种用于虚拟化性能计数器的装置,包括: 计数器,由虚拟机监视器VMM进行虚拟化,该虚拟机监视器VMM用于创建虚拟机控制结构VMCS以支持该虚拟化的计数器; 计数器启用存储单元,用于存储计数器启用指示符,其中,所述计数器启用存储单元包括对应于任意多个计数器的任意多个比特或字段; 计数器启用逻辑,用于基于所述计数器启用指示符来启用所述计数器;以及 虚拟机控制逻辑,用于向客户转移所述装置的控制权并且将所述装置的控制权从该客户转移给宿主,所述虚拟机控制逻辑包括客户状态加载逻辑,宿主状态加载逻辑和客户状态存储逻辑,该客户状态加载逻辑针对控制权向所述客户的转移而将来自所述虚拟机控制结构VMCS中的客户值加载到所述计数器启用存储单元的比特或字段中。
2.根据权利要求1所述的装置,其中,所述计数器用于记录性能监测信息。
3.根据权利要求1所述的装置,其中,所述虚拟机控制逻辑还包括虚拟机进入逻辑,该虚拟机进入逻辑用于基于所述虚拟机控制结构中的客户状态加载启用指示符来启用所述客户状态加载逻辑。
4.根据权利要求1所述的装置,其中,所述虚拟机控制逻辑还包括虚拟机退出逻辑,该虚拟机退出逻辑用于基于所述虚拟机控制结构中的宿主状态加载启用指示符来启用所述宿主状态加载逻辑。
5.根据权利要求1所述的装置,其中,所述虚拟机控制逻辑还包括虚拟机退出逻辑,该虚拟机退出逻辑用于基于所述虚拟机控制结构中的客户状态存储启用指示符来启用所述客户状态存储逻辑。
6.根据权利要求1所述的装置,其中,所述VMM设置所述VMCS中的客户状态加载启用指示符,使该客户状态加载逻辑针对控制权向所述客户的转移而将来自所述虚拟机控制结构VMCS中的客户状态存储单元的客户值加载到所述计数器启用存储单元中。
7.根据权利要求1所述的装置,其中,所述VMM设置所述VMCS中的宿主状态加载启用指示符,使所述宿主状态加载逻辑针对控制权从所述客户向所述宿主的转移而将来自所述虚拟机控制结构VMCS的宿主状态存储单元中的宿主值加载到所述计数器启用存储单元中。
8.根据权利要求6所述的装置,其中,所述VMM设置所述VMCS中的客户状态存储启用指示符,以使该客户状态存储逻辑针对控制权从所述客户向所述宿主的转移而将所述计数器启用存储单元的内容存储到所述虚拟机控制结构VMCS的客户状态存储单元中。
9.一种用于虚拟化性能计数器的装置,包括: 计数器,由虚拟机监视器VMM进行虚拟化,该虚拟机监视器VMM用于创建虚拟机控制结构VMCS以实现支持对该虚拟化的计数器; 虚拟机控制逻辑,用于实施虚拟机VM退出和VM进入,包括客户状态加载逻辑,宿主状态加载逻辑和客户状态存储逻辑; 计数器标识符存储单元,用于存储计数器标识符,其中,所述计数器标识符存储单元是可编程的; 比较逻辑,用于基于所述计数器标识符与来自所述虚拟机控制结构VMCS的计数器标识符字段的内容的比较结果来生成计数器匹配信号,其中,所述计数器标识符字段是可编程的;以及 启用逻辑,用于生成用来启用所述计数器的计数器启用信号,其中所述计数器启用信号是基于所述计数器匹配信号的。
10.根据权利要求9所述的装置,还包括: 计数器有效存储单元,用于存储计数器有效指示符,其中所述计数器启用信号也是基于所述计数器有效指示符的。
11.根据权利要求9所述的装置,其中所述VMM设置所述VMCS中的客户状态加载启用指示符,使该客户状态加载逻辑针对所述VM进入而将来自所述虚拟机控制结构VMCS中的客户状态存储单元的客户值加载到所述计数器启用存储单元中。
12.根据权利要求11所述的装置,其中所述VMM设置所述VMCS中的宿主状态加载启用指示符,使所述宿主状态加载逻辑针对所述VM退出而将来自所述虚拟机控制结构VMCS的宿主状态存储单元中的宿主值加载到所述计数器启用存储单元中。
13.根据权利要求11所述的装置,其中所述VMM设置所述VMCS中的客户状态存储启用指示符,以使该客户状态存储逻辑针对所述VM退出而将所述计数器启用存储单元的内容存储到所述虚拟机控制结构VMCS的客户状态存储单元中。
14.一种用于虚拟化性能计数器的方法,包括: 把处理器中的第一计数器配置成对第一事件的发生进行计数; 把所述处理器中的第二计数器配置成对第二事件的发生进行计数; 发起向客户转移所述处理器的控制权; 配置虚拟机控制结构(VMCS)以实现支持对所述处理器内的第一与第二计数器进行虚拟化,包括设置所述VMCS中的客户状态加载启用指示符以把客户值从所述虚拟机控制结构VMCS加载到计数器启用存储单元中,其中,所述计数器启用存储单元用于存储计数器启用指示符并包括对应于任意多个计数器的任意多个比特或字段; 完成向所述客户转移所述处理器的控制权; 基于所述计数器启用存储单元的内容以及所述第一事件的第一次发生,确定是否改变所述第一计数器的计数值;以及 基于所述计数器启用存储单元的内容以及所述第二事件的第一次发生,确定是否改变所述第二计数器的计数值。
15.根据权利要求14所述的方法,还包括: 基于所述计数器启用存储单元的内容以及所述第一事件的第二次发生,确定是否改变所述第一计数器的计数值;以及 基于所述计数器启用存储单元中的内容以及所述第二事件的第二次发生,确定是否改变所述第二计数器的计数值。
16.根据权利要求14所述的方法,还包括: 发起从所述客户向宿主转移所述处理器的控制权。
17.根据权利要求16所述的方法,还包括: 设置所述VMCS中的宿主状态加载启用指示符,把宿主值从所述虚拟机控制结构加载到所述计数器启用存储单元中;设置所述VMCS中的客户状态存储启用指示符,以在发起从所述客户向所述宿主转移所述处理器的控制权之后,把所述计数器启用存储单元的内容存储到所述虚拟机控制结构中。
18.根据权利要求17所述的方法,还包括: 完成从所述客户向所述宿主转移所述处理器的控制权。
19.一种用于虚拟化性能计数器的系统,包括: 存储器,用于存储用来控制虚拟机VM的虚拟机控制结构VMCS ;以及 处理器,包括: 多个计数器,其中虚拟机监视器VMM配置所述VMCS以实现支持对该多个计数器进行虚拟化;; 计数器启用存储单元,用于存储计数器启用指示符,其中,所述计数器启用存储单元包括对应于任意多个计数器的任意多个比特或字段; 计数器启用逻辑,用于基于所述计数器启用指示符来启用所述多个计数器;以及 虚拟机控制逻辑,用于向客户转移所述处理器的控制权并且将所述处理器的控制权从该客户转移给宿主,所述虚拟机控制逻辑包括客户状态加载逻辑,宿主状态加载逻辑和客户状态存储逻辑。
20.根据权利要求19所述的系统,其中,所述多个计数器用于记录性能监测信息。
21.根据权利要求19所述的系统,其中,所述存储器是动态随机存取存储器。
22.根据权利要求19所述的系统,`其中,所述VMM设置所述VMCS中的客户状态加载启用指示符,使该客户状态加载逻辑针对控制权向所述客户的转移而将来自所述虚拟机控制结构VMCS中的客户状态存储单元的客户值加载到所述计数器启用存储单元中。
23.根据权利要求19所述的系统,其中,所述VMM设置所述VMCS中的宿主状态加载启用指示符,使所述宿主状态加载逻辑针对控制权从所述客户向所述宿主的转移而将来自所述虚拟机控制结构VMCS的宿主状态存储单元中的宿主值加载到所述计数器启用存储单元中。
24.根据权利要求22所述的系统,其中,所述VMM设置所述VMCS中的客户状态存储启用指示符,以使该客户状态存储逻辑针对控制权从所述客户向所述宿主的转移而将所述计数器启用存储单元的内容存储到所述虚拟机控制结构VMCS的客户状态存储单元中。
【文档编号】G06F11/34GK103500137SQ201310403619
【公开日】2014年1月8日 申请日期:2007年8月6日 优先权日:2006年8月8日
【发明者】E·科塔-罗布尔斯, G·奈格, S·贝内特, A·安德森 申请人:英特尔公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1