一种内存访问的数据密集型进程调度方法

文档序号:9452941阅读:541来源:国知局
一种内存访问的数据密集型进程调度方法
【技术领域】
[0001] 本发明属于计算机的内存访问技术领域,具体涉及一种数据密集型进程调度方 法。
【背景技术】
[0002] 在高性能计算和大数据应用中,将数据集移动到内存中以便于高速文件访问是一 种技术趋势。为了充分利用存储系统的优势,许多内存文件系统和内存数据库被用来充分 使用内存总线,提供快速文件读写。因为这些系统建立在直接连接到内存总线上的非易失 性存储器(NVM)或者DRAM上,与传统基于块设备的数据I/O相比,这些系统有非常大的性 能提升,这对需要大量读写数据的进程十分有利。然而,由于所有的文件访问都通过内存总 线,当大量数据密集型进程同时读写内存文件系统时,会产生内存总线竞争的问题。
[0003] 在现有的Linux系统中,访问内存文件系统的进程被默认的CompleteFair Scheduler(CFS)调度器所管理。CFS的设计目标是尽量保证每个进程公平得到足够的CPU 时间,CFS引入了"虚拟运行时间"的概念,通过系统的负载和进程的优先级动态计算每个进 程在每个调度周期应该执行的时间。当数据密集型进程连续访问内存文件系统时,这些进 程不会被切换,会一直占用内存总线和CPU,直到它们的时间片用完,即定时器中断才能触 发进程调度。
[0004] 目前的研究工作主要集中在如何充分利用内存文件系统,而由于使用内存文件系 统带来的内存总线竞争的问题却没有被充分考虑。

【发明内容】

[0005] 针对现有技术中存在的技术问题,本发明所要解决的技术问题是从系统调度策略 的层面提供一种内存访问的数据密集型进程调度方法,它能优化系统管理,充分利用系统 资源,避免因内存总线竞争所造成的访问长时间等待。
[0006] 本发明的构思是:根据已有的调度方法分给每个进程的执行时间为固定长度的时 间单元,称为"时间片",在现有的操作系统中,时间片由定时器中断产生,其周期一般为100 毫秒,并且该数值是系统的配置参数,可以根据需要修改;进程的时间片用完之后会被切 换;每个应用程序的一个实例是系统调度的一个"进程",多个应用程序组成一个"工作集"; 每个进程从开始执行到执行完成所花的时间为其执行时间,工作集中所有进程执时间的最 大值为工作集的完成时间。工作集中每个进程又具有单独执行所需的执行时间和每个时间 片的内存带宽需求,内存带宽需求可以通过系统性能检测工具获取(比如perf),这种工具 通过读取处理器本身的硬件计数器,统计在一段时间内内存总线上的读/写次数,换算得 出内存带宽需求。系统内存带宽能达到的最大值是系统的带宽资源限制,处理器个数决定 了同一个时间片能够执行的进程个数的最大值;在每个调度时间片中没有被选中的进程等 待的时间片需要增加1,每个进程允许等待的时间片的最大值称为等待"阈值"。
[0007] 由此,针对内存总线的带宽限制和每个进程在每个时间片对带宽的需求,采用内 存带宽需求高与带宽需求低的进程结合进行调度,使每个时间片的内存带宽需求之和不超 过系统的总带宽,从而缓和总线竞争,缩短工作集的平均完成时间。
[0008] 为了解决的上述技术问题,本发明包括以下步骤:
[0009] 步骤1,将系统中的进程设置三个队列,分别是:
[0010] 调度队列,用来保存每个时间片应该执行的进程;
[0011] 就绪队列,用来保存新加入的进程;
[0012] 优先等待队列,用来保存等待时间达到阈值的进程;
[0013] 构造就绪队列:根据给定的工作集信息,将新加入就绪队列的进程按剩余时间片 的多少在就绪队列中进行排序,剩余时间片多的进程排序在前,就绪队列中前面的进程优 先进入调度队列;进程之间不存在依赖关系,各进程按自己时间片的先后顺序执行;
[0014] 步骤2,构造调度队列:计算当前时间片所有进程的内存带宽需求之和,根据内存 带宽需求之和、系统的最大带宽限制和处理器的数量,从就绪队列中选择合适数量的进程 放入调度队列中,作为当前时间片应该执行的进程集;如果优先级等待队列中有进程,则首 选优先级等待队列中的进程;
[0015] 步骤3,构造优先等待队列:就绪队列中具有当前时间片而未被选中的进程设置 等待时间,如果等待时间超过预设的阈值,则将该进程移动到优先级等待队列中;
[0016] 步骤4,当前时间片执行完之后,判断进程是否已经执行完毕(剩余执行时间为 0),如果已经执行完成,将进程从所有队列中移除,否则将进程放入就绪队列,继续等待下 一次调度;
[0017] 步骤5,判断所有进程是否执行完毕,如是则当前工作集完成,否则执行下一个进 程。
[0018] 本发明的每个调度周期根据内存带宽需求和执行时间调度进程,最长执行时间的 进程在就绪队列中具有排序在前的优先权,每个时间片选择的进程总体内存带宽需求不超 过系统带宽,各进程又设有等待时间的阈值,限制了最长的等待时间,防止了进程饥饿。所 以本发明具有如下的优点:优化系统管理,充分利用系统资源,避免了因内存总线竞争所造 成的访问长时间等待。
【附图说明】
[0019] 本发明的【附图说明】如下:
[0020] 图1为本发明构造就绪队列的流程图;
[0021] 图2为本发明构造调度序列的流程图。
【具体实施方式】
[0022] 下面结合附图和实施例对本发明作进一步说明:
[0023] 在系统初始化阶段,需要提供当前工作集中每个进程的执行时间片和每个时间片 的带宽需求信息,根据本发明的调度策略,调整工作集,建立高效的调度序列,使得每个执 行时间片的内存带宽需求不会超过系统总带宽,以缓和内存总线竞争,缩短工作集的完成 时间。
[0024] 本发明包括以下步骤:
[0025] 步骤1,将系统中的进程设置有三个队列:调度队列,用来保存每个时间片应该执 行的进程;就绪队列,用来保存新加入的进程;优先等待队列,用来保存等待时间达到阈值 的进程;
[0026] 构造就绪队列:根据给定的工作集信息,将新加入就绪队列的进程按剩余时间片 的多少在就绪队列中进行排序,剩余时间片多的进程排序在前,就绪队列中前面的进程优 先进入调度队列;进程之间不存在依赖关系,各进程按自己时间片的先后顺序执行;
[0027] 步骤2,构造调度队列:计算当前时间片所有进程的内存带宽需求之和,根据内存 带宽需求之和、系统的最大带宽限制和处理器的数量,从就绪队列中选择合适数量的进程 放入调度队列中,作为当前时间片应该执行的进程集;如果优先级等待队列中有进程,则首 选优先级等待队列中的进程;
[0028] 步骤3,构造优先等待队列:就绪队列中具有当前时间片而未被选中的进程设置 等待时间,如果等待时间超过预设的阈值,则将该进程移动到优先级等待队列中;
[0029] 步骤4,当前时间片执行完之后,判断进程是否已经执行完毕(剩余执行时间为 0),如果已经执行完成,将进程从所有队列中移除,否则将进程放入就绪队列,继续等待下 一次调度;
[0030] 步骤5,判断所有进程是否执行完毕,如是则当前工作集完成,否则执行下一个进 程。
[0031] -、从工作集的输入信息构造就绪队列,流程图如图1所示,该流程开始于步骤 101,然后,
[0032] 在步骤102,首先初始化调度队列、就绪队列和优先级等待队列全为空;
[0033] 在步骤103,把工作集的进程加入到就绪队列;
[0034] 在步骤104,将进程按剩余时间片的数目进行排序,剩余时间片数目多的进程排在 就绪队列的前面;
[0035] 在步骤105,判断进程添加是否完成,如是,执行步骤107,否则,执行步骤106;
[0036] 在步骤106,移动工作集中的下一个进程;转移执行步骤103;
[0037] 在步骤107,得到工作集对应的就绪队列。
[0038] 将工作集作为图1所示程序的一个输入,从该输入中可以得到每个进程的剩余时 间片,就绪队列就是按照剩余时间片的数目排列的。比如,工作集中有3个进程,第一个进 程的剩余时间片为3,第二个为5,第三个为2,那么,程序初始化的第一步就将进程1放入 就绪队列,因为只有一个进程,不需要调整就绪队列中进程的顺序;第二步将进程2放入就 绪队列,此时需要调整就绪队列中进程的顺序,使得剩余时间片降序排列,此时就绪队列中 进程的顺序为2,1;第三步将进程3放入就绪队列,此时应该调整就绪队列中进程的顺序为 2,1,3,剩余时间片为5,
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1