用于使能多节点计算机系统中操作系统资源的分配的机制的制作方法

文档序号:6538263阅读:250来源:国知局
专利名称:用于使能多节点计算机系统中操作系统资源的分配的机制的制作方法
技术领域
本发明涉及资源管理,并且特别涉及多节点计算机系统中的资源管理。
背景技术
计算机系统广泛地用于存储和处理数据。数据在计算机系统存储器中存储,并由计算机系统的处理器上执行的计算机系统程序处理。如公知的,处理器经常被认为是计算机系统的“大脑”,因为它是计算机系统内执行计算机系统的程序的部件,允许计算机系统做真正的工作。当计算机程序正在执行时,存储器用于保存它们,并且当数据正在由执行计算机程序的处理器访问时,存储器用于保存数据。
为有竞争力,计算机系统的设计者正不断努力,使计算机系统更强大,同时保持或减小计算机系统的尺寸。常见的方法是通过增加使用的处理器的数目,增强计算机系统的总的处理能力。为了制造效率,处理器和存储器通经常封装在一起,构成所谓的节点,并且计算机系统包含一个或更多这样的节点。在这些多节点计算机系统内,任何处理器可以访问任何节点上的存储器,但是,处理器一般可以比访问其它节点上的存储器(远程访问)更有效率地访问它自己节点上的存储器(本地访问)。
计算机程序包含一系列指令,它们由计算机系统的一个或更多处理器执行。通过执行这些指令,就说处理器执行计算机程序。操作系统(为其它程序的利益,主要负责操作计算机系统的程序)通过使用任务(job)(有时称为任务(task)或进程)控制这些程序的执行。多数处理器一次只能执行一个指令流,但是因为它们运行如此之快,它们显得同时运行很多任务和为很多用户服务。计算机操作系统在运行中给予每个任务“机会(turn)”,然后当另一个任务得到机会时,要求该任务等待。在任务继续之前需要等待某事发生(例如访问次级存储),或多个处理器可用的情况下,任务可以创建线程(有时称为子进程或子任务),以异步地继续或加速处理。未创建任何线程的任务自己可以被认为具有单一的线程。因此,可以认为任务由一个或更多线程组成。
从节点的观点来看,操作系统可以指定线程以任何多种方式执行。例如,可以选择一个任务的线程用于在给定的节点上执行,同时可以选择另一个任务的线程用于在不同的节点上执行。类似地,来自相同任务的线程可以在不同的节点上执行,而被选择在给定节点上执行的线程也可以在结束之前被选择在一个或更多其它节点上执行。虽然这种灵活性在某些方面是有益的,但从数据访问的观点来看,它是有问题的。如上所述,节点由处理器和存储器组成,并且与在别的节点上的存储器相比,处理器可以更高效地访问它自己节点上的存储器。因此,为了高效地执行,操作系统必须保证每个线程访问在同一节点上的存储器中的它的数据,在该节点上该线程正在执行。
操作系统已经解决这个问题的一种方法是通过使每个线程与它执行和访问数据都优选的节点相关联。然后,当执行给定线程的时间到来时,只要可能,操作系统在它优选的节点上选择处理器。类似地,当需要为了线程将数据放入存储器时,只要可能,选择它的优选节点上的存储器。这种方法一般在最小化远程存储器访问时有帮助,只要通过执行线程所做的工作是在计算机系统的节点之间平衡的。
具有一个或更多节点的计算机系统也可以分区为两个或更多逻辑上分离的系统。可以给逻辑分区指定处理器和存储器,而不考虑它们所属的节点。此外,由于配置改变或容量升级或降级,处理器和/或存储器可以动态地添加到分区和/或计算机系统,或者从分区和/或计算机系统移除。计算机系统内关于本地相对远程存储器访问的效率问题在每个逻辑分区内也适用。贯穿本说明书,术语“系统”用来指整个未分区的计算机系统或计算机系统的逻辑分区。
由操作系统使用的一种节点平衡的方法是包括这样的机制在每个节点上,以和系统可用的处理器和/或存储器资源相同的比例,分配工作(线程)给优选节点。
虽然这些机制在平衡工作负载和一般最小化远程访问中有用,先前技术的操作系统自身未最优化来最小化与它们提供的服务相关联的远程访问。例如,考虑包括集成文件系统的操作系统,该文件系统提供各种文件服务给客户线程。执行它的功能需要的各种资源会与那个文件系统相关联。在那些资源中可能是一组内核线程(只有操作系统知道并由操作系统管理),其在队列中等待消息,该消息指示它们为请求客户异步地处理文件的特定部分。另一个资源可能是消息池,该消息可以发送到这些线程。除非消息池和队列碰巧位于客户线程的优选节点的上存储器中,并且除非碰巧为请求服务的内核线程优选相同的节点,客户线程和为它服务的内核线程间的相互作用很可能涉及远程存储器访问。很多其它的实例可以用来阐明相同的概念。
没有使操作系统服务能够在节点的基础上分配它们的资源的装置,使得与客户线程的优选节点相关联的特定资源用来服务于那个线程的请求,那么操作系统服务的使用因远程存储器访问而是低效的。此外,除非资源的分配以和系统上的工作负载相同的比例在节点间平衡,资源将不会均匀地使用,并且依赖于特定的资源,将发生各种其它的低效率。

发明内容
本发明涉及装置、方法和程序产品,使在节点的基础上,操作系统资源的分配能与预期的系统工作负载成相同的比例。启动系统时,在节点的基础上识别系统的处理和存储器资源的时候,建立资源的初始分配。无论何时处理器和/或存储器添加到系统或者从系统移除,可以重新分配资源,以匹配新的预期的工作负载平衡。随后,当实际的工作负载逐渐地迁移到它的新的节点比例时,可能发生逐步的资源重新分配。
本发明的优选实施例分配各种类型的权重给每个节点,以表示系统内它们的总的平衡的比例。根据每个节点上现存的处理器和存储器资源的比例,目标权重表示希望的工作负载分配。当系统第一次启动时建立目标权重,并且保持不变,除非后来添加或移除处理器和/或存储器。系统上的实际的工作负载平衡由当前权重表示,在继续基础上,操作系统努力使当前权重尽可能接近目标权重。当系统开启时,操作系统服务以与目标权重相同的比例在节点上分配它们的资源,并且如果目标权重在任何时候改变,就可以请求被通告。如果随后添加或移除处理器和/或存储器,就在那时计算新的目标权重,并且将通告通知请求的所有服务,所以它们可以根据新的目标权重或其逐步的细化重新分配它们的资源。


图1A是显示能够支持本发明的优选实施例的计算环境的方块图。
图1B是显示能够支持本发明的优选实施例的替代计算环境的方块图。
图2是是显示本发明的优选实施例的内核服务的扩展视图的方块图。
图3A-1到3B-2是显示用于执行优选实施例的线程创建机制的突出处理的步骤的流程图。
图4是显示优选实施例的线程创建机制内突出步骤的流程图,这些步骤从亲合组(affinity)分离线程。
图5是显示优选实施例的线程创建机制内突出步骤的流程图,这些步骤使存储器亲合组信息对其它系统部件可用。
图6是显示初始化程序装载(IPL)序列内突出步骤的流程图,这些步骤初始化优选实施例中使用的各种权重,以实现内核部件平衡通知(KCBN)。
图7-11、14和15是显示优选实施例内使用的突出步骤的流程图,这些步骤调整各种KCBN权重,以响应系统内的配置改变。
图11-14和16A-25是显示优选实施例的监控器处理器(Watch DogHandler)和节点平衡器中使用的突出步骤的流程图,这些步骤执行工作重新分配。
图26-28C是显示涉及优选实施例的线程创建机制如何执行本地节点指定的突出步骤的流程图。
图29A到31显示本发明的优选实施例中使用的数据结构。
具体实施例方式
现在转向附图,图1A显示本发明的优选实施例的计算装置中使用的一些操作部件。计算机装置100是增强的IBM i系列计算机系统,虽然可以使用其它计算机。描述的部件包括处理节点130、网络接口125、用户接口150和大容量存储器155。优选实施例的计算机装置100包括4个处理节点,虽然可以使用更多或更少的节点。网络接口125用于和其它计算机系统通信。用户接口150用于接受命令并传达信息给计算机系统100的一个或更多用户。
也显示了节点130之一的展开视图(即节点131)。节点131包含处理器132和存储器134。在优选实施例中,每个节点可以包括最多8个处理器132,虽然可能有包括更多或更少处理器的其它配置。处理器132用于执行存储于存储器134中的线程,虽然应该理解在某些时候这些线程可能部分或全部位于大容量存储器155。处理器可以访问任何节点上的存储器,虽然它可以更高效地访问它自己节点上的存储器。
图1B显示优选实施例的计算环境的更详细的视图。如所示,优选实施例能够在逻辑分区的计算机系统上操作。在这种情况下,配置内核服务137的实例位于每个分区中(如在图1B显示的系统1-3)。优选实施例的机制将每个分区视为完整的系统。因此,术语系统,当在这里由其自身使用时,应该解释为指未分区的计算机装置,或指计算机装置内单个的逻辑分区。系统可以使用少于整个计算机装置的所有节点,如系统1和2的情况。一个节点也可能支持多于一个系统,这是节点1和2的情况。优选实施例的很多机制涉及指定和调整工作(线程)如何在系统的节点中分配。因此,当系统的配置改变时,优选实施例的机制确定是否需要工作分配调整,并且如果是这样,就执行那些调整。
每个系统被显示包括线程135和操作系统136。内核服务137集成到操作系统136中。内核服务提供操作系统级服务给其它操作系统实体和其它程序。可是,应该注意,虽然优选实施例提供重新平衡需要的内核服务通知,但本发明不限于内核或操作系统级服务,而是可应用于能够利用重新平衡通知的所有服务。
作为最后的初步内容,应该理解,虽然这里在计算机装置环境中描述本发明的实施例,但某些程序机制,如内核服务137,能够以程序产品的形式分发。自然,程序产品可以使用各种类型的信号承载媒体分发,包括但不限于可记录类型媒体如软盘和CD ROM;以及传输类型媒体如数字或模拟通信链路。
图2是优选实施例的内核服务137的某些方面的展开视图。如所示,内核服务137包括线程管理器200、节点管理器220和配置管理器240。进而显示线程管理器200包括线程创建机制(TCM)205、线程分派机制(TDM)215和线程存储器管理器(TMM)217。在优选实施例中使用TCM 205创建可执行线程和必要的线程控制结构。作为创建过程的一部分,还由TCM 205指定本地节点(home node)给这些可执行线程。本地节点指定很重要,因为可能时TDM 215偏爱执行指定给它们的本地节点上的线程,并且可能时TMM偏爱从指定给它们的本地节点分配存储器。这种偏爱的含义属于整个系统利用和资源分配。在图26-28的伴随的文字中描述TCM 205的本地节点指定方面。
已经由TCM 205创建线程并分配给本地节点之后,由TDM 215分派线程用于执行。一般来说,可以在系统的不同节点上的若干处理器的任何一个上执行线程。TCM 205是优选实施例内负责对线程分组的实体,以便最好地使用可用的处理器和存储器资源。关于TCM 205的功能和内部工作的另外详情在即将到来的图3A到5的讨论中提供。
节点管理器220也在图2上显示。节点管理器220在优选实施例中使用,以确定系统中不同节点的相对工作负载,该节点管理器本身由3个分立的实体组成。另外在优选实施例中使用的节点管理器220,识别和修正系统内工作负载不平衡,并通知其它内核服务节点工作负载的变化,使得这些服务自己可以相应地调整。不平衡识别和处理在本专利的工作重新分配部分描述(图11-14和16-25),而内核部件平衡通知在伴随图7-11、14和15的文字中描述。
在节点管理器220内显示分派处理器230、监控器处理器(WDH)225和节点平衡器235。这3个实体在优选实施例的系统内作为异步线程操作。本领域技术人员知道这些线程的异步特性意味着需要原子数据访问。因此,当在这里偶尔引用原子问题时,本专利不包含底层原子机制的广泛处理,如提到的,它们对本领域技术人员是公知的。如其名称提示,分派处理器230负责处理来自TDM 215的分派请求。因为线程连续不断地被分派,分派处理器230非常频繁地运行。在这种环境下,它的责任之一是在本地节点的基础上积累处理器执行周期计数。(分派处理器230获得这个周期信息使用的准确的装置对优选实施例的理解并不重要,因此在这里不描述它。)预定每秒执行的WDH 225每7秒获得这些积累的周期。这个7秒钟间隔在这里称为当前权重间隔。获得信息后,WDH 225对信息进行各种计算,该信息最终变为当前权重。(优选实施例内当前权重的使用在即将到来的段落中描述。)在某些时候,每当当前权重间隔期满时,WDH 225也负责通知节点平衡器235。节点平衡器235利用这个通知确定是否需要内核部件平衡通知。
配置管理器240也在图2上显示。在优选实施例中,配置管理器240是发信号通知配置变化给节点平衡器235的实体。节点平衡器235然后考虑配置变化,并且采取与工作分配和内核部件平衡通知有关的适当行动。配置变化的例子包括增加或减少系统上处理器或者存储器的数目。
基于存储器亲合对线程分组为了允许对多于一个线程的共享数据的本地访问,本发明提供分组两个或更多线程到存储器亲合组(MAG)的优势。通过允许具有互相依赖的数据访问需要的线程在相同的节点上执行,从而实现可归于本地存储器访问的性能增益。在优选实施例中,线程单独或在任务的基础上放入MAG。如果在任务的基础上放入MAG,给定任务的所有线程全部放入相同的MAG。但是,本领域技术人员会知道存在替代选择。例如,可能会在两个级别上都指定MAG参与,一个指定优先于另一个。
在这里图3A到5用于描述本发明的存储器亲合分组方面。在优选实施例中,当正在执行的线程请求创建另一个线程时,发生MAG确定和逻辑节点分配。在这里图3A用于描述负责与请求线程直接相互作用的TCM 205的那部分。这个相互作用的结果最终导致线程创建,这在与图3B相关联的文字中描述。首先转向图3A,块300显示收到创建线程的请求。接下来,在块302,TCM 205确定是否线程创建请求指定是否希望参加MAG。在优选实施例中,对参加MAG的期望在TCM 205可以访问的持久线程创建属性(TCA)中指定。如果对这个线程希望参加MAG,那么TCM 205接下来确定是否TCA指定特定的MAG[块304]。在优选实施例中,通过使用MAG标识符(即,组ID)进行这个指定。如果在TCA内指定了组ID,TCM 205将满足这个请求,并且使用指定的组ID简单地创建线程[块308]。如果TCA还未使组ID被指定,将分配下一个可用的组ID给它(并且其后就是由TCA将使用的组)[块306]。
如果在块302,TCM 205确定没有请求参加MAG,那么TCM 205接下来将确定是否在TCA中已经指定“逻辑节点”的使用[块310]。在优选实施例中,不同于物理节点的逻辑节点用于允许请求线程指定给创建的线程指定相同或不同的本地节点。作为线程的实际本地节点的物理节点,对请求线程是隐藏的。这种方法具有这样的优势允许为请求者指定逻辑节点,同时保持满足使用具有不同标识符的物理节点的请求的灵活性。因此,逻辑节点的指定具有为线程指定本地节点的作用。
如果在块310已经指定使用逻辑节点,TCM 205确定是否TCA包括特定逻辑节点的指定[块312]。如果没有,TCM 205指定下一个可用的逻辑节点ID并将它存储在TCA中[块314]。最后,使用TCA中指定的逻辑节点ID或新指定的逻辑节点ID,TCM 205进行创建线程[块316]。现在返回到块310,如果TCM 205从TCA的检查确定未指定使用逻辑节点,那么TCM 205将在块318确定是否TCA包括参考线程的识别。参考线程是这样的线程其中,相对要创建的线程期望存储器亲合。在优选实施例中,通过在TCA中包括线程ID实现参考线程的指定。如果未指定参考线程ID,那么TCM 205创建没有逻辑节点或MAG ID的线程[块320]。这将具有允许TCM 205为被请求的线程选择本地节点的作用。
如果已经指定参考线程,那么接下来TCM 205将确定是否指定的参考线程已经与MAG相关联[块322]。如果是这样,TCM 205将提取参考线程的MAG ID[块324],并使用指定的MAG ID进行创建线程[块326]。如果在块322,TCM 205确定参考线程还未与MAG相关联,那么TCM 205确定是否参考线程具有指定给它的逻辑节点。如果是这样,TCM 205提取参考线程的逻辑节点[块330],并使用指定的逻辑节点创建线程[块332]。如果在块328,TCM 205确定事实上逻辑节点还未指定给参考线程,那么TCM 205将指定下一个可用的MAG ID[块334],并从参考线程提取本地节点[块336]。一旦这个实现,新的MAG被创建并被添加到MAG列表,参考线程也被添加到MAG[块338]。然后TCM 205使用指定的MAG ID创建线程[块340]。
图3B显示优选实施例的TCM 205中使用的实际执行线程创建的步骤。存在3个到图3B的逻辑的入口点。可以使用MAG ID作为输入[块354]、使用逻辑节点ID作为输入[块352]或者不指定MAG ID或逻辑节点ID创建线程[块350]。
如果TCM 205通过块350进入图3B的逻辑,TCM 205将进行为线程确定本地节点[块356]。如早先提到的,线程的本地节点是这样的节点只要可能,将在该节点上分派线程,并且在可能的地方为线程分配该节点的存储器。在进行本地节点确定中,系统考虑几个因素,包括当前的和期望的工作负载。在与图26-28相关联的文字中提供关于本地节点确定的具体细节。然后TCM205进行为线程创建内核线程结构[块372]。在优选实施例中,使用内核线程结构表示线程。因此,创建内核线程结构与创建线程同义。TCM 205接下来确定是否最近创建的线程是MAG的成员。在这部分说明中可用的假定是线程创建请求不包括MAG或逻辑节点ID的指定(见上面块350的讨论)。因此,判决块380和384的处理导致否,这使TCM 205结束块388中的处理。在这点,被请求的线程已经创建并被指定给本地节点。
如果TCM 205通过块352进入图3B的逻辑,那么TCM 205进行转换指定的逻辑节点为物理节点,那么它是线程的本地节点。在优选实施例中,使用确定性算法保持给定逻辑节点和给定物理节点间的一致相关性,并且映射可以是多对一的。但是,应该注意,可用使用其它映射方法。块372和380的处理与上面已经描述的相同。可是,在这种情况下,已经指定逻辑节点ID,这使TCM 205将线程标记为不可移动[块386],意味着它的本地节点不能改变(见下面的工作重新分配部分)。这样做可满足特定逻辑节点的请求线程的指定。
如果TCM 205通过块354进入图3B的逻辑,那么TCM 205将首先试图找到与组ID相关联的MAG[块360]。在优选实施例中,由组对象表示每个MAG,并且每个组对象包含组ID、MAG的本地节点和成员线程列表。将对象串到一起形成MAG列表。通过遍历(traverse)MAG列表,TCM 205确定是否发现组ID匹配[块362]。如果发现匹配[块362],那么在块372中创建内核线程结构之前,TCM 205为MAG从组对象提取本地节点[块364]。
现在返回到处理块362,如果在MAG列表中未发现匹配,那么TCM 205需要为要创建的线程和MAG确定本地节点。TCM 205在块370中进行为这个线程确定本地节点。(如上面提到的,在与图26-28相关联的文字中更详细地解释本地节点确定)。一旦确定了本地节点,TCM 205就创建新的MAG(即,组对象)并且在MAG中存储本地节点和组ID[块378],并且添加组对象到列表[块374]。然后使用添加到列表的新MAG,创建线程(即,内核线程结构)[块372]。
如上所述,一旦已经创建内核线程结构,TCM 205就确定是否刚创建的线程是MAG成员。这里,在这部分解释中,线程是MAG的成员。因此,TCM 205在块382中进行添加线程到MAG。在优选实施例中,这通过添加线程到用于MAG的线程列表实现。
图4显示优选实施例中使用的突出步骤,这些步骤在线程结束时处理MAG管理。当在优选实施例中线程结束时,如果它是MAG成员,它有责任从MAG去除它自己。因此,如果在块405,结束线程确定它不是MAG的一部分,那么正常的线程结束处理简单地继续[块417]。如果在块405,线程确定它是MAG成员,那么线程进行从MAG的线程列表去除它自己[块410]。如果结束线程不是MAG中的最后线程[块419],结束处理仅仅再次继续。但是,结束线程是MAG中的最后线程[块419],在块421中从MAG列表去除MAG。然后在正常结束处理在块417继续之前,MAG自己在块423消灭。
MAG管理的另一方面是在MAG的存在相当短暂的环境中(即,MAG来和去的环境),显露(surface)关于MAG的信息。图5显示优选实施例中使用的完成这个任务的步骤。当接收到信息请求时[块500],首先试图定位为其搜索信息的MAG[块505]。如果在MAG列表中未发现相关联的MAG,在块535通知请求者,然后在块530继续正常的处理。如果发现MAG,那么在块520提供被请求的信息。然后处理继续[块530]。
内核部件平衡通知本专利的这部分属于内核部件平衡通知。如上所述,优选实施例的机制操作于最好地平衡系统上的整个工作负载。与这个平衡相关联的是这样的需要通知其它内核部件(即,服务)对工作分配的改变,使得那些部件可以采取适当的步骤。为接收通知,部件必须使用节点平衡器235登记。节点平衡器235可以访问在图31中显示的部件登记处(registry)。优选实施例中使用的登记处逻辑上表现为链接的列表,每个元素包含部件名称、部件方法和到登记处中下一个元素的指针。建立部件方法,以在通知时由节点平衡器235调用。还应该注意,虽然优选实施例按照计入操作系统服务的内核服务操作,但本发明的应用不限于内核或操作系统服务,而是可应用于任何类型的部件或服务,它们可以从系统内工作分配改变的通知受益。
系统IPL开始,应该注意,虽然在系统IPL部分这里引入几个优选实施例概念,但很多这些概念的完整解释(即当前权重、转换权重、权重差分阈值和初始权重)直到讨论了整个环境才提供。当前权重、转换权重、权重差分概念在与图7-9相关联的文字中讨论,而初始权重概念和图26-28的论述一起讨论。采用这种方法,是因为通过即将到来的段落中提供的环境,可以得到越来越好的理解。
现在参考图6,每次引导系统时调用节点平衡器235,这可以在任何时间发生。节点平衡器235设置节点管理器状态(见图29A的2902)到“当前权重”[块605],并且初始化所有存储区域为零(见图29A-31的2904-3100)[块608]。节点平衡器235进行创建一组权重。这些在本地节点基础上创建的权重在优选实施例中用于管理系统上工作的分配。第一个创建的权重是所谓的目标权重。用于每个节点的目标权重表示对那个给定节点希望的工作份额。优选实施例的机制的目的是在整个系统内与不同目标权重成比例地分配工作。图6的块610参考描述目标权重计算的图10A。图10A在本专利的配置改变部分详细解释。
从图10A的逻辑返回之后,设置初始和当前权重2930和2906到目标权重[块625]。对每个节点,在当前KCBN组中,设置它的当前和转换权重等于目标权重(见图30的3015)[块635]。转换权重、当前权重和目标权重的相互影响在与图7-9相关联的文字中详细解释。初始权重属于本地节点指定,它在伴随图26-28的文字中描述。所有上面的处理必须在其余IPL处理之前发生[块640],它将包括由操作系统136分派线程和使本地节点能够移动。另外,它可以包括基于目标权重的操作系统/内核资源的节点分配。IPL处理在块645结束。
配置改变如将在随后的段落中更详细描述的,由对系统可用的处理器和存储器在节点基础上驱动目标权重。在那个特定系统提出(bring-up)期间,为每个系统建立目标权重。它们不改变除非/直到系统内发生配置改变。然后,这里请读者假定已经发生配置改变。这个改变由图7的块700表示。改变的细节对优选实施例的解释并不重要,但是这样的改变的例子可以是利用节点的两个处理器而不是三个重新配置系统。当节点平衡器235接收到配置改变的通知[块700]时,节点平衡器235进行得到当前权重的拷贝[块710]。
当前权重表示系统内工作的实际分配。图10C和10D上显示优选实施例中使用的获得当前权重的机制。图10C中采取的第一个步骤是当前权重标识符(CWID)的提取[块1048],接下来是当前权重间隔号(CWIN)的提取[块1049]。当前权重只对一个间隔有效,并且那之后它们期满,并且必须根据最近的间隔重新计算。CWID 2911包含当前权重对其有效的间隔号。如果CWID2911等于CWIN 2908,那么当前权重有效;如果否,那么当前权重已经期满并且必须重新计算。简要参考图29A,说明关于当前权重处理的信息。连同CWID 2911和CWIN 2908一起,说明当前权重调用计数(CWIC)2910和SET0和SET1。每组包括分派器约定百分比积累器(DCPA)和最近执行周期计数(RECC)。CWIC 2910用于确定何时CWI已经期满。DCPA信息属于优选实施例的工作重新分配和本地节点指定方面,因此与那个讨论一起描述。图29A上也显示当前权重2906和DCP 2907。当前权重2906用于优选实施例的这个方面-现在正在描述的KCBN逻辑,而DCP 2907用于优选实施例的工作重新分配和本地节点指定方面。
现在返回图10C,在块1049中提取CWIN 2908之后,节点平衡器235首先确定是否CWID 2911等于CWIN 2908。如果它们相等,那么节点平衡器235前进到图10D的块1061(这个处理随后在接下来的段落中描述)。如果它们不相等,那么节点平衡器235测试CWIN 2908,确定它是奇还是偶[块1050]。如果是奇,就从SET1提取RECC[块1051]和DCPA[块1054](见图29A),但是如果CWIN 2908是偶,就从SET0提取RECC[块1052]和DCPA[块1056]。如提到的,分派处理器230非常频繁地运行,并且在本地节点的基础上积累处理器执行周期作为它的部分功能。然后在每CWI的末尾,这些周期计数和DCP由监控器处理器225获得,并且在节点基础上存储在RECC和DCPA。监控器处理器225还增大CWIN,它在活跃与不活跃之间翻转组,并且反之亦然(这个在图11和14的讨论中详细描述)。然后节点平衡器235再次提取CWIN 2908[块1058],并且确定从上一次提取以来它是否已经改变[块1062]。因为正在提取当前RECC和DCPA时,CWI可能已期满,原子性是个问题。因此,这些步骤对确保从活跃组提取RECC和DCPA信息是必要的。如果CWIN 2908已经改变,那么重复上述过程(见图10D的块1062和1063),直到节点平衡器235确定CWIN 2908未改变。
现在移到图10D,当节点平衡器235确定CWIN 2908未从上一次提取改变[块1062]时,通过用于每个节点的RECC除以总的RECC,节点平衡器235为每个节点计算当前权重[块1064]。这产生由每个节点实际正在执行的当前工作的比例,因此它们表示每个本地节点承载的总的工作负载的实际份额。然后当前权重存储在图29的当前权重组2906,而DCP存储在图29的DCP组2907。一旦计算和存储了当前权重,就设置CWID 2911等于提取的CWIN。然后从当前权重组2906提取当前权重,以返回到图10C和10D的逻辑的调用者[块1066]。再次为了返回DCP到图10C和10D的逻辑的调用者,在块1070也从DCP 2907提取DCP。最后,在块1072中再次提取CWIN 2908,并且在块1074对上一次提取的版本进行测试。如果两个值不同,通过在图10C的块1057中继续,重复处理。
现在返回到图7,节点平衡器235接下来将确定新的目标权重[块715]。这里,自然假定由于配置改变,目标权重已经改变。在图10A的第一步[块1002],为每个节点确定系统内处理器的数目和存储器的数量。在优选实施例中,在系统提出期间,这个信息存储在基于节点的数据结构中(见图30的3015和3020)。请读者回忆优选实施例的节点可以具有零个或更多处理器。然后在块1004中确定整个系统的处理器的总数目和存储器的总数量。一旦确定节点的总数,将识别出目标权重的非活跃组(即,如果TWMN 2920是奇,就是SET0;如果TWMN 2920是偶,就是SET1)。非活跃组将用于计算一组新的目标权重(即,当它们改变时)。然后,当TWMN 2920增大时,它具有改变哪组活跃的作用。
一旦已经识别出目标权重的非活跃组,节点平衡器235接下来确定用专用还是共享处理器配置系统。如果系统是未分区的计算机装置,那么由定义它的处理器是专用的,因为没有可能与其共享的其它系统(如图1A中)。但是,逻辑分区的系统可以使用共享或者专用处理器。简要参考图1B,节点跨越多个分区的事实并不必然意味着各分区正共享节点上的存储器。给定节点上的处理器可以在多于一个分区间共享,或者各分区可以由一个或更多的专用处理器支持。具有专用处理器的分区单独使用那些处理器,直到如通知它配置改变的时候。具有共享处理器的分区可以动态地使用计算机装置上任何可用的处理器,而没有任何这样的通知。由配置管理器240使系统处理器的性质对节点平衡器235可用。如果系统使用共享处理器,就使非活跃组中用于每个节点的目标权重等于那个节点上系统可用存储器占跨越所有节点的系统可用存储器总量的比例[块1006]。然后在块1020中增大TWMN 2920,这具有改变非活跃目标权重组为活跃目标权重组的作用。
如果系统不使用共享处理器,[块1008],节点平衡器235就确定系统是否具有任何处理器和存储器两个都包含的节点[块1012]。确定没有(即,没有处理器和存储器两个都包含的节点)不是典型的,但是可能的。例如,可能配置优选实施例的计算机系统100的分区,以具有包含若干处理器且没有存储器的节点,以及包含存储器且没有处理器的其它节点。如果确实是这种情况,节点平衡器235设置用于非活跃目标权重组中每个节点的目标权重等于那个节点上的处理器占跨越所有节点的系统可用的处理器总数的比例,使得没有处理器的节点将零作为它们的目标权重[块1016]。然后在块1020增大TWMN 2920,这(再次)具有改变非活跃目标权重组为活跃目标权重组的作用[块1020]。
如果在块1012,节点平衡器235确定至少一个节点具有结合一些存储器的至少一个处理器,那么节点平衡器235接下来将确定位于节点上的处理器总数,该节点具有至少一个处理器和若干存储器[块1014]。然后更新目标权重的非活跃组,使得用于具有至少一个处理器和若干存储器的节点的目标权重被设置为它们各自的处理器占前述处理器总数的比例[块1018]。非活跃组内用于没有处理器或存储器的节点的目标权重设置为零[块1022]。然后在块1020增大TWMN 2920,这(再次)具有改变非活跃目标权重组为活跃目标权重组的作用[块1020]。
不管通过图10A的流程图采取的路径,节点平衡器235将最终复制目标权重、处理器数目和存储器数量到用于每个节点的节点锚(anchor)结构中[块1024]。如将在随后的段落中描述的,这样做使能有意义的内核部件平衡通知。图30显示优选实施例中使用的节点锚结构。每个节点锚结构包括标识符 、当前权重、处理器和存储器 ,以及先前的权重、处理器和存储器 。在节点锚结构3000中也显示一系列资源锚。这些锚由登记的部件使用,以存储资源或到资源的指针,该资源或到资源的指针由登记的部件根据整个系统的工作分配在节点的基础上分配。此后面的概念将在随后的段落中将更详细地解释。
现在返回到图7,节点平衡器235然后计算当前权重和目标权重之间的权重差分[块730]。差分是用于每个节点的差别的绝对值的和。节点平衡器235处理在图8的块800继续。权重差分阈值(WDT)设置为刚计算的差分的3/4。图29B显示WDT 2924。WDT在适当的位置识别事实实际的工作分配可能与新的希望的工作分配显著不同。在系统将行动以调整当前工作分配(如由当前权重表示的)以接近目标权重时,这样做可能花费相当多时间。因此,对登记的内核部件,根据新的目标权重,简单地重新调整它们的资源可能是不恰当的。因此,WDT与所谓的转换权重一起使用,以提供登记的部件而有更逐步调整它们的资源的机会。如将讨论的,在当前权重和目标权重间设置转换权重,以为登记的部件提供中间平衡点。在优选实施例中使用WDT,以确定何时当前和目标权重间的差别足够大到准许使用转换权重。如将在接下来的讨论中所见,优选实施例的WDT可以是与权重差分的3/4同样大到与值1/64(.015625)同样小。
设置WDT 2924到差分的3/4后,节点平衡器235确定是否差分小于1/32[块805]。如果否,节点平衡器235从差分减去1/32,并且确定是否结果小于WDT 2924。如果结果小于WDT 2924,WDT 2924复位到比差分小1/32。不管块805中测试的结果,节点平衡器235最终确定是否WDT 2924是1/64或更小[块820]。如果WDT 2924是1/64或更小,不准许使用转换权重,这样设置WDT 2924到零,并且使当前组中的KCBN转换权重(3015)等于目标权重。如果节点平衡器235在块820确定WDT 2924大于或等于1/64,节点平衡器235设置KCBN转换权重的当前组(3015)到当前权重和(新的)目标权重间的值。在优选实施例中,这根据下面的公式完成。
转换=目标+(当前-目标)*WDT/权重差分然后,节点平衡器235的处理在图9的块900继续进行。在那里设置KCBN当前权重的当前组(3015)到当前权重。然后调用为每个登记部件指定的内核部件方法(见图31)(3105)[块905]。
被调用后(见图9的块905),内核部件方法可以访问存储在每个节点上的KCBN信息。当前、转换和目标权重以及那些权重的先前值的拷贝对被调用的方法可用。当前和先前处理器的数目和存储器的数量也对被调用的方法可用。所有这些信息在适当的位置,允许被调用的方法确定如何最好地利用它的资源。可以利用上述通知服务的内核部件的例子是集成文件系统(IFS)。文件系统通常将利用预创建线程组处理不同的功能。例如,IFS可以具有一组执行硬盘驱动器(HDD)读的线程,以及另一组执行HDD写的线程。为最好地利用这些线程,IFS将使用优选实施例,以与工作分配一致的方式最好地分配线程。如果调用时,与通过考虑起作用的KCBN权重确定的IFS相关联的内核部件方法正从第一个节点移动到第二个,该方法将消灭第一个节点上它的一些或全部预创建线程,并且在第二个上创建一些。然后KCBN信息的当前组已经复制到KCBN信息的先前组之后,对内核部件平衡通知的配置改变方面的处理结束。
转换权重重新计算本专利的先前部分是关于配置改变发生时,优选实施例中如何计算和设置转换权重。通过所描述的,本专利的这部分是关于如何周期性地重新计算转换权重,以通过周期性的通知提供逐步的重新平衡。图11-14显示优选实施例的监控器处理器225中使用的步骤。如上面提到的,优选实施例的监控器处理器225每秒执行一次,并且它具有属于优选实施例的不同方面的功能。但是,为了这个特定的讨论(即转换权重重新计算),只有这些方面的某些是令人感兴趣的。因此,只研究某些图和处理块而跳过其它,以利于随后段落中的处理。图11上,处理块1105-1114属于优选实施例的其它方面。在图11的块1116中,监控器处理器225增大当前权重调用计数(CWIC),并且因为监控器处理器225每秒执行,CWIC每秒增大。(CWIC 2910在图29A上显示。)接下来监控器处理器225确定对于该间隔是否已经达到最大调用计数[块1120]。在优选实施例中,最大调用计数是7。计数7发信号通知当前权重间隔的结束。
在图14上显示完成的当前权重间隔的监控器处理器225处理。在步骤1405,归一化非活跃组中的DCP积累(见图29A的DCPA组2912和2916)。(上面通过检查CWIN 2908,确定哪个DCPA组是活跃的确定,奇CWIN 2908是SET0,而偶CWIN 2908是SET1。)在优选实施例中,通过积累除以间隔中的调用数(即7)处理这个归一化。这里应该注意,图14上显示的某些步骤(即块1405和1435)不属于内核部件平衡通知。但是,这里讨论这个材料是因为当前权重间隔结束时执行这些步骤。
监控器处理器225接下来提取由分派处理器230收集的当前权重周期计数[块1410]。在优选实施例中,这些计数在本地节点基础上存储于基于处理器的数据结构中(未显示)。然后,监控器处理器225从刚刚得到的周期计数减去先前存储的非活跃组中的周期计数(见图29A的RECC),达到期满CWI期间用于每个本地节点的执行的周期数。然后,这个结果存储回非活跃组中,代替先前的值[块1415]。在块1420中,从活跃组提取RECC,除以2,然后添加到非活跃组中的值(在节点基础上)。这产生在优选实施例中被视为最近执行的周期计数的值。
然后,在块1425中增大CWIN 2908,将非活跃组(即具有最近计数的组)转换为活跃组。然后,在块1430中设置CWIC 2910到零,作为到新的CWI的开始。然后,监控器处理器225存储在块1410中收集的计数到新转换的非活跃组,为这些相同计算构成基础(即,在下一个CWI的结束时)[块1440]。然后,在块1450相对零测试WDT 2924。非零WDT和当前权重间隔的结束的结合发信号通知这样的需要确定是否需要重新计算转换权重。图15和8概述优选实施例中使用的转换权重重新计算步骤。首先参考图15,在块1500中得到目标权重。
在优选实施例中,用于获得目标权重的机制由图10B表示。在图10B的块1030中,提取目标权重修改数(TWMN)。现在参考图29A,显示目标权重组2922和目标权重修改数(TWMN)2920。如所示,优选实施例中使用两组目标权重(SET0和SET1)。TWMN 2920用于确定哪个组是活跃组和哪个组是非活跃组。如果TWMN 2920是奇数,SET1是活跃组而SET0是非活跃组。如果TWMN 2920是偶数,SET0是活跃组而SET1是非活跃组。然后,节点平衡器235测试TWMN 2920,确定它是奇还是偶[块1032]。如果TWMN2920是偶,从SET0提取用于每个节点的目标权重[块1034],但是如果TWMN2920是奇,从SET1提取用于每个节点的目标权重[块1036]。然后,在块1038中再次提取TWMN 2920,并且在块1040测试变化。如果TWMN 2920未改变,先前提取的目标权重组在块1042被返回。如果TWMN 2920已经改变,重复测试奇/偶、组提取和变化测试的步骤,直到发现TWMN 2920未改变。发现TWMN 2920处于未改变状态的要求是为了原子性目的。本专利的重新平衡工作和本地节点指定部分概括这样的实例节点平衡器235正在检索目标权重值,同时TWMN 2920可能正在增大。
现在返回到图15,在块1505得到当前权重。对于有关优选实施例中得到当前权重使用的步骤的细节,请参考前面图10C的讨论。然后,计算当前权重和目标权重间的权重差分。如前面所述,差分是用于每个节点的权重差别的绝对值的和。然后,相对WDT 2924测试此差分。如果差分大于WDT2924,不需要重新计算转换权重。但是,如果差分小于或等于WDT 2924,使用与图8和9相关联的上述处理重新计算转换权重。对于更多信息,请参考那些图的描述。
本地节点指定简要地返回图2,优选实施例中使用TCM 205创建可执行线程,以及必要的线程控制结构。创建过程的一部分是指定本地节点给这些可执行线程。本地节点指定重要,是因为可能时TDM 215偏爱执行它们的指定本地节点上的线程,并且可能时TMM 217偏爱在它们的指定本地节点上为线程分配存储器。这种偏爱意味属于整个系统利用和资源分配。在优选实施例中,指定本地节点给线程意味着系统将优先执行它的本地节点上的线程并分配它的本地节点上的存储器。在这里这称为节点亲合。自然,如果只用一个处理器配置特定节点,这个亲合变为处理器亲合。另外,本领域技术人员将知道本发明不限于由优选实施例提供的特定类型的亲合。例如,实际上要求总在它的本地节点上执行线程的紧密亲合也将属于本发明的精神和范围。
如上面讨论的,优选实施例中使用目标权重特征化整个系统希望的工作分配。当前权重用于特征化整个系统当前的工作分配。如果每个线程做相同数量的工作,为新线程确定本地节点将是很直接的。即,根据保持分配给每个节点的现存线程数目与目标权重成相同比例,将简单地指定本地节点。虽然事实是不同线程做不同数量的工作,并且不可能提早知道线程将做多少工作。因此,优选实施例根据目标权重和当前权重创建初始权重并指定本地节点,以便保持分配给每个的线程数目与初始权重成相同比例。当前权重超过目标权重的节点使它的初始权重设置得比它的目标权重略小(即,因为它已经具有多于它的工作负载份额),以及当前权重低于其目标权重的节点使它的初始权重设置得比它的目标权重略大(即,因为它现在具有少于它的工作负载份额)。当为每个节点计算初始权重时,系统越忙,当前权重被给予越大的影响。
图26显示本地节点指定的高级步骤。TCM 205在处理块2605中为每个节点获得初始权重。图27和28概括在优选实施例中这个过程如何工作。现在参考图27,TCM 205首先在块2705中提取初始权重标识符(IWID)。图29B显示IWID 2928和初始权重2930。然后,TCM 205在块2715确定是否IWID匹配CWIN之前,在块2710中提取CWIN 2908。如果IWID不匹配CWIN,TCM 205前进到图28的块2800,计算新的初始权重,因为现存的初始权重过期了。
当前权重和CWID以及DCP在块2805中一起获得。请参考上面图10C的用于解释这些步骤的描述。然后,将在块2710中提取的CWIN的值设置为块2810中的CWID,使得它表示与当前权重相关联的间隔号。然后在块2815中得到目标权重。请参考上面图10B的用于解释这些步骤的描述。
以块2820中的第一个节点开始,TCM 205现在开始结合目标和当前权重,为每个节点产生初始权重。在目标和当前权重的结合中,对给定节点,DCP越高,在为那个节点产生的初始权重中当前权重将具有越大的影响。
结合权重的第一部分是计算将控制当前权重的影响的乘数。如果DCP是75%或更小[块2825],通过在块2850中设置乘数等于DCP的立方除以75%的平方,当前权重的影响将被抑制。否则如果DCP小于100%[块2835],通过在块2855中设置乘数等于100%减去((100%减去DCP的立方)除以(25%的平方)),当前权重的影响将被扩大。否则,如果DCP是100%或更大[块2835],通过在块2840中设置乘数等于100%,当前权重的影响将被最大化。不管采取的路径,乘数将在0到100%的范围内,并在下面的第二部分使用。
结合权重的第二部分是根据允许当前权重具有的影响大小计算除数,当前权重比目标权重小时,该除数将允许初始权重比目标权重大,而当前权重比目标权重大时,该除数将允许初始权重比目标权重小。TCM 205在块2860中计算除数为目标权重加上((当前权重减去目标权重)乘以乘数)。然后,产生的除数将依赖于乘数,在目标权重和当前权重之间的范围变化,并且在下面的第三部分使用。
第三部分是通过目标权重的平方除以除数,计算未归一化的初始权重[块2875]。这将具有这样的作用当前权重更小时,使初始权重更大,并且反之亦然。为了避免潜在的被零除,TCM 205检查除数为零[块2870],并且如果它是零,它就在块2865简单地设置初始权重等于目标权重。然后,TCM 205检查是否有更多的节点要处理[块2890],并且如果是这样,它对每个剩余的节点重复上面的处理。当TCM 205确定已经考虑了所有节点时,它前进到图27的块2750。通过连接块2750返回到图27的逻辑之后,TCM 205归一化未归一化的初始权重,并且在初始权重2930中存储它们[块2745]。在优选实施例中,通过对所有节点每个权重除以所有初始权重的和,归一化初始权重。然后,在块2735中设置IWID到CWID,以指定其间初始权重有效的当前权重间隔。
当前描述的执行路径和来自块2715的是分支(见上面的描述)在块2725会聚。在那里,TCM提取初始权重,然后再次进行提取CWIN。如果新提取的CWIN不同于先前提取的CWIN,那么初始权重过期,并且先前描述的初始权重计算步骤随图28的块2805重新开始。如果新提取的CWIN与先前提取的CWIN相同,提取的初始权重是最新的,并返回到图26的逻辑。
现在返回到图26的块2610,TCM 205为每个节点确定当前存在的线程数。在优选实施例中,通过创建线程时增大计数器,消灭线程时减小它,内核服务137在节点基础上跟踪现存线程。然后,通过对计数器求和确定线程的总数[块2615]。然后在块2620,在节点基础上确定线程的目标数。在优选实施例中,这通过线程总数乘以每个节点的初始权重完成。具有实际线程和目标线程间最大短缺(short fall)的节点是为刚创建的线程选择作为本地的节点[块2622]。
工作重新分配概览上面我们讨论了本发明的优选实施例如何能够检测系统内的工作不平衡并进行适当的调整。在优选实施例中,这通过监控器处理器225、分派处理器230和节点平衡器235之间的一系列状态驱动的相互作用而实现。为了工作重新分配而在优选实施例中使用的状态称为观察平衡、记录周期和移动线程。由系统管理员设置观察平衡状态,它是起点。因此,系统管理员使系统能够确定是否存在工作平衡问题。当状态设置为观察平衡时,监控器处理器225跟踪在这里称为观察平衡间隔(OBI)的53(53)秒时段。一定数目的间隔已经过去之后,在优选实施例的情况下是6个,监控器处理器225通知节点平衡器235。
当节点平衡器235醒来时,它注意到状态被设置为观察平衡。通过对系统是否不平衡进行高级分析,节点平衡器235进行响应。虽然在随后的段落中更详细地解释这个确定,这里应该注意,运行非常频繁的分派处理器230正在跟踪在本地节点基础上执行的周期数。这个原始周期数由节点平衡器235使用,作出它的高级平衡确定。当节点平衡器235确定系统的工作负载可能不平衡时,它设置状态到记录周期,并因此通知监控器处理器225。
然后,监控器处理器225认识到状态已经变到记录周期,并且经过单个记录周期间隔的跟踪之后,设置状态到移动线程并通知节点平衡器235。同时分派处理器230认识到状态已经由节点平衡器235设置为记录周期。通过在线程基础上和本地节点基础上收集周期数据,分派处理器230进行响应。当它随后确定状态已经变到不同于记录周期的某状态时,分派处理器230在线程基础上停止收集周期数据。
当节点平衡器235从监控器处理器225接收到前述的通知时,它进行对由分派处理器230收集的基于线程的数据进行较低级分析。节点平衡器235然后双重检查系统的平衡/不平衡状态,并且在未恰当地平衡系统的工作负载的情况下,使用基于线程的数据确定移动哪些线程。如果节点平衡器235确定系统的工作负载未平衡,它进行在节点间移动线程,以更恰当地平衡系统的工作负载。最后,节点平衡器235将状态设置回观察平衡,以重新开始处理。
观察平衡状态中的分派处理器230刚提到的事实是当处于观察平衡状态时,分派处理器230保存在本地节点基础上执行的周期数的原始计数。在图16A上显示这个逻辑。在图16A上显示分派处理器230内与本发明的优选实施例有关的步骤。本领域技术人员知道存在其它无关线程分派处理。在块1600中,分派处理器230获得用于将要被分派的线程的本地节点ID。然后,在块1605中获得上次执行这个特定线程消耗的周期。然后,在本地节点基础上添加消耗的周期计数到当前权重周期计数累加器。这个由分派处理器230保存的计数存储在基于处理器的数据结构中(未显示)。然后,分派器230确定它是处于观察平衡状态还是超出(beyond)。如果是这样,添加上述消耗的周期到观察平衡周期计数累加器,它是另一个由分派处理器230维护的基于处理器的数据存储(未显示)。然后分派处理器230确定是否它处于记录周期状态[块1645]。因为这里我们处于观察平衡状态,分派处理器230简单地在块1640返回,在块1640发生剩余的线程分派处理。下面关于记录周期状态描述图16B的逻辑。
观察平衡状态中的监控器处理器225关于内核部件平衡通知,先前讨论了图11。在那个讨论期间,提到这些处理块的(即,监控器处理器225的)某些属于工作重新分配。现在将描述这些块。在块1105中,获得当前分派器约定百分比。在优选实施例中,这些通过对本发明的好处和优势不重要的系统接口获得,因此在这里不进一步描述。百分比表示在节点基础上系统活动性水平的指示。象RECC,通过检查CWIN 2908识别非活跃组(见图29A的DCPA组2912和2916)[块1110]。如果CWIN 2908是奇,添加DCP到SET0中的DCPA;如果CWIN 2908是偶,添加DCP到SET1中的DCPA。监控器处理器225然后确定是否CWIC 2910已经达到它的最大值[块1120]。如果已经达到最大值,监控器处理器225进行处理完成的当前权重间隔。这个处理前面参考图14已经描述(见上面)。这里请读者假定完成的当前权重间隔处理没有争议。因此,监控器处理器225将确定当前状态是观察平衡还是超出[块1122]。
这里当前状态是观察平衡,所以监控器处理器225移动到图12的块1205。在那里,监控器处理器225计算到最旧的保存区域的索引(见图29B,保存区域SA0-SAN,2932-2936)。在优选实施例中,这个计算包括图29B的提取观察间隔号(OIN)2950和将OIN 2950除以保存区域数(即N+1),然后使用产生的余数作为索引。然后,监控器处理器225在节点基础上添加DCP到最旧的保存区域的DCPA[块1210]。然后,增大最旧的保存区域的调用计数(IC)[块1215]。然后,监控器处理器225确定是否已经达到最大调用计数[块1220]。如果是这样,那么观察间隔已经完成,这要求处理。在图17中显示这个处理。如果观察间隔未完成,在图13处理继续。
首先转向图17,监控器处理器225首先从分派处理器230获得观察平衡周期计数,并且在节点基础上存储它们到第二旧的保存区域[块1700]。(再次见图29B,保存区域SA0-SAN,2932-2936。)这些值最后将变为基础,用于下一个观察间隔中执行的周期数。然后,在块1705中,监控器处理器225将在刚完成的观察间隔中计算执行的周期。在优选实施例中,这是通过从块1700中获得的计数减去最旧的保存区域中的周期计数而完成的,这是用于刚完成的观察间隔的基础。然后,这个计算的结果存储回最旧的保存区域中。在块1710中,监控器处理器225设置第二旧的保存区域的DCPA到零。这是为准备用于下一个观察间隔的积累而进行的。然后,监控器处理器225设置用于第二旧的保存区域的调用计数到零,再次准备下一个间隔的积累[块1715]。然后增大OIN 2950,它具有原子地改变最旧的保存区域为最新的以及第二旧的为最旧的作用[块1720]。
在块1725中,监控器处理器225确定是否OIN 2950已经达到观察平衡阈值。在优选实施例中使用这个值确定何时节点平衡器235应该从工作负载的观点检查系统的节点是否平衡。在优选实施例中,这个值是6(6)。如果未达到观察平衡阈值,监控器处理器225返回到块1740中图12的逻辑。如果已经达到观察平衡阈值,监控器处理器225确定是否当前状态是观察平衡(见图29A的节点管理器状态2902)。如果当前状态不是观察平衡,监控器处理器225返回到块1740中图12的逻辑。这里状态是观察平衡,所以返回到图12的逻辑之前,监控器处理器225通知节点平衡器235对正在由系统执行的工作是否在系统的节点间适当地平衡进行高级确定[块1740]。这个逻辑连同图18一起描述。
观察平衡状态中的节点平衡器235现在转向图18,节点平衡器235进行对6个最近的保存区域的调用计数求和[块1800]。然后,节点平衡器235为每个节点计算平均DCP[块1805]。在优选实施例中,这通过首先在节点基础上对来自最近的6个保存区域的DCPA求和完成。然后,用于每个节点的总和除以调用计数的和(即,块1800中确定的值)。结果是用于每个节点的平均DCP。然后,对6个最近的保存区域,节点平衡器235在节点基础上对观察平衡周期计数求和[块1810]。(见图29B,周期计数和保存区域SA0-SAN,2932-2936。)然后,在块1815中确定系统总数。在图19上,用于做平衡/不平衡判决的步骤继续。图19的逻辑由节点平衡器235为每个节点使用一次。每次使用图19的逻辑时,考虑下面的输入1)用于系统的总的周期计数,2)用于被考虑节点的DCP,3)节点的目标权重(见图10B和相关联的用于解释如何计算目标权重的文字),和4)用于特定节点的周期计数。
现在移到图19,节点平衡器235在块1900中进行计算目标周期计数。在优选实施例中,这通过跨越所有节点执行的总的周期乘以特定节点的目标权重而完成。结果是用于待裁决节点的目标周期计数。然后,从节点的周期计数减去目标周期计数[块1910]。
在优选实施例中,使用目标周期计数的1/32作为容差,使得如果实际周期计数在目标周期计数的1/32内,可以说节点平衡,即使它可能略微不平衡。可以在处理块对1905/1920和1915/1925的逻辑中看到这个容差的应用。如果实际周期计数只略微比目标周期计数小[块1905和1920],就返回结果零[块1935]。结果零指示对特定节点未看到不平衡。类似地,如果实际周期计数只略微比目标周期计数大[块1915和1925],就返回结果零[块1935]。自然,如果块1910的计算结果为零,就在块1935返回零。如果实际周期计数和目标周期间的差别比略低大,那么图19的逻辑将返回实际和目标周期计数间的差别为负数[块1930],这指示特定节点能够承担而不超过它的合理的比例的额外工作的量。如果实际周期计数和目标周期间的差别比略高大,那么图19的逻辑将测试是否用于特定节点的DCP大于75%。周期计数的超额和大于75%的DCP指示节点具有大于它的合理的工作份额,并且事实上受到超额的困扰。当发现是这个情况时,图19的逻辑将返回实际周期和目标周期计数间的差别为正数[块1945],这指示应该从待裁决的节点去除的工作量。如果在块1940中,图19的逻辑确定尽管周期计数超额,但特定节点的DCP不超过75%,那么不将节点处理为过度工作[块1935]。
回想图19的逻辑用于每个节点,并且现在返回到图18,假定已经考虑所有节点,如果图19的逻辑的结果显示没有工作的不平衡(即,工作在整个系统被适当地分配),那么节点平衡器235简单地在块1840中结束执行。但是,如果逻辑显示不平衡(即,至少一个节点有太多的工作,并且至少一个节点有太少的工作),那么节点平衡器235前进到块1830,在那里初始化记录状态值。如下初始化1)增大图29C的记录周期Id 2940,2)在本地节点基础上设置周期计数2948到零,3)设置记录周期调用计数2942到零,4)设置用于每个节点的DCPA 2948到零。然后,节点平衡器235在块1840中结束执行之前,设置节点管理器状态2902到记录周期[块1825]。
记录周期状态中的分派处理器状态现在已经由节点平衡器235设置为记录周期(见上面),这样,下一次线程被分派时,分派处理器230的处理块1645将评估为是。因此,接下来分派处理器230将确定是否线程的本地节点是可移动的[图16B的块1609]。如果否,返回到图16A的逻辑之前,在块1660中,分派处理器230简单地增大记录周期周期累加器。如果是这样,分派处理器230确定是否记录周期ID匹配[块1610]。通过比较保存在线程控制结构(未显示)中的记录周期ID和图29C的记录周期ID 2940,作出这个判决。如果ID匹配,分派处理器230添加计数的原始周期到已经存储在线程结构(未显示)中的现存总数[块1655]。当ID不匹配时,用于当前周期的原始周期计数还未被存储这个特定线程的控制结构,所以设置线程控制结构中的记录周期ID到存储于记录周期ID 2940中的值[块1650],并且设置周期计数等于最近执行的周期[块1665]。这是在块1605中确定的值。不管处理块1610如何评估,记录的周期的本地节点总数也在块1660中增大。
记录周期状态中的监控器处理器225现在返回到图13继续,下一次监控器处理器225执行处理块1305将评估为是,因为状态2902现在由节点平衡器235设置为记录周期。监控器处理器225添加DCP到记录状态DCPA(见图29C的2948的DCPA)[块1310]。然后,在块1315中增大记录周期IC 2942。然后,监控器处理器225测试记录周期IC 2942,以确定是否已经达到最大值。在优选实施例中最大值是53。如果未达到最大值,监控器处理器225简单地在块1340退出。如果在块1320中,监控器处理器225确定已经达到最大值,它进行从分派处理器230得到记录的周期计数,并且在周期计数存储区域2948中存储它们。然后,监控器处理器225在块1335中设置状态来移动线程,并且它在块1340中退出前,在块1330中通知节点平衡器235移动线程。
移动线程状态中的节点平衡器235在这里使用图20描述优选实施例内的线程移动。节点平衡器235首先计算每个节点的平均DCP[块2000]。在优选实施例中,这通过2948的DCPA中保存的值除以周期(即,记录周期IC 2942)中间隔的总数完成。然后,节点平衡器235对2948的累积周期计数求和,它在记录周期期间产生用于系统的总数[块2005]。
接下来,节点平衡器235确定在记录周期上工作是否在整个系统公平地分配。在优选实施例中,这通过图19上显示的逻辑完成。如读者可以回想起的,上面描述了图19,并且这里将不重复细节。但是,回想图19的逻辑用于每个节点,并且现在返回到图20,假定已经考虑所有节点,如果图19的逻辑的结果显示没有工作的不平衡(即,工作在整个系统被适当地分配),节点平衡器235在块2035中简单地设置状态到观察平衡,并且在块2040中结束执行。但是,如果图19的逻辑显示不平衡(即,至少一个节点有太多的工作,并且至少一个节点有太少的工作,以及在观察平衡状态中观察到相同的节点分别有太多的工作和太少的工作),节点平衡器235前进到块2020,在那里确定要移动的周期数。请读者首先回想在块2010中识别周期上短缺的节点和具有过多周期的节点。然后,由节点平衡器235设置要移动的周期数到最大的超额和最大的短缺中较小值的1/2。然后,节点平衡器235在这个基础上移动线程。
图21A到23显示优选实施例中执行这个任务使用的节点平衡器235逻辑。最初,在块2100中,创建空的列表。这个列表最后将保存线程,该线程是要移动的候选者。然后,在块2105中,节点平衡器235从由系统维护的线程列表中选择第一个(或下一个)线程。然后,节点平衡器235确定是否线程具有与它相关联的当前记录周期ID[块2110]。如果否,节点平衡器235确定是否有更多的线程要考虑[块2111],并且如果是这样,就前进到选择的下一个线程[块2105],并且再次确定是否当前记录周期ID与它相关联[块2110]。图21B显示用于处理具有当前记录周期ID的线程的逻辑。节点平衡器235首先在块2120中确定是否用于待裁决的线程的本地节点是先前已经确定具有超额周期的节点。如果否,处理在图21A的块2111中继续,如已经描述的。如果待裁决的线程的本地节点确实是具有超额周期的节点,节点平衡器235确定是否特定线程是MAG的成员,其中要求组的所有线程具有相同的本地节点[块2125]。如果否,节点平衡器235提取由这个线程记录的周期[块2130]。然后,节点平衡器235添加这个线程到候选者列表,根据它的记录周期的数目给它排位(最多的位于第一)。然后,节点平衡器235在图21A的块2111中继续处理。
如果在图21B的块2125中,节点平衡器235确定待裁决的线程确实是组的一部分,节点平衡器235确定是否该组是在这个记录周期期间以前已经遇到过的组[块2140]。如果是这样,处理在图21A的块2111中继续。如果否,节点平衡器235为组计算总的周期计数(即,组的线程的记录的周期的和)[块2145],然后,根据用于组的总的周期计数,添加组到移动候选者列表[块2150]。一旦这完成,处理就在图21A的块2111中继续。
当已经考虑了所有线程时,处理块2111评估为否,并且节点平衡器235进行实际移动线程,以重新平衡系统。图22上显示优选实施例中完成这个任务使用的逻辑。在块2200中,节点平衡器235在候选者列表中选择第一个(下一个)线程或MAG。假定还未到达列表的结尾[块2205],节点平衡器235确定是否待裁决的线程或MAG具有比有必要移动的更多或更少的周期(见处理块2020和相关联的文字)[块2215]。如果线程或MAG消耗比要求的更多的周期,节点平衡器235简单地在块2200中继续处理。如果否,节点平衡器235确定正在考虑的是线程还是组[块2225]。如果它是线程,节点平衡器235前进到图23的逻辑。如果它是组,为组中的每个线程进行利用图23的逻辑之前,在块2230中改变用于组的本地节点。
现在转向图23,节点平衡器235改变用于待裁决的线程的本地节点[块2300]。只要特定线程保持这个特定本地节点,TDM 215将试图并分派它以在它的新的本地节点上执行,并且TMM 217将在它的新的本地节点上为它试图获得存储器。最后,在块2305中,节点平衡器235将重新构成与线程相关联的重要的存储器页。在优选实施例中,其完成是通过使旧的本地节点上的页暂时不可用,复制那些页到新的本地节点上,并使那些页在新的本地节点上可用。现在返回到图22,每次移动线程或线程的组到新的本地节点时,由移动的周期减少要移动的周期[块2240]。然后,处理在块2200中继续,直到已经考虑所有线程。当已经考虑了所有线程时,处理块2205评估为是,使节点平衡器235重新初始化OIN。通过提取节点的周期计数并将它们存储在最旧的保存区域中,节点平衡器235也为下一个观察间隔创建基础[块2210]。这些初始化具有这样的作用使下一个观察间隔完全重新开始,使得考虑进一步的平衡前,观察至少6个间隔。
执行初始化之后,节点平衡器235返回到图20的块2035,在那里,在块2040中结束处理之前,它设置状态到观察平衡。
在本专利文件的工作重新分配部分的开始,我们指出状态开始由系统管理员设置为观察平衡。这是必要的,因为如使用者可以回想起的,节点管理器状态2902在IPL期间设置为当前权重(见图6的块605)。图24和25分别显示系统和系统管理员间的交互,以使本地节点能够移动(即,重新平衡)和禁止本地节点移动。在优选实施例中,系统管理员通过用户接口150和计算机系统100交互。在那里系统管理员能够输入命令,该命令指示节点管理器220设置它自己到观察平衡状态,从而使本地节点能够移动。在图24的块2400中,节点管理器220确定是否它已经处于观察平衡或超出状态。如果是这样,节点管理器220简单地通知系统管理员(通过用户接口150)已经使本地节点能够移动[块2045]。如果节点管理器220不处于观察平衡状态,节点管理器220就初始化OIN,如在与图22的块2210相关联的文字中描述的。那么在返回前,在块2415中节点管理器220设置它的状态到观察平衡。
系统管理员也能够输入命令,该命令指示节点管理器220设置它自己到当前权重状态,从而禁止本地节点移动。在图25的块2500中,节点管理器220确定是否它已经处于当前权重状态。如果是这样,节点管理器220简单地通知系统管理员(通过用户接口150)已经禁止本地节点移动[块2505]。如果节点管理器220不处于当前权重状态,那么在返回前,在块2510中节点管理器220设置它的状态到当前权重。
在这里介绍提出的实施例和例子,是为了最好地解释本发明和它的实际应用,从而使本领域技术人员能够实施和使用发明。但是,本领域技术人员将认识到,介绍前面的描述和例子只是为了说明和示例。如提出的描述并不意味是详尽的,或者限制本发明为公开的精确形式。根据上面的教导,在不背离权利要求的精神和范围时,很多修改和变化是可能的。
权利要求
1.一种计算机装置,所述计算机装置包含第一处理器,具有与其相关联的第一存储器;第二处理器和与其相关联的第二存储器;服务提供者,用于提供至少一个服务给在所述第一和第二处理器上执行的各实体;以及工作负载管理装置,它确定由所述第一处理器和由所述第二处理器经受的各工作负载,所述工作负载管理器通知所述服务提供者所述各工作负载,从而允许所述服务提供者根据所述各工作负载调整服务提供者资源。
2.根据权利要求1所述的计算机装置,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点。
3.根据权利要求1所述的计算机装置,其中所述各工作负载是各自希望的工作负载。
4.根据权利要求1所述的计算机装置,其中所述各工作负载是各自当前的工作负载。
5.根据权利要求1所述的计算机装置,其中所述各工作负载是各自希望的工作负载和各自当前的工作负载。
6.根据权利要求3所述的计算机装置,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点,并且其中所述各希望的工作负载由用于所述第一节点的第一目标权重和用于所述第二节点的第二目标权重表示。
7.根据权利要求4所述的计算机装置,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点,并且其中所述各当前的工作负载由用于所述第一节点的当前权重和用于所述第二节点的第二当前权重表示。
8.根据权利要求5所述的计算机装置,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点,并且其中所述各希望的工作负载由所述第一节点上的第一目标权重和所述第二节点上的第二目标权重表示,并且其中所述各当前的工作负载由用于所述第一节点的当前权重和用于所述第二节点的第二当前权重表示。
9.一种计算机装置,所述计算机装置包含第一处理器,具有与其相关联的第一存储器;第二处理器和与其相关联的第二存储器;服务提供者,用于提供至少一个服务给在所述第一和第二处理器上执行的各实体;以及工作负载管理装置,它确定由所述第一处理器和由所述第二处理器经受的各希望的工作负载,以及由所述第一处理器和由所述第二处理器经受的各当前的工作负载,所述工作负载管理器从所述各希望的工作负载和从所述当前工作负载得到各中间工作负载,所述工作负载管理器通知所述服务提供者所述各中间工作负载,从而允许所述服务提供者根据所述中间工作负载调整服务提供者资源。
10.根据权利要求9所述的计算机装置,其中随时间调整所述当前工作负载,使得所述当前工作负载更紧密地匹配所述希望的工作负载,并且其中周期地更新所述中间工作负载,以反映对所述当前工作负载的调整。
11.根据权利要求10所述的计算机装置,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点。
12.根据权利要求11所述的计算机装置,其中所述各希望的工作负载由用于所述第一节点的目标权重和用于所述第二节点的目标权重表示,并且其中所述各当前的工作负载由用于所述第一节点的第一当前权重和用于所述第二节点的第二当前权重表示,并且其中所述各中间工作负载由用于所述第一节点的第一转换权重和由用于所述第二节点的第二转换权重表示。
13.一种程序产品,所述程序产品包含信号承载媒体;以及安置在所述信号承载媒体上的工作负载管理装置,所述工作负载管理装置确定由第一处理器和由第二处理器经受的各工作负载,所述第一处理器具有与其相关联的第一存储器,并且所述第二处理器具有与其相关联的第二存储器,所述工作负载管理器通知服务提供者所述各工作负载,从而允许所述服务提供者根据所述各工作负载调整服务提供者资源,所述服务提供者提供至少一个服务给在所述第一和第二处理器上执行的各实体。
14.根据权利要求13所述的程序产品,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点。
15.根据权利要求13所述的程序产品,其中所述各工作负载是各希望的工作负载。
16.根据权利要求13所述的程序产品,其中所述各工作负载是各当前的工作负载。
17.根据权利要求13所述的程序产品,其中所述各工作负载是各希望的工作负载和各当前的工作负载。
18.根据权利要求15所述的程序产品,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点,并且其中所述各希望的工作负载由用于所述第一节点的第一目标权重和用于所述第二节点的第二目标权重表示。
19.根据权利要求16所述的程序产品,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点,并且其中所述各当前的工作负载由用于所述第一节点的当前权重和用于所述第二节点的第二当前权重表示。
20.根据权利要求17所述的程序产品,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点,并且其中所述各希望的工作负载由所述第一节点上的第一目标权重和所述第二节点上的第二目标权重表示,并且其中所述各当前的工作负载由用于所述第一节点的当前权重和用于所述第二节点的第二当前权重表示。
21.一种程序产品,所述程序产品包含信号承载媒体;以及安置在所述信号承载媒体上的工作负载管理装置,所述工作负载管理装置确定由第一处理器和由第二处理器经受的各希望的工作负载,以及由所述第一处理器和由所述第二处理器经受的各当前的工作负载,所述工作负载管理器从所述各希望的工作负载和从所述当前工作负载得到各中间工作负载,所述工作负载管理器通知服务提供者所述各中间工作负载,从而允许所述服务提供者根据所述中间工作负载调整服务提供者资源,所述服务提供者用于提供至少一个服务给在所述第一和第二处理器上执行的各实体。
22.根据权利要求21所述的程序产品,其中随时间调整所述当前工作负载,使得所述当前工作负载更紧密地匹配所述希望的工作负载,并且其中周期地更新所述中间工作负载,以反映对所述当前工作负载的调整。
23.根据权利要求22所述的程序产品,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点。
24.根据权利要求23所述的程序产品,其中所述各希望的工作负载由用于所述第一节点的目标权重和用于所述第二节点的目标权重表示,并且其中所述各当前的工作负载由用于所述第一节点的第一当前权重和用于所述第二节点的第二当前权重表示,并且其中所述各中间工作负载由用于所述第一节点的第一转换权重和由用于所述第二节点的第二转换权重表示。
25.一种计算机实现的方法,所述方法包含以下步骤确定由第一处理器和由第二处理器经受的各工作负载,所述第一处理器具有与其相关联的第一存储器,并且所述第二处理器具有与其相关联的第二存储器,以及通知服务提供者所述各工作负载,从而允许所述服务提供者根据所述各工作负载调整服务提供者资源,所述服务提供者提供至少一个服务给在所述第一和第二处理器上执行的各实体。
26.根据权利要求25所述的方法,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点。
27.根据权利要求25所述的方法,其中所述各工作负载是各希望的工作负载。
28.根据权利要求25所述的方法,其中所述各工作负载是各当前的工作负载。
29.根据权利要求25所述的方法,其中所述各工作负载是各希望的工作负载和各当前的工作负载。
30.根据权利要求27所述的方法,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点,并且其中所述各希望的工作负载由用于所述第一节点的第一目标权重和用于所述第二节点的第二目标权重表示。
31.根据权利要求27所述的方法,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点,并且其中所述各当前的工作负载由用于所述第一节点的当前权重和用于所述第二节点的第二当前权重表示。
32.根据权利要求27所述的方法,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点,并且其中所述各希望的工作负载由所述第一节点上的第一目标权重和所述第二节点上的第二目标权重表示,并且其中所述各当前的工作负载由用于所述第一节点的当前权重和用于所述第二节点的第二当前权重表示。
33.一种计算机实现的方法,所述方法包含以下步骤确定由第一处理器和由第二处理器经受的各希望的工作负载;确定由所述第一处理器和由所述第二处理器经受的各当前的工作负载;从所述各希望的工作负载和从所述当前的工作负载得到各中间工作负载;以及通知服务提供者所述各中间工作负载,从而允许所述服务提供者根据所述中间工作负载调整服务提供者资源,所述服务提供者用于提供至少一个服务给在所述第一和第二处理器上执行的各实体。
34.根据权利要求33所述的方法,其中随时间调整所述当前工作负载,使得所述当前工作负载更紧密地匹配所述希望的工作负载,并且其中周期地更新所述中间工作负载,以反映对所述当前工作负载的调整。
35.根据权利要求34所述的方法,其中所述第一处理器和第一存储器构成第一节点,并且其中所述第二处理器和所述第二存储器构成第二节点。
36.根据权利要求35所述的方法,其中所述各希望的工作负载由用于所述第一节点的目标权重和用于所述第二节点的目标权重表示,并且其中所述各当前的工作负载由用于所述第一节点的第一当前权重和用于所述第二节点的第二当前权重表示,并且其中所述各中间工作负载由用于所述第一节点的第一转换权重和由用于所述第二节点的第二转换权重表示。
全文摘要
本发明公开一种装置、方法和程序产品,使得能够以和期望的系统工作负载相同的比例在节点基础上分配操作系统资源。本发明优选实施例通过指派不同类型的权重给每个节点来表示其系统内整个平衡的比例而实现此。根据每节点上处理器和存储器资源的现存比例,目标权重表示工作负载的希望分配。系统上的实际工作负载平衡由操作系统在进行基础上努力保持其尽可能接近目标权重的当前权重表示。当开启系统时,操作系统服务以和目标权重相同的比例按节点分配其资源,并可请求若目标权重无论何时改变就被通知。若随后添加或去除处理器和/或存储器,那时就计算新目标权重,并通知所有请求通知的服务,这样其可根据新目标权重或其逐步细化而重新分配其资源。
文档编号G06F9/50GK1664803SQ20051005300
公开日2005年9月7日 申请日期2005年3月4日 优先权日2004年3月4日
发明者林恩·K·钟, 克里斯托弗·弗朗科伊斯, 理查德·K·柯克曼, 帕特里克·J·麦卡锡, 唐·D·里德, 肯尼思·C·沃森 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1