缓存分区感知的调度方法及系统技术方案

技术编号:35029961 阅读:21 留言:0更新日期:2022-09-24 23:03
本发明专利技术提供一种缓存分区感知的调度方法及系统,包括:在系统中分配一个全局映射数据结构,记录各个缓存分区中的相关任务数量;应用程序在启动时调用register_related_threads在操作系统中注册任务组,标识为相关任务,调度器依据此信息进行缓存分区感知的调度;为每个相关任务组分配一个任务映射数据结构,记录一个相关任务组中任务在各个缓存分区中的分布情况;内核调度器在为任务选核时参考任务映射记录的数据,将相关任务调度到同一缓存分区;内核调度器在为任务选核后进行任务映射的更新与全局映射的更新;内核调度器遍历全局映射,若发现缓存分区过载,则通知该缓存分区的任务进行任务迁移。本发明专利技术能够提升频繁访问共享变量的任务组的性能。问共享变量的任务组的性能。问共享变量的任务组的性能。

【技术实现步骤摘要】
缓存分区感知的调度方法及系统


[0001]本专利技术涉及计算机
,具体地,涉及一种缓存分区感知的调度方法及系统。

技术介绍

[0002]服务器的内存架构不断演化,从单核系统到SMP系统再到NUMA系统,服务器的内存架构不断加深。服务器内存架构的加深,对操作系统的调度器提出了不同的需求。
[0003]在单核系统中,调度器只需考虑任务的优先级,通过使用分时复用的策略支持多任务同时运行。
[0004]随着多核系统的出现,服务器的计算能力大幅提高。作为多核系统,统一处理器的不同核心间的负载存在差异。某些核心可能处于空闲状态,而另一些核心处于超载状态。调度器需要开始承担负载均衡的任务,也即将处于超载状态的处理器上的任务迁移到处于空闲状态的处理器上。不同的多核系统对调度器的负载均衡能力提出不同需求。
[0005]在SMP系统中,理论上来说,为了实现负载均衡而进行的任务迁移不会产生额外的性能开销。这是因为公共总线为不同处理器提供一致性内存访问。任务在不同处理器上运行,都有相同的内存访问性能。然而迁移带来的缓存失效问题,使得任务迁移产生高昂的性能开销。在SMP系统中,每个处理器都有自己的高速缓存,高速缓存的大小一般仅为内存大小的千分之一,提供接近于处理器访问寄存器时的性能。当处理器访问内存时,处理器先会将数据从内存加载到高速缓存,再从高速缓存中读取数据。由于高速缓存是处理器私有的存储单元,因此同一份数据可能存在多个处理器的高速缓存中,为了保证数据一致性,当一个处理器对数据进行修改时,高速缓存的硬件机制会将其他处理器的高速缓存中的数据拷贝标记为失效。此时若其他处理器需要读取该数据,其他处理器需从内存中读取数据,该性能将比从高速缓存中读取慢近数十倍。在任务迁移场景中,当任务迁移到另一处理器后,数据仍存储在此前运行的处理器的高速缓存中,当前运行的处理器则需要从内存中读取数据,这即是任务迁移造成性能开销的原因。因此,主流操作系统为了减小高速缓存失效带来的开销,都提供对目标处理器选择的优化。调度器为任务选择处理器时优先选择该任务之前运行过的处理器,以减少跨处理器迁移,进而减少高速缓存失效带来的开销。
[0006]随着处理器数量不断增加,SMP系统中处理器通过相同内存总线访问相同内存资源,内存访问冲突的增加使得内存资源成为瓶颈。当内存资源成为瓶颈,处理器资源将无法被有效利用,造成可扩展性问题。为了解决SMP系统的可扩展性问题,NUMA系统提出本地内存的设计。NUMA架构包含多个NUMA节点,每个节点包含若干处理器、自有内存甚至还包括I/O子系统。每个节点嵌入自有内存控制器,提供对自有内存的访问。这种架构中,处理器不再通过相同内存总线访问相同内存资源,而是通过本地内存控制器访问本地内存与远端内存,从而减少了总线竞争,提升系统可扩展性。然而,本地内存与远端内存造成了处理器非一致性的内存访问,即处理器访问本地内存与远端内存的延迟不一致。这种不一致的内存访问意味着访问本地内存的任务将比访问远端内存的任务有着更佳的性能,也即任务与其访问内存的远近将会影响任务的性能,这对调度器提出了更高的要求。随着NUMA架构的广
泛应用,主流操作系统都增加了对NUMA的支持。例如Linux操作系统为了支持NUMA架构,在2.6.7版本之后引入了调度域概念。调度域是硬件拓扑结构在调度器层面的抽象,每个调度域是具有相同属性的一组处理器的集合。一个系统中存在不同类型的调度域,他们根据SMT,SMP,NUMA这样的拓扑结构将处理器划分成不同的级别,不同级之间构成树状关系,同一调度域内的的处理器共享相同的调度策略。调度器有了硬件拓扑结构信息,可以采取更好的负载均衡策略,对不同层级的调度域采取细化调度策略。层级越低的调度域内的处理器共享的内存架构越多,因此调度器可以在底层的调度域中进行负载均衡,从而减小任务迁移带来的性能开销。
[0007]随着大数据对于服务器处理数据要求的进一步提高,服务器的内存架构愈发复杂化。目前主流指令集架构的服务器,例如x86服务器和ARM服务器,提出了缓存分区(cache group)架构。在该架构中,最后一级缓存被划分为多个分片,每个分片由一组处理器共享,这组处理器被称为缓存分区。同一缓存分区的处理器对于高速缓存中数据的修改不会触发缓存一致性协议,避免了缓存失效而造成的开销。要利用缓存分区的这种特性,需要实现缓存分区感知的调度器。然而,目前主流操作系统的调度器都没有提供对缓存分区感知的支持。

技术实现思路

[0008]针对现有技术中的缺陷,本专利技术提供一种缓存分区感知的调度方法及系统。
[0009]根据本专利技术提供的一种缓存分区感知的调度方法及系统,所述方案如下:
[0010]第一方面,提供了一种缓存分区感知的调度方法,所述方法包括:
[0011]步骤S1:为防止多个任务组运行在同一缓存分区造成缓存分区过载,本专利技术在系统中分配一个全局映射数据结构,该数据结构是一个数组,数组大小为系统中缓存分区的数量,其记录各个缓存分区中的相关任务数量(可能来自不同任务组),该操作系统启动时生效;
[0012]步骤S2:应用程序在启动时调用register_related_threads在操作系统中注册任务组,标识它们为相关任务,调度器依据此信息进行缓存分区感知的调度;
[0013]步骤S3:为每个相关任务组分配一个任务映射数据结构,该数据结构是一个数组,数组大小为系统中缓存分区的数量,其记录一个相关任务组中任务在各个缓存分区中的分布情况;该操作在调用register_related_threads时生效;
[0014]步骤S4:内核调度器在为任务选核时参考任务映射记录的数据,将相关任务调度到同一缓存分区;
[0015]步骤S5:内核调度器在为任务选核后进行任务映射的更新;
[0016]步骤S6:内核调度器在为任务选核后进行全局映射的更新;
[0017]步骤S7:内核调度器遍历全局映射,若发现缓存分区过载,则通知该缓存分区的任务进行任务迁移。
[0018]优选地,所述步骤S4在内核调度器为任务选核时生效,具体包括:
[0019]步骤S4.1:检查任务所属的任务映射,找到含有最多任务的缓存分区;
[0020]步骤S4.2:在所述缓存分区中找到负载最小的核作为目标核;
[0021]步骤S4.3:最后由调度器将该任务调度到目标核上运行。
[0022]优选地,所述步骤S5任务映射的更新包括:
[0023]步骤S5.1:在选核后,调度器获得任务此前运行的核标识号以及目标核标识号;
[0024]步骤S5.2:调度器将这两个核标识号转换为缓存分区标识号,将缓存分区标识号作为索引定位到该任务所对应任务映射的对应位置;
[0025]步骤S5.3:调度器对此前运行的缓存分区中任务数量做减一操作,对目标缓存分区中任务数量做加一操作。
[0026]优选地,所述步骤S6全局映射的更新包括:
[0027]步骤S6.1:在本文档来自技高网
...

【技术保护点】

【技术特征摘要】
1.一种缓存分区感知的调度方法,其特征在于,包括:步骤S1:在系统中分配一个全局映射数据结构,该数据结构是一个数组,数组大小为系统中缓存分区的数量,其记录各个缓存分区中的相关任务数量,且该操作系统启动时生效;步骤S2:应用程序在启动时调用register_related_threads在操作系统中注册任务组,标识它们为相关任务,调度器依据此信息进行缓存分区感知的调度;步骤S3:为每个相关任务组分配一个任务映射数据结构,该数据结构是一个数组,数组大小为系统中缓存分区的数量,其记录一个相关任务组中任务在各个缓存分区中的分布情况,该操作在调用register_related_threads时生效;步骤S4:内核调度器在为任务选核时参考任务映射记录的数据,将相关任务调度到同一缓存分区;步骤S5:内核调度器在为任务选核后进行任务映射的更新;步骤S6:内核调度器在为任务选核后进行全局映射的更新;步骤S7:内核调度器遍历全局映射,若发现缓存分区过载,则通知该缓存分区的任务进行任务迁移。2.根据权利要求1所述的缓存分区感知的调度方法,其特征在于,所述步骤S4在内核调度器为任务选核时生效,具体包括:步骤S4.1:检查任务所属的任务映射,找到含有最多任务的缓存分区;步骤S4.2:在所述缓存分区中找到负载最小的核作为目标核;步骤S4.3:最后由调度器将该任务调度到目标核上运行。3.根据权利要求1所述的缓存分区感知的调度方法,其特征在于,所述步骤S5任务映射的更新包括:步骤S5.1:在选核后,调度器获得任务此前运行的核标识号以及目标核标识号;步骤S5.2:调度器将这两个核标识号转换为缓存分区标识号,将缓存分区标识号作为索引定位到该任务所对应任务映射的对应位置;步骤S5.3:调度器对此前运行的缓存分区中任务数量做减一操作,对目标缓存分区中任务数量做加一操作。4.根据权利要求1所述的缓存分区感知的调度方法,其特征在于,所述步骤S6全局映射的更新包括:步骤S6.1:在选核后,调度器获得任务此前运行的核标识号以及目标核标识号;步骤S6.2:调度器将这两个核标识号转换为缓存分区标识号,将缓存分区标识号作为索引定位到全局映射的对应位置;步骤S6.3:调度器对此前运行的缓存分区中任务数量做减一操作,对目标缓存分区中任务数量做加一操作。5.根据权利要求1所述的缓存分区感知的调度方法,其特征在于,所述步骤S7防止缓存分区过载的操作包括:步骤S7.1:在完成对全局映射的更新后,调度器遍历全局映射以检测是否出现缓存分区过载;步骤S7.2:若出现缓存分区过载,调度器选择一个相关任务组,将其中的任务标记为缓存分区迁移;
步骤S7.3:以后为该任务组任务进行选核时,选择另一个缓存分区中的核作为目标核,并将这些任务迁移到别的缓存分区。6.一...

【专利技术属性】
技术研发人员:徐天强糜泽羽陈海波夏虞斌
申请(专利权)人:上海交通大学
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1