输入输出请求处理方法、系统、电子设备及存储介质转让专利

申请号 : CN202311826299.1

文献号 : CN117472597B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 王晓辉

申请人 : 苏州元脑智能科技有限公司

摘要 :

本发明提供一种输入输出请求处理方法、系统、电子设备及存储介质,涉及计算机数据存储技术领域,该方法包括:在确定当前接收到的目标任务请求为输入输出请求时,对目标任务请求对应的目标数据的数据长度进行判断,若判断获知目标数据的数据长度满足预设条件,对目标任务请求进行切片处理,并根据切片处理结果,生成多个对应的输入输出请求子任务;基于预设轮询条件,获取到各个输入输出请求子任务对应的子任务处理结果,并在确定目标数据对应的所有输入输出请求子任务已全部处理完成之后,将所有子任务处理结果进行组合,得到目标任务请求的目标任务处理结果。本发明在提高系统的输入输出吞吐率的同时,也提高了存储系统的整体性能。

权利要求 :

1.一种输入输出请求处理方法,其特征在于,包括:

在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断,若判断获知所述目标数据的数据长度满足预设条件,对所述目标任务请求进行切片处理,并根据切片处理结果,生成多个对应的输入输出请求子任务;

基于预设轮询条件,获取到各个所述输入输出请求子任务对应的子任务处理结果,并在确定所述目标数据对应的所有所述输入输出请求子任务已全部处理完成之后,将所有所述子任务处理结果进行组合,得到所述目标任务请求的目标任务处理结果;

在所述在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断之前,所述方法还包括:接收客户端发送的所述目标任务请求;

对所述目标任务请求的任务事件类型进行判断,若所述目标任务请求的所述任务事件类型为登录任务事件,对所述目标任务请求对应的所述目标数据的数据量进行监测,获取目标数据实时监测结果;

判断所述目标数据实时监测结果是否大于第一预设阈值,若大于所述第一预设阈值,确定所述目标任务请求为所述输入输出请求;

若当前时刻的事件接收模式为被动接收事件通知模式,将所述被动接收事件通知模式切换为主动轮询事件模式。

2.根据权利要求1所述的输入输出请求处理方法,其特征在于,在所述判断所述目标数据实时监测结果是否大于第一预设阈值之后,所述方法还包括:若所述目标数据实时监测结果小于或等于所述第一预设阈值,判断当前时刻的事件接收模式是否为所述主动轮询事件模式,若是所述主动轮询事件模式,将所述主动轮询事件模式切换为所述被动接收事件通知模式,其中,所述被动接收事件通知模式用于通过任务处理器直接对所述目标任务请求进行处理,并将处理结果返回至所述客户端;

若不是所述主动轮询事件模式,则确定所述事件接收模式为所述被动接收事件通知模式,并基于所述被动接收事件通知模式接收所述客户端发送的下一个任务请求。

3.根据权利要求2所述的输入输出请求处理方法,其特征在于,在所述对所述目标任务请求对应的所述目标数据的数据量进行监测,获取目标数据实时监测结果之后,所述方法还包括:对所述客户端发送的所述下一个任务请求的任务事件类型进行判断,若所述下一个任务请求的所述任务事件类型为所述目标任务请求对应的注销任务事件,则停止对所述目标数据的数据量进行监测,并在确定当前时刻的事件接收模式为所述主动轮询事件模式时,将所述主动轮询事件模式切换为所述被动接收事件通知模式。

4.根据权利要求1所述的输入输出请求处理方法,其特征在于,所述在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断,包括:在确定所述目标任务请求属于输入输出读写命令类型请求时,判断所述目标数据的数据长度是否大于第二预设阈值,若大于,则确定所述目标数据的数据长度满足所述预设条件。

5.根据权利要求4所述的输入输出请求处理方法,其特征在于,所述对所述目标任务请求进行切片处理,并根据切片处理结果,生成多个对应的输入输出请求子任务,包括:根据所述目标任务请求,构建对应的目标任务标识号;

基于所述第二预设阈值,对所述目标任务请求进行切分处理,得到多个输入输出子请求;

基于所述目标任务标识号,按照切分顺序对各个所述输入输出子请求分配对应的顺序码,并根据所述顺序码,根据分配顺序码后的输入输出子请求,生成目标任务链表,其中,所述目标任务链表中包括各个所述输入输出子请求对应的所述输入输出请求子任务。

6.根据权利要求5所述的输入输出请求处理方法,其特征在于,所述预设轮询条件包括第一轮询过程和第二轮询过程;

所述基于预设轮询条件,获取到各个所述输入输出请求子任务对应的子任务处理结果,包括:在确定当前时刻的事件接收模式为主动轮询事件模式后, 通过所述第一轮询过程,判断是否存在客户端发送的新任务请求;

若不存在所述新任务请求,通过所述第二轮询过程,判断是否存在各个所述输入输出请求子任务对应的子任务处理结果,若存在,基于多个所述第二轮询过程,获取各个所述输入输出请求子任务对应的子任务处理结果。

7.根据权利要求6所述的输入输出请求处理方法,其特征在于,所述方法还包括:

若存在所述客户端发送的所述新任务请求,根据所述新任务请求中的字段信息,判断所述新任务请求的输入输出命令类型;

若所述新任务请求为所述输入输出读写命令类型请求时,判断所述新任务请求对应的数据长度是否大于所述第二预设阈值,若大于,则确定所述新任务请求对应的数据长度满足所述预设条件,对所述新任务请求对应的数据进行切片处理;

若所述新任务请求为输入输出管理命令类型请求时,直接对所述新任务请求进行对应的输入输出处理,并通过所述第二轮询过程,判断是否存在所述新任务请求对应的新任务处理结果,若存在,将所述新任务处理结果返回至所述客户端。

8.根据权利要求6所述的输入输出请求处理方法,其特征在于,在所述在确定所述目标任务请求属于输入输出读写命令类型请求时,判断所述目标数据的数据长度是否大于第二预设阈值之后,所述方法还包括:若所述目标数据的数据长度小于或等于所述第二预设阈值,直接对所述目标任务请求进行对应的输入输出处理,并通过所述第二轮询过程,判断是否存在所述目标任务请求对应的所述目标任务处理结果,若存在,将所述目标任务处理结果返回至所述客户端。

9.根据权利要求8所述的输入输出请求处理方法,其特征在于,所述在确定所述目标数据对应的所有所述输入输出请求子任务已全部处理完成之后,将所有所述子任务处理结果进行组合,得到所述目标任务请求的目标任务处理结果,包括:基于所述第二轮询过程,根据所述目标任务请求的处理进度状态,判断所述目标数据对应的所有所述输入输出请求子任务是否全部处理完成,若全部处理完成,将所有所述子任务处理结果进行组合,得到所述目标任务处理结果。

10.根据权利要求9所述的输入输出请求处理方法,其特征在于,所述基于所述第二轮询过程,根据所述目标任务请求的处理进度状态,判断所述目标数据对应的所有所述输入输出请求子任务是否全部处理完成,若全部处理完成,将所有所述子任务处理结果进行组合,得到所述目标任务处理结果,包括:在所述第二轮询过程中,若轮询到所述目标任务请求对应的输入输出请求资源的初始化过程已完成,将所述目标任务请求从初始化处理进度状态更新为输入输出处理状态;

在所述目标任务请求处于所述输入输出处理状态时,对所述目标任务请求对应的多个所述输入输出请求子任务进行处理,并基于所述第二轮询过程,获取各个所述输入输出请求子任务对应的输入输出二级处理状态;

若根据各个所述输入输出请求子任务对应的所述输入输出二级处理状态,确定所有所述输入输出请求子任务已全部处理完成,将所述目标任务请求从所述输入输出处理状态更新为任务完成状态,并将所有所述子任务处理结果进行组合,得到所述目标任务处理结果。

11.根据权利要求10所述的输入输出请求处理方法,其特征在于,所述方法还包括:

在所述目标任务请求处于所述输入输出处理状态时,若在所述第二轮询过程中,所述输入输出请求子任务对应的所述输入输出二级处理状态被标记为异常状态或错误状态,将所述目标任务请求从所述输入输出处理状态更新为重试状态;

基于所述重试状态,再次对所述目标任务请求对应的多个所述输入输出请求子任务进行处理。

12.根据权利要求11所述的输入输出请求处理方法,其特征在于,在所述将所述目标任务请求从所述输入输出处理状态更新为重试状态之后,所述方法还包括:根据标记为所述异常状态或所述错误状态对应的所述输入输出二级处理状态,对输入输出处理过程失败的输入输出请求子任务进行定位。

13.根据权利要求10所述的输入输出请求处理方法,其特征在于,所述输入输出二级处理状态包括未初始化状态、进入执行状态、同步缓存状态、同步缓存完成状态、处理状态、重新执行状态和子任务完成状态;

所述基于所述第二轮询过程,获取各个所述输入输出请求子任务对应的输入输出二级处理状态,包括:在确定所述目标任务请求处于所述输入输出处理状态后,基于所述目标任务请求待进行读写操作的存储系统的硬件类型,对各个所述输入输出请求子任务执行对应的异步处理操作,获取各个所述输入输出请求子任务对应的输入输出二级处理状态。

14.根据权利要求13所述的输入输出请求处理方法,其特征在于,所述基于所述目标任务请求待进行读写操作的存储系统的硬件类型,对各个所述输入输出请求子任务执行对应的异步处理操作,获取各个所述输入输出请求子任务对应的输入输出二级处理状态,包括:在确定所述目标任务请求为所述输入输出读写命令类型请求时,若待进行读写操作的存储系统的硬件类型为全闪类型,在发起所述输入输出请求子任务后,将所述输入输出请求子任务从所述进入执行状态更新为所述同步缓存完成状态;

若待进行读写操作的存储系统的硬件类型为混闪类型,且所述输入输出请求子任务对应的请求数据在系统缓存中命中,将所述输入输出请求子任务从所述进入执行状态更新为所述同步缓存完成状态;

若待进行读写操作的存储系统的硬件类型为混闪类型,且所述输入输出请求子任务对应的请求数据在系统缓存中未命中,则发起数据盘读取请求;基于所述第二轮询过程,在确定所述数据盘读取请求执行完成之后,将所述进入执行状态更新为所述同步缓存状态,并在所述数据盘读取请求读取到的数据写入至系统缓存后,将所述同步缓存状态更新为所述同步缓存完成状态;

在确定所有所述输入输出请求子任务均处于所述同步缓存完成状态,将所述同步缓存完成状态更新为所述处理状态,并对各个所述输入输出请求子任务的处理结果进行检查,并在确定检查完成且处理结果正常后,将所述处理状态更新为所述子任务完成状态;

所述若根据各个所述输入输出请求子任务对应的所述输入输出二级处理状态,确定所有所述输入输出请求子任务已全部处理完成,包括:在所述目标任务请求中所有所述输入输出请求子任务处于所述子任务完成状态时,确定所有所述输入输出请求子任务已全部处理完成。

15.根据权利要求13所述的输入输出请求处理方法,其特征在于,所述方法还包括:

在确定所述目标任务请求为输入输出管理命令类型请求时,在发起所述输入输出请求子任务后,将所述输入输出请求子任务从所述进入执行状态更新为所述同步缓存完成状态,并发起创建对应的逻辑单元号元数据的请求任务。

16.根据权利要求5所述的输入输出请求处理方法,其特征在于,在所述根据分配顺序码后的输入输出子请求,生成目标任务链表之后,所述方法还包括:在确定所述目标任务请求完成之后,将所述目标任务链表中所述目标任务请求对应的所有所述输入输出子请求删除。

17.一种输入输出请求处理系统,其特征在于,包括:

任务处理模块,用于在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断,若判断获知所述目标数据的数据长度满足预设条件,对所述目标任务请求进行切片处理,并根据切片处理结果,生成多个对应的输入输出请求子任务;

输入输出处理模块,用于基于预设轮询条件,获取到各个所述输入输出请求子任务对应的子任务处理结果,并在确定所述目标数据对应的所有所述输入输出请求子任务已全部处理完成之后,将所有所述子任务处理结果进行组合,得到所述目标任务请求的目标任务处理结果;

所述系统还包括事件接收模块,所述事件接收模块具体用于:

接收客户端发送的所述目标任务请求;

对所述目标任务请求的任务事件类型进行判断,若所述目标任务请求的所述任务事件类型为登录任务事件,对所述目标任务请求对应的所述目标数据的数据量进行监测,获取目标数据实时监测结果;

判断所述目标数据实时监测结果是否大于第一预设阈值,若大于所述第一预设阈值,确定所述目标任务请求为所述输入输出请求;

若当前时刻的事件接收模式为被动接收事件通知模式,将所述被动接收事件通知模式切换为主动轮询事件模式。

18.一种电子设备,包括存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至16任一项所述输入输出请求处理方法。

19.一种非暂态计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至16任一项所述输入输出请求处理方法。

说明书 :

输入输出请求处理方法、系统、电子设备及存储介质

技术领域

[0001] 本发明涉及计算机数据存储技术领域,尤其涉及一种输入输出请求处理方法、系统、电子设备及存储介质。

背景技术

[0002] 影响数据存储系统性能的因素主要有硬件和软件两个方面,在硬件方面,数据存储性能主要取决于中央处理器(Central Processing Unit,简称CPU),内存和硬盘这三大物理部件;而在软件方面,数据存储的性能主要取决于软件系统架构,输入输出(Input/Output,简称IO)处理相关算法和系统通信机制等要素。
[0003] 随着半导体技术的飞速发展,CPU的运算能力越来越强大,内存和硬盘的容量也越来越大,且速度也越来越快,软件的迭代更新已经跟不上半导体硬件的飞速发展,特别是在磁盘性能优越、CPU计算资源丰富、数据吞吐量大以及IO并发量大的计算机数据存储领域场景中,软件层面上的处理能力不足造成存储系统性能降低。
[0004] 因此,现在亟需一种输入输出请求处理方法、系统、电子设备及存储介质来解决上述问题。

发明内容

[0005] 针对现有技术存在的问题,本发明提供一种输入输出请求处理方法、系统、电子设备及存储介质。
[0006] 本发明提供一种输入输出请求处理方法,包括:
[0007] 在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断,若判断获知所述目标数据的数据长度满足预设条件,对所述目标任务请求进行切片处理,并根据切片处理结果,生成多个对应的输入输出请求子任务;
[0008] 基于预设轮询条件,获取到各个所述输入输出请求子任务对应的子任务处理结果,并在确定所述目标数据对应的所有所述输入输出请求子任务已全部处理完成之后,将所有所述子任务处理结果进行组合,得到所述目标任务请求的目标任务处理结果。
[0009] 根据本发明提供的一种输入输出请求处理方法,在所述在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断之前,所述方法还包括:
[0010] 接收客户端发送的所述目标任务请求;
[0011] 对所述目标任务请求的任务事件类型进行判断,若所述目标任务请求的所述任务事件类型为登录任务事件,对所述目标任务请求对应的所述目标数据的数据量进行监测,获取目标数据实时监测结果;
[0012] 判断所述目标数据实时监测结果是否大于第一预设阈值,若大于所述第一预设阈值,确定所述目标任务请求为所述输入输出请求;
[0013] 若当前时刻的事件接收模式为被动接收事件通知模式,将所述被动接收事件通知模式切换为主动轮询事件模式。
[0014] 根据本发明提供的一种输入输出请求处理方法,在所述判断所述目标数据实时监测结果是否大于第一预设阈值之后,所述方法还包括:
[0015] 若所述目标数据实时监测结果小于或等于所述第一预设阈值,判断当前时刻的事件接收模式是否为所述主动轮询事件模式,若是所述主动轮询事件模式,将所述主动轮询事件模式切换为所述被动接收事件通知模式,其中,所述被动接收事件通知模式用于通过任务处理器直接对所述目标任务请求进行处理,并将处理结果返回至所述客户端;
[0016] 若不是所述主动轮询事件模式,则确定所述事件接收模式为所述被动接收事件通知模式,并基于所述被动接收事件通知模式接收所述客户端发送的下一个任务请求。
[0017] 根据本发明提供的一种输入输出请求处理方法,在所述对所述目标任务请求对应的所述目标数据的数据量进行监测,获取目标数据实时监测结果之后,所述方法还包括:
[0018] 对所述客户端发送的所述下一个任务请求的任务事件类型进行判断,若所述下一个任务请求的所述任务事件类型为所述目标任务请求对应的注销任务事件,则停止对所述目标数据的数据量进行监测,并在确定当前时刻的事件接收模式为所述主动轮询事件模式时,将所述主动轮询事件模式切换为所述被动接收事件通知模式。
[0019] 根据本发明提供的一种输入输出请求处理方法,所述在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断,包括:
[0020] 在确定所述目标任务请求属于输入输出读写命令类型请求时,判断所述目标数据的数据长度是否大于第二预设阈值,若大于,则确定所述目标数据的数据长度满足所述预设条件。
[0021] 根据本发明提供的一种输入输出请求处理方法,所述对所述目标任务请求进行切片处理,并根据切片处理结果,生成多个对应的输入输出请求子任务,包括:
[0022] 根据所述目标任务请求,构建对应的目标任务标识号;
[0023] 基于所述第二预设阈值,对所述目标任务请求进行切分处理,得到多个输入输出子请求;
[0024] 基于所述目标任务标识号,按照切分顺序对各个所述输入输出子请求分配对应的顺序码,并根据所述顺序码,根据分配顺序码后的输入输出子请求,生成目标任务链表,其中,所述目标任务链表中包括各个所述输入输出子请求对应的所述输入输出请求子任务。
[0025] 根据本发明提供的一种输入输出请求处理方法,所述预设轮询条件包括第一轮询过程和第二轮询过程;
[0026] 所述基于预设轮询条件,获取到各个所述输入输出请求子任务对应的子任务处理结果,包括:
[0027] 在确定当前时刻的事件接收模式为主动轮询事件模式后, 通过所述第一轮询过程,判断是否存在客户端发送的新任务请求;
[0028] 若不存在所述新任务请求,通过所述第二轮询过程,判断是否存在各个所述输入输出请求子任务对应的子任务处理结果,若存在,基于多个所述第二轮询过程,获取各个所述输入输出请求子任务对应的子任务处理结果。
[0029] 根据本发明提供的一种输入输出请求处理方法,所述方法还包括:
[0030] 若存在所述客户端发送的所述新任务请求,根据所述新任务请求中的字段信息,判断所述新任务请求的输入输出命令类型;
[0031] 若所述新任务请求为所述输入输出读写命令类型请求时,判断所述新任务请求对应的数据长度是否大于所述第二预设阈值,若大于,则确定所述新任务请求对应的数据长度满足所述预设条件,对所述新任务请求对应的数据进行切片处理;
[0032] 若所述新任务请求为输入输出管理命令类型请求时,直接对所述新任务请求进行对应的输入输出处理,并通过所述第二轮询过程,判断是否存在所述新任务请求对应的新任务处理结果,若存在,将所述新任务处理结果返回至所述客户端。
[0033] 根据本发明提供的一种输入输出请求处理方法,在所述在确定所述目标任务请求属于输入输出读写命令类型请求时,判断所述目标数据的数据长度是否大于第二预设阈值之后,所述方法还包括:
[0034] 若所述目标数据的数据长度小于或等于所述第二预设阈值,直接对所述目标任务请求进行对应的输入输出处理,并通过所述第二轮询过程,判断是否存在所述目标任务请求对应的所述目标任务处理结果,若存在,将所述目标任务处理结果返回至所述客户端。
[0035] 根据本发明提供的一种输入输出请求处理方法,所述在确定所述目标数据对应的所有所述输入输出请求子任务已全部处理完成之后,将所有所述子任务处理结果进行组合,得到所述目标任务请求的目标任务处理结果,包括:
[0036] 基于所述第二轮询过程,根据所述目标任务请求的处理进度状态,判断所述目标数据对应的所有所述输入输出请求子任务是否全部处理完成,若全部处理完成,将所有所述子任务处理结果进行组合,得到所述目标任务处理结果。
[0037] 根据本发明提供的一种输入输出请求处理方法,所述基于所述第二轮询过程,根据所述目标任务请求的处理进度状态,判断所述目标数据对应的所有所述输入输出请求子任务是否全部处理完成,若全部处理完成,将所有所述子任务处理结果进行组合,得到所述目标任务处理结果,包括:
[0038] 在所述第二轮询过程中,若轮询到所述目标任务请求对应的输入输出请求资源的初始化过程已完成,将所述目标任务请求从初始化处理进度状态更新为输入输出处理状态;
[0039] 在所述目标任务请求处于所述输入输出处理状态时,对所述目标任务请求对应的多个所述输入输出请求子任务进行处理,并基于所述第二轮询过程,获取各个所述输入输出请求子任务对应的输入输出二级处理状态;
[0040] 若根据各个所述输入输出请求子任务对应的所述输入输出二级处理状态,确定所有所述输入输出请求子任务已全部处理完成,将所述目标任务请求从所述输入输出处理状态更新为任务完成状态,并将所有所述子任务处理结果进行组合,得到所述目标任务处理结果。
[0041] 根据本发明提供的一种输入输出请求处理方法,所述方法还包括:
[0042] 在所述目标任务请求处于所述输入输出处理状态时,若在所述第二轮询过程中,所述输入输出请求子任务对应的所述输入输出二级处理状态被标记为异常状态或错误状态,将所述目标任务请求从所述输入输出处理状态更新为重试状态;
[0043] 基于所述重试状态,再次对所述目标任务请求对应的多个所述输入输出请求子任务进行处理。
[0044] 根据本发明提供的一种输入输出请求处理方法,在所述将所述目标任务请求从所述输入输出处理状态更新为重试状态之后,所述方法还包括:
[0045] 根据标记为所述异常状态或所述错误状态对应的所述输入输出二级处理状态,对输入输出处理过程失败的输入输出请求子任务进行定位。
[0046] 根据本发明提供的一种输入输出请求处理方法,所述输入输出二级处理状态包括未初始化状态、进入执行状态、同步缓存状态、同步缓存完成状态、处理状态、重新执行状态和子任务完成状态;
[0047] 所述基于所述第二轮询过程,获取各个所述输入输出请求子任务对应的输入输出二级处理状态,包括:
[0048] 在确定所述目标任务请求处于所述输入输出处理状态后,基于所述目标任务请求待进行读写操作的存储系统的硬件类型,对各个所述输入输出请求子任务执行对应的异步处理操作,获取各个所述输入输出请求子任务对应的输入输出二级处理状态。
[0049] 根据本发明提供的一种输入输出请求处理方法,所述基于所述目标任务请求待进行读写操作的存储系统的硬件类型,对各个所述输入输出请求子任务执行对应的异步处理操作,获取各个所述输入输出请求子任务对应的输入输出二级处理状态,包括:
[0050] 在确定所述目标任务请求为所述输入输出读写命令类型请求时,若待进行读写操作的存储系统的硬件类型为全闪类型,在发起所述输入输出请求子任务后,将所述输入输出请求子任务从所述进入执行状态更新为所述同步缓存完成状态;
[0051] 若待进行读写操作的存储系统的硬件类型为混闪类型,且所述输入输出请求子任务对应的请求数据在系统缓存中命中,将所述输入输出请求子任务从所述进入执行状态更新为所述同步缓存完成状态;
[0052] 若待进行读写操作的存储系统的硬件类型为混闪类型,且所述输入输出请求子任务对应的请求数据在系统缓存中未命中,则发起数据盘读取请求;基于所述第二轮询过程,在确定所述数据盘读取请求执行完成之后,将所述进入执行状态更新为所述同步缓存状态,并在所述数据盘读取请求读取到的数据写入至系统缓存后,将所述同步缓存状态更新为所述同步缓存完成状态;
[0053] 在确定所有所述输入输出请求子任务均处于所述同步缓存完成状态,将所述同步缓存完成状态更新为所述处理状态,并对各个所述输入输出请求子任务的处理结果进行检查,并在确定检查完成且处理结果正常后,将所述处理状态更新为所述子任务完成状态;
[0054] 所述若根据各个所述输入输出请求子任务对应的所述输入输出二级处理状态,确定所有所述输入输出请求子任务已全部处理完成,包括:
[0055] 在所述目标任务请求中所有所述输入输出请求子任务处于所述子任务完成状态时,确定所有所述输入输出请求子任务已全部处理完成。
[0056] 根据本发明提供的一种输入输出请求处理方法,所述方法还包括:
[0057] 在确定所述目标任务请求为输入输出管理命令类型请求时,在发起所述输入输出请求子任务后,将所述输入输出请求子任务从所述进入执行状态更新为所述同步缓存完成状态,并发起创建对应的逻辑单元号元数据的请求任务。
[0058] 根据本发明提供的一种输入输出请求处理方法,在所述根据分配顺序码后的输入输出子请求,生成目标任务链表之后,所述方法还包括:
[0059] 在确定所述目标任务请求完成之后,将所述目标任务链表中所述目标任务请求对应的所有所述输入输出子请求删除。
[0060] 本发明还提供一种输入输出请求处理系统,包括:
[0061] 任务处理模块,用于在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断,若判断获知所述目标数据的数据长度满足预设条件,对所述目标任务请求进行切片处理,并根据切片处理结果,生成多个对应的输入输出请求子任务;
[0062] 输入输出处理模块,用于基于预设轮询条件,获取到各个所述输入输出请求子任务对应的子任务处理结果,并在确定所述目标数据对应的所有所述输入输出请求子任务已全部处理完成之后,将所有所述子任务处理结果进行组合,得到所述目标任务请求的目标任务处理结果。
[0063] 本发明还提供一种电子设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现如上述任一种所述输入输出请求处理方法。
[0064] 本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现如上述任一种所述输入输出请求处理方法。
[0065] 本发明提供的输入输出请求处理方法、系统、电子设备及存储介质,对接收到的输入输出请求对应的目标数据的数据长度进行判断,若判断获知目标数据的数据长度满足预设条件,将目标任务请求进行切片处理,得到多个输入输出请求子任务,并基于预设轮询条件,在确定目标数据对应的所有输入输出请求子任务已全部处理完成之后,得到目标任务请求的目标任务处理结果,在提高系统的输入输出吞吐率的同时,也提高了存储系统的整体性能。

附图说明

[0066] 为了更清楚地说明本发明或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图进行简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0067] 图1为本发明提供的输入输出请求处理方法的流程示意图;
[0068] 图2为本发明提供的事件接收模式的切换流程示意图;
[0069] 图3为本发明提供的轮询过程的示意图;
[0070] 图4为本发明提供的两级状态机的示意图;
[0071] 图5为本发明提供的两级状态转换过程的示意图;
[0072] 图6为本发明提供的二级状态机的转换示意图;
[0073] 图7为本发明提供的输入输出请求任务的切片示意图;
[0074] 图8为本发明提供的输入输出请求处理系统的结构示意图;
[0075] 图9为本发明提供的输入输出请求处理系统的整体结构示意图;
[0076] 图10为本发明提供的电子设备的结构示意图。

具体实施方式

[0077] 为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明中的附图,对本发明中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
[0078] 随着半导体技术的发展,CPU的发展经历了4位处理器时代,8位处理器时代,16位处理器时代,32位处理器时代,以及当前的64位处理器时代;内存的发展经历了第一代SDR(Single Data Rate),第二代DDR(Double Data Rate),第三代DDR2,第四代DDR3,以及当前的第五代DDR4;硬盘的发展经历了第一代机械硬盘(Hard Disk Drive,简称HDD),第二代固态硬盘(Solid State Drive,简称SSD),以及当前第三代的非易失性内存主机控制器接口规范(Non‑Volatile Memory Express,简称NVMe)存储接口。随着CPU的运算能力越来越强大,内存、硬盘的容量越来越大、速度也越来越快,软件的迭代更新已经跟不上半导体硬件的飞速发展,特别是计算机数据存储领域中,存储系统性能瓶颈从硬件上逐步转移到软件层面上。
[0079] 在相关技术中,数据通信主要通过系统中断的事件通知方式进行。例如,客户端(client)发送命令请求,操作系统接收到该命令请求后产生中断信号,再主动去通知后端存储系统;同样地,后端存储系统下发磁盘IO操作后,也要等待磁盘IO完成的事件通知。在数据吞吐量不大、IO并发量不高的场景下,存储系统的性能主要取决于磁盘的性能,而随着硬件的发展,NVMe磁盘读写性能已经能够达到3500Mb/s,远优于常规HDD磁盘130Mb/s的读写速度,系统中的CPU计算资源和内存容量资源也及其丰富;另一方面,随着互联网业务的发展,数据吞吐量和IO并发量也大幅度增加。相比之下,操作系统和存储系统的中断资源及其处理能力已经成为制约存储系统性能的瓶颈。另外,当中断响应不及时,也会影响操作系统上的其他业务和服务。
[0080] 针对目前磁盘性能优越、CPU计算资源丰富,数据吞吐量大,IO并发量大的场景,本发明提供了一种基于轮询(poller)和状态机转换的单机异步IO管理方法,从而提高后端存储服务的IO性能,增强操作系统上的业务稳定性。
[0081] 图1为本发明提供的输入输出请求处理方法的流程示意图,如图1所示,本发明提供了一种输入输出请求处理方法,包括:
[0082] 步骤101,在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断,若判断获知所述目标数据的数据长度满足预设条件,对所述目标任务请求进行切片处理,并根据切片处理结果,生成多个对应的输入输出请求子任务。
[0083] 在本发明中,需要确定当前接收到的目标任务(task)请求是否为一个输入输出请求。在一实施例中,可通过流量监测器,对接收目标任务请求的接口处进行实时监测,以获取到该目标任务请求的数据量,进而根据实时监测到的数据量与预设阈值(即第一预设阈值)之间的比对结果,确定该目标任务请求为输入输出请求。
[0084] 进一步地,对于确定为输入输出请求的目标任务请求,对其对应的目标数据的数据长度进行判断,一旦获知目标数据的数据长度,可以将其与预设条件进行比较。在本发明中,预设条件可设置为一个预设数据长度(即第二预设阈值),用于决定是否需要对目标任务请求进行切片处理。如果判断结果显示目标数据的数据长度满足预设条件(如数据长度大于第二预设阈值),那么就可以对目标任务请求进行切片处理。
[0085] 在切片处理的过程中,会生成多个对应的输入输出请求子任务,每个子任务都代表了原始目标任务请求中的一个数据片段,并具有相应的输入输出请求信息。通过这个过程,可以将一个大型的目标任务请求拆分为多个更小的输入输出请求子任务,以便在系统中更高效地处理和执行,可以提高系统中的IO处理的并行性、响应速度和资源利用率。
[0086] 步骤102,基于预设轮询条件,获取到各个所述输入输出请求子任务对应的子任务处理结果,并在确定所述目标数据对应的所有所述输入输出请求子任务已全部处理完成之后,将所有所述子任务处理结果进行组合,得到所述目标任务请求的目标任务处理结果。
[0087] 在本发明中,预设轮询条件用于确定何时以及如何获取子任务的处理结果,包括轮询时间间隔和触发条件。在本发明中,轮询过程包括大轮询过程(即第一轮询过程)和小轮询过程(即第二轮询过程),通过启动一个sock_poller线程,用于接收客户端发送的新任务请求以及IO请求对应的IO请求处理结果,通过每次大轮询过程,先轮询是否有新任务请求到来,然后再通过小轮询过程,轮询是否有IO请求处理结果到来。本发明采用采用两级轮询的模式,可减少对操作系统中断资源的占用,提高操作系统整体性能。
[0088] 进一步地,针对每一个输入输出请求子任务,根据预设轮询条件,系统会定期进行查询或检查子任务的处理状态,以获取处理结果。当获取到各个输入输出请求子任务对应的处理结果时,系统会将这些处理结果进行存储或缓存,等待后续的处理和组合。在确定目标数据对应的所有输入输出请求子任务已全部处理完成之后,开始将所有子任务的处理结果进行组合,得到目标任务请求的最终处理结果,这个结果可以用于向用户报告、存储、传输或其它后续处理,有助于确保任务的完整性和准确性,同时提高了系统的可靠性和效率。
[0089] 本发明提供的输入输出请求处理方法,对接收到的输入输出请求对应的目标数据的数据长度进行判断,若判断获知目标数据的数据长度满足预设条件,将目标任务请求进行切片处理,得到多个输入输出请求子任务,并基于预设轮询条件,在确定目标数据对应的所有输入输出请求子任务已全部处理完成之后,得到目标任务请求的目标任务处理结果,在提高系统的输入输出吞吐率的同时,也提高了存储系统的整体性能。
[0090] 在上述实施例的基础上,在所述在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断之前,所述方法还包括:
[0091] 接收客户端发送的所述目标任务请求;
[0092] 对所述目标任务请求的任务事件类型进行判断,若所述目标任务请求的所述任务事件类型为登录任务事件,对所述目标任务请求对应的所述目标数据的数据量进行监测,获取目标数据实时监测结果;
[0093] 判断所述目标数据实时监测结果是否大于第一预设阈值,若大于所述第一预设阈值,确定所述目标任务请求为所述输入输出请求;
[0094] 若当前时刻的事件接收模式为被动接收事件通知模式,将所述被动接收事件通知模式切换为主动轮询事件模式。
[0095] 在本发明中,在后端存储系统初始化时,需要设置第一预设阈值,第一预设阈值用于为动态切换事件(Event)接收模式提供判断依据。具体地,当系统中断资源越匮乏,CPU计算资源越丰富,磁盘性能越好,磁盘个数越多的场景下,第一预设阈值应设置较小值,反之,对于系统中断资源越丰富,CPU计算资源越匮乏,磁盘性能越差,磁盘个数越少的场景,第一预设阈值应设置较大值。该第一预设阈值的确定过程,可以通过多次性能摸底测试,选择性能最佳的数值,通过不断调整第一预设阈值,并进行多次性能摸底测试,选择与环境匹配度最好,性能最好的第一预设阈值。在本发明中,第一预设阈值可以为一个预设数据量大小,进而根据实时监测到的任务请求对应的数据量,判断该任务请求是否为输入输出请求。在一些实施例中,还可以根据实际场景需求,将第一预设阈值设置为一个预设流量速率,进而根据实时监测到的任务请求对应数据在一段时间内的流量速率,判断该任务请求是否为输入输出请求。
[0096] 进一步地,接收到客户端发送的目标任务请求之后,需要对其任务事件类型进行判断。如果判断结果显示目标任务请求的任务事件类型是登录任务事件,此时可通过开启流量监测器,对目标任务请求的目标数据进行实时监测,以得到相应的数据量大小,即得到目标数据实时监测结果。目标数据的数据量监测结果将被用于后续的判断,如果判断结果显示目标数据的数据量大于第一预设阈值,那么系统可以确定目标任务请求是一个输入输出请求。
[0097] 在确定目标任务请求为输入输出请求后,如果当前时刻的事件接收模式是被动接收事件通知模式,那么系统需要将其切换为主动轮询事件模式。被动接收事件通知模式通常是指系统在有任务到达时才进行响应,而主动轮询事件模式则是系统主动查询任务状态或结果。
[0098] 本发明根据任务事件类型和目标数据的数据量进行判断和处理,从而决定是否将目标任务请求视为输入输出请求,并在必要时切换事件接收模式,从而对事件接收模式进行动态调整,以满足系统中断资源和CPU资源利用率,最大程度发挥系统性能,降低IO性能瓶颈点。
[0099] 在上述实施例的基础上,在所述判断所述目标数据实时监测结果是否大于第一预设阈值之后,所述方法还包括:
[0100] 若所述目标数据实时监测结果小于或等于所述第一预设阈值,判断当前时刻的事件接收模式是否为所述主动轮询事件模式,若是所述主动轮询事件模式,将所述主动轮询事件模式切换为所述被动接收事件通知模式,其中,所述被动接收事件通知模式用于通过任务处理器直接对所述目标任务请求进行处理,并将处理结果返回至所述客户端;
[0101] 若不是所述主动轮询事件模式,则确定所述事件接收模式为所述被动接收事件通知模式,并基于所述被动接收事件通知模式接收所述客户端发送的下一个任务请求。
[0102] 在本发明中,如果目标数据实时监测结果小于或等于第一预设阈值,那么需要进一步判断当前时刻的事件接收模式。如果当前时刻的事件接收模式为主动轮询事件模式,系统需要将其切换为被动接收事件通知模式,主动轮询事件模式是通过系统主动查询任务状态或结果,而被动接收事件通知模式则是通过任务处理器直接对目标任务请求进行处理,并将处理结果返回给客户端。
[0103] 在被动接收事件通知模式下,系统可以直接处理目标任务请求,并将处理结果返回给客户端,这意味着任务请求的处理过程不需要经过额外的轮询或查询操作。如果当前时刻的事件接收模式不是主动轮询事件模式,则确定事件接收模式为被动接收事件通知模式,并且系统会基于被动接收事件通知模式继续接收客户端发送的下一个任务请求,可以有效地适应任务需求和事件处理方式,提高系统的效率和响应能力。
[0104] 在上述实施例的基础上,在所述对所述目标任务请求对应的所述目标数据的数据量进行监测,获取目标数据实时监测结果之后,所述方法还包括:
[0105] 对所述客户端发送的所述下一个任务请求的任务事件类型进行判断,若所述下一个任务请求的所述任务事件类型为所述目标任务请求对应的注销任务事件,则停止对所述目标数据的数据量进行监测,并在确定当前时刻的事件接收模式为所述主动轮询事件模式时,将所述主动轮询事件模式切换为所述被动接收事件通知模式。
[0106] 在本发明中,在输入输出请求的处理过程中,系统会对客户端每一次发送的任务请求的任务事件类型进行判断,以确定任务请求的性质或目的。在当前时刻,如果下一个任务请求的任务事件类型为目标任务请求对应的注销任务事件,系统需要停止对目标数据的数据量进行监测,这意味着系统不再需要继续监测和处理目标数据的数据量。
[0107] 进一步地,如果当前时刻的事件接收模式被确定为主动轮询事件模式,那么系统需要将其切换为被动接收事件通知模式,以确保系统在注销任务事件发生时,能够及时切换事件接收模式,并通过任务处理器直接处理注销任务事件。
[0108] 图2为本发明提供的事件接收模式的切换流程示意图,可参考图2所示,后端存储系统初始化后,事件接收模式默认采用被动接收事件通知模式,此时流量监测器默认处于关闭状态,需要说明的是,随着后续周期性的进行输入输出请求处理,事件接收模式也会根据实际接收到的任务请求,对流量监测器的开启状态和关闭状态进行相应控制。
[0109] 进一步地,在接收到任务请求事件后,判断是否为登录(login)任务事件,若是,则启动流量监测器。在本发明中,对于后续的输入输出请求过程,当接收到任务请求事件时,若任务请求事件为注销(logout)任务事件,则停止流量监测器对相应的任务请求进行监测,同时,将事件接收模式恢复到默认的被动接收通知模式(若当前事件接收模式为主动轮询事件模式的情况),从而结束对相应任务请求的监测。
[0110] 进一步地,在接收到登录任务事件后,启动流量监测器,从而在任务接口处实时监测任务请求的数据量(或流量速率)。若数据实时监测结果大于第一预设阈值,则进一步判断当前时刻的事件接收模式是否为被动接收通知模式,若是被动接收通知模式,则切换到主动轮询事件模式,否则,继续以当前事件接收模式(即被动接收通知模式)接收下一个新事件。
[0111] 若数据实时监测结果小于或等于第一预设阈值,则进一步判断当前时刻的事件接收模式是否为主动轮询事件模式,若是主动轮询事件方式,则切换到被动接收事件通知模式,否则,继续以当前事件接收模式(即主动轮询事件模式)接收下一个新事件,从而根据实时数据量对事件接收模式进行动态切换,充分发挥后端存储系统的性能。
[0112] 在上述实施例的基础上,所述在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断,包括:
[0113] 在确定所述目标任务请求属于输入输出读写命令类型请求时,判断所述目标数据的数据长度是否大于第二预设阈值,若大于,则确定所述目标数据的数据长度满足所述预设条件。
[0114] 在本发明中,后端存储系统初始化时,需要设置一个第二预设阈值,第二预设阈值用于为输入输出读写命令类型的IO任务请求的切片过程提供判断依据,目的是提高IO处理的并发量,减小IO处理的时延,充分发挥后端存储系统的性能。在本发明中,第二预设阈值应与后端存储系统的最小数据管理单元的大小保持一致,后端存储系统最小数据管理单元,可参考磁盘扇区的概念,是数据操作的最小单位,例如,后端存储系统的最小数据管理单元大小为4MB,若IO任务请求需要读取40MB的目标数据,则IO任务请求在不分片的情况下,若接收到这一个IO任务请求,需要按照顺序以4MB为单位,顺序地至少进行10次磁盘读写操作;而在IO任务请求分片的情况下,一个需要读取40MB目标数据的IO请求任务,会被拆分为10个4MB的IO请求子任务,需要说明的是,在进行任务请求切分时,同时也需考虑最小数据管理单元的磁盘空间,即前一个IO请求任务中的最后一个子任务占用了一部分磁盘空间,如2MB,此时,对于40MB的目标数据,其切分后对应的第一子任务首先被填充至IO请求任务中的最后一个子任务未占用的磁盘空间中,进而再按照4MB的磁盘空间依次将目标数据对应的子任务进行填充,此时,40MB的目标数据的IO请求任务将会被切分为11个子任务。在本发明中,以切分得到10个IO请求子任务进行说明,每个IO请求子任务对应一个数据管理单元,从而实现并发地执行这10次磁盘操作,理论上IO性能可以得到10倍提升。
[0115] 在上述实施例的基础上,所述对所述目标任务请求进行切片处理,并根据切片处理结果,生成多个对应的输入输出请求子任务,包括:
[0116] 根据所述目标任务请求,构建对应的目标任务标识号;
[0117] 基于所述第二预设阈值,对所述目标任务请求进行切分处理,得到多个输入输出子请求;
[0118] 基于所述目标任务标识号,按照切分顺序对各个所述输入输出子请求分配对应的顺序码,并根据所述顺序码,根据分配顺序码后的输入输出子请求,生成目标任务链表,其中,所述目标任务链表中包括各个所述输入输出子请求对应的所述输入输出请求子任务。
[0119] 在本发明中,根据目标任务请求,需要构建一个唯一的目标任务标识号,用于标识该任务请求的唯一性和识别;然后,基于第二预设阈值,对目标任务请求进行切分处理,将大任务切分成多个输入输出子请求,以便于分批处理和管理。同时,在每个输入输出子请求上分配对应的顺序码,按照切分的顺序为每个子请求分配一个顺序码,以确保在后续处理中能够按照正确的顺序执行这些子请求。
[0120] 进一步地,根据分配的顺序码,生成目标任务链表,其中包括各个输入输出子请求对应的输入输出请求子任务,以形成一个任务执行顺序,确保各个子请求按照正确的顺序被执行。
[0121] 在上述实施例的基础上,在所述根据分配顺序码后的输入输出子请求,生成目标任务链表之后,所述方法还包括:
[0122] 在确定所述目标任务请求完成之后,将所述目标任务链表中所述目标任务请求对应的所有所述输入输出子请求删除。
[0123] 在本发明中,基于第二轮询过程反复轮询任务链表,对任务链表上的每个请求,根据其状态情况,安排对应的异步操作请求,每完成一项处理过程,及时更新其任务状态。当接收到新的IO任务请求,直接将其添加到任务链表的尾部即可。当某个IO请求任务确定已经完成时,将任务链表上已确定完成的IO请求任务删除,确保任务链表中只有尚未完成的任务请求,便于后续任务的管理和处理。
[0124] 在上述实施例的基础上,所述预设轮询条件包括第一轮询过程和第二轮询过程;
[0125] 所述基于预设轮询条件,获取到各个所述输入输出请求子任务对应的子任务处理结果,包括:
[0126] 在确定当前时刻的事件接收模式为主动轮询事件模式后, 通过所述第一轮询过程,判断是否存在客户端发送的新任务请求;
[0127] 若不存在所述新任务请求,通过所述第二轮询过程,判断是否存在各个所述输入输出请求子任务对应的子任务处理结果,若存在,基于多个所述第二轮询过程,获取各个所述输入输出请求子任务对应的子任务处理结果。
[0128] 在本发明中,启动一个sock_poller线程用于接收下发的新任务以及IO请求处理结果,通过第一轮询过程,先轮询是否有新任务到来,然后再通过第二轮询过程,轮询是否有IO请求处理结果到来。图3为本发明提供的轮询过程的示意图,可参考图3所示,在本发明中,在第一轮询过程中,主要是轮询是否接收到新任务,若新任务是登录任务或者注销任务,则将该任务交给前置任务处理器处理,主要是记录会话(session)状态,从而执行相应的登录或注销操作。
[0129] 进一步地,在确定目标任务请求为输入输出请求后,则将其作为新任务并放入任务列表中,每个任务请求有一个唯一的身份标识ID,即任务标识号,用于区分任务列表中的各个请求任务;接着,判断任务请求是否属于读写类IO请求任务,若属于读写类IO请求任务,则进一步判断该IO请求任务的目标数据长度是否大于第二预设阈值,若大于,则将该IO请求任务按照第二预设阈值进行切片,从而切分得到多个IO请求子任务;若任务请求不属于读写类IO请求任务,则属于管理类IO请求任务,例如,创建、删除、修改和查询等IO请求任务,则不需要考虑对这个IO请求任务进行切片,此时可直接对IO请求任务进行相应处理。对于需要进行切片处理的IO请求任务,在切片处理完成后,对每个IO请求子任务进行相应处理,并通过第二轮询过程,轮询到所有IO请求子任务完成后,将IO请求结果进行组合,得到最终的IO请求任务处理结果。
[0130] 在上述实施例的基础上,所述方法还包括:
[0131] 若存在所述客户端发送的所述新任务请求,根据所述新任务请求中的字段信息,判断所述新任务请求的输入输出命令类型;
[0132] 若所述新任务请求为所述输入输出读写命令类型请求时,判断所述新任务请求对应的数据长度是否大于所述第二预设阈值,若大于,则确定所述新任务请求对应的数据长度满足所述预设条件,对所述新任务请求对应的数据进行切片处理;
[0133] 若所述新任务请求为输入输出管理命令类型请求时,直接对所述新任务请求进行对应的输入输出处理,并通过所述第二轮询过程,判断是否存在所述新任务请求对应的新任务处理结果,若存在,将所述新任务处理结果返回至所述客户端。
[0134] 在本发明中,针对客户端发送的新任务请求,首先根据请求中的字段信息来判断新任务请求的输入输出命令类型,如果新任务请求为输入输出读写命令类型请求,将判断该新任务请求对应的数据长度是否大于第二预设阈值。当数据长度大于第二预设阈值时,则确定该新任务请求对应的数据长度满足预设条件。进而在确定数据长度满足预设条件后,对该新任务请求进行切片处理,以便于后续处理和管理。
[0135] 如果新任务请求为输入输出管理命令类型请求,系统将直接对该新任务请求进行对应的输入输出处理;然后,通过第二轮询过程,将判断是否存在该新任务请求对应的任务处理结果。如果轮询过程中存在任务处理结果,将把该处理结果返回至客户端,以便客户端获取最新的任务处理结果,以确保客户端发送的新任务请求能够得到及时有效的处理和反馈。
[0136] 在上述实施例的基础上,在所述在确定所述目标任务请求属于输入输出读写命令类型请求时,判断所述目标数据的数据长度是否大于第二预设阈值之后,所述方法还包括:
[0137] 若所述目标数据的数据长度小于或等于所述第二预设阈值,直接对所述目标任务请求进行对应的输入输出处理,并通过所述第二轮询过程,判断是否存在所述目标任务请求对应的所述目标任务处理结果,若存在,将所述目标任务处理结果返回至所述客户端。
[0138] 在本发明中,当目标数据为输入输出读写命令类型请求,且数据长度小于或等于第二预设阈值时,直接对目标任务请求进行相应的输入输出处理;接着,通过第二轮询过程,判断是否存在目标任务请求对应的目标任务处理结果,如果轮询到目标任务处理结果,将该处理结果返回给客户端,以确保客户端能够及时获取到目标任务请求的处理结果,实现任务处理的有效反馈。
[0139] 在上述实施例的基础上,所述在确定所述目标数据对应的所有所述输入输出请求子任务已全部处理完成之后,将所有所述子任务处理结果进行组合,得到所述目标任务请求的目标任务处理结果,包括:
[0140] 基于所述第二轮询过程,根据所述目标任务请求的处理进度状态,判断所述目标数据对应的所有所述输入输出请求子任务是否全部处理完成,若全部处理完成,将所有所述子任务处理结果进行组合,得到所述目标任务处理结果。
[0141] 在本发明中,若在第一轮询过程中没有接收到新任务或者已经完成对新任务的前期处理工作,进一步地,继续通过第二轮询过程,轮询是否有返回IO请求任务处理结果,若没有则进入下一轮大轮询;若有,则判断该IO请求任务处理结果对应的父任务的目标数据长度是否大于第二预设阈值(可参考图3所示,判断接收到的处理结果对应的任务的目标数据是否大于第二预设阈值),若大于,则说明该IO请求任务处理结果为一个子任务的处理结果,需要这个子任务的处理结果和其它相应的子任务的处理结果进行合并组合,否则无需考虑IO请求结果组合,即IO请求任务处理结果对应的父任务未进行过切分处理。
[0142] 接着,判断任务是否完成,对于未进行IO请求切片处理的任务,在获取到处理结果后即认为任务完成,对于进行了IO请求切片的任务(如目标任务请求),需要获取到所有IO请求子任务的处理结果,才确定任务完成,同时将该任务从任务列表删除,继续下一轮轮询;若任务还未完成,则继续下一轮轮询。
[0143] 本发明利用第二轮询过程来监控目标任务请求的处理进度状态,当轮询过程中判定所有输入输出请求子任务全部处理完成,将对子任务的处理结果进行组合,以获得目标任务的最终处理结果,可以确保在目标任务的所有子任务都完成后,系统能够组合处理结果并向客户端及时返回完整的目标任务处理结果。
[0144] 在上述实施例的基础上,所述基于所述第二轮询过程,根据所述目标任务请求的处理进度状态,判断所述目标数据对应的所有所述输入输出请求子任务是否全部处理完成,若全部处理完成,将所有所述子任务处理结果进行组合,得到所述目标任务处理结果,包括:
[0145] 在所述第二轮询过程中,若轮询到所述目标任务请求对应的输入输出请求资源的初始化过程已完成,将所述目标任务请求从初始化处理进度状态更新为输入输出处理状态;
[0146] 在所述目标任务请求处于所述输入输出处理状态时,对所述目标任务请求对应的多个所述输入输出请求子任务进行处理,并基于所述第二轮询过程,获取各个所述输入输出请求子任务对应的输入输出二级处理状态;
[0147] 若根据各个所述输入输出请求子任务对应的所述输入输出二级处理状态,确定所有所述输入输出请求子任务已全部处理完成,将所述目标任务请求从所述输入输出处理状态更新为任务完成状态,并将所有所述子任务处理结果进行组合,得到所述目标任务处理结果。
[0148] 在本发明中,在第二轮询过程中,如果发现目标任务请求对应的输入输出请求资源的初始化过程(INIT状态)已经完成,系统将会把目标任务请求的处理进度状态从初始化状态更新为输入输出处理状态(IO状态)。
[0149] 当目标任务请求处于IO状态时,系统会对目标任务请求对应的多个输入输出请求子任务进行处理。并通过第二轮询过程,获取各个输入输出请求子任务对应的输入输出二级处理状态。然后,根据各个输入输出请求子任务对应的输入输出二级处理状态,判断是否所有输入输出请求子任务已经全部处理完成。
[0150] 如果确定所有输入输出请求子任务已经全部处理完成,将会把目标任务请求的处理状态从输入输出处理状态更新为任务完成状态(FINISH状态),进而将所有子任务的处理结果进行组合,以得到目标任务的最终处理结果。
[0151] 具体地,在本发明中,通过一级状态机,记录当前IO任务请求的实际处理进度的状态值,及时将状态值进行更新。对于一级状态机,当系统接收到IO任务请求时,则将状态机置为INIT状态,开始对相关资源进行初始化;当轮询到该IO任务请求的相关资源初始化完成后,则将状态更新为IO状态,同时下发异步IO任务;当轮询到该IO任务请求的所有异步IO任务操作完成后,则将状态更新为FINISH状态,同时将处理结果返回,自此IO处理结束,即一级状态机正常情况下的转换顺序为:INIT状态‑IO状态‑FINISH状态。
[0152] 本发明在第二轮询过程中,根据输入输出请求资源的初始化情况更新目标任务请求的处理状态,从而对输入输出请求子任务进行处理,并获取子任务的输入输出二级处理状态。当所有子任务都处理完成后,将更新目标任务的处理状态并对所有子任务的处理结果进行组合,从而得到目标任务的最终处理结果,确保系统能够有效地监控任务的处理状态,并在所有子任务完成后得到完整的任务处理结果。
[0153] 在上述实施例的基础上,所述方法还包括:
[0154] 在所述目标任务请求处于所述输入输出处理状态时,若在所述第二轮询过程中,所述输入输出请求子任务对应的所述输入输出二级处理状态被标记为异常状态或错误状态,将所述目标任务请求从所述输入输出处理状态更新为重试状态;
[0155] 基于所述重试状态,再次对所述目标任务请求对应的多个所述输入输出请求子任务进行处理。
[0156] 在本发明中,在IO状态的处理过程中,基于第二轮询过程,轮询到IO任务请求的某个子任务环节出现了错误或者异常,会出现RETRY状态记录,则将状态置为重试状态(即RETRY状态),对执行失败的IO子任务重新执行IO操作。
[0157] 在上述实施例的基础上,在所述将所述目标任务请求从所述输入输出处理状态更新为重试状态之后,所述方法还包括:
[0158] 根据标记为所述异常状态或所述错误状态对应的所述输入输出二级处理状态,对输入输出处理过程失败的输入输出请求子任务进行定位。
[0159] 在本发明中,如果某个输入输出请求子任务出现异常状态或错误状态,将其标记为异常状态或错误状态。然后,根据标记为异常状态或错误状态的子任务,系统会进行定位操作,以确定导致处理失败的具体原因。定位过程可以包括查看错误日志、分析错误信息或调查错误发生的环境等方式。通过定位操作,系统可以确定输入输出处理过程失败的输入输出请求子任务的具体位置和原因,可以提高系统的容错性和稳定性,确保输入输出处理过程的正确性和准确性。
[0160] 在上述实施例的基础上,所述输入输出二级处理状态包括未初始化状态、进入执行状态、同步缓存状态、同步缓存完成状态、处理状态、重新执行状态和子任务完成状态;
[0161] 所述基于所述第二轮询过程,获取各个所述输入输出请求子任务对应的输入输出二级处理状态,包括:
[0162] 在确定所述目标任务请求处于所述输入输出处理状态后,基于所述目标任务请求待进行读写操作的存储系统的硬件类型,对各个所述输入输出请求子任务执行对应的异步处理操作,获取各个所述输入输出请求子任务对应的输入输出二级处理状态。
[0163] 图4为本发明提供的两级状态机的示意图,图5为本发明提供的两级状态转换过程的示意图,可参考图4和图5所示,在本发明中,通过两级状态机进行状态值统计:即一级状态和二级状态,其中,一级状态包括INIT状态、IO状态、FINISH状态和RETRY状态四个状态阶段。进一步地,IO状态又进一步细化了二级状态,包括未初始化状态(UNINIT状态)、进入执行状态(GETED_ENTRY状态)、同步缓存状态(SYNC_CACHE状态)、同步缓存完成状态(SYNC_CACHE_DONE状态)、处理状态(PROCESS状态)、重新执行状态(RETRY状态,该状态为二级状态中的重试状态)和子任务完成状态(DONE状态)等七个状态阶段。当二级状态更新为DONE状态时,表示二级状态及其相关处理全部完成,进而确定一级状态的IO状态完成,在当前IO任务请求处理完成后(即当前IO任务请求处于FINISH状态),则对下一个IO任务请求的状态进行轮询记录,此时,一级状态机置为INIT状态。
[0164] 在本发明中,引入状态机转换机制,可以方便地实现异步IO处理,即下发异步IO任务后,无需同步等待该环节的任务完成,直接更新状态值,下一次轮询检查对应的任务完成标记即可,若还没有完成,则继续轮询,若完成了,则继续执行下一个状态环节的处理;同时,也可以实时查询某个IO请求,当前执行到了哪个状态阶段,一旦出现IO请求卡死问题,极大地提高了问题定位的效率。
[0165] 在上述实施例的基础上,所述基于所述目标任务请求待进行读写操作的存储系统的硬件类型,对各个所述输入输出请求子任务执行对应的异步处理操作,获取各个所述输入输出请求子任务对应的输入输出二级处理状态,包括:
[0166] 在确定所述目标任务请求为所述输入输出读写命令类型请求时,若待进行读写操作的存储系统的硬件类型为全闪类型,在发起所述输入输出请求子任务后,将所述输入输出请求子任务从所述进入执行状态更新为所述同步缓存完成状态;
[0167] 若待进行读写操作的存储系统的硬件类型为混闪类型,且所述输入输出请求子任务对应的请求数据在系统缓存中命中,将所述输入输出请求子任务从所述进入执行状态更新为所述同步缓存完成状态;
[0168] 若待进行读写操作的存储系统的硬件类型为混闪类型,且所述输入输出请求子任务对应的请求数据在系统缓存中未命中,则发起数据盘读取请求;基于所述第二轮询过程,在确定所述数据盘读取请求执行完成之后,将所述进入执行状态更新为所述同步缓存状态,并在所述数据盘读取请求读取到的数据写入至系统缓存后,将所述同步缓存状态更新为所述同步缓存完成状态;
[0169] 在确定所有所述输入输出请求子任务均处于所述同步缓存完成状态,将所述同步缓存完成状态更新为所述处理状态,并对各个所述输入输出请求子任务的处理结果进行检查,并在确定检查完成且处理结果正常后,将所述处理状态更新为所述子任务完成状态;
[0170] 所述若根据各个所述输入输出请求子任务对应的所述输入输出二级处理状态,确定所有所述输入输出请求子任务已全部处理完成,包括:
[0171] 在所述目标任务请求中所有所述输入输出请求子任务处于所述子任务完成状态时,确定所有所述输入输出请求子任务已全部处理完成。
[0172] 图6为本发明提供的二级状态机的转换示意图,可参考图6所示,在本发明中,当IO任务请求进入到一级状态中的异步IO任务(即IO状态),则将二级状态机置为UNINIT状态,同时发起获取目标数据所在数据管理单元的元数据相关信息;在第二轮询过程中,当轮询到该IO任务请求成功获取到元数据相关信息,则将状态更新为GETED_ENTRY状态,同时根据后端存储系统信息和该IO任务请求类型信息分别进行处理。
[0173] 在上述实施例的基础上,所述方法还包括:
[0174] 在确定所述目标任务请求为输入输出管理命令类型请求时,在发起所述输入输出请求子任务后,将所述输入输出请求子任务从所述进入执行状态更新为所述同步缓存完成状态,并发起创建对应的逻辑单元号元数据的请求任务。
[0175] 在本发明中,当IO任务请求进入到一级状态的IO状态时,通过二级状态机对IO状态环节中的状态做进一步细分。具体地,对于输入输出管理命令类型请求和输入输出读写命令类型请求,采取不同的状态转换过程。当该IO任务请求为输入输出管理命令类型请求时,若该IO任务请求为查询类的输入输出管理命令类型请求,则将已经获取到的元数据等信息记录到IO任务请求对应的缓存器(Buffer)中,同时将状态更新为DONE状态;若该IO任务请求为除查询类以外的输入输出管理命令类型请求(如创建、删除和修改等IO任务请求),则将状态更新为SYNC_CACHE_DONE状态,同时发起创建逻辑单元号(Logical Unit Number,简称LUN)元数据的磁盘IO请求任务。
[0176] 在本发明中,当该IO任务请求为输入输出读写命令类型请求时,若该IO任务请求对应的后端存储系统的硬件类型为全闪类型(即存储系统中只有SSD),则发起读写磁盘IO任务请求,同时将状态更新为SYNC_CACHE_DONE状态;若该IO任务请求对应的后端存储系统的硬件类型为混闪类型(存储系统中既有HDD又有SSD)且输入输出请求子任务对应的请求数据在系统缓存(cache)中命中,则直接将状态更新为SYNC_CACHE_DONE状态;若该IO任务请求对应的后端存储系统的硬件类型为且cache未命中,则发起读取数据(data)盘数据的请求(即数据盘读取请求),此时状态不需要更新,仍处于GETED_ENTRY状态,当第二轮询过程轮询到该IO任务请求的独权data盘数据完成后,则将状态更新为SYNC_CACHE状态,同时发起将从data盘读出来的数据写入cache盘的请求,当轮询到该IO任务请求写入cache盘数据完成后,则将SYNC_CACHE状态更新为SYNC_CACHE_DONE状态,同时发起目标数据读写磁盘IO任务请求。最后,当轮询到目标数据读写磁盘IO任务请求完成后,则将状态更新为PROCESS状态,同时进行结果检查,当轮询到该IO任务请求结果检查完成且处理结果异常,则将状态更新为RETRY状态。当轮询到该IO任务请求结果检查完成且处理结果正常,则将状态更新为DONE状态,自此异步IO任务全部完成。本发明采用两级状态机转换的模式,实现高并发场景下异步IO处理能力,可以有效降低IO请求处理时延。
[0177] 进一步地,对本发明提供的输入输出请求处理方法进行整体说明,在本发明中,前期通过不断调整第一阈值,并进行多次性能摸底测试,根据系统中断资源、CPU计算资源、磁盘性能以及磁盘数量等资源,选择与服务器环境匹配度最好,性能最好的第一预设阈值;同时,确定后端存储系统的最小数据管理单元大小,在本发明中,设置最小数据管理单元为4MB,并将其设定为第二预设阈值。
[0178] 进一步地,后端存储系统初始化后,默认采用被动接收事件通知的事件接收模式,此时流量监测器默认处于关闭状态。同时,启动一个sock_poller线程,用于下发的新任务以及IO任务请求处理结果,每次大轮询,先轮询是否有新任务到来,然后再轮询是否有IO请求处理结果到来。
[0179] 进一步地,当客户端发送登录任务请求给后端存储系统时,后端存储系统以被动接收事件通知的方式接收到登录任务事件,启动流量监测器。当流量监测器启动后,会实时监测命令请求的数据量和速率。在轮询过程中,当轮询到新任务,即登录任务事件到来时,直接将该任务交给前置任务处理器处理,记录当前会话状态,任务完成后,通过相应的内核通信模块,将处理结果返回至客户端,使得客户端接收到登录任务请求的处理结果,客户端和后端存储系统成功建立会话。
[0180] 进一步地,客户端向后端存储系统发送创建逻辑单元号(create lun)的命令请求,此时,后端存储系统以被动接收事件通知的方式接收到创建逻辑单元号事件,当轮询到新任务创建逻辑单元号事件到来,判定该任务为IO相关任务,分配一个新的任务并放入任务列表,同时分配一个身份标识ID:0x11111111,并且相应的字段信息,确定该任务属于管理类IO任务请求,不需要进行IO请求切片,故直接对该IO请求进行处理。然后,继续轮询是否有返回的IO处理结果,若没有处理结果返回,直接进入下一轮大轮询。
[0181] 在本发明中,当接收到IO任务请求时,将一级状态机置为INIT状态,开始对相关资源进行初始化;当轮询到该IO任务请求的相关资源初始化完成后,则将状态更新为IO状态,同时下发异步IO任务,进入到二级状态机的管理流程,并将其二级状态机置为UNINIT状态,同时发起获取目标数据所在数据管理单元的元数据相关信息。当轮询到该IO任务请求没有获取到元数据相关信息,这是因为后端存储系统中还不存在该对应的逻辑单元号,故还没有其元数据等相关信息,仍将状态更新为GETED_ENTRY状态,同时判定为该IO任务请求为管理类IO任务请求,进而将状态更新为SYNC_CACHE_DONE状态,并发起创建逻辑单元号元数据的磁盘IO请求;当轮询到创建逻辑单元号元数据的磁盘IO请求完成后,则将状态更新为PROCESS状态,同时进行结果检查。
[0182] 在本发明中,当轮询到IO请求结果检查完成且处理结果正常,则将状态更新为DONE状态,自此异步IO任务全部完成,退出二级状态机管理流程,回到一级状态机管理流程。当轮询到该IO任务请求的异步IO任务操作全部完成,则将状态更新为FINISH状态,将处理结果返回,同时将该IO任务请求从请求链表上删除。
[0183] 在本发明中,当轮询到有返回处理结果,同时识别到该任务(ID:0x11111111)之前没有进行IO请求切片,故认为该任务完成,将该任务的处理结果返回,同时将该任务从任务列表删除,继续下一轮d 轮询过程。
[0184] 当客户端继续以高并发量向后端存储系统下发“数据读写”命令请求时,流量监测器发现当前命令请求数据量和并发量明显提升,且高于第一预设阈值,此时由于当前事件接收模式仍为被动接收通知模式,该接收模式已经成为影响存储系统性能的瓶颈,故需要将事件接收模式调整为主动轮询事件模式。
[0185] 进一步地,以客户端向后端存储系统发送“read 40MB data”命令请求为例,详细阐述该命令请求的整个IO流程。后端存储系统在主动轮询事件模式下,poller线程不断轮询内核态和用户态的数据通信接口,当轮询到新任务请求“read 40MB data”时,判定该任务为IO相关任务,分配一个新的任务并放入任务列表,同时分配一个身份标识ID:0x12345678。进一步地,认为该任务属于读写类IO任务请求,并且该任务地目标数据长度为
40MB,大于第二预设阈值4MB,故对该IO任务请求按照第二预设阈值进行切片,切分成多个子IO请求任务。
[0186] 图7为本发明提供的输入输出请求任务的切片示意图,可参考图7所示,最上层的请求数据为需要读取的40MB数据buffer,最下层磁盘区域为目标数据对应磁盘上的位置,每个4MB的块是后端存储系统的最小管理单元,由于磁盘区域的第1区域中有一部分为上一个任务请求对应的数据,目标数据在第1区域中紧接着上一个数据,故目标数据在拆分时,按照第二预设阈值,拆分成了11个IO读请求“read data”,每个拆分后的IO读请求分配一个唯一的顺序码(sequence),这11个IO读请求的顺序码依次为0x00000001、0x00000002、0x00000003、…、0x0000000b。
[0187] 进一步地,在IO任务请求切片处理完成后,经过一次或者多次轮询,接收到这11个“read data”IO读请求,将它们添加到请求链表的尾部,同时将其一级状态机置为INIT状态,开始对相关资源进行初始化。
[0188] 进一步地,以任务标识ID:0x12345678,顺序码seq:0x00000003的IO请求子任务为例进行说明。当一级轮询机轮询到IO请求的相关资源初始化完成,则将状态更新为IO状态,同时下发异步IO任务,进入到二级状态机管理流程,并将其二级状态机置为UNINIT状态,同时发起获取目标数据所在数据管理单元的元数据相关信息。当轮询到该IO请求获取到元数据相关信息,将状态更新为GETED_ENTRY状态,同时判定为该IO请求为读写类IO且后端存储系统为全闪类型,发起磁盘IO异步读请求,同时将状态更新为SYNC_CACHE_DONE状态;当轮询到磁盘异步IO请求完成,则将状态更新为PROCESS状态并进行结果检查。当轮询到该IO请求结果检查完成且处理结果正常,则将状态更新为DONE状态,自此异步IO任务全部完成,退出二级状态机管理流程,回到一级状态机管理流程。当轮询到该IO请求的异步IO任务操作全部完成,则将状态更新为FINISH状态,将处理结果返回给任务处理模块,同时将该IO请求从请求链表上删除。
[0189] 在第二轮询过程中,当轮询到IO处理结果,同时识别到该任务(seq:0x00000003)的父任务(ID:0x12345678)的目标数据长度大于第二预设阈值,即IO请求进行了切片处理,且切片后的IO请求子任务还没有全部完成,将该IO请求子任务的处理结果和其它已经完成的IO请求子任务的处理结果进行合并组合,之后继续下一轮轮询,等待其它IO请求子任务的处理结果。当后续其它IO请求子任务全部完成后,通过合并组合得到最终的处理结果。
[0190] 最后,当用户端发送注销任务请求给后端存储系统时,后端存储系统接收到注销任务事件,此时关闭流量监测器,同时判断当前事件接收模式是否为主动轮询事件模式,若不是,则将主动轮询事件模式切换为被动接收事件通知模式。
[0191] 下面对本发明提供的输入输出请求处理系统进行描述,下文描述的输入输出请求处理系统与上文描述的输入输出请求处理方法可相互对应参照。
[0192] 图8为本发明提供的输入输出请求处理系统的结构示意图,如图8所示,本发明提供了一种输入输出请求处理系统,包括任务处理模块801和输入输出处理模块802,其中,任务处理模块801用于在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断,若判断获知所述目标数据的数据长度满足预设条件,对所述目标任务请求进行切片处理,并根据切片处理结果,生成多个对应的输入输出请求子任务;输入输出处理模块802用于基于预设轮询条件,获取到各个所述输入输出请求子任务对应的子任务处理结果,并在确定所述目标数据对应的所有所述输入输出请求子任务已全部处理完成之后,将所有所述子任务处理结果进行组合,得到所述目标任务请求的目标任务处理结果。
[0193] 在本发明中,在后端存储系统中构建相应的模块(如任务处理模块801和输入输出处理模块802等),以在后端存储系统中形成一个具有相应功能的输入输出请求处理系统。具体地,在本发明中,输入输出请求处理系统需要确定当前接收到的目标任务请求是否为一个输入输出请求。在一实施例中,任务处理模块801可通过流量监测器,对接收目标任务请求的接口处进行实时监测,以获取到该目标任务请求的数据量,进而根据实时监测到的数据量与预设阈值(即第一预设阈值)之间的比对结果,确定该目标任务请求为输入输出请求。
[0194] 进一步地,任务处理模块801对于确定为输入输出请求的目标任务请求,对其对应的目标数据的数据长度进行判断,一旦获知目标数据的数据长度,可以将其与预设条件进行比较。在本发明中,预设条件可设置为一个预设数据长度(即第二预设阈值),用于决定是否需要对目标任务请求进行切片处理。如果判断结果显示目标数据的数据长度满足预设条件(如数据长度大于第二预设阈值),那么就可以对目标任务请求进行切片处理。
[0195] 在切片处理的过程中,会生成多个对应的输入输出请求子任务,每个子任务都代表了原始目标任务请求中的一个数据片段,并具有相应的输入输出请求信息。通过这个过程,任务处理模块801可以将一个大型的目标任务请求拆分为多个更小的输入输出请求子任务,以便在系统中更高效地处理和执行,可以提高系统中的IO处理的并行性、响应速度和资源利用率。
[0196] 进一步地,输入输出处理模块802中的预设轮询条件用于确定何时以及如何获取子任务的处理结果,包括轮询时间间隔和触发条件。在本发明中,轮询过程包括大轮询过程(即第一轮询过程)和小轮询过程(即第二轮询过程),通过启动一个sock_poller线程,用于接收客户端发送的新任务请求以及IO请求对应的IO请求处理结果,输入输出处理模块802通过每次大轮询过程,先轮询是否有新任务请求到来,然后再通过小轮询过程,轮询是否有IO请求处理结果到来。本发明采用采用两级轮询的模式,可减少对操作系统中断资源的占用,提高操作系统整体性能。
[0197] 进一步地,输入输出处理模块802针对每一个输入输出请求子任务,根据预设轮询条件,会定期进行查询或检查子任务的处理状态,以获取处理结果。当输入输出处理模块802获取到各个输入输出请求子任务对应的处理结果时,会将这些处理结果进行存储或缓存,等待后续的处理和组合。在确定目标数据对应的所有输入输出请求子任务已全部处理完成之后,输入输出处理模块802开始将所有子任务的处理结果进行组合,得到目标任务请求的最终处理结果,这个结果可以用于向用户报告、存储、传输或其它后续处理,有助于确保任务的完整性和准确性,同时提高了系统的可靠性和效率。
[0198] 在上述实施例的基础上,所述系统还包括事件接收模块,所述事件接收模块具体用于:
[0199] 接收客户端发送的所述目标任务请求;
[0200] 对所述目标任务请求的任务事件类型进行判断,若所述目标任务请求的所述任务事件类型为登录任务事件,对所述目标任务请求对应的所述目标数据的数据量进行监测,获取目标数据实时监测结果;
[0201] 判断所述目标数据实时监测结果是否大于第一预设阈值,若大于所述第一预设阈值,确定所述目标任务请求为所述输入输出请求;
[0202] 若当前时刻的事件接收模式为被动接收事件通知模式,将所述被动接收事件通知模式切换为主动轮询事件模式
[0203] 图9为本发明提供的输入输出请求处理系统的整体结构示意图,可参考图9所示,将后端存储系统按照功能主要功能,划分为事件接收模块、任务处理模块和输入输出处理模块。客户端和后端存储系统通过内核通信模块进行数据通信,内核通信模块接收到客户端的命令请求后,将命令请求传递给后端存储系统,后端存储系统提供两种消息通信机制,一种是操作系统产生系统中断,并以事件通知的方式通知给后端存储系统的事件接收模块接收新消息,该机制对系统CPU资源使用很少,对系统中断资源使用较多;另一种是后端存储系统的事件接收模块提供一个poller线程,不断轮询内核态和用户态的数据通信接口,查看是否有新消息到来,若有则取出新消息并处理,否则继续轮询,该机制不占用操作系统中断资源,对系统CPU资源使用较多。
[0204] 在本发明中,后端存储系统的事件接收模块中还包含一个流量监测器,主要用于实时监测后端存储系统的入口命令请求流量,并以此为依据,动态调整后端存储系统的消息通信机制,从而使得系统性能达到最优。当后端存储系统的事件接收模块接收到命令请求后,会传递给任务处理模块进行消息处理。具体地,任务管理器对请求命令进行解析,将命令请求分为两大类分别进行处理,一类是和磁盘IO无关的命令请求,例如,login请求、logout请求以及通信相关的管理类请求,此类命令请求直接在前置任务管理器中进行处理,处理后直接将处理结果返回;另一类是和磁盘IO直接相关的命令请求,例如,小型计算机系统接口(Small Computer System Interface,简称SCSI)请求指令,任务管理器会对此类每一个IO任务请求分配一个任务,并放到任务列表中处理,在本发明中,将任务切分为若干个子任务,并依次下发给IO处理模块进行处理,并实时监测任务的执行进度及状态,若任务的所有子任务均处理完成,则将处理结果返回。
[0205] 在本发明中,IO处理模块承担后端存储系统中最核心的磁盘IO执行工作,此环节IO并发量最大。当IO处理模块接收到IO任务请求后,将其添加到IO请求链表上,通过poller轮询处理器不断轮询IO请求链表上的所有IO请求,并以状态机的形式记录其执行进度及状态,若IO请求执行完成,则将处理结果返回,否则继续对IO请求进行轮询和处理。
[0206] 本发明提供的输入输出请求处理系统,对接收到的输入输出请求对应的目标数据的数据长度进行判断,若判断获知目标数据的数据长度满足预设条件,将目标任务请求进行切片处理,得到多个输入输出请求子任务,并基于预设轮询条件,在确定目标数据对应的所有输入输出请求子任务已全部处理完成之后,得到目标任务请求的目标任务处理结果,在提高系统的输入输出吞吐率的同时,也提高了存储系统的整体性能。
[0207] 本发明提供的系统是用于执行上述各方法实施例的,具体流程和详细内容请参照上述实施例,此处不再赘述。
[0208] 图10为本发明提供的电子设备的结构示意图,如图10所示,该电子设备可以包括:处理器(Processor)1001、通信接口(Communications Interface)1002、存储器(Memory)
1003和通信总线1004,其中,处理器1001,通信接口1002,存储器1003通过通信总线1004完成相互间的通信。处理器1001可以调用存储器1003中的逻辑指令,以执行输入输出请求处理方法,该方法包括:在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断,若判断获知所述目标数据的数据长度满足预设条件,对所述目标任务请求进行切片处理,并根据切片处理结果,生成多个对应的输入输出请求子任务;基于预设轮询条件,获取到各个所述输入输出请求子任务对应的子任务处理结果,并在确定所述目标数据对应的所有所述输入输出请求子任务已全部处理完成之后,将所有所述子任务处理结果进行组合,得到所述目标任务请求的目标任务处理结果。
[0209] 此外,上述的存储器1003中的逻辑指令可以通过软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read‑Only Memory)、随机存取存储器(RAM,Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。
[0210] 另一方面,本发明还提供一种计算机程序产品,所述计算机程序产品包括存储在非暂态计算机可读存储介质上的计算机程序,所述计算机程序包括程序指令,当所述程序指令被计算机执行时,计算机能够执行上述各方法所提供的输入输出请求处理方法,该方法包括:在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断,若判断获知所述目标数据的数据长度满足预设条件,对所述目标任务请求进行切片处理,并根据切片处理结果,生成多个对应的输入输出请求子任务;基于预设轮询条件,获取到各个所述输入输出请求子任务对应的子任务处理结果,并在确定所述目标数据对应的所有所述输入输出请求子任务已全部处理完成之后,将所有所述子任务处理结果进行组合,得到所述目标任务请求的目标任务处理结果。
[0211] 又一方面,本发明还提供一种非暂态计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现以执行上述各实施例提供的输入输出请求处理方法,该方法包括:在确定当前接收到的目标任务请求为输入输出请求时,对所述目标任务请求对应的目标数据的数据长度进行判断,若判断获知所述目标数据的数据长度满足预设条件,对所述目标任务请求进行切片处理,并根据切片处理结果,生成多个对应的输入输出请求子任务;基于预设轮询条件,获取到各个所述输入输出请求子任务对应的子任务处理结果,并在确定所述目标数据对应的所有所述输入输出请求子任务已全部处理完成之后,将所有所述子任务处理结果进行组合,得到所述目标任务请求的目标任务处理结果。
[0212] 以上所描述的装置实施例仅仅是示意性的,其中所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。本领域普通技术人员在不付出创造性的劳动的情况下,即可以理解并实施。
[0213] 通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加必需的通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对现有技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
[0214] 最后应说明的是:以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。