I/O请求的调度方法及装置制造方法及图纸

技术编号:17912054 阅读:47 留言:0更新日期:2018-05-10 18:04
本发明专利技术实施例提供一种I/O请求的调度方法和装置,该方法包括将接收到的多个I/O请求存储到多个队列中,其中,每个队列对应至少一个进程组,每个进程组中包含一个或多个进程,且接收到的I/O请求被存储到与该I/O请求对应的进程所属的进程组对应的队列中;向I/O设备下发所述多个队列中的I/O请求,其中,同一次下发过程中来自于优先级高的队列的I/O请求的数量多于来自于优先级低的队列的I/O请求的数量。通过该方法提高关键应用或进程的I/O响应速度。

【技术实现步骤摘要】
I/O请求的调度方法及装置
本专利技术实施例涉及计算机技术,尤其涉及一种I/O请求的调度方法和装置。
技术介绍
当前的移动终端大多采用了支持多任务的操作系统,当用户在进行前台操作的同时,后台也可以运行其他的应用,例如音乐播放或网络下载等。如果后台的某个应用对应的I/O(input/output)操作请求(简称为I/O请求)比较频繁,必然会占用大量的I/O资源。但由于计算机系统的I/O资源有限,此时若前台应用需要执行I/O操作,则该IO操作必然会因后台应用的IO资源占用过多而导致响应速度变慢,体现到用户那里,就会出现前台应用打开慢或操作卡顿等现象,严重影响到前台应用的用户体验。Linux操作系统提供了noop,deadline,cfq和row等各种I/O调度策略,供不同的业务场景进行选择,例如,在某些业务场景下通过合并I/O操作提升整个系统的I/O速度。但是,Linux系统提供的这些调度策略仍然无法保障在多应用I/O并发的场景下关键应用(一般是前台应用)的I/O响应速度,因为非关键应用(一般是后台应用)有可能会产生大量I/O请求,拥塞住调度器的队列,导致关键应用的IO没法及时执行。
技术实现思路
本专利技术实施例提供一种I/O请求的调度方法及装置,用以一定程度上保证终端设备上运行的关键应用的I/O响应速度。第一方面,本专利技术实施例提供一种I/O请求的调度方法,该方法可以实现在操作系统中,作为操作系统的一个功能模块,也可以实现为一个独立于操作系统的功能模块。该方法包括将接收到的多个I/O请求存储到多个队列中,其中,每个队列对应至少一个进程组,一个进程组中包含一个或多个进程,且接收到的I/O请求被存储到与所述I/O请求对应的进程所属的进程组对应的队列中;向I/O设备下发(dispatch)所述多个队列中的I/O请求,其中,同一次下发过程中来自于优先级高的队列的I/O请求的数量多于来自于优先级低的队列的I/O请求的数量。进一步的,一个队列的优先级与该队列对应的进程组的特征匹配。基于第一方面,在一些实现方式下,该进程组的特征信息包括进程组的重要性信息,并且与重要性高的进程组对应的队列的优先级高于与重要性低的进程组对应的队列的优先级。进一步的,所述重要性信息可以包括所述进程组中包含的一个或多个进程对用户体验的影响程度信息,对用户体验的影响程度高的进程组的重要性大于对用户体验的影响程度低的进程组的重要性。I/O请求一般理解为存储器的上层向存储器发送的输入或输出数据的请求,例如I/O读请求用于从存储器中读取数据;再例如I/O写请求用于向存储器中写入数据。优先级的高和低与I/O请求数量的多少是相对的概念。举例来说,两个队列A和B,A的优先级高于B的优先级,则同一次下发过程中来自于A的I/O请求的数量多于来自于B的I/O请求的数量。并不限定A的优先级比B高多少,I/O请求的数量比B多多少。另外,本专利技术实施例并不限定多个队列中任意两个队列的优先级均不相同,例如若有三个队列,其中两个队列的优先级也可以相同。另外,同一个进程组对应的队列也可能是多个。各个进程组中包括的进程通常是应用的进程。另外,有些类型的I/O请求是内核线程创建的,而非应用的进程(或线程)创建的,因此可以进一步设置一个单独的队列存储这种类型的I/O请求,例如异步写请求。内核线程可以不参与应用的进程分组,不属于任意一个所述的进程组(所以在此种实现方式下并非所有队列均对应一个进程组);也可以将该内核线程划分为一个单独的组。队列是一种以先入先出为原则进行数据处理的数据结构,队列的具体实现方式可以为数组或链表等。队列的大小或深度指的是队列中可存储的数据的数量,例如可存储的I/O请求的数量。若是其他数据结构能够实现本专利技术实施例提供的方法也可以。进程组在某些实现方式下也可以称之为应用组。进程组或应用组的划分依据可以是进程或应用的运行状态(例如前台运行或后台运行)、进程或应用对用户体验的影响程度、进程或应用对系统的重要程度等。一个应用下的所有进程可以在同一个组中,也可以在不同的组中。当意图设置同一个应用的所有进程在同一个组中时,也可以直接按照应用进行分组,在这种实现方式下,本专利技术实施例提供的方法的第一个步骤也可以为:将接收到的多个I/O请求存储到多个队列中,其中,每个队列对应至少一个应用组,每个应用组中包含一个或多个应用,且接收到的I/O请求被存储到与产生该I/O请求的应用所属的应用组对应的队列中。同一次下发过程中可以从所有队列中获取I/O请求,也可以从其中的部分队列中获取I/O请求。基于第一方面,在一些实现方式下,所述“I/O请求对应的进程”为创建该I/O请求的进程。例如,一个应用要读取数据,该应用的某个进程就会调用系统调用,通过系统调用,该进程就从应用层(或称之为用户态或用户层)进入内核层(或称之为内核态)的文件系统层,该进程在文件系统的缓存中查找要读取的数据,查到了就直接拷贝到自己的buffer中,然后退出内核层,回到应用层。若没有查到,该进程就在文件系统层创建一个读I/O请求,并将该读I/O请求提交到块设备层(简称BLOCK层)。这种情况下,与该读I/O请求对应的进程就是创建该读I/O请求的这个进程。这个进程属于哪个优先级的进程组,BLOCK层就将该读I/O请求按照哪种优先级下发。在本申请中在介绍I/O请求时有时将进程与I/O请求的这种对应简称为“进程的I/O请求”。虽然产生I/O请求的主体是应用的进程,但在介绍I/O请求时为了便于阅读,有时也称为“X应用产生I/O请求”或“X应用的I/O请求”,其中X表示任意应用。基于第一方面或以上任意一种实现方式,在一些实现方式下,队列的优先级用优先级标识表示,一个队列的优先级标识用于标识该队列的优先级,优先级可以用数值标识,数值越高,队列的优先级越低(反之亦可),当然优先级也可以用其他类型的参数标识。基于第一方面或以上任意一种实现方式,在另一些实现方式下,队列的优先级用权重表示,即为各个队列配置各自的权重值,优先级高的队列的权重值大于优先级低的队列的权重值。具体的,下发I/O请求的时候根据各个队列的权重值分别从各个队列获取I/O请求。例如上述队列A和B的权重分别为a和b,其中a和b均小于1且大于0,且a大于b,以及a+b=1。一次下发过程需要下发X个I/O请求,则从A和B分别获取X*a和X*b个I/O请求(*表示乘法)。基于第一方面或以上任意一种实现方式,在其他一些实现方式下,多个队列的优先级以及I/O请求的下发数量通过设置多个队列的I/O请求下发比例来实现。例如设置队列A和队列B的I/O请求下发比例为3:2,然后根据该比例下发I/O请求。通过上述列举的实现方式可以看出,本专利技术实施例并不限定每个队列必须具有一个标识该队列优先级或权重的属性,只要能控制下发数量以实现重要进程的I/O请求下发数量较非重要进程的I/O请求下发数量多即可。其他实现方式在此不再枚举。可见,本专利技术实施例提供的I/O请求的调度方法,通过设置多个不同优先级的队列,分别存储多个不同优先级的进程组对应的I/O请求,然后在下发I/O请求时根据队列的优先级有目的性的优先下发高优先级的进程组发送的I/O请求,而高优先级的进程组里的进程对应着关键应用,这样可使得I/O设备本文档来自技高网...
I/O请求的调度方法及装置

【技术保护点】
一种I/O请求的调度方法,其特征在于,包括:将接收到的多个I/O请求存储到多个队列中,其中,一个队列对应至少一个进程组,每个进程组中包含一个或多个进程,且接收到的I/O请求被存储到与该I/O请求对应的进程所属的进程组对应的队列中;向I/O设备下发所述多个队列中的I/O请求,其中,同一次下发过程中来自于优先级高的队列的I/O请求的数量多于来自于优先级低的队列的I/O请求的数量。

【技术特征摘要】
1.一种I/O请求的调度方法,其特征在于,包括:将接收到的多个I/O请求存储到多个队列中,其中,一个队列对应至少一个进程组,每个进程组中包含一个或多个进程,且接收到的I/O请求被存储到与该I/O请求对应的进程所属的进程组对应的队列中;向I/O设备下发所述多个队列中的I/O请求,其中,同一次下发过程中来自于优先级高的队列的I/O请求的数量多于来自于优先级低的队列的I/O请求的数量。2.根据权利要求1所述的方法,其特征在于,一个队列的优先级与该队列对应的进程组的特征匹配。3.根据权利要求1或2所述的方法,其特征在于,还包括:获取配置信息,其中,所述配置信息包括用于表示进程组的特征的信息;根据所述配置信息配置所述多个队列的优先级,其中,一个队列的优先级与该队列对应的进程组的特征匹配。4.根据权利要求1-3任意一项所述的方法,其特征在于,还包括:确定所述多个队列中至少一个队列的I/O请求响应速度;根据所述I/O请求响应速度调整除所述至少一个队列之外的其他队列中的一个或多个队列的大小。5.根据权利要求4所述的方法,其特征在于,所述获取所述多个队列中至少一个队列的I/O请求响应速度包括:确定优先级最高的队列的I/O请求响应速度;所述根据所述I/O请求响应速度调整除所述至少一个队列之外的其他队列中的一个或多个队列的大小包括:若确定所述I/O请求响应速度小于或等于第一阈值,则将所述其他队列中的一个或多个队列的大小调小。6.根据权利要求4所述的方法,其特征在于,所述获取所述多个队列中至少一个队列的I/O请求响应速度包括:确定优先级最高的队列的I/O请求响应速度;所述根据所述I/O请求响应速度调整除所述至少一个队列之外的其他队列中的一个或多个队列的大小包括:若确定所述I/O请求响应速度大于第二阈值,则将所述其他队列中的一个或多个队列的大小调大。7.根据权利要求1-3任意一项所述的方法,其特征在于,还包括:确定优先级最高的队列中存储的I/O请求的数量;若确定所述数量小于或等于第三阈值,则将除所述优先级最高的队列之外的其他队列中的一个或多个队列的大小调大。8.根据权利要求1-7任意一项所述的方法,其特征在于,所述配置信息包括进程组的重要性信息以用来表示进程组的特征,重要性高的进程组对应的队列的优先级高于重要性低的进程组对应的队列的优先级。9.据权利要求1-8任意一项所述的方法,其特征在于,所述重要性信息包括所述进程组中包含的一个或多个进程对用户体验的影响程度信息,对用户体验的影响程度高的进程组的重要性高于对用户体验的影响程度低的进程组的重要性。10.一种I/O请求的调度装置,其特征在于,包括:存储单元,用于将接收到的多个I/O请求存储到多个队列中,其中,一个队...

【专利技术属性】
技术研发人员:缪勰钟江夏开旭
申请(专利权)人:华为技术有限公司
类型:发明
国别省市:广东,44

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

1