系统管理程序调度器的制作方法

文档序号:6426230阅读:105来源:国知局
专利名称:系统管理程序调度器的制作方法
技术领域
本发明涉及计算机系统,尤其涉及计算机系统中的虚拟高速缓存拓扑结构。
背景技术
虚拟机可具有作为单核处理器展示给客操作系统的一个或多个虚拟处理器。当客操作系统运行工作负载时,它将线程调度到虚拟处理器上。系统管理程序运行表示虚拟处理器的线程并将其调度到主存VM(虚拟机)的物理机的逻辑处理器上。运行线程中的工作负载,并且执行某些有希望有用的工作。系统管理程序随后在相同或不同的逻辑处理器上运行另一线程。系统管理程序调度器因此必须确定要调度特定虚拟处理器的时间和地点两者。虚拟处理器的正确布置是维持高水平性能的关键。当前,系统管理程序相同地对待各逻辑处理器。例如,系统管理程序可调度虚拟处理器在第一 NUMA节点(非均勻存储器体系结构节点)中运行,然后将其移动至另一 NUMA 节点。该技术确保了尽可能快地运行工作负载并且容忍由于高速缓存未中而导致的任何开销。作出将虚拟处理器作为单核处理器来展示的决策以使主机的物理体系结构的虚拟化变得更容易。例如,客操作系统被这样编写以使得在引导时检查拓扑结构。如果客机被移动至带有不同拓扑结构的另一主机,则它可能低效地运作,因为它预期的资源不再存在。由于包括共享各种不同高速缓存的逻辑处理器的系统变得越来越常见,将系统管理程序配置成充分利用这些高速缓存将是有益的。此外,将某种高速缓存拓扑结构展示给客操作系统从而使得客操作系统中的调度器也可以作出明智的调度决策将是有益的。

发明内容
公开了用于配置系统管理程序以利用主计算机系统的物理高速缓存拓扑结构的技术。在一示例性实施例中,系统管理程序被配置成利用处理器拓扑结构、高速缓存分层结构和存储器之间的距离。例如,在一示例性实施例中,一种方法包括用于使得响应于接收到要调度指示虚拟机的虚拟处理器的线程的请求来生成空闲逻辑处理器列表的操作;以及用于使得指示虚拟处理器的线程被调度在列表中与种子逻辑处理器共享一个级别的高速缓存的逻辑处理器上的操作。在另一示例性实施例中,一种方法包括用于将多个单核虚拟处理器展示给虚拟机的操作;用于响应于接收到要执行指示单核虚拟处理器的线程的请求来生成空闲逻辑处理器列表的操作;用于标识当前正在执行指示虚拟机的单核虚拟处理器的线程的逻辑处理器的操作;以及用于将指示虚拟处理器的线程调度在一逻辑处理器上的操作,其中该逻辑处理器是列表中与当前正在执行指示虚拟机的单核虚拟处理器的线程的最大数量的逻辑处理器共享高速缓存。又一示例性实施例,一种方法包括用于使得指示虚拟机的虚拟处理器的线程被分配要在其上执行的独特逻辑处理器的操作;用于使得响应于接收到要执行指示虚拟处理器的线程的请求来生成空闲逻辑处理器列表的操作;以及用于使得指示虚拟处理器的线程被调度在与被分配来执行指示虚拟处理器的线程的独特逻辑处理器共享一个级别的高速缓存的逻辑处理器上的操作。除前述的之外,在构成所公开的主题的一部分的权利要求书、 附图,以及文本中描述了其他方面。本领域技术人员将理解,此处所描述的一个或多个方面可包括但不限于用于实现此处所描述的本文所述方面的电路和/或编程;该电路和/或编程实质上可以是配置成实现本文所述方面的硬件、软件和/或固件的任何组合,这取决于系统设计者的设计选择。以上是概述,并且因此必然包含细节的简化、一般化及省略。本领域技术人员将明白,本概述只是说明性的并且决不旨在是限制性的。


图1描绘了其中可实现此处所描述的主题的示例计算机系统
图2描绘了其中可实现此处所描述的主题的操作环境。
图3描绘了其中可实现此处所描述的主题的操作环境。
图4描绘了其中可实现此处所描述的主题的数据中心。
图5描绘了其中可实现此处所描述的主题的操作环境。
图6描绘了一操作过程。
图7描绘了图6的操作过程的替换实施例。
图8描绘了一操作过程。
图9描绘了图8的操作过程的替换实施例。
图10描绘了一操作过程。
图11描绘了图10的操作过程的替换实施例。
图12描绘了图11的操作过程的替换实施例。
图13描绘了图12的操作过程的替换实施例。
具体实施例方式各实施例可在一个或多个计算机系统上执行。图1及以下讨论旨在提供可在其中实现所公开的主题的合适计算环境的简要概括描述。贯穿本说明书使用的术语“电路”可包括诸如硬件中断控制器、硬盘驱动器、网络适配器、图形处理器、基于硬件的视频/音频编解码器等硬件组件,以及用于操作这些硬件的固件。术语“电路”还可包括微处理器、专用集成电路、和/或一个或多个逻辑处理器,例如由从固件和/或软件中读取的指令配置的多核通用处理单元的一个或多个核。逻辑处理器可由指令来配置,指令具体化可用于执行从例如RAM、R0M、固件和/或大容量存储等存储器加载的功能的逻辑。在其中电路包括硬件和软件的组合的示例实施例中,实现者可以编写具体化逻辑的源代码,该源代码随后被编译成可由逻辑处理器执行的机器可读代码。因为本领域技术人员可以明白现有技术已经进化到硬件实现的功能或软件实现的功能之间几乎没有差别的地步,因而选择硬件还是软件来实现此处描述的功能只是一个设计选择。 换言之,由于本领域的技术人员可以理解软件进程可被变换成等效的硬件结构,且硬件结构本身可被变换成等效的软件进程,因此选择硬件实现或是软件实现留给了实现者。
现在参考图1,描绘了示例性计算系统100。计算机系统100可包括逻辑处理器 102,例如,执行核。尽管示出了一个逻辑处理器102,但在其他实施例中,计算机系统100可具有多个逻辑处理器,例如每一处理器基板有多个执行核,和/或各自可具有多个执行核的多个处理器基板。如图所示,各种计算机可读存储介质110可由一个或多个系统总线互联,系统总线将各种系统组件耦合到逻辑处理器102。系统总线可以是几种类型的总线结构中的任何一种,包括存储器总线或存储器控制器、外围总线、以及使用各种总线体系结构中的任一种的局部总线。在示例实施例中,计算机可读存储介质110可以包括例如随机存取存储器(RAM) 104、存储设备106(例如电机硬盘驱动器、固态硬盘驱动器等)、固件108(例如闪速RAM或ROM)、以及可移动存储设备118 (例如⑶-ROM、软盘、DVD、闪速驱动器、外部存储设备等)。本领域的技术人员应当理解,可使用其他类型的计算机可读存储介质,如磁带盒、闪存卡、和/或数字视频盘。计算机可读存储介质110可以为计算机100提供对可执行指令122、数据结构、程序模块和其他数据的非易失性和易失性存储,实现管理器250的可执行指令在以下附图中描述。基本输入/输出系统(BIOS) 120可被存储在固件108中,它包含帮助在诸如启动期间在计算机系统100内的各元件之间传递信息的基本例程。包括操作系统和/或应用程序的多个程序可被存储在固件108、存储设备106、RAM 104和/或可移动存储设备118上,并且可由逻辑处理器102来执行。命令和信息可由计算机100通过输入设备116来接收,输入设备可包括但不限于键盘和定点设备。其它输入设备可以包括话筒、操纵杆、游戏手柄、扫描仪等等。这些和其它输入设备常通过耦合到系统总线的串行端口接口连接到逻辑处理器102,但也可通过其它接口连接,如并行端口、游戏端口或通用串行总线(USB)。显示器或其他类型的显示设备也可经由诸如视频适配器等可以是图形处理器112的一部分或可连接到图形处理器单元 112的接口来连接到系统总线。除了显示器之外,计算机通常包括其他外围输出设备(未示出),如扬声器和打印机。图1的示例性系统还包括主适配器、小型计算机系统接口(SCSI) 总线和连接到SCSI总线的外部存储设备。计算机系统100可使用至一个或多个远程计算机,如远程计算机的逻辑连接在网络化环境中操作。远程计算机可以是另一计算机、服务器、路由器、网络PC、对等设备或其它常见的网络节点,并且通常包括上面关于计算机系统100所述的许多或全部元件。当在LAN或WAN联网环境中使用时,计算机系统100可通过网络接口卡114连接至LAN或WAN。NIC 114可以是内置或外置的,其可以连接到系统总线。在联网环境中,相对于计算机系统100所描述的程序模块或其部分可被储存在远程存储器存储设备中。可以理解,所描述的网络连接是示例性的,且可以使用在计算机之间建立通信链路的其他手段。 此外,尽管可想到的是所公开的主题的许多实施例尤其适用于计算机化的系统,但是在本说明中不意味着将所公开的主题限于那些实施例。 转向图2,系统管理程序微内核202可被配置成控制并仲裁对计算机系统200的硬件的访问。广泛而言,系统管理程序微内核202可以生成称为分区的执行环境,如子分区1 到子分区N(其中N是大于1的整数)。在各实施例中,子分区是系统管理程序微内核202 支持的基本隔离单元。即,每一子分区可被映射到一组在系统管理程序微内核202的控制下的硬件资源,例如存储器、设备、逻辑处理器周期等,并且系统管理程序微内核202可隔离一个分区中的进程不使其访问另一分区的资源,例如,一个分区中的客操作系统可与另一分区的存储器隔离,且因此不能检测到其分区外部的存储器地址。在各实施例中,系统管理程序微内核202可以是独立的软件产品、操作系统的一部分、嵌入在主板的固件中、一个或多个专用集成电路、或其组合。系统管理程序微内核202可以通过限制客操作系统的系统存储器视图来实施分区。客存储器是由系统管理程序控制的分区的存储器视图。客物理地址能由系统物理地址 (SPA)来支持,即,由系统管理程序管理的、物理计算机系统的存储器。在一实施例中,GPA 和SPA可被安排成存储器块,即,一个或多个存储器页。当客机使用其页表向一个块写入时,数据实际被存储在根据系统管理程序使用的系统级页表而具有不同系统地址的块中。在所描绘的示例中,父分区组件204也可被认为是类似于Xen的开源系统管理程序的域0,可以与系统管理程序微内核202交互来提供虚拟化层。该操作环境中的父分区 204可被配置成通过使用虚拟化服务提供者228 (VSP)来向在子分区I-N中执行的客操作系统提供资源,虚拟化服务提供者在开源社区中通常被称为后端驱动程序。广泛而言,VSP 2 可用于通过虚拟化服务客户端(VSC)(开源社区中通常称为前端驱动程序)复用到硬件资源的接口,并经由通信协议与虚拟化服务客户端进行通信。如图所示,虚拟化服务客户端可以在客操作系统的上下文中执行。这些驱动程序不同于客机中的其余驱动程序,因为向它们提供了系统管理程序而非客机。如附图仿真器234所示,例如虚拟化集成驱动电子设备(IDE设备)、虚拟化视频适配器、虚拟化NIC等可被配置成在父分区204中运行并被附连到可供客操作系统220和222 使用的资源。例如,当客操作系统触摸虚拟设备的寄存器或映射到虚拟设备202的存储器时,微内核系统管理程序可截取请求并传递客机试图写入相关联的仿真器的值。每一子分区可包括一个或多个虚拟处理器Q30和23 ,客操作系统Q20和222) 可管理并调度线程以便在这些虚拟处理器上执行。一般而言,虚拟处理器是提供具有特定架构的物理处理器的表示的可执行指令以及相关联的状态信息。例如,一个虚拟机可具有带有英特尔x86处理器特性的虚拟处理器,而另一虚拟处理器可具有PowerPC处理器的特性。本例中的虚拟处理器可被映射到计算机系统的逻辑处理器,使得实现虚拟处理器的指令将受到逻辑处理器的支持。由此,在包括多个逻辑处理器的实施例中,虚拟处理器可以由逻辑处理器同时执行,同时例如其他逻辑处理器执行系统管理程序指令。分区中虚拟处理器和存储器的组合可被认为是虚拟机。客操作系统可包括任何操作系统,如来自微软 、苹果 、开源社区等的操作系统。 客操作系统可包括用户/内核操作模式,并且可具有能包括调度器、存储器管理器等的内核。一般而言,内核模式可包括逻辑处理器中的执行模式,该执行模式授予至少对特权处理器指令的访问。每一客操作系统可具有相关联的文件系统,该文件系统上存储有诸如终端服务器、电子商务服务器、电子邮件服务器等应用以及客操作系统本身。客操作系统可调度线程来在虚拟处理器上执行,并且可实现此类应用的实例。现在参考图3,示出了对上述图2的替换体系结构。图3描绘了与图2的组件相类似的组件;然而,在该示例实施例中,系统管理程序304可包括微内核组件和来自图2的父分区204的组件,如虚拟化服务提供者2 和设备驱动程序224,而管理操作系统302可包含例如用于配置系统管理程序304的配置实用程序。在该体系结构中,系统管理程序304可以执行与图2的系统管理程序微内核202相同或相似的功能;然而,在该体系结构中,系统管理程序304可被配置成向在子分区中执行的客操作系统提供资源。图3的系统管理程序304可以是独立的软件产品、操作系统的一部分、嵌入在主板的固件内,或者系统管理程序304的一部分可以由专用集成电路来实现。简言之,图4描绘了用于实现所公开的主题的操作环境。例如,多个计算机系统 404-410可在数据中心400中被耦合在一起(虽然描绘了四个计算机系统,但本领域技术人员可以理解数据中心400可包括更多或更少的计算机系统)。所描绘的计算机系统可具有不同的拓扑结构,并且此外,它们可具有不同的特征,例如,不同数量的RAM、不同的RAM速度、不同量的逻辑处理器、和/或具有不同速度或指令集的逻辑处理器。如图所示,计算机系统406具有对称多处理拓扑结构(SMP)或‘扁平的’拓扑结构。 一般而言,SMP是包括连接到单个共享存储器的多个处理器的计算机体系结构。在该安排中,存储器控制器可管理去往和来自存储器的数据流。存储器存取对于每一逻辑处理器可以是统一的,并且每一逻辑处理器可以存取整个范围的存储器,即,整个系统物理地址。该拓扑结构对于具有相对较少数量的处理器的计算机系统工作良好,但当计算机系统包括许多处理器时,所有的处理器都对共享存储器总线的访问展开竞争,系统的性能可能降低。此外,计算机系统的复杂性极大地增加了,这进而驱动了每一处理器的价格上升。计算机系统404、408和410具有NUMA节点。基于NUMA的计算机系统一般可被认为是由较小的计算机系统组成的计算机。在该示例中,每一 NUMA节点可包括一个或多个逻辑处理器和本地存储器。NUMA节点内部的存储器被认为是本地存储器,而在其他NUMA节点中的存储器被认为是远程存储器,因为只有节点内部的处理器才被连接到同一存储器总线。NUMA节点通过高速缓存一致性域互连来互连,这允许一个NUMA节点中的处理器用一致的方式来存取其他NUMA节点中的存储器。因此,系统物理地址对于每一处理器是统一的。 或者换言之,系统物理地址20000对于计算机系统中的每一处理器是相同的。区别在于,对于某些处理器,存储器地址20000是本地存储器地址,例如在它们NUMA节点内部,而对于其他处理器,存储器地址20000是远程的,例如在它们NUMA节点外部。一般而言,本地存储器可比远程存储器更快地存取,而本地对远程存取时间之间的关系被称为NUMA比率。NUMA比率为1比2意味着与本地系统物理地址相比要花费两倍多的处理器周期来访问特定远程系统物理地址。NUMA减轻了 SMP系统通过限制任何一个存储器总线上的处理器数量而引起的瓶颈,并且一般地比具有相同量的逻辑处理器的SMP计算机系统便宜。转向图5,图5示出了可在其中实现所公开的主题的操作环境。如本领域技术人员可以理解的,所公开的主题不必在具有所示体系结构的计算机系统中实现。相反,所示体系结构只是用来解释概念的一个示例。因此,所公开的主题可被结合到包括不同量的NUMA节点、虚拟机、高速缓存拓扑结构、逻辑处理器等的不同环境中。图5示出通过高速缓存一致性域互连来连接的两个示例NUMA节点(500和502)。 所示NUMA节点具有不同的高速缓存拓扑结构。例如,NUMA节点500中的每一处理器共享3 级(“L3”)高速缓存,而两组处理器共享2级(“L2”)高速缓存。每一处理器(506-516) 被示为带有其自己的1级(“Li”)高速缓存。NUMA节点502中的逻辑处理器(518-524) 共享3级高速缓存并具有它们自己的1级高速缓存。本领域技术人员可以理解,所示高速缓存拓扑结构只是出于说明的目的,并且所公开的主题不限于在具有任何特定高速缓存拓扑结构的系统中实现。每一 NUMA节点(500和502)也被示为包括其自己的随机存取存储器(526 和 528)。处理器高速缓存通常用于指令以及此处称为信息的数据的临时存储。在作出请求时,逻辑处理器要求用于执行该请求的指令以及要对其执行该指令的数据。因为逻辑处理器按大于RAM的速度操作,所以将高速度的高速缓存添加到处理器并且构想算法来预期逻辑处理器将需要什么信息并试图将该信息存储在高速缓存中。通常,1级高速缓存是非常小的,这允许它变得非常快速,具有例如2个周期的等待时间,即,访问存储器和检索信息所需的处理器周期数。如果信息未出现在Ll高速缓存中,则发生高速缓存未中并且逻辑处理器检查其L2高速缓存,L2高速缓存是带有稍长的例如9个周期左右的等待时间的稍大的存储器池。如果数据不在L2或Ll中,则逻辑处理器检查其L3高速缓存。L3高速缓存远大于Ll和L2,并且其等待时间是例如23个周期。伴随着每一次高速缓存未中,逻辑处理器查看它的下一个级别的高速缓存直到它需要从RAM或大容量存储设备中取回信息。系统管理程序550,即图2的微内核系统管理程序202或图3的系统管理程序304, 可包括调度器552,调度器552可被配置成将指示虚拟处理器的线程调度为在逻辑处理器 (506-516或518-524)中的一个上运行。为了确定如何调度传入线程,系统管理程序调度器 552可以访问在下文中更详细地描述的各种信息(554-562)。线程表560可以是存储在存储器中的数据结构,并且可存储关于不同虚拟处理器线程的信息。在接收到要运行虚拟处理器的请求时,调度器552可访问线程表560并检索关于虚拟处理器的信息以便确定要将虚拟处理器调度到哪里以及怎样调度。对于每一虚拟处理器,线程表560可存储,例如,标识线程最后运行时间的时间戳、线程是否已经被标识为等待时间敏感的线程、线程最后在其上运行的逻辑处理器、对线程理想的处理器的身份、 线程最后在其中运行的NUMA节点、描述相关虚拟处理器线程的身份的信息,等等。在一示例性实施例中,线程表560可由调度器552使用来调度虚拟处理器线程。例如,调度器552可被配置成选择一空闲处理器以便运行位于种子NUMA节点(例如理想NUMA 节点)或最后运行线程的节点中的传入线程。在该示例实施例中,调度器552可以检查线程表560来确定传入线程请求的种子NUMA节点并将该线程调度到该种子NUMA节点上。在一具体示例中,每一 NUMA节点可保存每一 NUMA节点的空闲处理器图(5M和 562)。例如,空闲处理器图可以是其中每一位表示逻辑处理器的位图。当逻辑处理器运行线程时,可以设置位,并且当它完成运行线程时,可以重置该位。空闲处理器图可由调度器 552使用来确定哪些逻辑处理器是空闲的。在一示例性实施例中,位图可被分成多个图计算机系统中的每一 NUMA节点有一个存储在该NUMA节点中的图。该实施例减少了图上的冲突,因为它减少了试图访问同一存储器来设置和重置位的处理器的数量。此外,通过为每一 NUMA节点维护一个图,调度器552可以通过检查与特定NUMA节点相关联的空闲处理器图来快速地从候选列表中移除逻辑处理器。例如,传入线程可在线程表560中将其种子NUMA节点设为NUMA节点500,即,该线程可能最后在该节点上运行或该节点中的处理器被设为理想处理器。调度器552可接收该信息并搜索空闲处理器的空闲处理器图554。在该示例中,调度器552从候选列表中排除逻辑处理器518-5 而不必访问空闲处理器图562或处理其中的任何信息。在种子NUMA节点不具有空闲处理器的情况下,调度器552可被配置成通过访问NUMA节点表558中的信息来从下一最接近的NUMA节点中搜索空闲处理器,该NUMA节点表 558可能是存储在存储器中的数据结构。例如,NUMA节点表558可包括对于计算机系统中的每一 NUMA节点的节点距离图。系统管理程序550可生成根据存储器距离来对NUMA节点进行排序的阵列。例如,NUMA节点500的图将显示NUMA节点502是靠近的。系统管理程序550可在主系统引导时生成每一节点的图。例如,系统管理程序550可指引NUMA节点中的每一逻辑处理器访问来自主机中所有其他节点的MM ;记录往返时间并从好到差对时间进行排序;最佳的时间指示最近的节点而最差的时间指示最远的节点。一旦调度器552选择了 NUMA节点,可以使用各种算法来选择具体的逻辑处理器。 在其中虚拟机具有一个虚拟处理器的一个简单示例中,调度器552可确定线程的种子逻辑处理器,并且如果该线程不可用,则调度器552可访问高速缓存分层表556来确定将线程调度到哪里。高速缓存分层表556可包括对于每一逻辑处理器的位图阵列,它描述了每一逻辑处理器如何与其NUMA节点中的其他逻辑处理器共享高速缓存。例如,逻辑处理器506可具有3个阵列(Li、L2和L3高速缓存各一个),Ll阵列具有为逻辑处理器506设置的位以及对于508-516的空值,L2阵列具有为逻辑处理器506-510设置的位,而L3阵列示出为逻辑处理器506-516设置的位。在一个示例中,调度器552可被配置成选择与种子共享最高级别的高速缓存的空闲逻辑处理器。例如,如果种子是逻辑处理器506,则调度器552可以选择逻辑处理器508、逻辑处理器510或逻辑处理器512 (如果任一个空闲的话),因为L2 是这些处理器共享的最高级别的高速缓存。在一示例性实施例中,种子逻辑处理器可被设为最后运行线程的处理器。例如,如果虚拟机包括一个逻辑处理器,它最高效地在其最后运行的逻辑处理器上运行,因为该逻辑处理器具有含有该虚拟处理器在其高速缓存中需要的信息的最大几率。在该示例实施例中,因为移动了虚拟处理器,所以可将种子改为最后运行线程的逻辑处理器。调度算法的复杂性可随着被分配到虚拟机的虚拟处理器的数量的增加而增大。例如,当虚拟机包括多个虚拟处理器时,发明者注意到它们往往使用同一信息。因此,如果虚拟处理器被调度在共享高速缓存的逻辑处理器上,则高速缓存命中次数增加,这使得客机更高效地运行。在该示例中,调度器552可按照虚拟处理器共享物理高速缓存的方式来选择要运行虚拟机的虚拟处理器的逻辑处理器。该技术降低了高速缓存未中发生的几率,并且在高速缓存未中确实发生的情况下,其他虚拟处理器可以使用为一个虚拟处理器取回的信息。该技术还降低了一致性未中成本。例如,如果虚拟处理器需要对高速缓存行的独占访问,则将高速缓存行从运行虚拟处理器的逻辑处理器转移至另一逻辑处理器的成本降低了,因为信息可以在它们共享的高速缓存中移动而不必被一路重写回存储器中或通过套接字之间的总线来发送。在多个虚拟处理器在虚拟机中执行的一示例性实施例中,每一虚拟处理器可被分配由管理员设置或由配置程序自动设置的种子逻辑处理器。例如,虚拟处理器534可将逻辑处理器506设为其理想逻辑处理器而虚拟处理器536可将其理想逻辑处理器设为逻辑处理器508。当调度器552试图调度虚拟处理器534时,调度器552将确定其理想逻辑处理器是逻辑处理器506并试图将其调度到逻辑处理器506上。因为调度器552试图将线程保持在它们的理想逻辑处理器上,这将增加高速缓存命中的次数。在另一示例实施例中,调度器552可以不使用种子。相反,系统管理程序调度器552可以基于诸如虚拟机530之类的虚拟机中的其他虚拟处理器的线程的位置来选择空闲逻辑处理器。在该示例中,调度器552可被配置成选择它估计将具有最小估计未中成本的逻辑处理器。当逻辑处理器试图从高速缓存中存取信息而该信息不在高速缓存中时会发生高速缓存未中。未中成本是如果信息不在高速缓存中时将浪费的周期量。在该示例实施例中,调度器552可以选择具有最低估计未中成本的逻辑处理器。例如,调度器552可被配置成选择与当前正在运行虚拟机的虚拟处理器的最大数量的逻辑处理器共享高速缓存的空闲处理器。在相同或另一示例中,调度器552可被配置成选择与当前正在运行虚拟机的虚拟处理器的最大数量的逻辑处理器共享最大数量的高速缓存的空闲处理器。在又一示例性实施例中,调度器552可被配置成选择与当前正在运行虚拟机的虚拟处理器的最多逻辑处理器共享最高级别的高速缓存的逻辑处理器。例如, 参考图5,在一个实施例中,虚拟处理器534可在逻辑处理器506上运行,虚拟处理器536可在逻辑处理器508上运行而虚拟处理器538可在逻辑处理器514上运行。在该示例中,调度器552可接收要运行虚拟处理器540的请求。调度器552可检查空闲处理器图5M并确定逻辑处理器510和516是空闲的。在该示例中,调度器552可访问高速缓存分层表556并获得逻辑处理器510和516的阵列。调度器552可基于阵列中的信息来确定逻辑处理器510 与逻辑处理器506、逻辑处理器508和逻辑处理器514共享L3高速缓存,而逻辑处理器516 也与这些相同的逻辑处理器共享L3高速缓存。在以上的第一示例中,调度器552可选择逻辑处理器510或514。在以上描述的替换实施例中,调度器552可选择逻辑处理器510,因为它与逻辑处理器506和508共享L2高速缓存并与逻辑处理器506、逻辑处理器508和逻辑处理器514共享L3高速缓存。在该示例中,逻辑处理器510与逻辑处理器510共享5个高速缓存而逻辑处理器514共享3个。在第三示例中,调度器552可选择逻辑处理器510, 因为它与逻辑处理器506和508共享L2高速缓存。在另一示例实施例中,调度器552可被配置成在调度时不同于常规工作负载地处理等待时间敏感的工作负载。通常,尽可能快地调度属于等待时间敏感的客机的虚拟处理器。然而在这种情况下,如果虚拟处理器最后在其上运行的逻辑处理器不可用,则该虚拟处理器将被迁移至别处并且将丢失具有高速缓存命中的积极效果。在一示例实施例中,调度器552可被配置成最大化局部性的同时限制等待时间而不影响非等待时间敏感的工作负载。例如,当系统管理程序550接收到要调度等待时间敏感的线程的请求时,调度器 552可确定是否存在与最后运行该线程的逻辑处理器共享高速缓存的任何逻辑处理器并选择一个逻辑处理器。例如,所选逻辑处理器可以是与最后运行该线程的处理器共享最高级别的高速缓存的逻辑处理器。如果没有共享高速缓存的逻辑处理器可用,则调度器552可确定自从虚拟处理器上一次运行以来的时间量并将其与预定阈值进行比较。如果自从上一次运行以来的时间量大于阈值,则虚拟处理器可被迁移,否则它可被排队来在最后运行该线程的逻辑处理器上运行。如果自从虚拟处理器上一次运行以来的时间量大于阈值,则假定有用信息不在高速缓存中。如果自从上一次运行以来的时间量小于阈值,则假定高速缓存仍然包含有用信息。本领域技术人员可以理解,预定阈值可由策略或管理员来设置,并且取决于虚拟机的物理硬件和工作负载特性。随着时间的推移,管理员或策略可调整预定阈值并监视效率是怎样提高或降低的直到找到为运行特定工作负载的特定主机找到最优值。
继续图5的描述,在一实施例中,可将虚拟高速缓存拓扑结构展示给虚拟机。在该示例实施例中,系统管理程序550可生成可展示给客机的虚拟化拓扑结构。系统管理程序 550可构造可由主计算机系统以及例如数据中心中的任何其他计算机系统合理兑现的拓扑结构。这允许客操作系统中的调度器在作出明智的调度决策的同时维持硬件和虚拟硬件之间的抽象。例如,在将虚拟化拓扑结构展示给客操作系统532的实施例中,系统管理程序550 可在引导期间检测主计算机系统的高速缓存拓扑结构。在主机是其自身的一示例实施例中,系统管理程序550可被配置成计算可至少由计算机系统中的大多数逻辑处理器兑现的虚拟高速缓存拓扑结构。在数据中心中,主计算机可将高速缓存拓扑结构发送给管理系统 402以及数据中心中的所有其他计算机。管理系统402随后可计算可至少由大多数计算机系统兑现的虚拟拓扑结构。该拓扑结构可由可实现具有该拓扑结构的虚拟机的系统管理程序550接收。在一具体示例中,系统管理程序550或管理系统402可计算虚拟拓扑结构。例如, 系统管理程序550或管理系统402可通过确定高速缓存共享的一定数量的逻辑处理器来计算虚拟拓扑结构;将所确定数量的逻辑处理器展示给客操作系统;并且展示互连所确定数量的逻辑处理器的高速缓存,该高速缓存是可兑现的最低类型的高速缓存。在一示例性实施例中,转向图5,系统管理程序550或管理系统402可通过确定高速缓存共享(共享基数)的一定数量的逻辑处理器来计算虚拟高速缓存拓扑结构;将共享基数展示给客操作系统;并将互连所确定数量的可兑现的(共享级别)最高级别的高速缓存的高速缓存展示给客操作系统。在计算共享基数的一个方法中,共享基数被设为共享NUMA节点中最低级别的高速缓存的逻辑处理器的最小数量。例如,参考图5,在所示实施例中,系统管理程序550可检测到NUMA节点500中的6个逻辑处理器和NUMA节点502中的4个逻辑处理器共享最低级别的高速缓存(U)。系统管理程序550(或在数据中心的示例中是管理系统40 随后可确定共享群集中最低级别的高速缓存的逻辑处理器的最小量是4,即,逻辑处理器518-5M共享L3。在该示例中,系统管理程序550可将L3选为要展示的高速缓存的类型,因为系统管理程序550 (或管理系统40 将共享级别确定为其上至少存在共享基数个高速缓存共享逻辑处理器的高速缓存的最高级别。因此,如图5所示,在该示例中,系统管理程序550可展示共享虚拟L3高速缓存的4个虚拟处理器的组。系统管理程序550随后可将信息存储在高速缓存分层表阳6中。在计算共享基数的另一方法中,共享基数是每一 NUMA节点中共享每一群集中最低级别的高速缓存的逻辑处理器的数量的最大公约数。例如,参考图5,在所示实施例中,系统管理程序550可检测作为一个组共享群集中最低级别的高速缓存的逻辑处理器的数量。 在该示例中,NUMA节点500包括共享最低级别的高速缓存L3的6个逻辑处理器(逻辑处理器506-516),而在NUMA节点502中,4个逻辑处理器(逻辑处理器518-524)共享最低级别的高速缓存L3。系统管理程序550(或在数据中心的示例中是管理系统40 随后确定两组的最大公约数,6个处理器和4个处理器的最大公约数是2个处理器。系统管理程序 550(或管理系统40 随后确定每一 NUMA节点中其上至少存在所确定数量个处理器(在该示例中是2个)的最高级别的高速缓存是L3。在该示例中,系统管理程序550可将L3选为要展示的高速缓存的类型。因此,如图5所示,在该示例中,系统管理程序550可展示共享虚拟L3高速缓存的2个虚拟处理器的组。系统管理程序550随后可将该信息存储在高速缓存分层表556中。在确定了虚拟高速缓存拓扑结构(在数据中心的情况下,由管理系统402传递给系统管理程序550)之后,调度器552在调度线程时可使用该拓扑结构。在一个实施例中, 系统管理程序550可按兑现虚拟高速缓存拓扑结构的方式来为虚拟处理器设置理想逻辑处理器。例如,继续以上的具体示例,系统管理程序550可将逻辑处理器506设为虚拟处理器534的理想处理器,将逻辑处理器508设为虚拟处理器536的理想处理器。系统管理程序550随后将逻辑处理器506和508之间的L2高速缓存展示为虚拟L3高速缓存。在该示例实施例中,只要调度器552可将虚拟处理器534或虚拟处理器536调度到NUMA节点500 或NUMA节点502中的逻辑处理器的任意组合上,则该虚拟化拓扑结构可被兑现。此外,如果被虚拟化的物理高速缓存是L2,则客操作系统532可观察到性能提升。在另一示例中,系统管理程序550可记住虚拟处理器执行的位置并基于所展示的虚拟拓扑结构以及与可用逻辑处理器相关联的所估计的高速缓存未中成本来选择逻辑处理器。调度器阳2随后可确定运行虚拟机530的其他线程的逻辑处理器的身份,并使用该信息来选择兑现虚拟高速缓存拓扑结构且具有最低所估计的未中成本的逻辑处理器。以下是描绘操作过程的一系列流程图。为便于理解,流程图被组织成使得初始流程图通过总体“大图”视点来演示各实现,并且后续的流程图提供进一步的附加物和/或细节。此外,本领域的技术人员可以理解,虚线所描绘的操作过程被认为是任选的。现在转向图6,它示出了包括操作600、602和604的操作过程。操作600开始操作过程,而操作602示出使得响应于接收到要调度指示虚拟机的虚拟处理器的线程的请求来生成空闲逻辑处理器列表。例如,转向图5,系统管理程序550可被配置成实例化虚拟机 530并控制虚拟机530,将诸如虚拟处理器534-虚拟处理器540等一个或多个虚拟处理器展示给客操作系统532。例如,客操作系统可发出查询虚拟拓扑结构的指令。该指令可由系统管理程序550截取和虚拟化。如虚拟L3高速缓存的虚线所示,在一示例实施例中,虚拟处理器534-540可以是单核虚拟处理器而虚拟L3高速缓存可能不存在。或者换言之,在该示例中,可以不将虚拟化拓扑结构展示给客操作系统532。在该示例中,客操作系统532可将线程调度到虚拟处理器534上,而系统管理程序550可接收到要将虚拟处理器534调度到逻辑处理器上的请求。响应于接收到该请求,调度器552可执行并生成空闲逻辑处理器列表。在一示例实施例中,调度器552可检查空闲处理器图并确定系统中哪些处理器是空闲的。转向操作604,它示出了使得指示虚拟处理器的线程被调度在列表中与种子逻辑处理器共享一个级别的高速缓存的逻辑处理器上。继续以上的示例,调度器552可执行并将线程调度到与种子逻辑处理器共享一个级别的高速缓存的逻辑处理器上。例如,在该示例实施例中,调度器552可试图将线程调度到接近种子逻辑处理器的逻辑处理器上。在该示例中,调度器552可通过提高线程将使用在共享高速缓存中的数据或指令以及逻辑处理器可以在不必从RAM或另一 NUMA节点取回数据或指令的情况下运行的几率来提升虚拟机 530的性能。继续以上的具体示例,调度器552可确定指示虚拟处理器534的线程的种子是逻辑处理器506。在逻辑处理器506不可用的情况下,调度器552随后可被配置成访问高速缓存分层表556并确定哪些空闲逻辑处理器与逻辑处理器506共享高速缓存。调度器552随后可被配置成选择共享高速缓存的逻辑处理器中的一个来运行指示虚拟处理器534的线程。例如,逻辑处理器508和逻辑处理器514可能是空闲的。调度器552可访问高速缓存分层表556并确定逻辑处理器508与逻辑处理器506共享L2和L3而逻辑处理器506与逻辑处理器514共享L3。调度器552随后可选择逻辑处理器中的一个来运行线程。现在转向图7,其示出图6的操作过程的替换实施例,包括附加操作706-718。操作706示出,响应于确定最后运行指示虚拟处理器的线程的逻辑处理器不可用、并且自从指示虚拟处理器的线程最后一次执行以来已经超过预定时间量,使得指示虚拟处理器的线程被调度在与种子逻辑处理器共享一个级别的高速缓存的逻辑处理器上。例如,调度器552 可确定指示虚拟处理器534的线程与等待时间敏感的工作负载相关联。即,工作负载,即客操作系统532执行的程序在客机在虚拟处理器上运行该程序时可能需要被尽快地调度。例如,系统管理程序550可从客机532获得指示其性能是缓慢的或客操作系统532正执行许多基于网络的输入/输出工作的性能信息。在另一实施例中,管理员或策略可将来自虚拟机530的线程设为等待时间敏感的。无论线程是怎样被标识为等待时间敏感的,在接收到要调度指示虚拟处理器534的线程的请求并确定如何调度它时,调度器552可从线程表560 获得信息。在一示例实施例中,调度器552可立即调度线程,或取决于线程最后运行的时间使其排队。例如,如果线程最近运行过,则存在它将使用的信息仍然在高速缓存中的记录。 在信息仍然在高速缓存中的实例中,由于排队导致的性能损失可能小于由于高速缓存未中而导致的性能损失。或者,如果线程最近未运行过,则高速缓存可能是冷的,即,可能不具有任何有用信息,并且无法通过任何更长的等待来获得任何性能益处。在该示例中,可以使用预定阈值时间来确定该线程应该被运行。例如,调度器552 可接收要调度虚拟处理器534的请求。调度器552可运行并访问线程表560来获得关于虚拟处理器534的信息,诸如描述线程是等待时间敏感的、线程最后运行的时间、最后运行指示虚拟处理器534的线程的逻辑处理器的信息。调度器552可访问空闲处理器图并检查是否有逻辑处理器是可用的。在该具体示例中,最后运行线程的逻辑处理器,即逻辑处理器 506可能是不可用的。在这种情况下,调度器552可将自从虚拟处理器534最后一次运行以来的时间量与预定阈值进行比较,并确定自从最后一次运行以来的时间量大于预定值。调度器552可被调度来访问高速缓存分层表556并确定哪些可用逻辑处理器与逻辑处理器 506共享高速缓存并选择一个来运行线程534。继续图7的描述,操作708示出,响应于确定最后运行指示虚拟处理器的线程的逻辑处理器不可用、并且自从指示虚拟处理器的线程最后一次执行以来未超过预定时间量, 使得指示虚拟处理器的线程被排队在最后运行指示虚拟处理器的线程的逻辑处理器上。与操作706类似,指示虚拟处理器534的线程可以是等待时间敏感的线程。在该示例中,在逻辑处理器506不可用且未超过预定时间量的实例中,调度器552可被配置成将线程534排队在逻辑处理器506上。在该示例中,可以作出这样的决策要获得高速缓存命中的节省将补偿等待时间敏感的线程未被尽快执行的事实。如上所述,预定阈值可基于系统的性能特征来设置并且可由管理员或策略调整。
图7的操作710示出使得最后执行指示虚拟处理器的线程的逻辑处理器被设为种子逻辑处理器。例如,在一个实施例中,系统管理程序550可使用管理员或策略来为虚拟处理器设置种子逻辑处理器。在一具体示例中,最后运行虚拟处理器534的逻辑处理器可被设为种子。因此,在该示例实施例中,如果将线程534从逻辑处理器506移动至逻辑处理器 508,则可以改变线程表560中的种子来反映种子现在是逻辑处理器508。在该示例中,虚拟机530可以是单核虚拟机530,而可以从高速缓存命中中获得的仅有效率是来自将虚拟处理器534配置成与最后运行其的逻辑处理器共享尽可能多的高速缓存。转向操作712,其示出使得理想逻辑处理器被设为种子逻辑处理器。例如,转向图 5,理想逻辑处理器可被设为种子。在该示例中,种子可以在引导时基于策略或由管理员静态地分配。在该示例中,种子可以保持恒定,即使指示虚拟处理器的线程被调度器552移动。例如,虚拟机530可被实例化。策略可由系统管理程序550读取来引导它为虚拟处理器534-540设置理想处理器。作为响应,系统管理程序550可将逻辑处理器506分配为虚拟处理器534的理想处理器,将逻辑处理器508分配为虚拟处理器536的理想处理器,并以此类推。该信息随后可被记录在线程表560中。在虚拟处理器534在下一次运行时被移动的情况下,调度器552可被配置成访问线程表560 ;确定逻辑处理器506被设为理想逻辑处理器;并检查逻辑处理器506是否空闲。在该示例中,如果逻辑处理器506空闲,则它被调度,而不管最后运行虚拟处理器534的逻辑处理器的身份是什么。如果它不可用,则调度器 552试图将其定位在尽可能接近理想逻辑处理器的位置。转向操作714,它示出了使得指示虚拟处理器的线程被调度在列表中与种子逻辑处理器共享最高级别的高速缓存的逻辑处理器上。例如,在一个示例中,调度器552可被配置成试图分配虚拟处理器从而使得它们共享最高级别的高速缓存。在该示例中,客机532 具有见到由于高速缓存命中导致的性能提升的最佳几率。如上所述,每一逻辑处理器可具有存储在高速缓存分层表556中的与其相关联的阵列。响应于接收到要调度指示虚拟处理器(诸如虚拟处理器534)的线程的请求,调度器552可确定虚拟处理器534的种子并访问高速缓存分层表556来确定与种子共享最高级别的高速缓存的可用逻辑处理器。调度器 552随后可将线程调度到与种子共享最高级别的高速缓存的可用逻辑处理器上。转向操作716,它示出了使得从特定NUMA节点中的逻辑处理器列表中生成空闲逻辑处理器列表。系统管理程序550可被配置成为计算机系统中的每一 NUMA节点维护空闲处理器图。在该示例中,在启动虚拟机530时每一虚拟处理器可被分配理想NUMA节点并且该信息可被存储在线程表560中。当调度器552运行时,它可确定线程已经被分配理想 NUMA节点,并且调度器552可从与理想NUMA节点相关联的空闲处理器图中生成空闲处理器列表。以此方式,降低了对可能的逻辑处理器候选的初始设置。在一具体示例中,NUMA节点500可以是指示虚拟处理器534的线程的理想NUMA节点。调度器552可从线程表560 中获得该信息;访问空闲处理器图阳4 ;并生成NUMA节点500中的空闲处理器列表。继续图7的描述,操作718示出使得将虚拟高速缓存拓扑结构展示给客操作系统, 其中虚拟高速缓存拓扑结构基于多个计算机系统的物理高速缓存拓扑结构。例如,转向图 5,系统管理程序550可获得描述如何为虚拟机530生成虚拟高速缓存拓扑结构的配置信息。在一个实施例中,系统管理程序550可生成该信息,或者在数据中心的实施例中,它可从例如图4的管理系统402接收该配置信息。配置信息可描述在其引导时可被展示给客操作系统532的虚拟高速缓存拓扑结构。客操作系统532随后可检测该拓扑结构并将它的调度器配置成取决于该拓扑结构。例如,客操作系统532可查询硬件来确定拓扑结构。系统管理程序550可截取查询并用描述了虚拟高速缓存拓扑结构的虚拟化信息来响应。在该示例中,虚拟高速缓存拓扑结构可独立于主计算机系统的物理拓扑结构,从而使得客操作系统532可被容易地迁移至数据中心400中的任何计算机系统。现在转向图8,其示出了图7所描绘的操作过程的替换实施例。图8包括操作718 的细化820,其中虚拟高速缓存拓扑结构信息包括共享虚拟高速缓存的虚拟处理器的数量。 例如,系统管理程序500或数据中心400的管理系统402可被配置成生成展示给客操作系统532的虚拟高速缓存拓扑结构。虚拟高速缓存拓扑结构可包括共享虚拟高速缓存的虚拟处理器的经计算的数量。在一个示例中,处理器的数量可通过计算共享数据中心400中的每一 NUMA节点的最低级别的高速缓存的逻辑处理器的最大公约数来确定。例如,每一计算机系统可具有与图5所述的物理拓扑结构相同的拓扑结构,并且管理系统402可被配置成确定每一 NUMA节点中的最低级别的高速缓存,例如,在该示例中是L3高速缓存,并确定每一 NUMA节点中共享该级高速缓存的逻辑处理器的数量,即,NUMA节点500中为6个,NUMA 节点502中为4个。管理系统402随后可确定6和4的最大公约数是2。该值可被设为共享虚拟高速缓存拓扑结构中一个级别的高速缓存的虚拟处理器的数量。在另一示例中,共享虚拟高速缓存拓扑结构中的一个级别的高速缓存的虚拟处理器的数量可使用不同的技术来计算。例如,管理系统402可确定共享每一 NUMA节点中最高级别的高速缓存的逻辑处理器的数量。管理系统402随后可将逻辑处理器的最小数量设为共享虚拟高速缓存拓扑结构中的一个级别的高速缓存的虚拟处理器的数量。例如,管理402 可接收这样的信息,该信息描述了 L2是逻辑处理器506-512共享的最高级别的高速缓存, L2是逻辑处理器514-516之间共享的最高级别的高速缓存,而L3是逻辑处理器518-5 之间共享的最高级别的高速缓存。管理系统402随后可确定4个、2个和4个逻辑处理器共享计算机系统(例如数据中心400)中的相应的最高级别的高速缓存。在该示例实施例中,管理系统402可选择最小的数量(2)并将其设为共享虚拟高速缓存拓扑结构中的一个级别的高速缓存的虚拟处理器的数量。现在转向图9,示出了操作820的细化922,其中虚拟高速缓存拓扑结构信息包括虚拟高速缓存的高速缓存级别,其中该高速缓存级别基于多个逻辑处理器之间共享的最低级别的高速缓存。例如,在确定了虚拟高速缓存拓扑结构的虚拟处理器的数量之后,可以确定共享的虚拟高速缓存的类型。在一示例实施例中,由等于或大于所确定数量的虚拟处理器的多个逻辑处理器共享的最低类型的高速缓存可用作虚拟高速缓存。例如,参考图5,管理系统402可被配置成接收这样的信息,该信息描述了 NUMA节点500包括由4个逻辑处理器共享的L2高速缓存,在2个逻辑处理器之间共享的L2高速缓存,以及在6个逻辑处理器之间共享的L3高速缓存。管理系统402还可接收描述了 NUMA节点502包括在4个逻辑处理器之间共享的L3高速缓存的信息。在该示例中,管理系统402 可确定NUMA节点500可支持在等于或大于为虚拟高速缓存拓扑结构设置的虚拟处理器的数量的多个逻辑处理器之间共享的L2和L3高速缓存。管理系统402还可确定NUMA节点 502可支持在等于或大于为虚拟高速缓存拓扑结构设置的虚拟处理器的数量的多个逻辑处理器之间共享的L3高速缓存。管理系统402可将L3设为要在虚拟高速缓存拓扑结构中展示的高速缓存,因为它是可由每一 NUMA节点兑现的最低级别的高速缓存。现在转向图10,它示出了包括操作1000、1002、1004、1006和1008的操作过程。 操作1000开始操作过程,操作1002示出将多个单核虚拟处理器展示给虚拟机。例如,转向图5,计算机系统可执行指示系统管理程序550的指令,并且可加载可用于实例化虚拟机 530的指令。系统管理程序550可设立虚拟机530以包括多个虚拟处理器,诸如虚拟处理器 534-540.在该示例中,虚拟处理器可以是单核虚拟处理器。换言之,虚拟处理器534-540可以不共享高速缓存。客操作系统532可通过查询虚拟拓扑结构来引导和检测单核虚拟处理器。系统管理程序550可截取该查询并返回包括多个单核虚拟处理器的虚拟化拓扑结构。继续图10的描述,操作1004示出响应于接收到要执行指示单核虚拟处理器的线程的请求来生成空闲逻辑处理器列表。例如,在系统管理程序550接收到要调度指示诸如虚拟处理器540之类的虚拟处理器的线程的请求的情况下,可将系统管理程序550的执行实例设为生成空闲逻辑处理器列表。例如,调度器552的可执行指令可被加载到设立计算机系统中逻辑处理器的空闲处理器图的存储器中,系统管理程序可被配置成响应于从诸如客操作系统532之类的客机接收到线程来运行调度器552,调度器522可生成空闲逻辑处理器列表。现在转向操作1006,它示出了标识当前正在执行指示虚拟机的单核虚拟处理器的线程的逻辑处理器。继续该示例,响应于要运行指示虚拟处理器(诸如虚拟处理器M0)的线程的请求,系统管理程序550可确定指示虚拟机的虚拟处理器的线程当前正在执行的位置。例如,每一次逻辑处理器运行时,它可用标识它正在运行的哪个虚拟处理器的信息来更新线程表560。当系统管理程序550运行时,它可检查线程表560来查看当前什么逻辑处理器正在运行虚拟机的虚拟处理器。例如,虚拟处理器534可能正在逻辑处理器514上执行, 虚拟处理器536可能正在逻辑处理器516上执行,而虚拟处理器538可能正在虚拟处理器 512上执行。现在转向操作1008,它示出将指示虚拟处理器的线程调度到一逻辑处理器上,该逻辑处理器是列表中与当前正在执行指示虚拟机的单核虚拟处理器的线程的最大数量的逻辑处理器共享高速缓存的逻辑处理器。例如,调度器552可确定哪些空闲逻辑处理器与当前正在运行指示虚拟机中的其他虚拟处理器的线程的最大数量的逻辑处理器共享高速缓存。例如,调度器552可访问高速缓存分层表556,该表可包括用于每一逻辑处理器的位图阵列,并确定哪些可用处理器与最大数量的逻辑处理器共享高速缓存。继续以上示例,调度器552可将指示虚拟处理器540的线程调度到逻辑处理器506上,因为逻辑处理器506 与最大数量的当前正在执行的虚拟处理器共享高速缓存。现在转向图11,其示出图10的操作过程的替换实施例,包括操作1110和1112。操作1110示出从非均勻存储器体系结构(NUMA)节点中的逻辑处理器列表中生成空闲逻辑处理器列表,其中计算机系统中的每一 NUMA节点与NUMA节点中的逻辑处理器的唯一列表相关联。例如,调度器552可被配置成将线程调度到与当前正在运行的最大数量的虚拟处理器共享最高级别的高速缓存的逻辑处理器上。例如,在一个实施例中,调度器552可确定存在与最大数量的逻辑处理器共享高速缓存的多个可用逻辑处理器。在该示例中,调度器552 可被配置成选择与最多的逻辑处理器共享最高级别的高速缓存的逻辑处理器。例如,在一个实施例中,逻辑处理器508-514可正在运行包括5个虚拟处理器的虚拟机的4个虚拟处理器。调度器552可确定逻辑处理器506和逻辑处理器516是可用的,并且各自与当前正在运行虚拟机的虚拟处理器共享L3高速缓存。在该示例中,调度器552可确定逻辑处理器 506与4个逻辑处理器中的3个共享L2高速缓存,而逻辑处理器516与1个逻辑处理器共享L2高速缓存。在该示例中,调度器552可选择逻辑处理器506。继续图11的描述,操作1112示出,响应于确定最后运行指示虚拟处理器的线程的逻辑处理器不可用、且自从指示单核虚拟处理器的线程最后一次执行以来已经超过预定时间量,将指示虚拟处理器的线程调度到逻辑处理器上。例如,调度器552可确定线程与等待时间敏感的工作负载相关联。即,工作负载(例如客操作系统532执行的程序)可能需要在调度器552接收到该程序时被尽快地调度。在该示例中,如果自从虚拟处理器最后一次运行以来已经超过预定时间量,则调度器552可被调度来访问高速缓存分层表556并确定哪些可用逻辑处理器与例如最后运行虚拟处理器的逻辑处理器共享高速缓存,或者与当前正在执行虚拟机的虚拟处理器的最大数量的逻辑处理器共享高速缓存的可用逻辑处理器。现在转向图12,它示出了包括操作1200、1202、1204和1206的操作过程。操作 1200开始过程,操作1202示出使得指示虚拟机的虚拟处理器的线程被分配独特的逻辑处理器来在其上执行。在一个实施例中,系统管理程序550可对虚拟机的每一虚拟处理器分配独特的逻辑处理器。在该示例中,在接收到要调度虚拟处理器的请求时,系统管理程序 550可试图将虚拟处理器调度到所分配的逻辑处理器上。例如,线程表560可存储标识所分配的逻辑处理器的信息。调度器552在接收到要调度线程的请求时可检查线程表560。继续图12的描述,操作1204示出使得响应于接收到要执行指示虚拟处理器的线程的请求来生成空闲逻辑处理器列表。例如,在系统管理程序550接收到要调度指示诸如虚拟处理器540之类的虚拟处理器的线程的请求的情况下,可设置系统管理程序550的执行实例以生成空闲逻辑处理器列表。例如,调度器552的可执行指令可被加载到设立计算机系统中逻辑处理器的空闲处理器图的存储器中,系统管理程序可被配置成响应于从诸如客操作系统532之类的客机接收到线程来运行调度器552,调度器552可生成空闲逻辑处理器列表。再次转回图12,操作1206示出使得指示虚拟处理器的线程被调度在与被分配来执行指示虚拟处理器的线程的独特的逻辑处理器共享一个级别的高速缓存的逻辑处理器上。例如,调度器552可确定哪些空闲逻辑处理器与所分配的逻辑处理器共享高速缓存并选择一个。例如,调度器552可访问高速缓存分层表556,该表可包括用于每一逻辑处理器的位图阵列,并确定哪些可用处理器与所分配的逻辑处理器共享高速缓存。现在参考图13,其示出图12所示的操作过程的替代实施例,包括附加的操作 1308、1310、1312、1314、1316和1318。操作1308示出使得响应于确定独特的逻辑处理器不可用而来选择与独特的逻辑处理器共享一个级别的高速缓存的逻辑处理器。例如,调度器 552可被配置成试图将指示虚拟处理器的线程调度到所分配的逻辑处理器上。在该处理器不可用的情况下,它可将指示虚拟处理器的线程调度到与被分配来执行指示虚拟处理器的线程的逻辑处理器共享一个级别的高速缓存的逻辑处理器上。操作1310示出使得响应于确定自从指示虚拟处理器的线程最后一次执行以来已经超过预定时间量而来调度指示虚拟处理器的线程。例如,在一个实施例中,调度器552可被配置成定位逻辑处理器来运行等待时间敏感的工作负载。即,工作负载(例如客操作系统532执行的程序)可能需要在调度器552接收到该程序时被尽快地调度。在该示例中, 如果自从虚拟处理器最后一次运行以来已经超过预定时间量,则调度器552可被调度来访问高速缓存分层表556并确定哪些可用逻辑处理器与例如所分配的逻辑处理器共享高速缓存。图1312示出,使得响应于确定最后运行指示虚拟处理器的线程的逻辑处理器不可用、并且自从指示虚拟处理器的线程最后一次执行以来未超过预定时间量,指示虚拟处理器的线程被排队在最后运行指示虚拟处理器的线程的逻辑处理器上。在一个实施例中, 指示虚拟处理器534的线程可以是等待时间敏感的线程。在该示例中,在逻辑处理器506不可用且未超过预定时间量的实例中,调度器552可包括用于查询线程的指令。在该示例中, 可以作出这样的决策要具有高速缓存命中的节省将补偿等待时间敏感的线程不被尽快执行的事实。如上所述,预定阈值可基于系统的性能特征来设置并且可由管理员或策略调整。操作1314示出使得为计算机系统中的每一非均勻存储器体系结构(NUMA)节点维护空闲逻辑处理器列表。例如,系统管理程序550可被配置成为计算机系统中的每一 NUMA 节点维护空闲处理器图。在该示例中,响应于接收到调度线程的请求,可将包括所分配的处理器的NUMA节点设为调度器552首先检查的节点。在调度器552运行时,它可从与NUMA 节点相关联的空闲处理器图中生成空闲处理器列表。以此方式,减少了对可能的逻辑处理器候选的初始设置而不必检查列出计算机系统中每一个逻辑处理器的位图。操作1316示出使得指示虚拟处理器的线程被调度在与被分配来执行指示虚拟处理器的线程的逻辑处理器共享最高级别的高速缓存的逻辑处理器上。例如,调度器552可被配置成试图分配虚拟处理器从而使得它们共享最高级别的高速缓存。在该示例中,客机 532具有见到由于高速缓存命中导致的性能提升的最佳几率。如上所述,每一逻辑处理器可具有存储在高速缓存分层表556中的与其相关联的阵列。响应于接收到要调度指示虚拟处理器(诸如虚拟处理器534)的线程的请求,调度器552可确定虚拟处理器534的种子并访问高速缓存分层表556来确定与所分配的逻辑处理器共享最高级别的高速缓存的可用逻辑处理器。调度器552随后可将线程调度到与所分配的逻辑处理器共享最高级别的高速缓存的可用逻辑处理器上。操作1318示出使得将由虚拟高速缓存互连的多个虚拟处理器展示给客操作系统。例如,转向图5,系统管理程序550可获得描述如何为虚拟机530生成虚拟高速缓存拓扑结构的配置信息。在一个实施例中,系统管理程序550可生成该信息,或者在数据中心的实施例中,它可从例如图4的管理系统402接收该配置信息。配置信息可描述在其引导时可被展示给客操作系统532的虚拟高速缓存拓扑结构。客操作系统532随后可检测该拓扑结构并将它的调度器配置成取决于该拓扑结构。例如,客操作系统532可查询虚拟处理器来确定拓扑结构。系统管理程序550可截取查询并用描述了虚拟高速缓存拓扑结构的拓扑结构信息来响应。在该示例中,虚拟高速缓存拓扑结构可独立于主计算机系统的物理拓扑结构,从而使得客操作系统532可被容易地迁移至数据中心400中的任何计算机系统。上述详细描述通过示例和/或操作图阐明了系统和/或过程的各种实施例。就这些框图和/或示例包含一个或多个功能和/或操作而言,本领域技术人员将理解,这些框图或示例中的每一功能和/或操作都可由各种各样的硬件、软件、固件、或实际上其任意组合来单独地和/或共同地实现。
虽然已示出和描述了本文中描述的主题内容的特定方面,但是本领域技术人员将明白,基于本文中的教导,可作出改变和修改而不脱离本文中描述的主题内容,并且其更广方面以及因此所附权利要求的范围旨在涵盖落在本文中描述的主题内容的真实精神和范围内的所有此类改变和修改。
权利要求
1.一种包括多个非均勻存储器访问(NUMA)节点(500和50 的计算机系统(100),每一 NUMA节点(500和50 包括多个逻辑处理器(506-5M),其中所述计算机系统(100)包括计算机可读存储介质(110),所述介质包括在由所述计算机系统执行时使得响应于接收到调度指示虚拟机(530)的虚拟处理器 (534-540)的线程的请求来生成空闲逻辑处理器(5M或56 列表的指令;以及在由所述计算机系统执行时使得指示所述虚拟处理器(534-540)的线程被调度在所述列表中与种子逻辑处理器共享一个级别的高速缓存的逻辑处理器上的指令。
2.如权利要求1所述的计算机系统,其特征在于,所述计算机可读存储介质还包括 在由所述计算机系统执行时,使得响应于确定最后运行指示所述虚拟处理器的所述线程的逻辑处理器不可用、并且自从指示所述虚拟处理器的所述线程最后一次执行以来已经超过预定时间量,指示所述虚拟处理器的所述线程被调度在与所述种子逻辑处理器共享一个级别的高速缓存的逻辑处理器上的指令。
3.如权利要求1所述的计算机系统,其特征在于,所述计算机可读存储介质还包括 在由所述计算机系统执行时,使得响应于确定最后运行指示所述虚拟处理器的所述线程的逻辑处理器不可用并且自从指示所述虚拟处理器的所述线程最后一次执行以来未超过预定时间量,指示所述虚拟处理器的所述线程被排队在最后运行指示所述虚拟处理器的所述线程的所述逻辑处理器上的指令。
4.如权利要求1所述的计算机系统,其特征在于,所述计算机可读存储介质还包括 在由所述计算机系统执行时使得最后执行指示所述虚拟处理器的所述线程的逻辑处理器被设为所述种子逻辑处理器的指令。
5.如权利要求1所述的计算机系统,其特征在于,所述计算机可读存储介质还包括 在由所述计算机系统执行时使得理想逻辑处理器被设为所述种子逻辑处理器的指令。
6.如权利要求1所述的计算机系统,其特征在于,使得指示所述虚拟处理器的所述线程被调度的所述指令还包括在由所述计算机系统执行时使得指示所述虚拟处理器的所述线程被调度在所述列表中与所述种子逻辑处理器共享最高级别的高速缓存的逻辑处理器上的指令。
7.如权利要求1所述的计算机系统,其特征在于,使得生成所述空闲逻辑处理器列表的所述指令还包括在由所述计算机系统执行时使得从特定NUMA节点中的逻辑处理器列表中生成所述空闲逻辑处理器列表的指令。
8.如权利要求1所述的计算机系统,其特征在于,所述计算机可读存储介质还包括 在由所述计算机系统执行时使得将虚拟高速缓存拓扑结构展示给客操作系统的指令,其中所述虚拟高速缓存拓扑结构基于多个计算机系统的物理高速缓存拓扑结构。
9.一种计算机可读存储介质(110),包括在由计算机系统执行时使得指示虚拟机(530)的虚拟处理器(534)的线程被分配要在其上执行的独特逻辑处理器(506)的指令;在由所述计算机系统执行时使得响应于接收到要执行指示虚拟处理器(534)的线程的请求来生成空闲逻辑处理器列表的指令;以及在由所述计算机系统执行时使得指示所述虚拟处理器(534)的所述线程被调度在与被分配来执行指示所述虚拟处理器(534)的所述线程的所述独特逻辑处理器(508)共享一个级别的高速缓存的逻辑处理器上的指令。
10.如权利要求9所述的计算机可读存储介质,其特征在于,还包括在由所述计算机系统执行时使得响应于确定所述独特逻辑处理器不可用而选择与所述独特逻辑处理器共享所述级别的高速缓存的逻辑处理器的指令。
11.如权利要求9所述的计算机可读存储介质,其特征在于,使得指示所述虚拟处理器的所述线程被调度的所述指令还包括在由所述计算机系统执行时使得响应于确定自从指示所述虚拟处理器的所述线程最后一次执行以来已经超过预定时间量而调度指示所述虚拟处理器的所述线程的指令。
12.如权利要求9所述的计算机可读存储介质,其特征在于,还包括在由所述计算机系统执行时,使得响应于确定最后运行指示所述虚拟处理器的所述线程的所述逻辑处理器不可用并且自从指示所述虚拟处理器的所述线程最后一次执行以来未超过预定时间量,指示所述虚拟处理器的所述线程被排队在最后运行指示所述虚拟处理器的所述线程的所述逻辑处理器上的指令。
13.如权利要求9所述的计算机可读存储介质,其特征在于,还包括在由所述计算机系统执行时使得为所述计算机系统中的每一非均勻存储器体系结构 (NUMA)节点维护空闲逻辑处理器列表的指令。
14.如权利要求9所述的计算机可读存储介质,其特征在于,使得指示所述虚拟处理器的所述线程被调度的所述指令还包括在由所述计算机系统执行时使得指示所述虚拟处理器的所述线程被调度在与被分配来执行指示所述虚拟处理器的所述线程的所述逻辑处理器共享最高级别的高速缓存的逻辑处理器上的指令。
15.如权利要求9所述的计算机可读存储介质,其特征在于,还包括在由所述计算机系统执行时使得将由虚拟高速缓存互联的多个虚拟处理器展示给客操作系统的指令。
全文摘要
本发明明公开了系统管理程序调度器。用于在作出调度决策时将系统管理程序调度器配置成利用处理器的高速缓存拓扑结构和NUMA节点之间的物理存储器距离的技术。在相同或其他实施例中,系统管理程序调度器可被配置成优化等待时间敏感的工作负载的调度。在相同或其他实施例中,系统管理程序可被配置成将虚拟高速缓存拓扑结构展示给在虚拟机中运行的客操作系统。
文档编号G06F9/455GK102289390SQ20111015898
公开日2011年12月21日 申请日期2011年5月31日 优先权日2010年6月1日
发明者A·巴哈德里, D·梅舍昌尼诺夫, S·甘古利 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1