System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind()
【技术实现步骤摘要】
本专利技术属于操作系统,具体涉及一种针对numa架构下direct io密集型任务的调度方法及系统。
技术介绍
1、目前,linux系统大多采用cfs调度器(公平调度器)作为默认的任务调度方式。cfs以其公平性和高效性著称,通过引入虚拟时间的概念,确保所有任务都能获得相对公平的系统资源分配。
2、然而,cfs虽然能够满足大部分应用场景的性能需求,但在面对一些特殊场景时,其调度策略显得力不从心。特别是当numa架构下的linux系统中存在大量direct io密集型任务时,cfs的调度效果并不理想。该类任务通常涉及大量的数据读写操作,这些操作往往需要等待外部设备(如硬盘)的响应,因此会消耗大量的等待时间。在numa架构下,由于内存访问的非均匀性,该类任务可能会因为等待数据从远程内存节点传输到本地核心而进一步延长执行时间,从而降低系统的整体性能。
3、此外,cfs的调度策略是固定的,无法根据任务类型的不同进行调整。这意味着,在direct io密集型任务占主导的应用场景中,cfs无法提供针对性的调度方法,从而无法充分发挥numa架构的潜力。因此,需要一种针对该类应用场景的高效调度方法,提高该类应用场景的性能。
技术实现思路
1、本专利技术的目的在于提供一种针对numa架构下direct io密集型任务的调度方法及系统,减少任务跨节点访问磁盘,实现高效调度,提升该类任务的性能。
2、为了实现上述目的,本专利技术的技术方案是这样的:
3、一种
4、s1、创建用户态调度程序;
5、s2、扫描并记录各磁盘设备所在numa节点,建立调度域,初始化cpu利用率,创建线程池,指派线程定期更新cpu利用率;
6、s3、基于linux内核的sched_ext可扩展调度器实现bpf回调函数;
7、s4、通过libbpf库将所述bpf回调函数附加到所述sched_ext可扩展调度器各回调点,接管sched_ext可扩展调度器调度策略;
8、s5、通过bpf map与回调函数进行交互,实现任务的排队和派发;
9、s6、跟踪任务在单位时间内的direct io量,对io量进行累计和衰减,根据io量是否超过io量阈值来标记direct io密集型任务;
10、s7、检查所述direct io密集型任务正在访问的磁盘设备,将任务调度在对应的磁盘节点内;
11、s8、定期检查所述direct io密集型任务调度范围内cpu利用率情况,超过设定的利用率阈值则动态调整任务调度范围;
12、s9、定期检查所述direct io密集型任务的私有内存在各numa节点的分布,根据设定的阈值来决定是否需要将内存迁移到正在访问的磁盘节点。
13、进一步的,步骤s2包括:
14、打开/sys/class/block目录,读取其中每个文件的软链接,找出其中的pci设备文件并记录pci设备号;然后读取/sys/bus/pci/devices/pci设备号/numa_node,使用全局结构体变量记录每个pci 设备及所对应的numa节点;
15、读取/proc/schedstat文件,文件中有关于系统中各cpu的调度域层级信息,解析该文件内容,将cpu每个调度域层级的cpumask掩码记录在全局数组变量中;
16、读取/proc/stat文件,文件中有关于各cpu时间的信息,解析该文件内容,将各cpu的时间记录在全局变量中,包括每个cpu的用户态时间、系统态时间、空闲时间、中断时间;
17、调用c库函数pthread_create()预先申请工作线程,每个工作线程调用pthread_cond_wait()阻塞等待任务下发;调用pthread_cond_signal()唤醒一个工作线程,该工作线程每秒更新一次cpu利用率。
18、进一步的,步骤s3包括:
19、基于linux内核的sched_ext可扩展调度器编写bpf程序,实现相关bpf回调函数,所述相关bpf回调函数包括:init回调函数,init_task回调函数,select_cpu回调函数,enqueue回调函数,dispatch回调函数。
20、进一步的,步骤s6包括:
21、从bpf enqueued map中取出任务进行排队,如果任务距离上次采样已经过去了设定的时间,则更新上一次采样时间点和累计io量,累计io量按照加权移动平均算法ewma进行计算;每次比较累计io量是否超过设定的io量阈值,如果是则将任务标记为direct io密集型任务。
22、进一步的,步骤s7包括:
23、检查direct io密集型任务正在访问的磁盘设备及所处的numa节点是否已经设置,如果没有,则通过读取/proc/pid/fd目录下的文件描述符,找出其中的磁盘设备文件,与之前记录的磁盘设备与numa节点进行匹配并记录;同时,初始化任务的调度域为最低层级,将最低层级的cpumask掩码通过dispatched map传递到bpf回调函数dispatch中。
24、进一步的,步骤s8包括:
25、定期遍历direct io密集型任务当前调度域范围内所有cpu的利用率,计算平均cpu利用率是否超过第一阈值,是则将调度域层级提升,如果平均cpu利用率低于第二阈值,则降低调度域层级;direct io密集型任务根据cpu繁忙情况动态调整cpu运行范围,在调度域内高负载情况下,提升调度域层级,降低任务排队带来的调度延迟,在调度域内cpu空闲时,降低调度域层级,提高direct io密集型任务的cache命中率。
26、进一步的,步骤s9包括:
27、设定检查所述direct io密集型任务的私有内存在各numa节点的分布的定期时间,时间到达后,打开/proc/pid/numa_maps文件,解析文件里面的私有内存页,分别统计其在每个numa节点的私有页大小;如果超过设定的阈值,则调用c库函数migrate_pages()进行内存迁移,采用线程池的方式将内存迁移任务交由各线程去处理,将内存迁移到directio密集型任务正在访问的磁盘节点。
28、本专利技术另一方面还提出了一种针对numa架构下direct io密集型任务的调度系统,包括:
29、程序模块:创建用户态调度程序;
30、初始化模块:扫描并记录各磁盘设备所在numa节点,建立调度域,初始化cpu利用率,创建线程池,指派线程定期更新cpu利用率;
31、回调函数模块:基于linux内核的sched_ext可扩展调度器实现bpf回调函数;
32、策略模块:通过libbpf库将所述bpf回调函数附加到所述sched_ext可扩展调度器各回调点,本文档来自技高网...
【技术保护点】
1.一种针对NUMA架构下Direct IO密集型任务的调度方法,其特征在于,包括:
2.根据权利要求1所述的针对NUMA架构下Direct IO密集型任务的调度方法,其特征在于,步骤S2包括:
3.根据权利要求1所述的针对NUMA架构下Direct IO密集型任务的调度方法,其特征在于,步骤S3包括:
4.根据权利要求1所述的针对NUMA架构下Direct IO密集型任务的调度方法,其特征在于,步骤S6包括:
5.根据权利要求1所述的针对NUMA架构下Direct IO密集型任务的调度方法,其特征在于,步骤S7包括:
6.根据权利要求1所述的针对NUMA架构下Direct IO密集型任务的调度方法,其特征在于,步骤S8包括:
7.根据权利要求1所述的针对NUMA架构下Direct IO密集型任务的调度方法,其特征在于,步骤S9包括:
8.一种针对NUMA架构下Direct IO密集型任务的调度系统,其特征在于,包括:
9.一种计算机可读存储介质,所述存储介质存储有计算机程序,其特征在
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1-7任一项所述的针对NUMA架构下Direct IO密集型任务的调度方法。
...【技术特征摘要】
1.一种针对numa架构下direct io密集型任务的调度方法,其特征在于,包括:
2.根据权利要求1所述的针对numa架构下direct io密集型任务的调度方法,其特征在于,步骤s2包括:
3.根据权利要求1所述的针对numa架构下direct io密集型任务的调度方法,其特征在于,步骤s3包括:
4.根据权利要求1所述的针对numa架构下direct io密集型任务的调度方法,其特征在于,步骤s6包括:
5.根据权利要求1所述的针对numa架构下direct io密集型任务的调度方法,其特征在于,步骤s7包括:
6.根据权利要求1所述的针对numa架构下direct io...
【专利技术属性】
技术研发人员:李万伍,黄兵,刘云,王琦,孙科,
申请(专利权)人:麒麟软件有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。