磁盘i/o调度方法和装置的制造方法

文档序号:10624512阅读:139来源:国知局
磁盘i/o调度方法和装置的制造方法
【专利摘要】本发明涉及一种磁盘I/O调度方法和装置,方法包括:接收与磁盘通过I/O接口连接的设备发送的I/O操作请求;将I/O操作请求插入内核层的调度队列前,先根据业务种类将I/O操作请求插入至应用层的业务队列中,然后在I/O操作请求的处理状态符合预设的业务队列调度触发条件时,将各业务队列中的I/O操作请求依据I/O操作的读写类型插入至应用层的读队列或写队列中,然后再将应用层的读队列或写队列中的I/O操作请求插入至内核层的调度队列中,从而在应用层按照一定的策略对I/O操作请求进行处理,使得操作系统能够根据特定场景下对读写延时和带宽等的控制需求设置插入策略,满足特定场景下对读写延时和带宽等的控制需求。
【专利说明】
磁盘I/o调度方法和装置
技术领域
[0001]本发明涉及计算机技术领域,尤其涉及一种磁盘输入/输出(input/output,I/O)调度方法和装置。
【背景技术】
[0002]目前,客户端的操作系统在接收到各应用或软件所发送的I/O操作请求时,对I/O操作请求的调度方法主要有两种:无操作算法(no operat1n, N00P)和完全公平队列算法(completely fair queuing,CFQ)。N00P算法中,操作系统接收到1/0操作请求时,将1/0操作请求插入内核层的调度队列的开头或末尾,调度队列中下一个要处理的1/0操作请求总是调度队列中的第一个请求;CFQ算法将1/0操作请求按进程类型插入内核层的各个进程队列中,操作系统的内核层依次从各个进程队列中调取特定个数的请求插入内核层的调度队列中,进行处理。
[0003]然而,现有技术中,上述两种调度方法主要是由内核层来实现对1/0操作请求的调度,而内核层的实现固定,实现策略单一,难以针对1/0操作请求设置优先级策略或者流量控制策略等,难以满足特定场景下对读写延时和带宽等的控制需求。

【发明内容】

[0004]本发明提供一种磁盘1/0调度方法和装置,用于解决现有技术中调度方法难以满足特定场景下对读写延时和带宽等的控制需求的问题。
[0005]本发明的第一个方面是提供一种磁盘1/0调度方法,包括:
[0006]接收与磁盘通过1/0接口连接的设备发送的1/0操作请求,所述1/0操作请求中携带:1/0操作的读写类型和业务种类;
[0007]根据所述1/0操作请求中所述1/0操作的业务种类将所述1/0操作请求插入至应用层的对应业务队列中;
[0008]判断所述1/0操作请求的处理状态是否满足预设的业务队列调度触发条件;若满足,将各业务队列中的所述1/0操作请求依据所述1/0操作的读写类型插入至应用层的读队列或写队列中;
[0009]将所述读队列和所述写队列中的所述1/0操作请求插入至内核层的调度队列中,以便根据所述调度队列中的所述1/0操作请求对磁盘进行操作。
[0010]本发明的另一个方面提供一种磁盘1/0调度装置,包括:
[0011]接收模块,用于接收与磁盘通过1/0接口连接的设备发送的1/0操作请求,所述I/O操作请求中携带:1/0操作的读写类型和业务种类;
[0012]插入模块,用于根据所述I/O操作请求中所述1/0操作的业务种类将所述1/0操作请求插入至应用层的对应业务队列中;
[0013]判断模块,用于判断所述1/0操作请求的处理状态是否满足预设的业务队列调度触发条件;若满足,将各业务队列中的所述I/o操作请求依据所述1/0操作的读写类型插入至应用层的读队列或写队列中;
[0014]所述插入模块,还用于将所述读队列和所述写队列中的所述I/O操作请求插入至内核层的调度队列中,以便根据所述调度队列中的所述I/O操作请求对磁盘进行操作。
[0015]本发明中,接收与磁盘通过I/O接口连接的设备发送的I/O操作请求,I/O操作请求中携带:1/0操作的读写类型和业务种类,将I/O操作请求插入内核层的调度队列前,先根据业务种类将I/O操作请求插入至应用层的对应业务队列中,然后在I/O操作请求的处理状态符合预设的业务队列调度触发条件时,将各业务队列中的I/o操作请求依据I/O操作的读写类型插入至应用层的读队列或写队列中,然后再将应用层的读队列或写队列中的I/o操作请求插入至内核层的调度队列中,从而在I/O操作请求插入内核层的调度队列前,在应用层按照一定的策略对I/O操作请求进行处理,而应用层的策略容易调整,从而使得操作系统能够根据特定场景下对读写延时和带宽等的控制需求设置各层的插入策略,实现策略灵活,能够满足特定场景下对读写延时和带宽等的控制需求。
【附图说明】
[0016]图1为本发明提供的磁盘I/O调度方法一个实施例的流程图;
[0017]图2为本发明提供的磁盘I/O调度方法又一个实施例的流程图;
[0018]图3为本发明提供的磁盘I/O调度方法另一个实施例的流程图;
[0019]图4为本发明提供的磁盘I/O调度方法又一个实施例的流程图;
[0020]图5为本发明提供的磁盘I/O调度装置一个实施例的结构示意图;
[0021]图6为本发明提供的磁盘I/O调度装置又一个实施例的结构示意图;
[0022]图7为本发明提供的磁盘I/O调度装置另一个实施例的结构示意图;
[0023]图8为本发明提供的磁盘I/O调度装置又一个实施例的结构示意图。
【具体实施方式】
[0024]为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0025]图1为本发明提供的磁盘I/O调度方法一个实施例的流程图,如图1所示,包括:
[0026]101、接收与磁盘通过I/O接口连接的设备发送的I/O操作请求,I/O操作请求中携带:1/0操作的读写类型和业务种类。
[0027]本发明提供的磁盘I/O调度方法的执行主体可以为磁盘I/O调度装置,磁盘I/O调度装置具体可以为安装有所述磁盘的终端或者所述终端上的操作系统。其中,I/O请求具体可以为操作系统本地其他应用程序产生并通过对应的I/O接口传来的,或者为其他设备的应用程序通过网络传来的。
[0028]具体地,与磁盘通过I/O接口连接的设备主要包括:处理器、打印机等等。处理器从磁盘读取数据或者向磁盘写入数据时,打印机读取磁盘数据时,处理器或打印机中的读写进程会触发I/o读操作或者I/O写操作,将包括I/O读操作或者I/O写操作的I/O请求通过I/o接口发送给磁盘上的磁盘调度装置。
[0029]102、根据I/O操作请求中I/O操作的业务种类将I/O操作请求插入至应用层的对应业务队列中。
[0030]其中,磁盘I/O调度装置具体可以在应用层设置两个队列层,一个队列层为业务队列层,一个队列层为读写队列层。业务队列层中包括多个业务队列,每个业务队列对应一种上层业务。读写队列层分为读和写两个操作队列。当磁盘I/O调度装置从各个设备的I/O接口接收到I/O操作请求之后,首先在业务队列层中,根据I/O操作请求中I/O操作的业务种类将I/O操作请求插入至对应业务队列中。
[0031]具体地,磁盘I/O调度装置中存储有业务种类与业务队列起始地址之间的对应关系表,磁盘I/o调度装置可以根据I/O操作请求中I/O操作的业务种类查询对应关系表,确定与I/o操作的业务种类对应的业务队列起始地址,根据业务队列起始地址和I/O操作的起始地址偏移将I/o操作插入至上述业务队列中。当I/O操作请求对应的业务队列已达到最大长度时,磁盘I/o调度装置可以丢弃该I/O操作请求。例如,假设第N个业务队列的最大长度为MN,当业务类型为该业务的I/O操作请求到达时,磁盘I/O调度装置将I/O操作请求插入至第N个业务队列的队尾,若在插入前第N个业务队列的队列长度已达到MN,则丢弃该I/O操作请求。
[0032]103、判断I/O操作请求的处理状态是否满足预设的业务队列调度触发条件;若满足,将各业务队列中的I/O操作请求依据I/O操作的读写类型插入至应用层的读队列或写队列中。
[0033]其中,按照包含的I/O操作的业务种类可以将应用层的业务队列分为实时的业务队列和非实时的业务队列。对应的,预设的业务队列调度触发条件包括:1/0操作请求插入至实时的业务队列中,预设的定时器周期到期,以及处理完上一个I/O操作请求。
[0034]在本实施例中,将应用层的业务队列分为实时的业务队列和非实时的业务队列,使得当实时的业务队列中插入I/O操作请求时,能够触发磁盘I/O调度装置将业务队列中的I/O操作插入至应用层的读队列或写队列中,以便磁盘I/O调度装置能够对实时业务队列中的I/O操作请求进行及时处理。当I/O操作请求插入至实时的业务队列中时,或者预设的定时器周期到期时,或者处理完上一个I/O操作请求时,触发磁盘I/O调度装置将业务队列中的I/o操作插入至应用层的读队列或写队列中,能够加快I/O操作请求的调度速度,提高磁盘I/o调度的效率。
[0035]进一步地,读写类型具体可以为读类型或者写类型。当I/O操作请求的处理状态满足预设的业务队列调度触发条件时,磁盘I/o调度装置具体可以将各业务队列中的读类型的I/o操作请求插入至应用层的读队列中,将各业务队列中的写类型的I/O操作请求插入至应用层的写队列中,直至读队列和写队列满为止。
[0036]104、将读队列和写队列中的I/O操作请求插入至内核层的调度队列中,以便根据调度队列中的I/O操作请求对磁盘进行操作。
[0037]其中,调度队列为异步I/O队列。也就是说,只要读队列或写队列不为空,磁盘I/O调度装置就可以将读队列和写队列中的I/O操作请求插入至内核层的调度队列中,不受调度队列时钟的影响。
[0038]具体地,将读队列和写队列中的I/O操作请求插入至内核层的调度队列中的过程可以为,将读队列和写队列中的I/O操作请求交替性地插入至内核层的调度队列中;或者先将读队列中的I/o操作请求插入至内核层的调度队列中,再将写队列中的I/O操作请求插入至内核层的调度队列中;或者先将写队列中的I/o操作请求插入至内核层的调度队列中,再将读队列中的I/o操作请求插入至内核层的调度队列中;等等,此处不做限定。
[0039]需要进行说明的是,异步I/O队列具体可以包括多个I/O队列,用于对多个I/O操作请求并行进行处理,提高对I/o操作请求的处理速度。在异步I/O队列已满时停止插入I/o操作请求。
[0040]本实施例中,接收与磁盘通过I/O接口连接的设备发送的I/O操作请求,I/O操作请求中携带:1/0操作的读写类型和业务种类,将I/O操作请求插入内核层的调度队列前,先根据业务种类将I/O操作请求插入至应用层的对应业务队列中,然后在I/O操作请求的处理状态满足预设的业务队列调度触发条件时,将各业务队列中的I/o操作请求依据I/O操作的读写类型插入至应用层的读队列或写队列中,然后再将应用层的读队列或写队列中的I/o操作请求插入至内核层的调度队列中,从而在I/O操作请求插入内核层的调度队列前,在应用层按照一定的策略对I/O操作请求进行处理,而应用层的策略容易调整,从而使得操作系统能够根据特定场景下对读写延时和带宽等的控制需求设置各层的插入策略,实现策略灵活,能够满足特定场景下对读写延时和带宽等的控制需求。
[0041]图2为本发明提供的磁盘I/O调度方法又一个实施例的流程图,如图2所示,在图1所示实施例的基础上,I/o操作请求中还携带:起始地址偏移和长度信息。
[0042]对应的,步骤104之前,还可以包括:
[0043]105、根据I/O操作的起始地址偏移,对读队列和/或写队列中的I/O操作请求进
tx排序。
[0044]106、判断排序结果中的相邻的两个I/O操作请求中,排序在前的I/O操作请求的起始偏移地址与对应的长度的和是否等于排序在后的I/O操作请求的起始地址偏移;若等于,则将相邻的两个I/O操作请求合并为一个I/O操作请求。
[0045]例如,设下发到读队列或写队列的I/O操作请求的起始偏移地址为A,I/O操作请求的长度为L,首先遍历整个读队列或写队列,看目前队列中是否有起始偏移AQ+I/0长度LQ = A的I/O操作请求,若有,则将新进入的读操作与读队列中的读操作合并,或者将新进入的写操作与写队列中的写操作合并,即令队列中相应的I/O操作请求的起始偏移AQ保持不变,I/O长度LQ增加L。若队列中没有可以合并的I/O操作请求,则直接根据此I/O操作请求的起始偏移位置A,将其升序的插入到读队列或写队列中。
[0046]本实施例中,接收与磁盘通过I/O接口连接的设备发送的I/O操作请求,I/O操作请求中携带:1/0操作的读写类型和业务种类,将I/O操作请求插入内核层的调度队列前,先根据业务种类将I/O操作请求插入至应用层的对应业务队列中,然后在I/O操作请求的处理状态满足预设的业务队列调度触发条件时,将各业务队列中的I/O操作请求依据I/O操作的读写类型插入至应用层的读队列或写队列中,然后对读队列和写队列中的I/O操作请求进行排序以及合并,再将应用层中的经过排序和合并的读队列或写队列中的I/o操作请求插入至内核层的调度队列中,从而在I/o操作请求插入内核层的调度队列前,在应用层按照一定的策略对I/o操作请求进行处理,并对I/O操作请求进行排序及合并,从而使得操作系统能够根据特定场景下对读写延时和带宽等的控制需求设置各层的插入策略,实现策略灵活,能够满足特定场景下对读写延时和带宽等的控制需求,并且能够对I/o操作请求进彳丁排序及合并,提尚磁盘i/o调度的效率。
[0047]图3为本发明提供的磁盘I/O调度方法另一个实施例的流程图,如图3所示,在图1所示实施例的基础上,步骤103具体可以包括:
[0048]1031、判断I/O操作请求的处理状态是否满足预设的业务队列调度触发条件。
[0049]1032、若I/O操作请求的处理状态满足预设的业务队列调度触发条件,则按照各业务队列的优先级的从高到低顺序,依次将各业务队列中的I/O操作请求依据I/O操作的读写类型,插入至应用层的读队列或写队列中,直至读队列和写队列满为止。
[0050]具体地,由于各个业务的用户需求不同,部分业务例如通信类业务的实时性要求高,当该类业务的I/O操作请求进入业务队列中时,需要实时将该类业务的I/O操作请求插入至应用层的读队列或写队列中;而部分业务的实时性要求不高,当该类业务的I/O操作请求进入业务队列中时,不需要实时将该类业务的I/O操作请求插入至应用层的读队列或写队列中。因此,为了满足用户需求,需要根据各业务的实时性要求等,为对应的业务队列设置优先级,以便将实时性较高的I/O操作请求及时插入至应用层的读队列或写队列中。具体操作时,可以先将优先级最高的业务队列中的I/O操作请求插入至应用层的读队列或写队列中;优先级最高的业务队列为空时,再将优先级次高的业务队列中的I/O操作请求插入至应用层的读队列或写队列中,依次类推,此处不再进行详细说明。当读队列满时,停止将读写类型为读类型的I/o操作请求插入至读队列中,当写队列满时,停止将读写类型为写类型的I/o操作请求插入至写队列中。
[0051]本实施例中,接收与磁盘通过I/O接口连接的设备发送的I/O操作请求,I/O操作请求中携带:1/0操作的读写类型和业务种类,将I/O操作请求插入内核层的调度队列前,先根据业务种类将I/o操作请求插入至应用层的对应业务队列中,然后在I/O操作请求的处理状态满足预设的业务队列调度触发条件时,按照各业务队列的优先级的从高到低顺序,依次将各业务队列中的I/o操作请求依据I/O操作的读写类型插入至应用层的读队列或写队列中,然后再将应用层的读队列或写队列中的I/o操作请求插入至内核层的调度队列中,从而在I/O操作请求插入内核层的调度队列前,在应用层按照优先级对I/O操作请求进行处理,而应用层的策略容易调整,从而使得操作系统能够根据特定场景下对不同业务实时性的控制需求设置业务队列调度策略,实现策略灵活,能够满足特定场景下对不同业务实时性的控制需求。
[0052]图4为本发明提供的磁盘I/O调度方法又一个实施例的流程图,如图4所示,在图1所示实施例的基础上,步骤104具体可以包括:
[0053]1041、将读队列中的I/O操作请求插入至调度队列中。
[0054]1042、对从读队列插入至调度队列中的I/O操作请求进行计数,得到第一计数值,在第一计数值超过第一预设数值时,停止插入读队列中的I/O操作请求。
[0055]1043、将写队列中的I/O操作请求插入至调度队列中。
[0056]1044、对从写队列插入至调度队列中的I/O操作请求进行计数,得到第二计数值,在第二计数值超过第二预设数值时,停止插入写队列中的I/O操作请求。
[0057]具体地,将读队列和写队列中的I/O操作请求插入至内核层的调度队列中的过程可以为,将读队列和写队列中的I/O操作请求交替性地插入至内核层的调度队列中;或者先将读队列中的I/O操作请求插入至内核层的调度队列中,再将写队列中的I/O操作请求插入至内核层的调度队列中;或者先将写队列中的I/o操作请求插入至内核层的调度队列中,再将读队列中的I/o操作请求插入至内核层的调度队列中;等等,此处不做限定。
[0058]其中,计数周期可以为单位时间,例如N秒或N毫秒等,第一预设数值和第二预设数值可以根据单位时间内的最大流量以及每个I/O操作请求所占用的平均流量来确定。例如,若计数周期为N毫秒,则在N毫秒内从读队列插入至调度队列中的I/O操作请求的数量超过第一预设数值时,停止插入读队列中的I/O操作请求;在N毫秒内从写队列插入至调度队列中的I/O操作请求的数量超过第二预设数值时,停止插入写队列中的I/O操作请求。
[0059]另外,第一预设数值和第二预设数值之间的比例可以满足预设的读写比例,对应的,将读队列和写队列中的I/O操作请求插入至内核层的调度队列中的过程具体还可以为:按照预设的读写比例,从读队列中选取第一组I/O操作请求,从写队列中选取第二组I/O操作请求,将第一组I/O操作请求和第二组I/O操作请求,插入至内核层的调度队列中,第一组I/O操作请求中I/O操作请求的个数与第二组I/O操作请求中I/O操作请求的个数的比例满足读写比例。
[0060]本实施例中,接收与磁盘通过I/O接口连接的设备发送的I/O操作请求,I/O操作请求中携带:1/0操作的读写类型和业务种类,将I/O操作请求插入内核层的调度队列前,先根据业务种类将I/O操作请求插入至应用层的对应业务队列中,然后在I/O操作请求的处理状态满足预设的业务队列调度触发条件时,将各业务队列中的I/o操作请求依据I/O操作的读写类型插入至应用层的读队列或写队列中,然后再将应用层的读队列或写队列中的I/o操作请求按照预设的读写比例或者预设数值插入至内核层的调度队列中,从而在I/O操作请求插入内核层的调度队列前,在应用层按照一定的策略对I/O操作请求进行处理,而应用层的策略容易调整,从而使得操作系统能够根据特定场景下对读写延时和带宽等的控制需求设置各层的插入策略,实现策略灵活,能够满足特定场景下对读写延时和带宽等的控制需求。
[0061]还需要进行说明的是,上述的各个层的插入策略,可以由磁盘I/O调度装置根据特定场景下对读写延时和带宽等的控制需求进行调整。例如,根据特定场景下对读写延时和带宽等的控制需求调整读写比例、调整第一预设数值或调整第二预设数值。相对于现有的内核层的两种算法来说,可以根据实际需要灵活设置插入策略,从而满足特定场景下对读写延时和带宽的控制需求。
[0062]另外,上述提到的各个层的插入策略的具体内容只是举例进行说明,实际应用中不仅限于上述各个阶段的插入策略,至于各个阶段的插入策略还可以为根据实际的读写延时和带宽控制要求对上述各策略进行调整后得到的策略,此处不再举例进行说明。
[0063]本领域普通技术人员可以理解:实现上述各方法实施例的全部或部分步骤可以通过程序指令相关的硬件来完成。前述的程序可以存储于一计算机可读取存储介质中。该程序在执行时,执行包括上述各方法实施例的步骤;而前述的存储介质包括:R0M、RAM、磁碟或者光盘等各种可以存储程序代码的介质。
[0064]图5为本发明提供的磁盘I/O调度装置一个实施例的结构示意图,如图5所示,包括:
[0065]接收模块51,用于接收与磁盘通过I/O接口连接的设备发送的I/O操作请求,I/O操作请求中携带:1/0操作的读写类型和业务种类;
[0066]插入模块52,用于根据I/O操作请求中I/O操作的业务种类将I/O操作请求插入至应用层的对应业务队列中;
[0067]其中,磁盘I/O调度装置具体可以在应用层设置两个队列层,一个队列层为业务队列层,一个队列层为读写队列层。业务队列层中包括多个业务队列,每个业务队列对应一种上层业务。读写队列层分为读和写两个操作队列。当磁盘I/O调度装置从各个设备的I/O接口接收到I/O操作请求之后,首先在业务队列层中,根据I/O操作请求中I/O操作的业务种类将I/O操作请求插入至对应业务队列中。
[0068]判断模块53,用于判断I/O操作请求的处理状态是否满足预设的业务队列调度触发条件;若满足,将各业务队列中的I/O操作请求依据I/O操作的读写类型插入至应用层的读队列或写队列中;
[0069]其中,按照包含的I/O操作的业务种类可以将应用层的业务队列分为实时的业务队列和非实时的业务队列。对应的,预设的业务队列调度触发条件包括:1/0操作请求插入至实时的业务队列中,预设的定时器周期到期,以及处理完上一个I/O操作请求。
[0070]进一步地,读写类型具体可以为读类型或者写类型。当I/O操作请求的处理状态满足预设的业务队列调度触发条件时,磁盘I/o调度装置具体可以将各业务队列中的读类型的I/o操作请求插入至应用层的读队列中,将各业务队列中的写类型的I/O操作请求插入至应用层的写队列中,直至读队列和写队列满为止。
[0071]插入模块52,还用于将读队列和写队列中的I/O操作请求插入至内核层的调度队列中,以便根据调度队列中的I/O操作请求对磁盘进行操作。
[0072]其中,调度队列为异步I/O队列。也就是说,只要读队列或写队列不为空,磁盘I/O调度装置就可以将读队列和写队列中的I/O操作请求插入至内核层的调度队列中,不受调度队列时钟的影响。
[0073]具体地,插入模块52将读队列和写队列中的I/O操作请求插入至内核层的调度队列中的过程可以为,将读队列和写队列中的I/O操作请求交替性地插入至内核层的调度队列中;或者先将读队列中的I/O操作请求插入至内核层的调度队列中,再将写队列中的I/O操作请求插入至内核层的调度队列中;或者先将写队列中的I/O操作请求插入至内核层的调度队列中,再将读队列中的I/O操作请求插入至内核层的调度队列中;等等,此处不做限定。
[0074]本实施例中,接收与磁盘通过I/O接口连接的设备发送的I/O操作请求,I/O操作请求中携带:1/0操作的读写类型和业务种类,将I/O操作请求插入内核层的调度队列前,先根据业务种类将I/O操作请求插入至应用层的对应业务队列中,然后在I/O操作请求的处理状态满足预设的业务队列调度触发条件时,将各业务队列中的I/o操作请求依据I/O操作的读写类型插入至应用层的读队列或写队列中,然后再将应用层的读队列或写队列中的I/o操作请求插入至内核层的调度队列中,从而在I/O操作请求插入内核层的调度队列前,在应用层按照一定的策略对I/O操作请求进行处理,而应用层的策略容易调整,从而使得操作系统能够根据特定场景下对读写延时和带宽等的控制需求设置各层的插入策略,实现策略灵活,能够满足特定场景下对读写延时和带宽等的控制需求。
[0075]图6为本发明提供的磁盘I/O调度装置又一个实施例的结构示意图,如图6所示,在图5所示实施例的基础上,包括:
[0076]I/O操作请求中还携带:起始地址偏移和长度信息;
[0077]装置还包括:排序模块54和合并模块55 ;
[0078]插入模块52将读队列和写队列中的I/O操作请求插入至内核层的调度队列中,以便根据调度队列中的I/O操作请求对磁盘进行操作之前,
[0079]排序模块54用于,根据I/O操作的起始地址偏移,对读队列和/或写队列中的I/O操作请求进行排序;
[0080]判断模块53还用于,判断排序结果中的相邻的两个I/O操作请求中,排序在前的I/O操作请求的起始偏移地址与对应的长度的和是否等于排序在后的I/O操作请求的起始地址偏移;
[0081]合并模块55用于,在排序在前的I/O操作请求的起始偏移地址与对应的长度的和等于排序在后的I/O操作请求的起始地址偏移时,将相邻的两个I/O操作请求合并为一个I/O操作请求。
[0082]在本实施例中,通过对读队列和写队列中的I/O操作请求进行排序和合并,能够减少需要处理的I/O操作请求的数量,提高磁盘I/O调度的效率。
[0083]本实施例中,接收与磁盘通过I/O接口连接的设备发送的I/O操作请求,I/O操作请求中携带:1/0操作的读写类型和业务种类,将I/O操作请求插入内核层的调度队列前,先根据业务种类将I/O操作请求插入至应用层的对应业务队列中,然后在I/O操作请求的处理状态满足预设的业务队列调度触发条件时,将各业务队列中的I/o操作请求依据I/O操作的读写类型插入至应用层的读队列或写队列中,然后对读队列和写队列中的I/o操作请求进行排序以及合并,再将应用层中的经过排序和合并的读队列或写队列中的I/o操作请求插入至内核层的调度队列中,从而在I/o操作请求插入内核层的调度队列前,在应用层按照一定的策略对I/o操作请求进行处理,并对I/O操作请求进行排序及合并,从而使得操作系统能够根据特定场景下对读写延时和带宽等的控制需求设置各层的插入策略,实现策略灵活,能够满足特定场景下对读写延时和带宽等的控制需求,并且能够对I/o操作请求进彳丁排序及合并,提尚磁盘i/o调度的效率。
[0084]图7为本发明提供的磁盘I/O调度装置另一个实施例的结构示意图,如图7所示,在图5所示实施例的基础上,包括:
[0085]判断模块53还包括:判断单元531和第一插入单元532 ;
[0086]判断单元531,用于判断I/O操作请求的处理状态是否满足预设的业务队列调度触发条件;
[0087]第一插入单元532,用于在I/O操作请求的处理状态满足预设的业务队列调度触发条件时,按照各业务队列的优先级的从高到低顺序,依次将各业务队列中的I/o操作请求依据I/o操作的读写类型,插入至应用层的读队列或写队列中,直至读队列和写队列满为止。
[0088]具体地,由于各个业务的用户需求不同,部分业务例如通信类业务的实时性要求高,当该类业务的I/O操作请求进入业务队列中时,需要实时将该类业务的I/O操作请求插入至应用层的读队列或写队列中;而部分业务的实时性要求不高,当该类业务的I/O操作请求进入业务队列中时,不需要实时将该类业务的I/O操作请求插入至应用层的读队列或写队列中。因此,为了满足用户需求,需要根据各业务的实时性要求等,为对应的业务队列设置优先级,以便将实时性较高的I/o操作请求及时插入至应用层的读队列或写队列中。具体操作时,可以先将优先级最高的业务队列中的I/o操作请求插入至应用层的读队列或写队列中;优先级最高的业务队列为空时,再将优先级次高的业务队列中的I/o操作请求插入至应用层的读队列或写队列中,依次类推,此处不再进行详细说明。当读队列满时,停止将读写类型为读类型的I/o操作请求插入至读队列中,当写队列满时,停止将读写类型为写类型的I/o操作请求插入至写队列中。
[0089]本实施例中,接收与磁盘通过I/O接口连接的设备发送的I/O操作请求,I/O操作请求中携带:1/0操作的读写类型和业务种类,将I/O操作请求插入内核层的调度队列前,先根据业务种类将I/o操作请求插入至应用层的对应业务队列中,然后在I/O操作请求的处理状态满足预设的业务队列调度触发条件时,按照各业务队列的优先级的从高到低顺序,依次将各业务队列中的I/o操作请求依据I/O操作的读写类型插入至应用层的读队列或写队列中,然后再将应用层的读队列或写队列中的I/o操作请求插入至内核层的调度队列中,从而在I/O操作请求插入内核层的调度队列前,在应用层按照优先级对I/O操作请求进行处理,而应用层的策略容易调整,从而使得操作系统能够根据特定场景下对不同业务实时性的控制需求设置业务队列调度策略,实现策略灵活,能够满足特定场景下对不同业务实时性的控制需求。
[0090]图8为本发明提供的磁盘I/O调度装置又一个实施例的结构示意图,如图8所示,在图5所示实施例的基础上,包括:
[0091]插入模块52包括:选取单元521和第二插入单元522 ;
[0092]选取单元521,用于按照预设的读写比例,从读队列中选取第一组I/O操作请求,从写队列中选取第二组I/o操作请求,第一组I/O操作请求中I/O操作请求的个数与第二组I/o操作请求中I/O操作请求的个数的比例满足读写比例;
[0093]第二插入单元522,用于将第一组I/O操作请求和第二组I/O操作请求插入至内核层的调度队列中。
[0094]具体地,将读队列和写队列中的I/O操作请求插入至内核层的调度队列中的过程可以为,将读队列和写队列中的I/o操作请求交替性地插入至内核层的调度队列中;或者先将读队列中的I/o操作请求插入至内核层的调度队列中,再将写队列中的I/O操作请求插入至内核层的调度队列中;或者先将写队列中的I/o操作请求插入至内核层的调度队列中,再将读队列中的I/o操作请求插入至内核层的调度队列中;等等,此处不做限定。
[0095]另外,插入模块还包括:计数单元和第三插入单元;
[0096]第三插入单元,用于将读队列中的I/O操作请求插入至调度队列中;
[0097]计数单元,用于对从读队列插入至调度队列中的I/O操作请求进行计数,得到第一计数值,在第一计数值超过第一预设数值时,停止插入读队列中的I/o操作请求;
[0098]第三插入单元,还用于将写队列中的I/O操作请求插入至调度队列中;
[0099]计数单元,还用于对从写队列插入至调度队列中的I/O操作请求进行计数,得到第二计数值,在第二计数值超过第二预设数值时,停止插入写队列中的I/o操作请求。
[0100]本实施例中,接收与磁盘通过I/O接口连接的设备发送的I/O操作请求,I/O操作请求中携带:1/0操作的读写类型和业务种类,将I/O操作请求插入内核层的调度队列前,先根据业务种类将I/O操作请求插入至应用层的对应业务队列中,然后在I/O操作请求的处理状态满足预设的业务队列调度触发条件时,将各业务队列中的I/o操作请求依据I/O操作的读写类型插入至应用层的读队列或写队列中,然后再将应用层的读队列或写队列中的I/o操作请求按照预设的读写比例或者预设数值插入至内核层的调度队列中,从而在I/O操作请求插入内核层的调度队列前,在应用层按照一定的策略对I/O操作请求进行处理,而应用层的策略容易调整,从而使得操作系统能够根据特定场景下对读写延时和带宽等的控制需求设置各层的插入策略,实现策略灵活,能够满足特定场景下对读写延时和带宽等的控制需求。
[0101]最后应说明的是:以上各实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述各实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的范围。
【主权项】
1.一种磁盘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操作请求对磁盘进行操作。2.根据权利要求1所述的方法,其特征在于,所述应用层的业务队列按照包含的I/o操作的业务种类分为实时的业务队列和非实时的业务队列; 所述预设的业务队列调度触发条件包括:所述I/o操作请求插入至所述实时的业务队列中,预设的定时器周期到期,以及处理完上一个I/o操作请求。3.根据权利要求1所述的方法,其特征在于,所述I/o操作请求中还携带:起始地址偏移和长度信息; 所述将所述读队列和所述写队列中的所述I/o操作请求插入至内核层的调度队列中,以便根据所述调度队列中的所述I/O操作请求对磁盘进行操作之前,还包括: 根据所述I/o操作的起始地址偏移,对所述读队列和/或所述写队列中的所述I/O操作请求进行排序; 判断排序结果中的相邻的两个I/o操作请求中,排序在前的I/O操作请求的起始偏移地址与对应的长度的和是否等于排序在后的I/O操作请求的起始地址偏移;若等于,则将所述相邻的两个I/o操作请求合并为一个I/O操作请求。4.根据权利要求1所述的方法,其特征在于,所述判断所述I/o操作请求的处理状态是否满足预设的业务队列调度触发条件;若满足,将各业务队列中的所述I/o操作请求依据所述I/o操作的读写类型插入至应用层的读队列或写队列中,包括: 判断所述I/o操作请求的处理状态是否满足预设的业务队列调度触发条件; 若所述I/o操作请求的处理状态满足预设的业务队列调度触发条件,则按照各业务队列的优先级的从高到低顺序,依次将各业务队列中的I/o操作请求依据所述I/O操作的读写类型,插入至应用层的读队列或写队列中,直至读队列和写队列满为止。5.根据权利要求1或2所述的方法,其特征在于,将所述读队列和所述写队列中的所述I/o操作请求插入至内核层的调度队列中,包括: 按照预设的读写比例,从所述读队列中选取第一组I/o操作请求,从所述写队列中选取第二组I/O操作请求,将所述第一组I/O操作请求和所述第二组I/O操作请求插入至内核层的调度队列中,所述第一组I/o操作请求中I/O操作请求的个数与所述第二组I/O操作请求中I/O操作请求的个数的比例满足所述读写比例。6.根据权利要求1或2所述的方法,其特征在于,将所述读队列和所述写队列中的所述I/o操作请求插入至内核层的调度队列中,包括: 将所述读队列中的所述I/o操作请求插入至所述调度队列中,并对从所述读队列插入至所述调度队列中的所述I/o操作请求进行计数,得到第一计数值,在所述第一计数值超过第一预设数值时,停止插入所述读队列中的所述I/o操作请求; 将所述写队列中的所述I/o操作请求插入至所述调度队列中,并对从所述写队列插入至所述调度队列中的所述I/o操作请求进行计数,得到第二计数值,在所述第二计数值超过第二预设数值时,停止插入所述写队列中的所述I/o操作请求。7.根据权利要求1所述的方法,其特征在于,所述调度队列为异步I/o队列。8.一种磁盘I/O调度装置,其特征在于,包括: 接收模块,用于接收与磁盘通过I/o接口连接的设备发送的I/O操作请求,所述I/O操作请求中携带:1/0操作的读写类型和业务种类; 插入模块,用于根据所述I/o操作请求中所述I/O操作的业务种类将所述I/O操作请求插入至应用层的对应业务队列中; 判断模块,用于判断所述I/o操作请求的处理状态是否满足预设的业务队列调度触发条件;若满足,将各业务队列中的所述I/o操作请求依据所述I/O操作的读写类型插入至应用层的读队列或写队列中; 所述插入模块,还用于将所述读队列和所述写队列中的所述I/o操作请求插入至内核层的调度队列中,以便根据所述调度队列中的所述I/o操作请求对磁盘进行操作。9.根据权利要求8所述的装置,其特征在于,所述应用层的业务队列按照包含的I/O操作的业务种类分为实时的业务队列和非实时的业务队列; 所述预设的业务队列调度触发条件包括:所述I/o操作请求插入至所述实时的业务队列中,预设的定时器周期到期,以及处理完上一个I/o操作请求。10.根据权利要求8所述的装置,其特征在于,所述I/O操作请求中还携带:起始地址偏移和长度信息; 所述装置还包括:排序模块和合并模块; 所述插入模块将所述读队列和所述写队列中的所述I/o操作请求插入至内核层的调度队列中,以便根据所述调度队列中的所述I/o操作请求对磁盘进行操作之前,所述排序模块用于,根据所述I/o操作的起始地址偏移,对所述读队列和/或所述写队列中的所述I/O操作请求进行排序; 所述判断模块还用于,判断排序结果中的相邻的两个I/o操作请求中,排序在前的I/O操作请求的起始偏移地址与对应的长度的和是否等于排序在后的I/O操作请求的起始地址偏移; 所述合并模块用于,在排序在前的I/o操作请求的起始偏移地址与对应的长度的和等于排序在后的I/o操作请求的起始地址偏移时,将所述相邻的两个I/O操作请求合并为一个I/o操作请求。11.根据权利要求8所述的装置,其特征在于,所述判断模块还包括:判断单元和第一插入单元; 所述判断单元,用于判断所述I/o操作请求的处理状态是否满足预设的业务队列调度触发条件; 所述第一插入单元,用于在所述I/o操作请求的处理状态满足预设的业务队列调度触发条件时,按照各业务队列的优先级的从高到低顺序,依次将各业务队列中的I/o操作请求依据所述I/O操作的读写类型,插入至应用层的读队列或写队列中,直至读队列和写队列满为止。12.根据权利要求8或9所述的装置,其特征在于,所述插入模块包括:选取单元和第二插入单元; 所述选取单元,用于按照预设的读写比例,从所述读队列中选取第一组I/o操作请求,从所述写队列中选取第二组I/o操作请求,所述第一组I/O操作请求中I/O操作请求的个数与所述第二组I/o操作请求中I/O操作请求的个数的比例满足所述读写比例; 所述第二插入单元,用于将所述第一组I/o操作请求和所述第二组I/O操作请求插入至内核层的调度队列中。13.根据权利要求8或9所述的装置,其特征在于,所述插入模块还包括:计数单元和第三插入单元; 所述第三插入单元,用于将所述读队列中的所述I/o操作请求插入至所述调度队列中; 所述计数单元,用于对从所述读队列插入至所述调度队列中的所述I/o操作请求进行计数,得到第一计数值,在所述第一计数值超过第一预设数值时,停止插入所述读队列中的所述I/o操作请求; 所述第三插入单元,还用于将所述写队列中的所述I/o操作请求插入至所述调度队列中; 所述计数单元,还用于对从所述写队列插入至所述调度队列中的所述I/o操作请求进行计数,得到第二计数值,在所述第二计数值超过第二预设数值时,停止插入所述写队列中的所述I/o操作请求。14.根据权利要求8所述的装置,其特征在于,所述调度队列为异步I/O队列。
【文档编号】G06F3/06GK105988725SQ201510078229
【公开日】2016年10月5日
【申请日】2015年2月13日
【发明人】肖芬, 李雅卿, 颜克洲
【申请人】腾讯科技(深圳)有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1