的运行队列RQ1中包含的并且属于线程组的任何任务可被选为从当前集群ClusterJ)转移至不同集群Cluster_l的候选任务。考虑选择任务P82作为候选任务的另一种情况。如图8所示,线程组包含选作任务转移候选任务的第一任务(例如,任务P82),以及进一步包含未被选作任务转移候选任务的多个第二任务(例如,任务P81、P83_P85)。检查属于相同线程组的第一任务与第二任务的分布。关于第一任务与第二任务(例如,任务P81-P85),两个任务P81与P82包含在集群ClusterJ)的处理器核心CPU_1的运行队列RQ1中,以及三个任务P 83、P84, P85包含在集群Cluster_l的处理器核心CPU_6的运行队列RQ6中。因此,在集群Cluster_0与Cluster_l中,集群Cluster_l具有属于线程组的最大数量任务。第一任务包含在集群Cluster_0的一个运行队列中。基于第一任务与第二任务的分布检查结果,调度单元104可判断候选任务应从当前集群转移至不同集群。调度单元104可将任务P82从处理器核心CPU_1 (其为所选处理器核心中最重负载处理器核心)的运行队列RQ1转移至处理器核心CPU_5(其为触发负载平衡进程的处理器核心)的运行队列RQ5。
[0060]如上所述,调度单元104执行的所述基于线程组的任务调度方案可选择候选任务(例如,属于线程组并且包含在所选处理器核心中最忙处理器核心的运行队列中的任务),并且检查集群中线程组的任务分布以决定候选任务是否应从当前集群转移至不同集群。因此,线程组的任务分布可能阻止候选任务的任务转移。
[0061]图9是描述第七任务调度操作的示意图,其中上述操作将一个单线程进程的任务从一个集群中处理器核心(例如,最重负载处理器核心)的运行队列转移至另一集群中处理器核心(例如空闲处理器核心)的运行队列,其中服从线程组转移原则。假设由于空运行队列或计时器到时,处理器核心CPU_5触发负载平衡进程。在本示例中,在负载平衡进程开始时,运行队列RQtl可包含两个任务P ο以及P84;运行队列RQ 1可包含四个任务P PP8PP82以及P2;运行队列RQ 2可包含两个任务P 3以及P 4;运行队列RQ 3可包含两个任务P 5以及P 85;运行队列1^4可包含一个任务P6;运行队列RQ 6可包含一个任务P83;以及运行队列RQ 7可包含一个任务P7。某些运行队列RQcrRQ7*的任务P CrP7的每一个可为单线程进程,以及某些运行队列RQcrRQ#的任务P 81_P85可属于相同线程组。在本示例中,多核处理器系统10当前具有一个线程组,其中该线程组具有共享相同特定数据及/或存取相同特定存储地址的多个任务Pm-Pm。
[0062]相似地,当开始负载平衡进程时,调度单元104可比较所选处理器核心CPU_0-CPU_7的处理器核心负载以找出任务转移的目标源。在图9所示的示例中,处理器核心CPU_5可为不具有运行任务及/或待运行任务的空闲处理器核心。然而,这仅为描述的目的,并不是对本发明的限制。即,由于定时器到时触发负载平衡进程的处理器核心不一定是最空闲处理器核心(例如,不具有运行任务及/或待运行任务的空闲处理器核心,或者如果不存在空闲处理器核心,则为拥有非零处理器核心负载的最轻负载处理器核心),上述最空闲处理器核心位于调度单元104检查的所选处理器核心中。在本示例中,与处理器核心CPU_5(其为本示例中触发负载平衡进程的处理器核心)相比,图9所示的处理器核心CPU_0-CPU_4与CPU_6-CPU_7中的每一个具有较忙处理器核心,因此上述处理器核心的每一个可作为任务转移的一个候选源。
[0063]根据示例,但不限定,可配置调度单元104以找出最忙处理器核心(例如具有非零处理器核心负载的最重负载处理器核心)作为任务转移的目标源。在本示例中,所选处理器核心CPU_0-CPU_7中的最忙处理器核心可为集群ClusterJ)中的处理器核心CPU_1。此夕卜,最忙处理器核心CPU_1的运行队列RQ1包含目前在多核处理器系统10中属于相同线程组的任务P81以及P 82。
[0064]考虑到选择任务P81作为候选任务以从当前集群ClusterJ)转移至不同集群Cluster_l的情况。如图9所示,线程组包含为任务转移选作候选任务的第一任务(例如,任务P81),以及进一步包含未被选作任务转移候选任务的多个第二任务(例如,任务P82-P85)。检查属于相同线程组的第一任务与第二任务的分布。关于第一任务与第二任务(例如,任务P81-P85),一个任务P84包含在集群ClusterJ)的处理器核心CPU_0的运行队列RQ ^中,两个任务P81与P 82包含在集群ClusterJ)的处理器核心CPU_1的运行队列RQ i中,以及一个任务P85包含在集群ClusterJ)的处理器核心CPU_3的运行队列RQ 3中并且一个任务P 83包含在集群Cluster_l的处理器核心CPU_6的运行队列RQ6中。因此,在集群ClusterJ)与Cluster_l中,集群Cluster_0具有属于线程组的最大数量任务。第一任务包含在集群ClusterJ)的一个运行队列中。触发负载平衡进程的处理器核心(例如,处理器核心CPU_5)包含在集群Cluster_l中,其中集群Cluster_l具有属于相同线程组的较小数量的任务。基于第一任务与第二任务的分布检查结果,调度单元104可判断候选任务应停留在当前集群ClusterJ)。举例来说,如图9所示,调度单元104可执行另一任务调度方案以将最早排在处理器核心CPU_1 (其为所选处理器核心中最重负载处理器核心)的运行队列RQ1中的单线程进程(例如,任务P1)移动至处理器核心CPU_5(其为触发负载平衡进程的处理器核心,例如最空闲处理器核心)的运行队列RQ5。
[0065]如上所述,在负载平衡进程期间,当需要从一个集群到另一集群的任务转移(例如所选处理器核心的作为任务转移目标源的最忙处理器核心以及作为任务转移目的地的触发负载平衡进程的处理器核心可包含在不同集群中)时,可启动所述基于线程组的任务调度方案,以及任务转移的目标源的运行队列(例如,所选处理器核心中最忙处理器核心)包含属于线程组的至少一个任务,其中上述线程组具有共享相同特定数据及/或存取相同特定存储地址的多个任务。所述基于线程组的任务调度方案可进一步检查集群中线程组的任务分布以决定属于线程组并且包含在任务转移目标源(例如,最忙处理器核心)的运行队列中的任务是否应执行任务转移。然而,当发现不需要从一个集群至另一集群的任务转移(例如触发负载平衡进程的处理器核心与最忙处理器核心位于相同集群)或任务转移的目标源(例如,最忙处理器核心)的运行队列不包含线程组的任务(其中,上述线程组具有共享相同特定数据及/或存取相同特定存储地址的多个任务)时,在不使用改善高速缓存局部性的所述基于线程组的任务调度方案的情况下,调度单元104可启动用于负载平衡的另一任务调度方案。
[0066]图10是描述第八任务调度操作的示意图,其中上述操作将一个单线程进程的任务从一个集群中处理器核心(例如,最重负载处理器核心)的运行队列转移至另一集群中处理器核心(例如空闲处理器核心)的运行队列。假设由于空运行队列或计时器到时,处理器核心CPU_5触发负载平衡进程。在本示例中,在负载平衡进程开始时,运行队列RQtl可包含一个任务Ptl;运行队列RQ工可包含四个任务P ρΡ2、Ρ3以及P 4;运行队列RQ 2可包含两个任务P81以及P82;运行队列RQ 3可包含一个任务P5;运行队列RQ 4可包含一个任务P6;运行队列1^6可包含三个任务P 83、Ρ84以及P 85;以及运行队列RQ 7可包含一个任务P 7。某些运行队列RQq-RQ#的任务P Q-P7的每一个可为单线程进程,以及某些运行队列RQ q-RQ7中的任务P81-P85可属于相同线程组。在本示例中,多核处理器系统10当前具有一个线程组,其中该线程组具有共享相同特定数据及/或存取相同特定存储地址的多个任务P81_P85。
[0067]当开始负载平衡进程时,调度单元104可比较所选处理器核心CPU_0_CPU_7的处理器核心负载以找出任务转移的目标源。在图10所示的示例中,处理器核心CPU_5可为不具有运行任务及/或待运行任务的空闲处理器核心。然而,这仅为描述的目的,并不是对本发明的限制。即,由于定时器到时触发负载平衡进程的处理器核心不一定是最空闲处理器核心(例如,不具有运行任务及/或待运行任务的空闲处理器核心,或者如果不存在空闲处理器核心,则为拥有非零处理器核心负载的最轻负载处理器核心),上述最空闲处理器核心位于所有所选处理器核心中。在本示例中,与处理器核心CPU_5 (其为本示例中触发负载平衡进程的处理器核心)相比,图10所示的处理器核心CPU_0-CPU_4与CPU_6-CPU_7中的每一个具有较忙处理器核心,因此上述处理器核心的每一个可作为任务转移的一个候选源。
[0068]根据示例,但不限定,可配置调度单元104以找出最忙处理器核心(例如具有非零处理器核心负载的最重负载处理器核心)作为任务转移的目标源。在本示例中,所选处理器核心CPU_0-CPU_7中的最忙处理器核心可为集群ClusterJ)中的处理器核心CPU_1。此夕卜,处理器核心CPU_5 (其为触发负载平衡进程的处理器核心)是具有更多属于相同线程组的任务的集群Cluster_l的一部分。然而,处理器核心CPU_1 (其为所选处理器核心中最忙处理器核心)的运行队列RQ1F包含当前在多核处理器系统10中属于线程组的任务。值得注意的是,关于多核处理器系统性能,负载平衡可比高速缓存一致性开销降低更关键。因此,取得负载平衡的策略可超越改善高速缓存局部性的策略。虽然属于线程组并且包含在集群Cluster_l中处理器核心CPU_6的运行队列RQf^的任务(例如,P83-P85)的数量大于属于相同线程组并且包含在集群ClusterJ)中处理器核心CPU_2的运行队列1^2中的任务(例如,P81-P82)的数量,但没有任务?81卞85包含在最忙处理器核心CPU_1的运行队列RQ I中。既然使用所述基于线程组的任务调度方案不能达到负载平衡需求,则在这种情况下不启用基于线程组的任务调度方案。因此,不考虑线程组,控制从一个集群至另一集群的任务转移。举例来说,如图10所示,调度单元104可执行另一任务调度操作以将最早排在处理器核心CPU_1 (其为所选处理器核心中最忙处理器核心)的运行队列RQ1*的单线程进程(例如,任务P1)移动至处理器核心CPU_5 (其为触发负载平衡进程,并且是最空闲处理器核心的处理器核心)的运行队列RQ5。
[0069]图11是描述第九任务调度操作的示意图,其中上述操作将一个单线程进程的任务从一个集群中处理器核心(例如,最重负载处理器核心)的运行队列转移至相同集群中处理器核心(例如空闲处理器核心)的运行队列。假设由于空运行队列或