调度器中的调度集合的制作方法

文档序号:6593623阅读:152来源:国知局
专利名称:调度器中的调度集合的制作方法
调度器中的调 度集合背景在计算机系统中执行的进程可包括调度进程的任务以便在计算机系统中执行的 任务调度器。这些调度器可以与确定进程的任务如何被执行的各种算法一起操作。在带 有多个处理资源的计算机系统中,当处理资源在调度器中搜索要执行的任务时可能彼此 发生竞争。在利用调度器执行进程时,竞争往往导致降低计算机系统的效率,并且竞争 的程度通常会随着计算机系统中的处理资源的数量增大而加剧。结果,随着计算机系统 中的处理资源的数量的增大,对处理资源的竞争可能会限制调度器的可缩放性。

发明内容
提供本发明内容是为了以精简的形式介绍将在以下具体实施方式
中进一步描述 的一些概念。本发明内容并不旨在标识出所要求保护的主题的关键特征或必要特征,也 不旨在用于限定所要求保护的主题的范围。计算机系统的进程中的调度器包括对应于调度器中的每一个调度节点的相应调 度集合。调度器利用一群调度组填充每一个调度集合,其中,每一个调度组都包括进程 的一组任务。基于一个或多个执行度量,将调度集合映射到至少部分搜索顺序。当在调 度节点中的处理资源变得可用时,该处理资源尝试在与调度节点相对应的调度集合中定 位要执行的任务。如果处理资源不能在调度集合中定位到要执行的任务,则该处理资源 尝试按由搜索顺序所指定的顺序在其他调度集合中定位要执行的任务。附图简述各个附图被包括以提供对实施例的进一步理解,各个附图被收入并构成本说明 书的一部分。附图示出了实施例,并与说明书一起,用于说明各实施例的原理。通过参 考以下详细描述,可更易于领会并更好地理解其他实施例以及各实施例的许多预期的优 点。附图的元素相对于彼此不一定是按比例绘制的。相同的附图标记表示对应的类似的 部分。

图1是示出了在运行时环境中带有调度集合的调度器的实施例的框图。图2是示出了用于在调度器中创建和填充调度集合的方法的实施例的流程图。图3A-3B是示出了调度集合的映射的实施例的图示和表。图4是示出了用于选择任务来执行的方法的实施例的流程图。图5A-5B是示出了调度集合的实施例的框图。图6A-6B是示出了被配置成实现包括带有调度集合的调度器的运行时环境的计 算机系统的实施例的框图。
具体实施例方式在下面的详细描述中,将参考构成本发明的一部分的附图,并且附图中作为说 明示出了其中可实施本发明的具体实施例。关于这一点,诸如“顶部”、“底部”、 “正面”、“背面”、“引导”、“尾随”等等之类的方向性术语参考所描述的图形的朝向地使用。由于各实施例的组件可以被定位于若干个不同的朝向,因此,方向性术语只 用于说明,而绝不作为限制。应该理解,在不偏离本发明的范围的情况下,可以利用其 他实施例,也可以进行结构性的或逻辑性更改。因此,下面的详细描述不是在限制性的 意义上进行的,并且本发明的范围由所附权利要求来进行定义。可以理解,此处所描述的各示例性实施例的特点可以彼此相结合,除非另外特 别声明。图1是示出了运行时环境10的进程12中的执行上下文调度器22的实施例的框 图。调度器22包括一组调度集合40(1)-40 (L),其中,L是大于或等于2的整数,并表 示第L个调度集合40。每一个调度集合40(1)-40 (L)都与相应的调度节点30 (1)-30 (L) 相对应。运行时环境10表示计算机系统中的操作的运行时模式,诸如,如图6A和6B所 示的并在下面的附加细节中所描述的计算机系统100的实施例100A和100B,其中,计算 机系统在执行指令。计算机系统从诸如如图6A所示并在下面的附加细节中所描述的运行 时平台122之类的运行时平台生成运行时环境10。运行时环境10包括至少一个被调用的进程12、资源管理层14和一组硬件线 程16(1)-16(M),其中,M是大于或等于2的整数并表示第M个硬件线程16。运行 时环境10允许通过使用资源管理层14和硬件线程16(1)-16 (M)来执行进程12中的任 务以及与进程12共存的任何其他进程的任务(未示出)。运行时环境10结合资源管 理层14来操作,以允许进程12获取处理器及计算机系统的其他资源(例如,硬件线程 16(1)-16(M))。运行时环境10包括生成调度器22的调度器功能。在一个实施例中,调度器功 能被实现为调度器应用程序编程接口(API)。在其他实施例中,可以使用其他合适的编 程构造来实现调度器功能。当调度器功能被调用时,调度器功能在进程22中创建调度器 22,其中,调度器22操作用于调度进程12的任务来供一个或多个硬件线程16(1)-16 (M) 来执行。运行时环境10可以利用应用程序或库开发人员使用知晓调度器功能所提供的设 施的附带工具在他们的程序(例如,进程12)中表达的细粒度并发。进程12包括对主存一个或多个执行上下文(即,线程)的处理资源及其他资源 的分配。进程12从资源管理层14获取对计算机系统中的处理资源及其他资源(例如, 硬件线程16(1)-16(M))的访问。进程12导致使用处理及其他资源来执行任务。进程12生成可变长度的任务形式的工作,其中,每一个任务都与调度器22中 的执行上下文相关联。每一个任务都包括当由计算机系统执行时执行工作单元的指令序 列。每一个执行上下文都形成在所分配的处理资源上执行相关联任务的线程。每一个执 行上下文都包括程序状态和机器状态信息。当没有更多任务要执行时,执行上下文可以 结束。对于每一个任务,运行时环境10和/或进程12或者将任务指派给调度器22供调 度加以执行,或者以其他方式导致任务被执行而无需使用调度器22。 进程12可以被配置成基于任何合适的执行模型——如堆栈模型或解释器模 型——在计算机系统中操作,并且可以表示任何合适类型的代码,诸如应用程序、库函 数或操作系统服务。进程12具有与包括所定义的存储器地址空间的一组分配的资源相关 联的程序状态和机器状态。进程12相对于运行时环境10中的任何共存的进程自主地或基本上自主地执行。因 此,进程12不会不利地改变共存的进程的程序状态或分配给共存 的进程的任何资源的机器状态。类似地,共存的进程不会不利地改变进程12的程序状态 或分配给进程12的任何资源的机器状态。资源管理层14通过将一个或多个硬件线程16指派给进程12来向进程12分配处 理资源。资源管理层14与图1的实施例中的计算机系统的操作系统(在图1中未示出) 分开。在其他实施例中,在操作系统中可以包括资源管理层14或其一些或全部功能。硬件线程16驻留在计算机系统的一组或者一个或多个处理器包(例如,如图6 所示并在下面的附加细节中所描述的处理器包102)的执行核心中。每一个硬件线程16 都被配置成相对于其他执行核心独立地或基本上独立地执行指令,并包括机器状态。硬 件线程16可以被包括在单个处理器包中,或者可以跨多个处理器包分布。处理器包中的 每一个执行核心可包括一个或多个硬件线程16。进程12隐式地或显式地导致经由由运行时环境10所提供的调度器功能创建调度 器22。当进程12使用计算机系统中可用的API或编程语言特征时,调度器22可以被隐 式地创建。响应于API或编程语言特征,运行时环境10利用默认策略创建调度器22。 为了显式地创建调度器22,进程12可以调用由运行时环境10所提供的调度器功能,并为 调度器22指定策略。调度器22与资源管理层14进行交互,以便以对进程12透明的方式协商计算机 系统的资源。资源管理层14基于供应和需求以及调度器22的任何策略,向调度器22分 配硬件线程16。在图1所示的实施例中,调度器22通过创建形成底层硬件线程16的抽象的虚拟 处理器32来管理处理资源。调度器22通过将每一个虚拟处理器32映射到硬件线程16, 来将虚拟处理器32多路复用到硬件线程16上。调度器22可以将一个以上的虚拟处理器 32映射到特定硬件线程16,但是只将一个硬件线程16映射到每一个虚拟处理器32。在 其他实施例中,调度器22以其他合适的方式来管理处理资源,以使进程12的指令被硬件 线程16执行。运行时环境10在知道计算机系统的基础拓扑的情况下创建调度器22。运行时环 境10向资源管理层14和/或调度器22提供计算机系统的节点信息。节点信息直接标识 计算机系统的硬件节点,或者包括足够的有关计算机系统的拓扑的信息,以允许资源管 理层14和/或调度器22基于一个或多个执行度量来将硬件资源划分成调度节点30。执 行度量可包括计算机系统的处理资源(例如,硬件线程16)、存储器资源,和/或其他资 源的速度、类型,和/或配置。例如,在其中计算机系统的拓扑包括高速缓存相干非一致性存储器访问 (NUMA)体系结构的各实施例中,节点信息可以标识一组两个或更多NUMA节点,其 中,每一个NUMA节点都包括一组硬件线程16和本地存储器。节点信息也可以包括描述 NUMA节点之间的存储器访问的信息(例如,NUMA距离或存储器访问拓扑或时间)。在另一示例中,节点信息可以描述处理资源(例如,硬件线程16)的速度、类 型,和/或配置,以允许基于处理资源的特性之间的相似度或差异,对处理资源进行编 组。这些特性可包括处理资源中的一个或多个的指令集的类型,以允许根据具有不同类 型的指令集的处理资源组来形成不同的节点。
运行时环境10使得调度器22基于节点信息包括一组两个或更多调度节点 30(1)-30 (L)0每一个调度节点30都包括虚拟处理器32和硬件线程16的形式的已 分配处理资源。调度节点30⑴包括映射到硬件线程16(l)-16(mi)的虚拟处理器 30 (I)-SO(N1),其中,N1是大于或等于1的整数,并表示第(N1)个虚拟处理器30,而 In1小于或等于M,并表示第Cm1)个硬件线程16。调度节点30 (L)包括映射到硬件线程 L6(rnm)-L6(M)的虚拟处理器30(L)_30(Nl),其中,NL是大于或等于1的整数,并表 示第(NJ个虚拟处理器30,而!!^小于或等于M,大于In1,并表示第(mj个硬件线程 16。调度器22为每一个调度节点30创建调度集合40。因此,调度集合40 (1)-40 (L) 与如由箭头37(1)-37 (L)所指示的相应的调度节点30(1)-30 (L)相对应。调度器22基于 一个或多个 执行度量,将调度集合40映射到完全或部分搜索顺序,并当有处理资源可用 时,使用该搜索顺序来搜索要执行的任务,如下文在附加细节中所描述的。调度器22中的执行上下文组包括一组执行上下文34,这些上下文34带有正在由 每一个调度节点30中的相应虚拟处理器32执行的相应相关联的任务36,并且,在每一 个调度集合40中,包括一组零个或多个可运行的执行上下文38以及一组零个或多个被阻 止的(即,等待依赖的)执行上下文40。每一个执行上下文34,38和40都包括指示执 行上下文34,38和40是正在执行、可运行(例如,响应于被解除阻止或被添加到调度器 22),还是被阻止的状态信息。正在执行的执行上下文34已经被附加到虚拟处理器32, 并且当前正在执行。可运行的执行上下文38包括相关联的任务39,并随时可被可用的虚 拟处理器32执行。被阻止的执行上下文40包括相关联的任务41,并且正在等待正由另 一执行上下文34,38或40生成的或将由其生成的数据,消息或事件。在虚拟处理器32上执行的每一个执行上下文34,在其执行的过程中,可以生成 以任何合适的方式组织的附加任务42(例如,添加到工作队列中(在图1中未示出))。 在一个实施例中,可以通过使用由运行时环境10所提供的应用程序编程接口(API)或编 程语言特征及相应工具,来创建工作。当有处理资源可为调度器22所用时,将任务指派 给执行上下文34或38,这些执行上下文34或38在领取新任务之前在虚拟处理器32上将 它们执行到完成。在虚拟处理器32上执行的执行上下文34也可以通过生成将被另一执 行上下文40使用的数据、消息或事件来对其他执行上下文40解除阻止。可以实现调度器22中的每一个任务(例如,已实现的任务36和39),这指示执 行上下文34或38已经被附加到或将被附加到任务,并且任务随时可执行。已实现的任务 通常包括被解除阻止的执行上下文并被调度的代理。没有被实现的任务称为未实现的。 未实现的任务可被创建为通过父任务的执行而生成的子任务(例如,任务42),也可以通 过并行构造(例如,并行,并行地开始以及结束)来生成。对于带有执行上下文的在逻 辑上独立的任务(即,已实现的任务)以及依赖的任务(即,未实现的任务)的工作窃取 (workstealing)队列的列表,调度器22中的每一个调度集合40都可以被组织成一个或多 个同步的集合(例如,堆栈和/或队列),如下面所描述的图5A实施例所示。一旦在虚拟处理器32上运行的执行上下文34完成、被阻止或其他中断(例如, 显式的让步或被迫使的抢先),虚拟处理器32就变得可为另一实现的任务39或未实现的 任务42所用。调度器22搜索可运行的执行上下文38或未实现的任务42,以附加于可用虚拟处理器32来执行。调度器22继续将执行上下文38附加到可用虚拟处理器32来执行,直到已执行调度器22的所有执行上下文38。当在调度节点中的虚拟处理器32变得可用时,该虚拟处理器32尝试在与调度节 点30相对应的调度集合40中定位要执行的任务。如果虚拟处理器32不能在调度集合40 中定位到要执行的任务,则该虚拟处理器32尝试按由搜索顺序所指定的顺序在其他调度 集合40中定位要执行的任务。在一个实施例中,调度器22可包括可配置延迟参数,该 参数使可用虚拟处理器32延迟对其他调度集合40的搜索,以尝试最小化与其他可用虚拟 处理器32的竞争。也可以使用延迟参数来按优先级处理在与可用虚拟处理器32的调度 节点30相对应的调度集合40中对工作的搜索。图2是示出了用于在调度器22中创建和填充调度集合40的方法的实施例的流程 图。将参考图1中的调度器22的实施例来描述图2的方法。在图2中,如在框52所表示的,运行时环境10,和/或资源管理层14基于一个 或多个执行度量标识调度节点30。执行度量可以是计算机系统中的执行指令的任何合适 的度量,并可包括计算机系统中的处理资源及其他资源的处理速度、处理吞吐量,以及 存储器等待时间特性。使用为计算机系统的各组组件确定的执行度量,运行时环境10, 和/或资源管理层14划分计算机系统的处理资源及其他资源,并使用这些划分来为调度 器22标识调度节点30。调度节点30各自包括数组类似的或不类似的计算机系统的处理 资源及其他资源集。在一个示例中,计算机系统可包括包含多个硬件线程16的处理器。在此示例 中,运行时环境10,和/或资源管理层14可以将每一个处理器包划分到单独的节点,并 为每一个节点创建调度节点30。在另一示例中,在NUMA系统中,可以将处理器之间以及存储器的不同部分之 间的存储器延迟的差异用作执行度量以将计算机系统分割成NUMA节点,并为每一个 NUMA节点创建调度节点30。NUMA节点可以各自具有一组处理资源和本地存储器, 其中,一个NUMA节点内的处理资源对本地存储器的访问比处理资源对另一NUMA节点 中的本地存储器的访问更快。在另一个示例中,运行时环境10,和/或资源管理层14可以将计算机系统中的 处理器资源的任意组或部分地任意的组划分为多个节点,并为每一个节点创建调度节点 30。在再一个示例中,运行时环境10,和/或资源管理层14可以将不同类型或速 度的处理资源划分为多个节点,其中,每一个节点包括若干个相同类型或速度的处理资 源。运行时环境10,和/或资源管理层14为每一个节点创建调度节点30。如在框54中所指示的,运行时环境10、资源管理层14,和/或调度器22为每 一个调度节点30创建相应的调度集合40。如图1所示,调度器22创建与相应调度节点 30 (1) -30 (L)相对应的调度集合40 (1) -40 (L)。每一个调度集合40形成计算机系统的存 储器中用于存储任务的数据结构,其中,数据结构可由来自对应的调度节点30的虚拟处 理器32和来自其他调度节点30的虚拟处理器32进行搜索。如在框56中所指示的,运行时环境10、资源管理层14,和/或调度器22基于一 个或多个执行度量将调度集合40 (1) -40 (L)映射到完全或部分搜索顺序。调度器22使用执行度量来比较不同调度节点30之间的执行成本。可以根据节点距离来描述执行成本, 其中,不同节点距离表达给定调度节点30及其他调度节点30之间的不同执行特性。利 用节点距离,相对于给定调度节点30具有较低的执行成本的调度节点30被描述为与该给 定调度节点30更靠近,而相对于该给定调度节点30具有较高的执行成本的调度节点30 被描述为远离该给定调度节点30。在一个实施例中,调度器22使用节点距离将调度集合 40(1)-40 (L)映射到完全或部分搜索顺序。

为创建搜索顺序,调度器22基于节点距离将一组调度集合40编组为各自含一个 或多个调度集合40的数个子集。每一个调度集合40都具有与对应的调度节点30相距为 零的节点距离。因此,每一个调度集合40形成相应调度节点30的调度集合40的第一级 子集(例如,级别0子集)。对于调度集合40的下一级别子集(例如,级别1子集), 调度器22对与给定调度节点30的节点距离在最近范围内的一个或多个调度集合40的组 进行编组。然后,调度器22将与给定调度节点30的节点距离在次最近范围内的一个或 多个调度集合40的组编组到调度集合40的下一级别子集中(例如,级别2子集)。调 度器22继续将与给定调度节点30的节点距离在逐次范围内的一个或多个调度集合40的 组编组到调度集合40的逐次级别子集中,直到调度集合40组中的所有所希望的调度集合 40都已经被包括到搜索顺序中。调度集合40的搜索顺序被调度节点30中的可用处理资源(即,虚拟处理器32) 用来搜索要执行的任务。搜索顺序可以通过将一个以上的调度集合编组到至少一些子集 中(例如,与同给定调度节点30相距相同节点距离或类似的节点距离的调度节点30的子 集相对应的两个或更多调度集合40的子集)来指定部分搜索顺序。在指定了部分顺序的 情况下,处理资源可以以循环复用或其他合适的顺序来搜索调度集合40的子集。搜索顺 序也可以通过只将一个调度集合40编组在每一个子集中或者指定含两个或更多调度集合 40的每一个子集的搜索顺序,来指定完全搜索顺序。图3A-3B是分别示出了带有四个处理器包——这四个处理器包包括四个硬件线 程16的相应的组——的NUMA计算机系统61中的部分搜索顺序60的实施例的图示和 表。相应的本地存储器连接到每一个处理器(未示出)。因为处理器包中的每一个硬件 线程16都具有类似的执行度量,因此,每一个处理器包形成图3A-3B的示例中的级别0 节点。因此,级别0调度节点30(1)包括硬件线程16(1)-16 (4),级别0调度节点30(2) 包括硬件线程16 (5)-16 (8),级别0调度节点30 (3)包括硬件线程16 (9)-16 (12),而级别 0调度节点30(4)包括硬件线程16 (9)-16 (12)。级别0调度节点30 (1)-30 (4)对应于调 度集合40(1)-40(4)的相应的级别0子集。如图3A所示,调度节点30 (1) -30⑵共享节点30 (1) -30⑵之间的互连 62(1),调度节点30⑴-30(3)共享节点30⑴-30(3)之间的互连62(2),调度节点 30⑵-30(4)共享节点30 (2)-30 (4)之间的互连62(3),而调度节点30 (3)-30 (4)共享节 点30 (3)-30 (4)之间的互连62(4)。在图3A的示例中,假设互连62 (1)-62 (4)都具有相 同速度和带宽特性。共享互连62的任何两个节点30之间的节点距离小于不共享互连62的任何两个 节点30之间的节点距离。例如,节点30⑴使用互连62⑴和62 (3)两者或者互连62 (2) 和62 (4)两者来访问节点30 (4)。类似地,节点30⑵使用互连62⑴和62⑵两者或者互连62 (3)和62 (4)两者来访问节点30 (3)。从节点30 (1),调度集合40的级别1子集包括对应于调度节点30 (2) -30 (3)的调 度集合40 (2) -40 (3),而调度集合40的级别2子集包括对应于调度节点30 (4)的调度集合 40(4)。从节点30(2),调度集合40的级别1子集包括对应于调度节点30(1)-30 (4)的调 度集合40 (1) -40 (4),而调度集合40的级别2子集包括对应于调度节点30 (3)的调度集合 40 (3)。从节点30 (3),调度集合40的级别1子集包括对应于调度节点30 (1) -30 (4)的调 度集合40 (1) -40 (4),而调度集合40的级别2子集包括对应于调度节点30 (2)的调度集合 40 (2)。从节点30 (4),调度集合40的级别1子集包括对应于调度节点30 (2) -30 (3)的调 度集合40 (2) -40 (3),而调度集合40的级别2子集包括对应于调度节点30 (1)的调度集合 40(1)。回头参考图2,如在框58中所表示的,调度器22利用相应的任务组填充调度集 合40(1)-40 (M)。可以由进程12显式地或由运行时环境10隐式地创建呈现给调度器22 的每一组一个或多个任务(例如,通过在没有父或不将操作系统执行上下文引导到调度 器22的执行上下文的情况下创建代理)。调度器22根据任何合适的算法或根据调度节点 30的拓扑,将任务组插入到调度集合40中。例如,调度器22可以按循环顺序将任务组 插入到调度集合40中。作为另一个示例,调度器22可以将任务组插入到与调度节点30 的所希望的拓扑相对应的调度集合中。图4是示出了用于选择任务来执行的实施例的流程图。将参考图1中的调度器 22的实施例来描述图4的方法。如在框72中所表示的,调度器22确定虚拟处理器32是否变得可用。调度器22 可以连续地执行此功能,同时导致进程12被执行。一旦在虚拟处理器32上运行的执行 上下文34完成、被阻止或其他中断(例如,显式的让步或被迫使的抢先),有虚拟处理器 32就变得可用于执行新任务。当调度器22确定虚拟处理器32变得可用时,调度器22开始为可用虚拟处理器 32搜索任务来执行。如在框74中所表示的,调度器22首先尝试在调度集合40的第一子 集中定位要执行的任务。调度集合40的第一子集是与包括可用虚拟处理器32的调度节 点30相对应的调度集合40。调度器22可以以任何合适的方式搜索第一子集。 如在框76中所表示的,如果在第一子集中找到可执行的任务,那么,调度器22 使任务被虚拟处理器32执行。作为前一执行上下文34的继续,虚拟处理器32尝试执行 任务。如果虚拟处理器32不能作为继续来执行任务,那么,虚拟处理器32执行至由任 务所表示的执行上下文的完全操作系统上下文切换。如在框78中所表示的,如果在第一子集中找不到可执行的任务,那么,调度器 22确定搜索顺序是否指定了调度集合40的另一子集。如果第一级子集是由搜索顺序所指 定的唯一子集,那么,调度器22继续搜索第一子集,直到定位了可执行的任务。如在框80中所表示的,如果由搜索顺序指定了另一子集,那么,调度器22尝试 在下一子集中的一个或多个调度集合40定位要执行的任务。如在框82中所表示的,如果在下一子集中的调度集合40中找到可执行的任务,那么,调度器22使任务由虚拟处理 器32执行。如果在调度集合40的下一子集中找不到可执行的任务,那么,调度器22重 复框78的功能。调度器22按指定的搜索顺序继续搜索调度集合40的子集,直到找到可 执行的任务或者已经搜索了由搜索顺序所指定的所有子集。在上面的实施例中,调度器22可以被配置成在移到下一子集之前,反复地搜索调度集合40的上面子集中的一个或多个。调度器22也可以被配置成根据一个或多个延 迟参数,延迟对子集中的一个或多个的搜索。在上面的实施例中,调度节点30有效地拥有相应调度集合40。在进程12的执 行中的一些点,给定调度节点30的所有处理资源都可以执行来自除对应于给定调度节点 30的调度集合40以外的调度集合40的任务。在此情形下,给定调度节点30的所拥有的 调度集合40变为这样的调度集合40——给定调度节点30的大多数处理资源正在执行来自 调度集合40的任务,而给定调度节点30变为闲逛节点。如果闲逛节点稍后具有正在执 行来自最初拥有的调度集合40的任务的处理资源,那么,该闲逛节点再次变为最初拥有 的调度集合40的拥有者。图5A-5B是示出了调度集合40的相应实施例40A和40B的框图。图5A是包括一群调度组90 (1) -90 (P)的调度集合40的实施例40A的框图,其 中,P是大于或等于1的整数,并表示第P个调度组90。如由箭头96所指示的,该群 调度组90(1)-90 (P)按调度环来安排。每一个调度组90都包括可运行的集合92、工作 队列93,以及一组零或多个工作窃取队列94。每一个可运行集合92都包含可运行的任 务或执行上下文的列表。当执行上下文变成解除阻止或由进程12向调度器22呈现新的 可运行的执行上下文(可能产生的需求)时,调度器22向可运行的集合92添加执行上下 文。工作队列93包含如由箭头95所指示的工作窃取队列94的列表,并跟踪正在执行工 作窃取队列93中的任务的执行上下文。每一个工作窃取队列94都包括没有被指派的执 行上下文的一个或多个未实现的任务。调度器22在任何时间(例如,响应于执行其他任务)利用零个或多个调度组90 的相应群填充调度集合40A(图1),其中,每一个调度组90都包括进程12的一组任务。 在这样的实施例中,在在另一调度集合40或40A中搜索任务之前,调度器22可以在调度 集合40A中搜索每一个调度组90。调度器22可以尝试在可用虚拟处理器32最近从其中获取了可执行的任务的调度 组90中或在由索引97(例如,循环索引)所指出的调度组90定位要执行的任务。在每 一个调度组90中,调度器22可以在在其他调度组90 (例如,按循环复用顺序)中搜索已 实现的任务之前,在调度组90的可运行的程序集合92中搜索已实现的任务。如果找不 到已实现的任务,那么,调度器22可以在在其他调度组90 (例如,按循环复用顺序)中 搜索未实现的任务之前,在调度组90的工作窃取队列94中搜索未实现的任务。调度器 22可以更新索引97,以标识其中找到了可执行的任务的调度组90。进程12可以使用调度器22中的调度组90来为工作的局部性、公平性,以及向 前进度提供结构。由于在逻辑上相关的工作(例如,由公共根任务传下来的任务集合)、 硬件拓扑(例如,非一致性存储器体系结构(NUMA)),或其组合,因此可对每一个调度 组90的任务进行编组。
图5B是示出了调度集合40的实施例40B的框图,该调度集合40包括与相应的 虚拟处理器32 (1) -32 (N)相对应的本地任务集合44 (1) -44 (N)。在其中一个或多个调度集合40包括本地集合44的各实施例中,调度器22中 的执行上下文组在相应的本地集合44(1)-44(N)中也包括数组可运行的执行上下文 46(1)-46 (N)。每一个执行上下文46都具有被任务36的执行解除阻止的相关联任务47, 其中,任务36已经被执行或当前在与包括执行上下文46的本地集合44相对应的虚拟处 理器32上正在执行。在在调度集合40B中的别处搜索之前,调度器22可以首先尝试在与可用虚拟处 理器32相对应的本地集合44中定位任务。本地集合44可以允许调度器22利用可能在 硬件线程16上发生的存储器局部性及其他效果。在执行进程12时,调度器22可以将被 解除阻止的每一个等待依赖的执行上下文分配到与导致执行上下文被解除阻止的虚拟处 理器32相对应的本地集合44。当虚拟处理器32变得可用时,虚拟处理器32可以尝试执 行对应的本地集合44中最近最后添加的执行上下文,以尝试利用存储在与虚拟处理器32 相对应的存储器层次结构中的数据。
如果在与可用的虚拟处理器32相对应的本地集合44中找不到可执行的任务,那 么,调度器22可以尝试在与调度节点30的另一虚拟处理器32相对应的本地集合44中定 位可执行的任务。调度器22按循环或其他合适的顺序访问与其他虚拟处理器32相对应 的本地集合44,并可以执行在其中找到了可执行的任务的本地集合44中最近最早添加的 执行上下文。在其他实施例中,其他调度集合40可包括调度集合40A的调度组90 (图5A)和 调度集合40B的本地集合44 (图5B)。图6A-6B是分别示出了被配置成实现包括带有调度集合40的调度器22的运行 时环境10的计算机系统100的实施例100A和100B的框图。如图6A所示,计算机系统100A包括一个或多个处理器包102、存储器系统 104、零个或多个输入/输出设备106、零个或多个显示设备108、零个或多个外围设备 110,以及零个或多个网络设备112。处理器包102、存储器系统104、输入/输出设备 106、显示设备108、外围设备110,以及网络设备112使用一组互连114进行通信,这些 互连包括任何合适的类型、数量,以及配置的控制器、总线、接口,和/或其他有线或 无线连接。计算机系统100A表示被配置成用于一般用途或特定用途的任何合适的处理设 备。计算机系统100A的示例包括服务器、个人计算机、膝上型计算机、平板计算机、个 人数字助理(PDA)、移动电话,以及音频/视频设备。计算机系统100A的组件(即, 处理器包102、存储器系统104、输入/输出设备106、显示设备108、外围设备110、网 络设备112,以及互连114)可以包含在一个共同的外壳(未示出)中或任何合适的数量的 单独的外壳(未示出)中。处理器包102包括硬件线程16 (1)-16 (M)。处理器包102中的每一个硬件线程 16被配置成访问和执行存储在存储器系统104中的指令。指令可包括基本输入输出系统 (BIOS)或固件(未示出)、操作系统(OS) 120、运行时平台122、应用程序124,以及资 源管理层14(也如图1所示)。每一个硬件线程16都可以结合从输入/输出设备106、显示设备108、外围设备110,和/或网络设备112接收到的信息或响应于该信息来执行指令。计算机系统100A引导并执行OS 120。OS 120包括可由处理器包102执行的指 令,以管理计算机系统100A的组件,并提供允许应用程序124访问并使用组件的一组功 能。在一个实施例中,OS 120是Windows操作系统。在其他实施例中,OS 120是适用 于计算机系统IOOA的另一操作系统。资源管理层14包括可结合OS 120执行的指令,以分配计算机系统IOOA的资 源,包括如上文参考图1所描述的硬件线程16。资源管理层14可以作为对一个或多个应 用程序124可用的功能库或作为OS 120的一个集成部分被包括在计算机系统IOOA中。运行时平台122包括可结合OS 120和资源管理层14执行的指令,以生成运行时 环境10并向应用程序124提供运行时功能。这些运行时功能包括如上文参考图1在附加 细节中所描述的调度器功能。运行时功能可以作为应用程序124的一部分、作为可为一 个或多个应用程序124所用的功能库,或作为OS 120和/或资源管理层14的一个集成部 分,被包括在计算机系统IOOA中。每一个应用程序124都包括可结合OS 120、资源管理层14,和/或运行时平台 122执行的指令,以使所希望的操作由计算机系统IOOA来执行。每一个应用程序124都 表示可以与如由运行时平台122所提供的调度器22 —起执行的诸如如上文所描述的进程 12之类的一个或多个进程。存储器系统104包括任何合适的类型、数量、以及配置的被配置成存储指令和 数据的易失性或非易失性存储器设备。存储器系统104的存储设备表示存储包括OS 120、资源管理层14、运行时平台122,以及应用程序124的计算机可执行指令的计算机 可读存储介质。指令可由计算机系统执行,以执行此处所描述的OS 120、资源管理层 14、运行时平台122,以及应用程序124的功能和方法。存储器系统104中的存储设备 的示例包括硬盘驱动器、随机存取存储器(RAM)、只读存储器(ROM)、闪存驱动器和 卡,以及磁盘和光盘。存储器系统104存储从处理器包102、输入/输出设备106、显示设备108、外围 设备110,以及网络设备112接收到的指令和数据。存储器系统104向处理器包102、输 入/输出设备106、显示设备108、外围设备110,以及网络设备112提供所存储的指令和数据。输入/输出设备106包括任何合适类型、数量、以及配置的输入/输出设备,它 们被配置成从用户向计算机系统100A输入指令或数据,并从计算机系统100A向用户输 出指令或数据。输入/输出设备106的示例包括键盘、鼠标、触摸板、触摸屏、按钮、 转盘、旋钮,以及开关。显示设备108包括任何合适的类型、数量、以及配置的显示设备,它们被配置 成向计算机系统100A的用户输出文本和/或图形信息。显示设备108的示例包括监视 器、显示屏幕,以及投影仪。外围设备110包括任何合适的类型、数量、以及配置的外围设备,它们被配置 成与计算机系统100A中的一个或多个其他组件一起操作,以执行一般或特定处理功能。网络设备112包括任何合适的类型、数量、以及配置的网络设备,它们被配置成允许计算机系统IOOA跨一个或多个网络(未示出)进行通信。网络设备112可以根据 任何合适的网络协议和/或配置来操作,以允许信息由计算机系统100A传输到网络或由 计算机系统100A从网络接收。图6B是示出了计算机系统100的实施例100B的框图。计算机系统100B还包 括至少处理器包102和存储器系统104。处理器包102包括处理器包102 (1)-102 (R),而 存储器系统104包括多组存储器设备128(1)-128 (R),其中,R是大于或等于2的整数, 并表示第R个处理器包102和第R组存储器设备128。OS 120、运行时平台122、应用 程序124,以及资源管理层14可以各自存储在存储器设备104(1)-104(R)中的任何合适 的存储器设备中。在图6B的实施例中,每一个处理器包102(1)-102 (R)和相应的一组存储器设备 128(1)-128 (R)形成一个节点。节点利用任何合适的类型、数量和/或组合的节点互连 130相互连接。互连130的速度和/或带宽可以在各节点之间有所不同。
每一个处理器包102都包括一组硬件线程16(1)-16 (4),其中,每一个硬件线程 都包括Ll (级别1)高速缓存(未示出)。每一个处理器包102还包括与相应的硬件线程 16(1)⑴-16(1) (4)相对应的一组L2(级别2)高速缓存132 (1)-132 (4)。每一个处理器 包102还包括可为该组硬件线程16(1)-16 (4)、系统资源接口 136、纵横开关138、存储器 控制器140,以及节点接口 142所用的L3(级别3)高速缓存。系统资源接口 136提供对 节点资源(未示出)的访问。纵横开关138将系统资源接口 136与存储器控制器140以 及节点接口 142互连。存储器控制器140连接到存储器设备128。节点接口 142连接到 一个或多个节点互连130。因为节点包括本地存储器(即,一组存储器设备104),该节点中的处理器包102 对本地存储器的访问可以比对其他节点中的存储器的访问更快。另外,对其他节点中的 存储器的访问可以取决于节点之间的连接速度、带宽、高速缓存拓扑,和/或互连130 的NUMA节点距离。例如,一些节点可以利用诸如高级微设备超传输(Advanced Micro Devices HyperTransport)总线或Intel CSI总线之类的相对快的互连130来连接,而其他节 点可以利用一个或多个相对慢的互连130来连接。在其他实施例中,每一个处理器包102都可包括其他配置和/或数量的高速缓 存。例如,在其他实施例中,每一个硬件线程16都可包括两个或更多Ll高速缓存,并 且在其他实施例中,L2和/或L3高速缓存可以被共享或者也可以不被共享。作为另一 个示例,其他实施例可包括附加高速缓存(例如,级别4 (L4)高速缓存)或少一些或没有 高速缓存。参考上文在1-5B图中所描述的实施例,计算机系统100B中的存储器和互连等 待时间提供可以被运行时环境10、资源管理层14,和/或调度器22在形成调度节点30 时考虑的节点距离。例如,运行时环境10、资源管理层14,和/或调度器22可以为计 算机系统100B中的每一个节点创建调度节点30连同相对应的调度集合40。运行时环境 10、资源管理层14和/或调度器22可以基于节点之间的互连拓扑,将调度集合40映射到 部分或完全搜索顺序。例如,可以将用相对快的互连130连接的任何两个节点编组到同 一调度节点和调度集合子集级别,而可以将具有相对慢的互连130的节点编组到高于包 括相对快的互连130的调度节点和调度集合子集级别的调度节点和调度集合子集级别。
通过按搜索顺序为可执行的任务搜索调度集合40,节点中的处理资源增大在计 算机系统100B中利用存储器局部性效果的可能性。来自同一调度集合40的任务可以比来 自另一调度集合40的任务更可能具有存在于节点的本地存储器层次结构中的公共数据。除 潜在的局部性优点之外,在上面的实施例中,使用调度节点和调度集合可以 为调度器提供降低正在搜索要执行的任务的处理资源之间的竞争的能力。不同调度节点 中的处理资源发起对不同相对应的调度集合中的可执行的任务的搜索。通过这样做,可 以减少在调度器中的任务集合上放置的锁或其他同步构造的数量。作为对可执行的任务的局部化搜索的结果,调度器也可以扩展到具有大量的处 理资源的计算机系统。进一步地,调度器可以提供工作的局部性,同时在调度组中使用 循环搜索和工作窃取队列而保留公平性和向前进度。虽然此处示出和描述了特定实施例,但是,本领域技术人员可以理解,在不偏 离本发明的范围的情况下,各种替换的和/或等效的实现可以代替所示出和描述的特定 实施例。本申请旨在涵盖此处所讨论的特定实施例的任何修改或变化。因此,本发明旨 在仅由权利要求以及其等效内容加以限制。
权利要求
1.一种由计算机系统(100A/100B)的进程(12)中的调度器(22)执行的方法,所述 方法包括响应于在第一调度节点(10)中的第一多个处理资源(16/32)中的一个变得可用,在 与所述第一调度节点相对应的第一调度集合(40)中搜索要执行的第一任务(39/42);以 及响应于在所述第一调度集合中找不到要执行的第一任务,利用所述第一多个处理资 源中的所述一个来执行与包括第二多个处理资源(16/32)的第二调度节点(10)相对应的 第二调度集合(40)中的第二任务(39/42)。
2.如权利要求1所述的方法,其特征在于,还包括响应于在所述第一调度集合中找到所述第一任务,利用所述第一多个处理资源中的 所述一个来执行所述第一任务。
3.如权利要求1所述的方法,其特征在于,还包括搜索第一群调度组,以在所述第一调度集合中找到所述第一任务。
4.如权利要求3所述的方法,其特征在于,还包括搜索第二群调度组(90),以在所述第二调度集合中找到所述第二任务。
5.如权利要求1所述的方法,其特征在于,所述第一多个处理资源中的所述一个包括 第一虚拟处理器(32)和第一硬件线程(16)。
6.如权利要求1所述的方法,其特征在于,还包括响应于在所述第一调度集合中找不到要执行的第一任务,基于将所述第一调度节点 与所述第二调度节点相关的至少一个执行度量来搜索所述第二调度集合中的所述第二任 务。
7.如权利要求1所述的方法,其特征在于,还包括在与所述第一多个处理资源中的所述一个相对应的本地集合(44)中搜索要执行的第 三任务(39/42);以及响应于在所述本地集合中找到要执行的所述第三任务,利用所述第一多个处理资源 中的所述一个来执行所述第三任务。
8.如权利要求1所述的方法,其特征在于,在所述第一调度集合中搜索所述第一任务 还包括在所述第一调度集合中的一群调度组(90)中搜索已实现的任务(39);以及响应于在所述一群调度组中找不到要执行的已实现的任务,在所述一群调度组中搜 索未实现的任务(42)。
9.一种存储有计算机可执行指令的计算机可读存储介质(104/128/132/134)当由计算 机系统(100A/100B)执行所述计算机可执行指令时,执行包括以下操作的方法为在所述计算机系统上执行的进程(12)中的调度器(22)标识第一和第二调度节点 (30);分别创建与所述第一和所述第二调度节点相对应的第一和第二调度集合(40);以及分别用第一和第二组任务(39/40/42)填充所述第一和所述第二调度集合。
10.如权利要求9所述的计算机可读存储介质,其特征在于,所述方法还包括将所述第一和所述第二调度集合映射到至少部分搜索顺序。
11.如权利要求10所述的计算机可读存储介质,其特征在于,所述部分搜索顺序是基 于与所述第一和所述第二调度节点相关联的一个或多个执行度量。
12.如权利要求9所述的计算机可读存储介质,其特征在于,所述第一和所述第二调 度节点包括由资源管理层分配的相应的第一组和第二组处理资源。
13.如权利要求12所述的计算机可读存储介质,其特征在于,第一和第二存储器与 所述第一组和所述第二组处理资源相对应,其中,所述第一组处理资源对所述第一存储 器的访问比所述第一组处理资源对所述第二存储器的访问更快,并且,其中,所述第二 组处理资源对所述第二存储器的访问比所述第二组处理资源对所述第一存储器的访问更 快。
14.如权利要求9所述的计算机可读存储介质,其特征在于,所述方法还包括基于执行度量来标识所述第一和所述第二调度节点。
15.如权利要求14所述的计算机可读存储介质,其特征在于,所述执行度量包括非一 致性存储器访问(NUMA)距离。
全文摘要
计算机系统的进程中的调度器包括对应于调度器中的每一个调度节点的相应调度集合。基于一个或多个执行度量,将调度集合映射到至少部分搜索顺序。当在调度节点中的处理资源变得可用时,在按由搜索顺序所指定的顺序搜索其他调度集合之前,该处理资源首先尝试在与调度节点相对应的调度集合中定位要执行的任务。
文档编号G06F13/00GK102027452SQ200980118323
公开日2011年4月20日 申请日期2009年3月27日 优先权日2008年5月16日
发明者G·弗纳德斯, N·古斯塔夫松, P·F·林塞斯, R·莫洛伊 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1