用于在非均衡存储器存取计算机系统中调度任务的方法和设备的制作方法

文档序号:6430814阅读:213来源:国知局
专利名称:用于在非均衡存储器存取计算机系统中调度任务的方法和设备的制作方法
技术领域
本发明涉及多任务计算机系统,并具体涉及在具有多中央处理器和非均衡存储器存取的系统中的任务或线程调度。
背景技术
现代计算机系统典型地包括中央处理器(CPU)和存储、检索和传送信息所必须的支持硬件,例如通信总线和存储器。它也包括与外界通信所必须的硬件,例如输入/输出控制器或存储控制器,及其附属装置,例如键盘、监视器、磁带驱动器、磁盘驱动器、与网络耦接的通信线等。该CPU是该系统的核心。它执行包括计算机程序的指令并指导其他系统组件的操作。
从计算机的硬件立场出发,大多数系统以基本相同的方式工作。处理器能执行一组有限的非常简单的运算,例如算术、逻辑比较和数据从一个位置移动到另一位置。但每一运算执行得非常快。指导计算机执行大量这些简单运算的程序给出了计算机能做复杂事情的错觉。通过本质上执行同组的非常简单的运算但更快地完成,用户能感觉到计算机系统具有新的或改善的能力。所以,持续改善计算机系统需要使这些系统更快。
计算机系统的总速度(也称为吞吐量)可粗略测量为单位时间内执行的操作次数。概念上,系统速度的所有可能改善的最简单之处在于增加各种组件的时钟速度,尤其是处理器的时钟速度。例如,如果一切都运行快两倍,而其他方面以完全相同的方式工作,则系统将用一半时间执行给定任务。由许多分立组件构成的早期计算机处理器通过收缩组件尺寸、减少组件数目、并最终将整个处理器作为集成电路封装在单一芯片上,可得到显著的速度改善。该减少的尺寸可能增加处理器的时钟速度,并因此增加系统速度。
尽管从集成电路获得的速度改善很大,但对更快计算机系统的需求一直持续着。硬件设计者通过进一步集成(即增加在单一芯片上封装的电路数目)、电路尺寸的进一步减小和各种其他技术已能够获得更大的速度改善。然而,设计者能看出物理尺寸的减小不能无限继续下去,并且他们继续增加处理器时钟速度的能力也有限。因此,注意力被指向进一步改善计算机系统的吞吐量的其他方案上。
不改变时钟速度,利用多处理器可能改善系统吞吐量。在集成电路芯片上封装单个处理器的适度成本使得该方案可行。然而,不能简单地通过将一个处理器变为两个来加倍系统的吞吐量。将多处理器引入系统中产生很多结构问题。例如,多处理器典型地共享同一主存(尽管每一处理器可具有它自己的高速缓存)。所以必须设计一种机构,能避免存储器存取冲突,并保证以连贯方式跟踪高速缓存中的数据的额外拷贝。而且,每一处理器对例如内存、I/O、存储器、以及尤其连接各组件的通信总线的系统其他组件提出附加要求。随着更多处理器的引入,结构问题变得越来越复杂,可扩缩性变得更难,并且很可能处理器将花费很多时间来等待另一处理器正使用的某一资源。
所有这些问题和其他更多问题被系统设计者得知,并以一种或另一种形式提出。尽管不可能得到完美的解决方案,但在该领域的改善一直在持续。
近年来得到一些赞同的一个结构方案是具有处理器和关联存储器的分离节点的计算机系统设计,也称为分布式共享存储器计算机系统或非均衡存储器存取(NUMA)计算机系统。在传统的对称多处理器系统中,主存被设计为单一的大数据存储实体,能被系统中的所有CPU平等存取。随着CPU数目的增加,在总线以及存取该主存的机构中存在越来越大的瓶颈。NUMA系统通过将主存分为分离的子集而解决该问题,其中每一子集物理上与相应CPU关联,或更典型地,与相应CPU组关联。存储器和关联CPU以及其他硬件的子集有时称为“节点”。节点典型地具有内部存储器总线,在该节点内提供从CPU到本地存储器的直接存取。较慢的间接机构用于越过节点边界进行存取的存储器。因此,尽管任何CPU仍能存取任意存储器位置,但是CPU存取其自己节点内的地址比存取其节点外的地址快(因此,术语“非均衡存储器存取”)。通过限制一个节点内部存储器总线上的器件数目,即使在具有大量CPU的系统中,总线仲裁机构和总线业务量也能保持在可管理的水平,因为这些CPU中的大多数将在不同节点中。从硬件角度出发,这意味着NUMA系统结构具有增加可扩缩性的潜在优点。
NUMA系统提供节点间存取以使其具有单一逻辑主存,每一位置具有唯一的地址。但是节点间存取相对慢,并难以承担某些系统资源。为了使NUMA系统有效工作,CPU需要的数据必须一般存储在同一节点的实存中。保证其总处于不施加过度严格限制的情况是不切实际的。可以期望减少节点间存储器存取的需求的存储器分配机构。
在多任务系统计算机系统中,操作系统典型地管理某些系统资源的分配,并尤其是向CPU调度任务(或线程)以及存储器的分配。在这样的系统中,多线程是同时激活的。通常,激活线程的数目超出系统中CPU的数目。给定线程典型地在CPU中执行几个循环,然后尽管没有完成,但被暂时停下并置于队列中,以便稍后继续执行。线程可由于其达到了时限、由于其被更高优先权线程预先耗尽、由于其必须等待某一等待事件,例如内存存取或锁定释放、或其他一些原因而中断。通过允许第一个线程等待时执行另一个线程,可充分利用CPU资源。当由于这些或任何其他原因而可以利用CPU执行一个线程时,操作系统中的调度程序典型地判定多等待线程中的哪一个将调度到可用CPU用于执行。
传统的调度程序通常为对称多处理器计算机系统而设计,其中存储器能被所有CPU平等存取,但不能最佳地考虑非均衡存储器存取对任务调度的影响。例如,在Microsoft Windows 2000TM操作系统使用的调度程序中,根据包括预先指定的优先权、队列中的时间长度、该线程是否在同一CPU中最后执行、该CPU是否指派为该线程的优选处理器、及其他因素的各种考虑而选择调度的线程。这些因素意欲优化CPU利用,这当然一般是理想的。然而,调度程序不考虑CPU的节点位置,并且尽管非常充分地利用CPU,但由于不必要的大量节点间存储器存取而可能使系统吞吐量不堪重负。
一些调度程序能向CPU施加对线程或任务分配的严格限制,从而总是在同一CPU或同一节点执行特定的线程。在其中系统资源被分为分离的子集、而处理被指定给各子集的计算机系统中,系统的逻辑分区可获得类似效果。在一些情况下,这些效果是考虑周到的(例如一组处理保证有一定量的资源,而不干扰其他处理)。然而,这可导致一些CPU的利用不足和/或过度利用CPU中的瓶颈。
为NUMA平台设计的一种公知操作系统是Sequent Computers(现在是IBM公司的一个部门)的PTX操作系统。PTX提供多个运行队列,每个CPU使用一个,并向用户提供为任意CPU组定义附加运行队列的能力。当初始化一个处理时,其被指定到运行队列之一,而且当等待执行时,由该处理产生(spawn)的所有线程位于该运行队列。此后,该操作系统优先调度该处理的线程到其指定的运行队列的一个CPU或多个CPU,并且在有些偏低的优先级,将该处理的线程调度到在与指定运行队列的一个CPU(或多个CPU)相同的系统节点内的多个CPU。该操作系统还包括在正在进行的基础上,监视每一CPU的CPU利用和每一节点的存储器利用的能力。如果在特定节点的CPU利用和/或存储器利用足够高,则该操作系统可调度线程到没有包含该优选CPU(或多个CPU)的节点。以这种方式,PTX利用该NUMA结构的优点,并避免可能导致资源利用的大差距的对线程调度的严格限制。
尽管没有必然认识,但存在改善NUMA系统的调度程序的需求,该调度程序具有PTX的显著优点,即在调度线程时考虑各种CPU的节点位置,从而降低节点间存储器存取的频率,该调度程序适用于较简单的操作系统,并特别适用于不支持多运行队列和CPU/存储器利用监视的操作系统。

发明内容
根据本发明,一种用于非均衡存储器存取计算机系统的调度程序从不与任何CPU或CPU组优先关联的单一、通用准备队列(也称为运行队列)中调度所有线程。该调度程序调度线程时考虑CPU的物理布置,特别的,优先偏向于将线程调度到具有更短存储器存取时间来存取可能包含相对更大份额的线程所需数据的存储器子集的CPU。
在一个优选实施例中,该NUMA系统设计为多个分离节点的系统,每一节点具有本地存储器、一个或多个CPU、内部节点总线和用于与其他节点通信的接口。系统主存是包括每一节点中的本地存储器集合的分布式存储器。对该处理器节点内的位置的存储器存取快于越过该节点边界的存储器存取。
在该优选实施例中,各优选CPU可与每一线程关联。当CPU变得可用时,调度程序将至少相对的优先权给予在与可用CPU相同的节点中具有优选CPU的线程,而不是在不同节点中具有优选CPU的线程。这是一种相对优先权,而不是绝对限制。仍可能选择线程以调度到不在与该线程的优选CPU相同节点内的CPU,并因此避免由于对线程调度选择的过于严格限制而引起的资源不足或其他问题。
在该优选实施例中,称作“理想节点”的优选节点一般指定给用户处理。当处理产生线程时,该线程继承该处理的理想节点。另外,选择该理想节点中的CPU作为该线程的“理想处理器”。为单一处理产生的线程选择理想处理器一般基于循环而交替。其他选择标准等同地,线程首先被优先调度到理想处理器,然后到理想节点。在一些情况下,该调度程序可选择空闲一个处理器而不是将具有不同理想节点的线程调度到该处理器,但在其他情况下可调度这样的线程。
说明非均衡存储器存取的各种替换调度技术是可能的。在一个替换中,当CPU变得可用时,该调度程序将至少相对的优先权给予在与可用CPU相同节点中的CPU上最后执行的线程,而不是在不同节点中最后执行的线程。
所有线程的、与任何特定CPU或CPU组不关联的单一、通用准备队列的使用与各种非NUMA操作系统一致。通过观察这里所述的、根据本发明实施例的用于调度线程到同一节点的宽松、相对的优先级,线程往往在同一节点执行,并且该节点的实存往往积累成比例更大份额的该线程所需数据。结果,节点间存储器存取的频率降低超过在调度线程中不考虑节点布置的系统。同时,避免了严格的节点限制,使得能利用整个系统并避免资源不足和其他问题。
通过下面参考附图详细地描述本发明的优选实施例,本发明的其他特点和优点变得更加明显。


图1是根据本发明优选实施例的多节点、多处理器计算机系统的主要组件的高级方框图。
图2是根据该优选实施例的多节点计算机系统的典型节点的主要硬件组件的方框图。
图3是示出了根据该优选实施例的多节点计算机系统100中在不同提取级别分离硬件和软件功能的概念示意图。
图4描绘了根据该优选实施例的等待由调度程序使用的可用处理器的线程的准备队列结构。
图5图示了根据该优选实施例的来自该调度程序使用的准备队列的针对某一线程的信息。
图6是示出了根据该优选实施例初始化某线程控制值的高级流程图。
图7A和7B是共同示出了根据该优选实施例选择用于执行的线程的流程图。
图8是示出了根据该优选实施例选择CPU以执行最近准备线程的流程图。
具体实施例方式
纵览如这里所述,用于多处理器、非均衡存储器存取(NUMA)计算机系统的调度程序调度单一、全局准备队列的线程,在选择调度到各种处理器的线程或任务中考虑近似节点(node affinity),从而每一线程往往在一致(consistent)节点中执行,并且该线程需要的存储器页面往往在该节点的本地实存中积累。为了一致,这里使用术语“线程”来描述具有其自己状态的计算机可执行指令序列的实例,其是调度程序调度的实体。在一些环境下,这被称为“任务”,并且这里在“线程”和“任务”之间没有区别。有时使用术语“线程”来表示一个处理从单一程序中产生多个可同时执行的线程;然而,如这里所使用的一样,不表示任何限制,一个处理可以仅产生一个执行的单一线程,或可产生多个线程。
NUMA系统硬件图1是根据本发明优选实施例的多节点、多处理器计算机系统100的主要硬件组件的高级方框图。计算机系统100使用基于分布式共享存储器(DSM)的计算机结构,并且该系统是NUMA系统。计算机系统100包括多个节点101-104,在图1的示例系统中示出了四个,但应理解节点数目可变。由允许任何节点与任何其他节点通信的节点间通信网络105连接这些节点。节点间通信网络的目的在于允许器件越过节点边界通信,并特别允许任一节点内的处理器存取位于任一其他节点内的存储器。在该优选实施例中,节点间网络105是基于交换的网络,其使用符合IEEE 1596-1992标准的可扩缩一致接口(SCI)互连机构。SCI是由在每一单独点对点互连上发送分组的激励(pumped)总线实现的高带宽互连网络,并提供贯穿该系统的高速缓存一致性。在IEEE标准1596-1992(1993年8月3日)中可进一步得到关于SCI的信息,这里通过引用而并入其中。
尽管节点间网络105优选为SCI适应性通信介质,但可使用现存或以后开发的各种替换的任一个。该节点间通信介质优选提供高带宽和低等待时间,并可扩缩以允许添加更多节点。这类合适的介质包括具有高数据吞吐量的点对点互连链路(例如1千兆字节/秒或更大)。这些链路可以任何合适的方式配置,例如环形拓扑、通过交换的任意拓扑或两者的结合。根据系统性能需求,这些链路可为有线或无线(光、RF等)。在“Interconnect Topologies withPoint-To-Point Rings,”Ross E.Johnson and James E.Goodman,December 1991,Computer Sciences Technical Report#1058,University of Wisconsin-Madison中描述了其他拓扑的例子,这里通过引用而合并,应理解这里描述的例子不必穷举合适网络的所有类型。
图2是根据该优选实施例的计算机系统100的典型节点101的主要硬件组件的方框图。为了与这里包含的描述一致,一般指定节点为附图标记101,应理解该节点可为节点101-104的任一个。节点101包括多个对来自分布式主存的指令和其他数据执行基本机器处理功能的中央处理单元(CPU)201-204。每个CPU 201-204包含或控制暂时存储数据和指令的各个高速缓存205-208。对于大的多处理器计算机系统,高速缓存典型地存在为多级和多结构。例如,CPU可包括1级高速缓存,仅用于存储在CPU上执行的指令(L1指令高速缓存);物理上分离的1级高速缓存,仅用于存储由CPU处理的数据而不是指令(L1数据高速缓存);和2级高速缓存(L2高速缓存),存储指令和其他数据,并用于馈送L1指令高速缓存和L1数据高速缓存。在图2中以简化形式将该高速缓存结构或多个结构表示为每一相应处理器的单一块205-208。为了本发明的目的,每一处理器中高速缓存的精确实现细节不重要。可能有许多其他变化,并且本发明不限于任何特定的高速缓存设计,也不必须使用高速缓存。
计算机系统100利用分布式主存,包括在每一相应节点101的分离的本地存储器210。系统100中的总可寻址主存是每一相应节点中的可寻址本地存储器210的和。该系统中的所有CPU共享同一可寻址分布式主存。因而,主存的实地址空间在整个系统中恒定,并且本地存储器210中的任何存储位置具有对于所有处理器和所有节点而言都相同的唯一实地址。
节点间接口单元215将节点101连接到节点间网络105,从而允许节点101与系统100内的其他节点通信。接口单元215典型地包括用于暂时存储在节点之间传递的数据的高速缓存或缓冲器。
I/O总线接口单元220通过一个或多个I/O总线221-222而为一个或多个I/O器件提供通信。I/O总线221-222可以是与传统I/O器件通信的任何合适类型,例如直接存取存储器件(DASD)224、磁带驱动器、工作站225、打印机,和通过专用通信线或网络与远程器件或其他计算机系统通信的远程通信适配器。例如,I/O总线221可以是工业标准PCI总线。尽管图2中示出了两个I/O总线和两个I/O器件,但应理解总线和器件的数目可变,并且不必所有节点101都包含I/O接口单元220或附属的I/O器件。
内部节点总线212提供节点101的各组件之间的通信。具体说,总线212响应于CPU发出的存储器存取而在本地存储器210和各CPU 201-204的高速缓存205-208之间传送数据。本地存储器210中的监视逻辑、节点间接口215和/或总线212自己判定存储器存取中请求的特定实地址是否包含在节点101的本地存储器210中,或不同(远程)节点的本地存储器中,并根据具体情况将该存储器存取指向本地存储器210或与远程节点通信的节点间接口215。可观察到对本地存储器210内实地址的存储器存取将穿过总线212并在相对少量机器周期后返回,而对远程节点的本地存储器内实地址的存储器存取,至少在某些情况下将穿过请求节点的节点总线212、请求节点的节点间接口215、节点间网络215、响应节点的对应节点间接口和响应节点的对应节点总线,以到达数据所在的响应节点的本地存储器。(如果请求数据在接口高速缓存之一中,在一些情况下该操作可缩短)。结果,对远程节点的存储器存取一般需要相对更多的周期。
尽管在图1中示出了具有四个节点的系统并在图2中示出了具有四个CPU和各种其他器件的典型节点,但应理解图1和2仅是为了图示目的的NUMA系统的一种可能配置的简化例子,在该配置中可能器件的数目和类型可改变,并且该系统通常包括未示出的附加器件。还应理解不需要所有节点相同,或所有节点具有相同数目CPU或相同数量可寻址本地存储器。
操作系统纵览图3是示出了计算机系统100中在不同提取级别分离硬件和软件功能的概念示意图。众所周知,计算机系统是执行处理的顺序状态机。这些处理可表示为变化的提取级。在高提取级,用户指定处理和输入,并接收输出。随着进行到较低级,可发现这些处理是某一编程语言的指令序列,其继续变低被翻译为更低级的指令序列,并通过操作系统代码传递,最后成为放于机器寄存器中的数据比特以产生确定的作用。在很低级,改变电势引起各种晶体管开和关。在图3中,在图的上部表示提取的“较高”级,而在图的底部表示较低级。
图3所示的硬件级301代表物理处理器、存储器、总线和使得指令将被执行的其他组件。如这里所使用的一样,硬件级301代表图1和2所示的物理器件的集合(与器件中存储的数据相反),包括图1和2中未示出的其他硬件。
紧靠硬件之上是低级操作系统级302,在某些操作系统中称为“内核”。在物理意义上,操作系统是代码,即是在各种存储器位置中存储的、并在一个或多个处理器上运行以执行需要功能的指令形式的数据。该低级操作系统提供共享系统资源、分配存储器、加强安全性等所需的确定基本操作系统功能。低级操作系统302提供的功能中有分页功能303和调度功能304。当正执行的线程试图存取当前不在该系统的分布式主存中的数据时,即数据不在各节点的任一个本地存储器210中,调用分页程序303。在这种情况下,分页程序303使需要的数据从存储器(例如旋转磁盘驱动存储器件)中取出,并放在本地存储器210的一个中。如这里更详细的解释一样,调度程序304将等待执行的线程调度到处理器用于执行。调度准备队列结构305包括等待调度程序304调度的线程。
在低级操作系统302的上一级是各种用户处理310-312(即用户应用程序代码和数据),以及附加较高级操作系统功能308。一般来说,较高级操作系统功能308向希望存取它们的用户提供附加能力和功能,但用户处理可直接存取低级操作系统302用于执行。
在该优选实施例中,该操作系统是Microsoft Windows 2000TM操作系统,其中如这里所述修改了任务调度程序和分页程序,以说明CPU和存储器的节点布置。然而,事实上,具有从其调度任务的单一、通用准备队列的任何多任务操作系统可适用于这里描述的功能,例如各种基于UNIXTM的操作系统的任一个、IBMAS/400TM操作系统等,包括以后开发的操作系统。
在典型的计算机系统设计中,理想的是防止较高级的实体知道较低级实体的实现细节。在设计NUMA系统硬件的情况下,这意味着最好不需要操作系统和较高级软件了解NUMA的特性。所以,NUMA系统典型地设计成使该操作系统可将它的分布式主存视作单一的单片实体,该单一单片实体通过如果存在请求的数据则返回其,如果不存在请求的数据则产生页面错误来响应数据请求。类似地,该操作系统可将节点和处理器的集合简单地视作一个很大的处理器库,所有处理器可用于执行任何处理。这不意味着所有处理器将同时执行给定任务,或将同时完成所有存储器存取;由于前面陈述的原因,不是这样。但是这确实意味着将没有误差地完成存储器存取,而不管请求的存储器是否在同一节点。所以,操作系统可调度线程,而不考虑这些处理器所在的节点。
尽管该NUMA系统硬件设计为执行标准低级操作系统的功能,但如果该低级操作系统比较了解该硬件设计,特别是在调度线程中考虑处理器的节点位置,则该操作系统将工作得更有效。
调度和分页功能这里描述的线程调度程序的工作原理在于,如果在一致节点中执行线程,则线程需要的数据将趋向于在一般执行的节点中积累,并且节点间存储器存取的频率将因此降低。只有当存储器分页机构自己展示了放置的位置,即分页程序303非随机地将请求的页面放置在某一特定本地节点时,这才是真实的。
实现展示放置位置的分页程序的简单和直接的方法是将页面放置限制到请求处理器的节点,并且这是该优选实施例中使用的方法。即如果发生页面错误,则分页程序303总是将新页面放置在包含发出引起该页面错误的存储器存取请求的处理器的节点的本地存储器中。分页程序303选择将从该节点的本地存储器的可用页面中翻出的最佳候选页面。实现分页程序的一个替换方法是将页面放置限制到请求处理的理想节点。即理想节点与每一处理关联(如这里更全面解释的),并且页面总是放置在与引起该页面错误的处理关联的理想节点的本地存储器中,即使该理想节点不是与发出该存储器存取的处理器相同的节点。该替换方法背后的原因在于即使有时在不同节点执行一个处理产生的多个线程,页面也放置在一致的本地节点中。然而,应理解这两个替换例不仅仅是分页程序可采用的可能技术,可使用各种替换标准或标准的组合来在某种程度上实现页面放置的位置。
线程调度依赖于线程的状态和优先权。任何时间一个线程都处于几个状态之一。例如,线程可处于执行状态,其中该线程正在处理器上执行;事件等待状态,其中该线程在某外部事件发生前不能执行,并因此等待该事件发生;或准备状态,其中该线程准备执行并仅等待可用处理器。根据该操作系统,可定义以上状态的附加状态或细分。另外,执行的优先权与每一线程关联。可使用本领域公知的或以后开发的各种优先权指定方案的任一个。典型地由用户、系统管理员、或操作系统自己指定该优先权。例如用户应用程序处理的优先权通常是操作系统指定的、会被用户超越的用户处理的缺省优先权。在线程存在的持续时间内可固定该优先权,或者根据例如线程已在准备队列中等待的时间长度的各种因素调整该优先权。按照惯例,尽管优先权可替换为反向数字顺序,但更大的数表示更高的优先权。
调度程序304从线程准备队列结构305选择用于调度的线程。图4中更详细图示了准备队列结构305。如图4所示,准备队列结构包括控制块410-412的多个列表401-403,其中图4中为了图示目的示出了三个列表,应理解实际数目可变。按FIFO顺序安排每一控制块列表401-403。给定列表的控制块410-412代表与指派优先权关联的、准备并等待执行的线程。即控制块列表401-403包括准备状态的线程,即准备执行并仅等待可用处理器的线程。当线程进入准备状态时,其控制块放置在具有与该线程关联的优先权的列表的末端。当调度程序304将该控制块调度到CPU用于执行时,该控制块一般从该列表中去除。
在该优选实施例中,仅存在一个准备队列结构305用于系统100,并且准备执行的所有线程放置在与该线程优先权对应的准备队列结构305的列表401-403中。该准备队列不与这里使用的任何CPU或CPU组(例如节点)关联,这意味着没有CPU或CPU组从该准备队列接收任务的优先调度。作为存储器结构的该准备队列典型地存储在节点之一,并典型在该节点的CPU上执行调度程序,但这不是这里“与CPU或CPU组关联”的含义。
每一控制块410-412包括关于激活线程的某状态信息,调度程序304使用其中一些以选择调度的线程。图5图示了来自该调度程序使用的典型控制块410的针对线程的信息。如图5所示,该控制块包括优先权501、近似掩码502、理想节点掩码503、理想处理器504、最后执行的处理器505和队列时间506。优先权域501包括该线程的指定数字优先权。近似掩码502是与相应CPU对应的屏蔽位序列,通过其用户或系统管理员可要求仅在系统可用的CPU子集上执行处理,其中由该近似掩码指定该子集;在大多数情况下,用户不限制执行,并设置该近似掩码使得所有CPU被激活。理想节点掩码503是与各节点对应的一组屏蔽位,通过其可如这里所述指定一个或多个用于执行的优选节点。理想处理器域504是执行线程的单一优选CPU的数字指定。最后执行的处理器域505是最近执行该线程的CPU的数字指定。队列时间域506包含表示线程已在该准备队列中的时间长度的值。例如该值可为该线程进入该队列时的时标记录,尽管其也可以是发生确定事件时递增的计数器或某个其他值。
图4和5为了图示目的以简化形式示出了准备队列和控制块,并不意欲提供该调度程序使用的数据结构格式的实际蓝图。示出该准备队列包含以链接列表配置的多个控制块410-412,每一块410-412对应于单一相应线程并包含所有必要状态信息。然而,该队列数据结构的实际结构细节可变,并可实现为数组或数据结构的其他形式。而且,尽管示出了控制块410-412包含每一相应线程的全部状态信息,该队列中的记录可仅包含调度程序需要的部分信息,或可简单包含可找到指向该必要数据的位置的一个或多个指针或其他索引。控制块可包含该调度程序或其他功能使用的其他和附加状态信息。
当一个处理产生一个线程时,控制调度选择的控制块的确定值被初始化,并可从处理初始化产生的值中继承而来。图6是示出了操作系统在高级采用确定步骤以初始化线程控制值的流程图。如图6所示,以任何传统方式初始化处理,使得确定的数据结构被产生和初始化,具体地说,使得持有图5中描绘的值的控制块或类似结构被创建。另外,优先权和近似处理器被指定到该处理。这些步骤在高级中总地表示为步骤601。
理想节点与处理关联如下。如果该处理是系统处理或具有指定到它的特定近似处理器,则从步骤602得到“是”分枝,并且理想节点被设置到所有节点(步骤603),即通过所有节点“开”而设置与该处理关联的理想节点掩码,有效地意味着没有理想节点选择。系统处理是意欲在所有节点上运行的各种指定操作系统处理的任一个。近似处理器由用户或系统管理员指定,并限制在可用CPU的特定子集内执行该处理。尽管很少指定近似处理器,但假设当指定这样的近似时,应不考虑指定为“理想节点”的系统,并因此在该情况下不使用该理想节点指定。
如果该处理不是系统处理,也不具有特定近似处理器(即可以运行在任何处理器上),则从步骤602得到“否”分枝。在这种情况下,该操作系统利用循环算法指定理想节点。即递增最近指定给处理的节点号(步骤604),并将该节点指定为该处理的理想节点(步骤605)。通过对应于所选择的理想节点在该理想节点掩码中设置一位而执行该指定操作。
为了最大的灵活性,使用节点掩码,使得单一节点可指定为该理想节点,可指定所有节点,或可指定节点的任意子集。缺省地,该操作系统如上所述为大多数用户处理选择单一节点。然而,用户可能通过特定功能调用而不考虑该选择。期望很少使用该能力,因为这往往干扰对该操作系统执行的资源的平衡,但可能有证明其正确的特定情况。
简单循环算法用作基于平等在可用节点之间分布处理的缺省,并因此平衡资源利用。然而,该操作系统可使用任何数目的替换方法用于指定优选节点。例如,如果每一节点中的处理器数目不等,则因此理想的是加权该指定。或者,可保留关于最近CPU利用的统计,并且将处理指定给具有最低的最近CPU利用的节点。
同样,该处理产生一个线程,由步骤610代表。该处理可产生一个单一线程,或可产生多个线程,但图6中为了图示目的仅示出了一个。在这些当中,产生线程意味着为该线程创建一个状态记录或多个记录(例如控制块410),并用确定值进行初始化。如同初始化处理的情况一样,产生线程可包括本领域公知的许多步骤,这里不再详细解释,仅在高级由步骤610代表。从产生该线程的处理的类似值中继承该线程优先权值501、近似掩码502、和理想节点掩码503(步骤611);这可意味着处理值被拷贝到线程控制块,或线程控制块简单引用该处理值。
通过在理想节点的随机CPU处开始并基于循环而交替该理想CPU指定,用于执行的优选CPU(称为“理想CPU”)被指定到每一线程。即如果正在产生的线程是该处理产生的第一个线程,则从步骤612得到“是”分枝,并随机选择该一个或多个理想节点(由该线程的理想节点掩码指定)中的一个CPU(步骤613)。如果正在产生的线程不是第一个线程,则从步骤612得到“否”分枝,并且该操作系统根据该一个或多个理想节点中CPU之间的任何预先建立的排序关系递增指定给该最后产生的线程的CPU号(步骤614),并将该下一CPU指定给该最近产生的线程(步骤615)。
应理解图6是处理和线程初始化的简单流程图,用于图示调度程序使用的某些变量的初始化,并不意欲作为初始化处理或分散线程所采取步骤的穷举代表。
现在将描述结合准备队列305和控制块410中包括信息的线程调度程序304的操作。一般来说,调度程序响应于表示新线程应当或可以被调度的外部事件,并确定待调度的线程和/或将执行该线程的CPU。在第一模式(图7所示),当CPU变为可用于执行线程时,调用该调度程序以从准备队列305选择可用线程。这可以发生,例如因为先前在CPU上执行的线程遇到了长等待时间事件(例如存储器存取或资源锁定),或因为先前执行的线程超时,或因为先前执行的线程中断,或因为其完成了执行。在第二模式(图8所示),调用该调度程序以选择可用处理器,因为线程变为准备执行(例如产生了新线程、或线程等待的外部事件发生、或其他一些事件发生以使线程准备)。应理解,根据该操作系统的设计,可出于其他原因而调用调度程序。
调度程序的核心在于用于选择调度线程的线程选择机构。选择一个线程作为与可用CPU的最佳匹配,并因此当线程选择函数被调用时,考虑调度该线程的目标CPU。在该优选实施例中,该目标CPU一般是刚变为可用并使得该调度函数被调用的CPU。
图7A和7B(这里统称为图7)是示出了调度程序304中的线程选择函数的操作的流程图。如上所述,调用该线程选择函数以选择目标CPU的线程(指定P),该CPU一般是刚变为可用的CPU。该线程选择函数从最高优先权到最低优先权穿过准备队列305中的各种控制块列表401-403,直至发现合适的线程。如图7所示,该线程选择函数首先选择穿过的列表(步骤701)。初始地,选择的控制块列表是最高优先权列表,具有主循环的每一顺序迭代,步骤701从还没有检查的列表中选择具有最高优先权的列表。变量ideal_node_hit和ideal_CPU_hit被初始化为空值(步骤702)。另外,该调度程序在所选择的控制块列表中确定线程的最大等待时间(wmax)(也在步骤702)。每一列表的最大等待时间可变,对于越高的优先权列表其越小,对于越低的优先权列表其越大;所以必须为正在检查的每一所选列表重新设置wmax的值。
该线程选择函数然后在所选控制块列表中依次检查每一线程,直至发现匹配或到达该列表的尾部,如图7的包括步骤710-718的循环所示。从该列表选择线程(t)(步骤710)。在该列表中该线程初始是第一线程,即其控制块在该列表中最久的线程,以及随后在还没有选择的线程中的在该列表中最久的线程。该线程选择函数然后确定P是否是线程t的近似处理器中的CPU之一(步骤711),即是否在线程t的处理器近似掩码502中设置了与处理器P对应的位。如果不是,则阻止线程t在处理器P上执行,并且该线程选择函数跳至步骤718以检查下一线程。
如果P在t的近似处理器中(步骤711的“是”分枝),该线程选择函数判定t是否满足立即选择的标准(步骤712)。在步骤712执行的测试可逻辑表示如下(t在实时优先权列表中)OR (1)(t等待比wmax长)OR (2)((P=last_CPU)AND(P=ideal_CPU))OR(3)((P=last_CPU)AND(P在t的理想节点中))OR (4)((P=last_CPU)AND(ideal_CPU∉t]]>的近似))OR (5)((没有理想节点)AND(P=ideal_CPU)) (6)当调度线程t中出现紧急事件时,条件(1)和(2)不考虑正常节点匹配。该实时优先权列表是实际上具有wmax为0的特殊高优先权控制块列表,使得在该列表中等待的任何线程控制块已超出其最大等待时间。在所有其他控制块列表中,对于t等待的列表,如果线程t已等待得比所确定的最大周期wmax长,则立即选择t用于调度。如果线程最后在P上执行(如last_CPU域505中指定的一样),并且P是ideal_CPU域504指定的线程的理想CPU,则条件(3)选择该线程。条件(4)与条件(3)类似,但将理想的含义扩展到t的理想节点中的任何处理器,即由t的理想节点掩码503指定的节点。条件(5)处理在线程t的近似中没有理想CPU的特殊情况;如API调用一样,该情况只发生在处理初始化之后某个值(例如近似)已被改变时。在该情况下,不可能发现线程t的理想CPU,所以最后使用的CPU是能做到的最好的。条件(6)处理掩码503中没有指定理想节点的特殊情况,在该情况下,该理想CPU是优选的。
如果满足上述立即选择的标准,则从步骤712得到“是”分枝,线程t指定为选定的线程(步骤713),并且该线程选择函数返回而不进一步检查剩余线程。如果不满足,则得到“否”分枝。在该情况下,如果P是ideal_CPU域504指定的理想CPU并且是线程遇到的第一个(即ideal_CPU_hit=空),则从步骤714得到“是”分枝,ideal_CPU_hit被设置为t(步骤715)。如果从步骤714得到“否”分枝,则如果P在理想节点掩码503指定的理想节点中,并且这是线程遇到的第一个(即ideal_node_hit=空),则从步骤716得到“是”分枝,ideal_node_hit被设置为t(步骤717)。如果更多线程剩余在所选控制块列表中(步骤718),则该线程选择函数返回步骤710以选择和检查列表中的下一线程。当已检查了所选择列表中的所有线程时,从步骤718得到“否”分枝,并且该线程选择函数继续到步骤720。
已穿过了整个控制块列表后,如果ideal_CPU_hit不为空,则从步骤720得到“否”分枝,由ideal_CPU_hit指定的线程被指定给该选定线程(步骤721),并且该函数返回而不检查附加列表。如果ideal_CPU_hit为空,则从步骤720得到“是”分枝。在该情况下,如果ideal_node_hit不为空,则从步骤722得到“否”分枝,由ideal_node_hit指定的线程被指定给该选定线程,并且该函数返回而不检查附加列表。如果ideal_CPU_hit和ideal_node_hit都为空,则线程选择函数跳至步骤724。如果剩余更多待检查的控制块列表,则得到“是”分枝,并为了检查而选择具有直接低于当前列表的优先权的列表。如果已检查了所有列表,则从步骤724得到“否”分枝,一个空值被指定为选定线程(步骤725),并且该线程选择函数返回。
当线程变得可用于执行时,如果可能,调用调度程序以选择执行该线程的合适CPU。与图7的线程选择处理不同,如果指定目标线程(指定的t),则调用该CPU选择处理以从多个潜在候选CPU中选择一个CPU。图8图示了该处理。
该CPU选择函数首先判定理想CPU是否存在于线程t的近似中且当前空闲(步骤801)。如果是,则从步骤801得到“是”分枝,选择该理想CPU(步骤802),并且该线程选择函数返回。如果不,则从步骤801得到“否”分枝。
如果在线程t的近似中存在至少一个空闲CPU,并且如果存在这样的理想节点,则该空闲CPU在线程t的该理想节点中(即在不存在理想节点的情况下,仅测试在线程t的近似中是否存在至少一个空闲CPU),然后从步骤803得到“是”分枝。在这种情况下,选择一个这样的CPU(步骤804)。当多于一个空闲CPU满足步骤803的标准时,该CPU选择函数选择线程t最后使用的CPU,如果其是满足该标准的CPU之一,如果不是,则基于缺省选择逻辑选择这样的CPU之一。然后该线程选择函数返回。如果在步骤803没有发现满足以上标准的CPU,则得到“否”分枝以考虑不空闲的某些处理器。
如果在线程t的近似中存在理想CPU,则从步骤805得到“是”分枝,并将该理想CPU暂时选为候选CPU(步骤806)。在该情况下,CPU必然忙,否则在步骤801就已选择了该CPU。如果从步骤805得到“否”分枝,且在线程t的近似中存在一个CPU,在存在一个理想节点的情况下该CPU也在该线程t的理想节点中(即在不存在理想节点的情况下,测试在线程t的近似中是否存在一个CPU),则从步骤807得到“是”分枝,并暂时选择一个这样的CPU(步骤808)。当存在多于一个这样的CPU时,该CPU选择函数暂时选择线程t最后使用的CPU,如果其是满足该标准的CPU之一,如果不是,则基于缺省选择逻辑暂时选择这样的CPU之一。如果从步骤807得到“否”分枝,则该CPU选择函数利用缺省选择逻辑暂时选择线程t的近似中的一个CPU(步骤809)。
如果在步骤806、808或809中暂时选择了候选CPU,则将该候选处理器中的任何当前运行的线程的优先权与线程t的优先权比较(步骤810)。如果t的优先权更大,则从步骤810得到“否”分枝,并确认该候选CPU为选择的CPU(步骤811)。在该情况下,选择不空闲的CPU将使得当前执行的线程优先。如果t的优先权不大于正在执行的线程的优先权,则从步骤810得到“是”分枝,并将选定CPU设置为空。在两种情况下,该CPU选择函数然后返回。当该CPU选择函数返回一个空选择时,不能发现用于立即调度线程t的合适CPU,所以,当该较早描述的线程选择函数选择线程t时,线程t将放置在准备队列上等待来自该队列的最终调度。因而,可观察到与线程选择函数类似,该CPU选择函数可拒绝选择非理想节点中的空闲CPU,即使没有选择CPU并且线程t最终放置在该准备队列上。
一般来说,为了实现本发明的图示实施例而执行的例行程序,无论实现为操作系统或特定应用程序的一部分、程序、对象、模块或指令序列,这里均可称为“计算机程序”或简称为“程序”。该计算机程序典型地包括这样的指令,即当由与本发明一致的计算机系统中的器件或系统中的一个或多个处理器读取和执行时,这些指令使得这些器件或系统执行完成或产生体现本发明各方面的的步骤或元素所必须的步骤。而且,尽管已经并将在全面运行计算机系统的上下文中进一步描述本发明,但本发明的各种实施例能发布为各种形式的程序产品,并且本发明可等同应用,而不管用于实际执行该发布的信号承载介质的具体类型。信号承载介质的例子包括但不限于例如易失性和非易失性存储器件、软盘、硬盘驱动器、CD-ROM、DVD、磁带的可记录类型介质,和例如包括无线通信链路的数字和模拟通信链路的传输类型介质。图2中信号承载介质的例子图示为存储器210和存储器件224。
工业实用性关于上述线程选择算法的性能可作出一些观察。即使存在与任何CPU或CPU组不关联的单一准备队列,上述调度程序仍可获得NUMA达到的性能。对于大多数线程(具有单一指定理想节点和单一指定理想CPU),一般不选择该线程用于调度,除非处理器P至少在该线程的理想节点中。在该理想节点中,将轻微的优先权给予具有P作为其理想处理器的线程,而非P在其理想节点中但不是其理想处理器的线程。如果P是执行线程的最后一个处理器并满足某些其他条件(见步骤712中的(3)-(5)),则立即选择该线程作为理想候选线程,而不进一步检查该队列;因为除了该节点的本地存储器之外,有用数据可在该处理器的高速缓存中,所以该最后一个处理器很重要。如果处理器P不是执行该线程的最后一个处理器,但在理想节点中或是理想处理器,则通过ideal_CPU_hit和ideal_node_hit变量而暂时选择,并且如果穿过该队列时发现更好的候选处理器,则不考虑它。即使线程在队列中等待,该线程选择算法也不必选择任何线程。最后,尽管P不匹配该线程的理想节点或理想处理器,但最终将选择在该队列中等待的线程用于调度。
作为指定理想节点的结果,线程往往在同一节点执行,即使该理想处理器不可用。分页程序将分页数据加载到产生分页请求的处理器节点的本地存储器上,所以该线程需要的数据往往在指定理想节点的本地实存中积累。结果,从CPU到系统的分布式实存的存储器存取的更大部分将存取该CPU的节点中的本地实存,而不是越过节点边界的存储器,后者是利用不考虑节点布置的类似任务调度程序发生的情况。该节点内存储器存取比例的增加通过降低存储器存取时间和降低节点间通信介质上的业务量而改善了系统吞吐量。
附加替换实施例以上已详细描述了用于在NUMA系统中调度线程的特定算法作为优选实施例。然而,应理解上述算法的多种变更是可能的。所选的确切算法将一般依赖于针对所设计计算机系统的各种硬件和软件的考虑。一般来说,可使用来自考虑关于分布式存储器系统的子集的处理器的物理布置的通用准备队列的线程调度算法,从而降低实存存取的长等待时间。最明显的替换是从该优选实施例中去除这里所述的一个或多个条件,或增加某个条件到这里所述的算法。以下描述附加变更的一些特定例子,应理解这仅是例子,而不认为是可能替换的穷举列表。
在一个替换中,不必指定理想处理器或理想节点。可随机确定首先执行处理或线程的处理器。该线程选择算法简单地优选目标处理器上或同一节点中另一处理器上执行的线程。因为优选同一节点中的处理器,所以尽管没有理想指定,该线程往往也在一致节点中执行。
在另一个替换中,可由与上述逻辑相反的数学估计函数来选择线程。该估计函数为队列中的每一线程提供估计分数,选择具有最佳分数的线程用于调度。例如该估计函数可为该形式F1(等待时间)+F2(节点)+F3(CPU)+F4(优先权)+...
其中FN是相应独立变量的数值函数。当然,该估计函数可更复杂。
在上述优选实施例中,NUMA计算机系统在结构上设计为半独立节点的集合,每一个具有内部总线、处理器、本地存储器等,并由节点间通信介质耦接到一起。该设计方案的优点在于可扩缩性和模块性。另外,已构建了该NUMA系统结构的几个例子并公开可用,所以利用该方案已获得一些实际经验。然而,根据本发明的NUMA系统不必在这样的节点模型上设计。在选择处理器中解决非均衡存储器存取以执行线程或任务的调度程序潜在地在任何NUMA系统中有价值,即使该系统基于其他设计模型而非这里所述的节点系统。所以可采用现在公知或以后开发的展示非均衡存储器存取特性的任何替换系统结构。作为该替换结构的一个例子,NUMA系统可为具有复杂存储器总线结构的系统,其中该存储器总线包括由接口链接的总线段的网络,并且其中一些存储器存取仅需要一个总线段,而另一些穿过多个段并因此需要更多时间。其他替换也是可能的。而且,尽管在该优选实施例中,存储器存取被分为两类(节点内和节点间),但系统可具有多于两类的存储器存取,每一类需要不同的各自的存取时间。
应理解尽管这里为了图示目的而描述了本发明的特定实施例,但在不脱离本发明的精神和范围的情况下,可作出各种变更。因此,仅由所附权利要求及其等同限制本发明的保护范围。
权利要求
1.一种在计算机系统中将线程调度到中央处理器(CPU)的方法,所述计算机系统具有多个CPU(201-204)和分为多个分离子集的存储器(210),所述方法包括步骤(a)确定目标CPU;(b)确定适于在所述目标CPU上执行的线程集(701),所述线程集在与任何CPU或CPU组都不关联的通用准备队列(305)上等待;(c)为所述线程集的每一相应线程确定所述存储器的多个分离子集的至少一个目标子集,每一个目标子集具有由所述目标CPU存储器存取该目标子集内的位置的相应等待时间周期,其中用于存储器存取的所述各相应等待时间周期不全相等;并且(d)从在所述目标CPU上执行的所述线程集中选择一个线程(710-725),所述选择步骤至少一部分基于每一目标子集的所述相应等待时间周期。
2.根据权利要求1的调度线程的方法,其中所述多个CPU中的每一CPU与所述存储器的多个分离子集的一个相应子集关联,并且其中确定所述存储器的多个分离子集的至少一个目标子集的所述步骤包括指定相应优选CPU用于执行所述线程集的每一线程,所述存储器的多个分离子集的所述目标子集是与所述优选CPU关联的存储器的子集。
3.根据权利要求1-2中任一项所述的调度线程的方法,其中多个CPU与所述存储器的多个分离子集的每一相应子集关联。
4.根据权利要求1-2中任一项所述的调度线程的方法,其中从所述用于执行的线程集选择线程的所述步骤包括将第一相对优先权分配给所述指定优选CPU是所述目标CPU的线程(714-715),将第二相对优先权分配给所述指定优选CPU和与该目标CPU相同的存储器子集关联的线程(716-717),以及将第三相对优先权分配给该指定优选CPU和与该目标CPU相同的存储器子集不关联的线程,所述第一相关优先权大于所述第二相对优先权,并且所述第二相关优先权大于所述第三相对优先权。
5.根据权利要求1-4中任一项所述的调度线程的方法,其中所述计算机系统包括多个分离的节点(101-104),每一节点包括至少一个CPU和所述存储器的多个分离子集的一个相应子集,其中为每一相应线程确定所述存储器的多个分离子集的至少一个目标子集的所述步骤包括为每一相应线程确定至少一个目标节点(605)。
6.根据权利要求1-5中任一项所述的调度线程的方法,其中为每一相应线程确定至少一个目标节点的所述步骤包括指定用于执行所述线程集的每一线程的相应优选CPU的步骤(615),所述目标节点为所述优选CPU所在的节点。
7.根据权利要求2-6中任一项所述的调度线程的方法,其中当线程产生时(610),执行指定用于执行所述线程集的每一线程的相应优选CPU的所述步骤。
8.一种计算机程序产品,包括用于执行权利要求1-7中任一项所述方法的指令;和记录所述指令的信号承载介质。
9.一种非均衡存储器存取计算机系统,包括多个分离节点(101-104),每一节点包括一个或多个中央处理器(CPU)(201-204)和本地存储器(210),其中所述多个分离节点中的所有本地存储器集包括所述计算机系统的分布式主存;接口网络(105),提供所述多个节点之间的数据通信;通用准备队列(305),用于保持准备在所述计算机系统上执行的多个线程,所述通用准备队列不与任何特定CPU或CPU组关联;和线程调度程序(304),用于从所述通用准备队列调度线程以在所述CPU上执行,其中当调度线程时,所述线程调度程序考虑CPU的节点位置,并且其中所述线程调度程序优先偏向于调度一个线程到一个节点中的CPU,该节点可能在其本地存储器中包含相对更大份额的线程所需数据。
10.根据权利要求9的非均衡存储器存取计算机系统,还包括分页程序(303),用于在存储分页调入数据的所述分布式主存中选择位置,所述分页程序在这样一个节点的本地存储器中存储分页调入数据,即该节点由引起该页错误的线程和执行引起该页错误的线程的CPU的至少一个确定的。
11.根据权利要求9-10中任一项所述的非均衡存储器存取计算机系统,其中每一节点包括多个CPU。
12.根据权利要求9-11中任一项所述的非均衡存储器存取计算机系统,其中所述调度程序从多个准备线程中选择一个线程以在目标CPU上执行。
13.根据权利要求9-11中任一项所述的非均衡存储器存取计算机系统,其中所述调度程序从多个合格CPU中选择一个CPU以执行准备线程。
14.根据权利要求9-13中任一项所述的非均衡存储器存取计算机系统,其中相应优选节点在产生线程的时候与至少一些线程关联,并且其中所述线程调度程序优先偏向于将线程调度到该线程的优选节点中的CPU。
15.一种用于非均衡存储器存取计算机系统的线程调度机构,所述非均衡存储器存取计算机系统具有多个中央处理器(CPU)(201-204),包括用于根据与任何CPU或CPU集不关联的通用准备队列中的多个线程的每一线程,判定可能具有对该线程所需数据的较短存储器存取时间的CPU集的部件,每一相应所述CPU集具有至少一个CPU;和用于选择线程和执行该线程的CPU的部件(610-615),所述选择部件优先选择线程和执行该线程的CPU,其中执行该线程的CPU是可能具有对该线程所需数据的较短存储器存取时间的所述CPU集的一个成员。
16.根据权利要求15的线程调度机构,其中所述非均衡存储器存取计算机系统包括多个分离节点(101-104),每一节点包括至少一个CPU和所述存储器的多个分离子集的一个相应子集(210),其中所述根据每一线程判定可能具有对该线程所需数据的较短存储器存取的CPU集的部件包括根据每一线程确定在可能包括该相应线程所需数据的节点中的CPU集的部件。
17.根据权利要求15-16中任一项所述的线程调度机构,其中产生线程时,所述选择部件优先选择该线程。
全文摘要
一种用于非均衡存储器存取计算机系统的调度程序从不与任何CPU(201-204)关联的通用准备队列(305)中调度线程,但偏向于将线程调度到具有较短存储器存取时间的CPU。优选的,该系统包括多个分离节点(101-104),每一节点具有本地存储器(205)和一个或多个CPU。系统主存是包括本地存储器集合的分布式存储器。相应优选CPU和优选节点可与每一线程关联。当CPU变得可用时,该调度程序将至少相对的优先权(714-717;801-804)给予在与可用CPU相同的节点中具有优选CPU的线程,而不是在不同节点中具有优选CPU的线程。该优先级是相对的,并不防止该调度不考虑该优先级以避免资源不足或其他问题。
文档编号G06F12/06GK1582428SQ02821952
公开日2005年2月16日 申请日期2002年11月6日 优先权日2001年11月7日
发明者贾尔·W·麦克唐纳 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1