CN111858011A - 一种多数据流任务处理方法、装置、设备及存储介质 - Google Patents

一种多数据流任务处理方法、装置、设备及存储介质 Download PDF

Info

Publication number
CN111858011A
CN111858011A CN202010760502.XA CN202010760502A CN111858011A CN 111858011 A CN111858011 A CN 111858011A CN 202010760502 A CN202010760502 A CN 202010760502A CN 111858011 A CN111858011 A CN 111858011A
Authority
CN
China
Prior art keywords
queue
data flow
general
tasks
task
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
CN202010760502.XA
Other languages
English (en)
Inventor
王岩
李卫军
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Dapu Microelectronics Co Ltd
Original Assignee
Shenzhen Dapu Microelectronics Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Shenzhen Dapu Microelectronics Co Ltd filed Critical Shenzhen Dapu Microelectronics Co Ltd
Priority to CN202010760502.XA priority Critical patent/CN111858011A/zh
Publication of CN111858011A publication Critical patent/CN111858011A/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked

Abstract

本申请公开了一种多数据流任务处理方法,该方法包括以下步骤:在专有队列集合中存在任务的情况下,在专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理;在对专有队列集合中的任务处理完成后,在通用队列集合包含的通用I/O数据流队列中提取任务,调用I/O操作处理器进行处理;其中,专有队列集合中的任务的优先级高于通用队列集合中的任务的优先级。应用本申请所提供的技术方案,使得较高优先级任务可以被及时处理,减少响应时间,充分发挥并行的性能优势,提升存储性能。本申请还公开了一种多数据流任务处理装置、设备及存储介质,具有相应技术效果。

Description

一种多数据流任务处理方法、装置、设备及存储介质
技术领域
本申请涉及计算机应用技术领域,特别是涉及一种多数据流任务处理方法、装置、设备及存储介质。
背景技术
随着计算机技术的快速发展,存储器,如SSD(Solid State Disk,固态硬盘)等的应用范围越来越广泛。其中,NVMe(Non-Volatile Memory express,非易失性内存主机控制器接口规范)SSD因为其具有低延时、高吞吐、低功耗、可充分发挥Host(主机)端硬软件的并行性等优点,逐渐成为SSD的主流。
NVMe接口标准支持任务多并发、优先级管理等。根据NVMe接口标准,Host端每个CPU(central processing unit,中央处理器)核(Core)可以有一个或者多个SQ(Submission Queue,提交队列),多SQ优先级可配置。通过多SQ优先级的配置,可以实现SSD对Host端高优先级任务,如操作系统的程序调用、关键日志的记录、重要数据的备份等的及时、高效响应。
SSD在SQ中取出I/O指令后,将I/O指令对应的任务加入到数据流队列中,再对每个数据流队列中的任务进行处理。SQ的优先级越高,越可以被早取指,对应的任务的优先级也越高。
但是,在数据操作请求高负载的情况下,如果数据流队列中在较高优先级任务之前还有对优先级没有要求的任务没有被处理完,即使存在较高优先级任务,但根据先进先出的原则,还是需要等待这些对优先级没有要求的任务先处理完成后才能对较高优先级任务进行处理。使得较高优先级任务被阻塞,不能够被及时处理,响应时间较长,影响存储性能。
发明内容
本申请的目的是提供一种多数据流任务处理方法、装置、设备及存储介质,以使得较高优先级任务可以被及时处理,减少响应时间,提升存储性能。
为解决上述技术问题,本申请提供如下技术方案:
一种多数据流任务处理方法,包括:
在专有队列集合中存在任务的情况下,在所述专有队列集合包含的专有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的专有I/O数据流队列,连续执行n次在该专有I/O数据流队列中提取任务,调用所述I/O操作处理器进行处理的操作;
n=f(i),i表示任意一个非最高优先级,i越大优先级越高,i越大n越大。
在本申请的一种具体实施方式中,所述在通用队列集合包含的通用I/O数据流队列中提取任务,调用所述I/O操作处理器进行处理,包括:
轮询通用队列集合包含的通用I/O数据流队列;
针对轮询到的通用I/O数据流队列,连续执行m次在该通用I/O数据流队列中提取任务,调用所述I/O操作处理器进行处理的操作,m>0。
在本申请的一种具体实施方式中,还包括:
获得针对第一提取队列SQ的专有I/O数据流队列的分配指令;
根据所述分配指令,在所述通用队列集合或所述专有队列集合中选择一个I/O数据流队列,分配给所述第一SQ;
在分配记录表中记录分配信息。
在本申请的一种具体实施方式中,所述根据所述分配指令,在所述通用队列集合或所述专有队列集合中选择一个I/O数据流队列,分配给所述第一SQ,包括:
确定所述分配指令中携带的I/O数据流队列编号;
如果所述通用队列集合中存在具有所述I/O数据流队列编号的通用I/O数据流队列,则将该通用I/O数据流队列分配给所述第一SQ;
如果所述专有队列集合中存在具有所述I/O数据流队列编号的专有I/O数据流队列,则将该专有I/O数据流队列分配给所述第一SQ;
如果所述通用队列集合和所述专有队列集合中均不存在具有所述I/O数据流队列编号的I/O数据流队列,则在所述通用队列集合中选择存在任务最少的通用I/O数据流队列,分配给所述第一SQ。
在本申请的一种具体实施方式中,如果在所述通用队列集合中选择一个I/O数据流队列,在所述分配给所述第一SQ之前,还包括:
如果选择出的该I/O数据流队列中存在任务,则在将该I/O数据流队列中的任务迁移到所述通用队列集合的其他通用I/O数据流队列中后,执行所述分配给所述第一SQ的步骤。
在本申请的一种具体实施方式中,如果在所述通用队列集合中选择一个I/O数据流队列,在所述分配给所述第一SQ之前,还包括:
确定所述通用队列集合中包含的通用I/O数据流队列个数是否大于或等于2;
如果是,则执行所述分配给所述第一SQ的步骤。
在本申请的一种具体实施方式中,还包括:
获得针对所述第一SQ的专有I/O数据流队列的删除指令;
根据所述删除指令,在所述分配记录表中删除所述第一SQ对应的分配信息。
在本申请的一种具体实施方式中,还包括:
获得针对所述第一SQ的专有I/O数据流队列的修改指令;
根据所述修改指令,在所述分配记录表中删除所述第一SQ对应的分配信息;
根据所述修改指令,在所述通用队列集合中选择一个通用I/O数据流队列,分配给所述第一SQ;
在所述分配记录表中记录分配信息。
在本申请的一种具体实施方式中,所述分配信息包括权利终止时间,所述方法还包括:
删除所述分配记录表中到达所述权利终止时间的分配信息。
在本申请的一种具体实施方式中,还包括:
获得第二SQ中的I/O指令;
将所述I/O指令拆解为多个任务;
确定所述第二SQ是否具有对应的专有I/O数据流队列;
如果有,则将所述多个任务加入所述第二SQ对应的专有I/O数据流队列中;
如果没有,则将所述多个任务加入所述通用队列集合包含的通用I/O数据流队列中。
在本申请的一种具体实施方式中,所述将所述多个任务加入所述通用队列集合包含的通用I/O数据流队列中,包括:
将所述多个任务加入所述通用队列集合包含的存在任务最少的通用I/O数据流队列中。
一种多数据流任务处理装置,包括:
专有队列任务处理模块,用于在专有队列集合中存在任务的情况下,在所述专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理;
通用队列任务处理模块,用于在对所述专有队列集合中的任务处理完成后,在通用队列集合包含的通用I/O数据流队列中提取任务,调用所述I/O操作处理器进行处理;
其中,所述专有队列集合中的任务的优先级高于所述通用队列集合中的任务的优先级。
一种多数据流任务处理设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现上述任一项所述多数据流任务处理方法的步骤。
一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现上述任一项所述多数据流任务处理方法的步骤。
应用本申请实施例所提供的技术方案,在专有队列集合中存在任务的情况下,先在专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理,然后在对专有队列集合中的任务处理完成后,在通用队列集合包含的通用I/O数据流队列中提取任务,调用I/O操作处理器进行处理。专有队列集合中的任务的优先级高于通用队列集合中的任务的优先级。为有需求的SQ预留I/O数据流队列,这样相当于为较高优先级的任务提供了专有通道,尽可能地避免被低优先级任务阻塞,使得较高优先级任务可以被及时处理,减少响应时间,充分发挥并行的性能优势,提升存储性能。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本申请实施例中一种多数据流任务处理方法的实施流程图;
图2为本申请实施例中一种多数据流任务处理架构示意图;
图3为本申请实施例中为SQ分配专有I/O数据流队列的具体实施过程示意图;
图4为本申请实施例中为SQ删除专有I/O数据流队列的具体实施过程示意图;
图5为本申请实施例中一种多数据流任务处理具体过程示意图;
图6为本申请实施例中一种多数据流任务处理装置的结构示意图;
图7为本申请实施例中一种多数据流任务处理设备的结构示意图。
具体实施方式
为了使本技术领域的人员更好地理解本申请方案,下面结合附图和具体实施方式对本申请作进一步的详细说明。显然,所描述的实施例仅仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
参见图1所示,为本申请实施例所提供的一种多数据流任务处理方法的实施流程图,该方法可以包括以下步骤:
S110:在专有队列集合中存在任务的情况下,在专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理。
为便于描述,对于本申请实施例的方案以基于NVMe接口标准的SSD为例进行说明。
在实际应用中,SSD可以通过主控从SQ中取指,取指后将相应的任务加入到I/O数据流队列中。不同操作类型的指令,对应不同操作类型的I/O数据流队列,即如果是读指令,则对应读数据流队列,如果是写指令,则对应写数据流队列。
在本申请实施例中,I/O数据流队列可以有多个,多个I/O数据流队列可以包括专有I/O数据流队列,还可以包括通用I/O数据流队列。专有I/O数据流队列构成专有队列集合,通用I/O数据流队列构成通用队列集合。
针对一个SQ而言,如果该SQ具有一定的优先级,则可以为该SQ分配一个或多个I/O数据流队列,分配给该SQ的I/O数据流队列即为该SQ对应的专有I/O数据流队列。当从该SQ中取指后需要将相应任务加入到其对应的专有I/O数据流队列中,如果该专有I/O数据流队列仅分配给该SQ,则该SQ对应的专有I/O数据流队列中不会加入其他SQ的任务,如果该专有I/O数据流队列也分配给了其他SQ,则该专有I/O数据流队列中可存放具有对应的SQ的任务。
如果该SQ没有优先级要求,则从该SQ中取指后需要将相应任务加入到通用I/O数据流队列中。一个通用I/O数据流队列中可以加入多个SQ对应的任务。专有队列集合中的任务的优先级高于通用队列集合中的任务的优先级。专有队列集合中的任务需要及时处理。
在实际应用中,可以对专有队列集合进行监测,如果监测到专有队列集合中存在任务,则可以认为当前存在较高优先级的任务待处理。在这种情况下,可以在专有队列集合包含的专有I/O数据流队列中提取任务,并调用I/O操作处理器进行处理。对于一个I/O数据流队列而言,如果该I/O数据流队列的长度寄存器值大于0,则表明该I/O数据流队列中存在任务。
具体的,可以按照预设顺序依次对每个专有I/O数据流队列中的任务进行处理。
在实际应用中,如果在监测到专有队列集合中存在任务时,I/O操作处理器正在处理通用队列集合中的某个任务,则可以暂停该任务下一个任务的提取及处理操作,待该任务处理完成后,转入专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理。
另外,当SSD的主控当前从空闲状态转为运行状态时,可以先确认专有队列集合中是否存在任务,如果存在,则先在专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理。
S120:在对专有队列集合中的任务处理完成后,在通用队列集合包含的通用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数据流队列均为空,即SSD当前没有I/O操作,可以等待新的任务加入I/O数据流队列。
如图2所示,为一种多数据流任务处理架构,多个SQ分别为SQ0、SQ1、SQ2、……、SQk,专有队列集合包括I/O数据流队列0,通用队列集合包括I/O数据流队列1、……、N-1,其中,SQ0的专有I/O数据流队列为I/O数据流队列0,每个I/O数据流队列中的a pages表示任务的大小。SQ0的I/O指令被NVMe控制器取指后,通过指令处理器将相应的任务加入到I/O数据流队列0中,I/O数据流队列0中仅存放SQ0的任务。SQ1-SQk的I/O指令被NVMe控制器取指后,通过指令处理器将相应的任务加入到I/O数据流队列1至I/O数据流队列N-1之中的一个或多个I/O数据流队列中。I/O数据流队列1至I/O数据流队列N-1中可存放SQ1至SQk的任务。在I/O数据流队列0中存在任务的情况下,先在I/O数据流队列0中提取任务,调用I/O操作处理器进行处理,在对I/O数据流队列0中的任务处理完成后,再在I/O数据流队列1至I/O数据流队列N-1中提取任务,调用I/O操作处理器进行处理。
应用本申请实施例所提供的方法,在专有队列集合中存在任务的情况下,先在专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理,然后在对专有队列集合中的任务处理完成后,在通用队列集合包含的通用I/O数据流队列中提取任务,调用I/O操作处理器进行处理。专有队列集合中的任务的优先级高于通用队列集合中的任务的优先级。为有需求的SQ预留I/O数据流队列,这样相当于为较高优先级的任务提供了专有通道,尽可能地避免被低优先级任务阻塞,使得较高优先级任务可以被及时处理,减少响应时间,充分发挥并行的性能优势,提升存储性能。
另外,为较高优先级的SQ预留I/O数据流队列,可以使得较高优先级的任务被及时处理,在任务高负载的情况下,可以减少较高优先级任务从相应的SQ被取指后的等待时间,减少高低优先级任务切换的资源开销。
在本申请的一个实施例中,步骤S110在专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理,可以包括以下步骤:
步骤一:确定专有队列集合包含的最高优先级的专有I/O数据流队列中是否存在任务,如果存在,则执行步骤二;
步骤二:在最高优先级的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理;
步骤三:在对最高优先级的专有I/O数据流队列中的任务处理完成后,在专有队列集合包含的非最高优先级的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理。
为便于描述,将上述三个步骤结合起来进行说明。
在本申请实施例中,可以设定一个最高优先级,如设定最高优先级为优先级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操作处理器进行处理,再轮询到第一个最高优先级的专有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数据流队列,连续执行n次在该专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理的操作,n=f(i),i表示任意一个非最高优先级,i越大优先级越高,i越大n越大。
在本申请实施例中,可以用i表示除最高优先级外的任意一个其他优先级,i越大优先级越高,i非最高优先级。
在专有队列集合中存在任务的情况下,如果确定专有队列集合包含的最高优先级的专有I/O数据流队列中存在任务,则先在最高优先级的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理,在对最高优先级的专有I/O数据流队列中的任务处理完成后,根据优先级从高到低的顺序,轮询专有队列集合包含的非最高优先级的专有I/O数据流队列。
举例而言,假设有3个非最高优先级的专有I/O数据流队列,按照优先级从高到低的顺序,分别为队列1、队列2、队列3,轮询这三个专有I/O数据流队列,轮询过程即为:队列1→队列2→队列3→队列1→队列2→队列3→……。
针对轮询到的每个非最高优先级的专有I/O数据流队列,可以连续执行n次在该专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理的操作,n=f(i),i表示任意一个非最高优先级,i越大n越大。可以理解的是,专有I/O数据流队列的优先级越高,其中的任务的优先级也越高,越应该被尽早处理。所以,对于非最高优先级中优先级较高的专有I/O数据流队列,可以连续执行更多次的任务提取及处理操作。
优选的,可以设置n=i,即无需再通过函数计算n,降低开销。以上例为例,队列1、队列2、队列3的优先级分别为3、2、1,按照从高到低的顺序,轮询这三个专有I/O数据流队列,轮询到优先级为3(i=3)的队列1时,可以连续执行3(n=i=3)次在该专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理的操作,然后轮询到优先级为2的队列2。轮询到优先级为2(i=2)的队列2时,可以连续执行2(n=i=2)次在该专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理的操作,然后轮询到优先级为1的队列3。轮询到优先级为1(i=1)的队列3时,可以连续执行1(n=i=1)次在该专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理的操作。然后再按照优先级从高到低的顺序,轮询这三个专有I/O数据流队列,操作同上,不再赘述。
这样可以使得更高优先级的任务更快地被提取及处理。
在本申请的一个实施例中,步骤S120在通用队列集合包含的通用I/O数据流队列中提取任务,调用I/O操作处理器进行处理,可以包括以下步骤:
第一个步骤:轮询通用队列集合包含的通用I/O数据流队列;
第二个步骤:针对轮询到的通用I/O数据流队列,连续执行m次在该通用I/O数据流队列中提取任务,调用I/O操作处理器进行处理的操作,m>0。
为便于描述,将上述两个步骤结合起来进行说明。
在本申请实施例中,在专有队列集合中存在任务的情况下,先在专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理,在对专有队列集合中的任务处理完成后,对通用队列集合中的任务进行提取、处理。通用队列集合中的任务没有优先级要求,可以公平对待。所以在这个过程中,可以轮询通用队列集合包含的通用I/O数据流队列。针对轮询到的通用I/O数据流队列,可以连续执行m次在该通用I/O数据流队列中提取任务,并调用I/O操作处理器进行处理的操作,m>0。m可以根据实际情况进行设定和调整,如设定为1或2等。
以m=2,通用队列集合中包含3个通用I/O数据流队列为例,轮询这三个通用I/O数据流队列,轮询到第一个通用I/O数据流队列时,可以连续执行2次在该通用I/O数据流队列中提取任务,调用I/O操作处理器进行处理的操作,轮询到第二个通用I/O数据流队列时,可以连续执行2次在该通用I/O数据流队列中提取任务,调用I/O操作处理器进行处理的操作,轮询到第三个通用I/O数据流队列时,可以连续执行2次在该通用I/O数据流队列中提取任务,调用I/O操作处理器进行处理的操作。然后再轮询到第一个通用I/O数据流队列,依次往下,操作同上,不再赘述。
针对轮询到的通用I/O数据流队列,连续执行m次在该通用I/O数据流队列中提取任务,调用I/O操作处理器进行处理的操作,对于每个通用I/O数据流队列的连续执行次数相同,保证每个通用I/O数据流队列的任务处理的公平性。
在本申请的一个实施例中,该方法还可以包括以下步骤:
步骤一:获得针对第一提取队列SQ的专有I/O数据流队列的分配指令;
步骤二:根据分配指令,在通用队列集合或专有队列集合中选择一个I/O数据流队列,分配给第一SQ;
步骤三:在分配记录表中记录分配信息。
为便于描述,将上述三个步骤结合起来进行说明。
在本申请实施例中,可以根据实际情况为较高优先级的SQ分配专有I/O数据流队列。在有这样的需求时,可以向SSD主控发出分配指令。
获得针对第一SQ的专有I/O数据流的分配指令后,可以根据该分配指令,在通用队列集合或专有队列集合中选择一个I/O数据流队列,分配给第一SQ。如果选择出的I/O数据流队列为通用队列集合中的通用I/O数据流队列,则将该I/O数据流队列分配给第一SQ后,该I/O数据流队列将更新为专有I/O数据流队列,加入到专有队列集合中。如果选择出的I/O数据流队列为专有队列集合中的专有I/O数据流队列,则将该I/O数据流队列分配给第一SQ后,第一SQ将与该I/O数据流队列之前对应的SQ共享该I/O数据流队列。第一SQ可以为任意一个SQ。在分配记录表中可以记录分配信息。分配信息可以包括第一SQ的编号、分配给其的专有I/O数据流队列的编号、权利终止时间、优先级等信息。
这样可以使得第一SQ具有相应的专有I/O数据流队列,可以将从第一SQ取出的指令对应的任务加入到其专有I/O数据流队列中,相当于专有通道,减少其他任务的阻塞,更快地得到响应。
当然,分配记录表并不是一成不变的。在获得针对第一SQ的专有I/O数据流队列的删除指令时,可以根据删除指令,在分配记录表中删除第一SQ对应的分配信息。
删除指令中可以携带I/O数据流队列编号,在获得针对第一SQ的专有I/O数据流队列的删除指令时,可以根据该删除指令,查询分配记录表中是否存在包含I/O数据流队列编号的分配信息,如果存在,则可以删除该分配信息,解除第一SQ与具有该I/O数据流队列编号的专有I/O数据流队列的专有关系。如果该专有I/O数据流队列没有分配给其他SQ,则将变为通用I/O数据流队列,加入到通用队列集合中。
删除指令中还可以携带SQ编号,当删除指令中仅携带SQ编号时,可以在分配记录表中删除具有SQ编号的SQ对应的所有分配信息,解除其与专有I/O数据流队列的专有关系。如果根据删除指令不能够定位到分配记录表中的任何一条分配信息,则可以返回没有分配记录的错误提示信息。
在实际应用中,在删除分配信息时,可以只删除分配记录表中的分配信息,对应的I/O数据流队列中的任务继续保留在队列中,直到执行完毕。
在本申请的一种具体实施方式中,还可以在获得针对第一SQ的专有I/O数据流队列的修改指令时,根据修改指令,在分配记录表中删除第一SQ对应的分配信息,根据修改指令,在通用队列集合中选择一个通用I/O数据流队列,分配给第一SQ,在分配记录表中记录分配信息。
即可以变换SQ的专有I/O数据流队列。在接收到相应的修改指令时,可以先在分配记录表中删除该SQ对应的分配信息,然后再重新为其分配一个专有I/O数据流队列。
分配信息中包括权利终止时间,可以删除分配记录表中到达权利终止时间的分配信息。删除相应的分配信息即解除相应的SQ与专有I/O数据流队列的专有关系。解除专有关系后的I/O数据流队列可以为其他SQ使用。
在本申请的一种具体实施方式中,可以先确定分配指令中携带的I/O数据流队列编号,根据分配指令中携带的I/O数据流队列编号,在通用队列集合或专有队列集合中选择一个I/O数据流队列,分配给第一SQ。
具体的,如果通用队列集合中存在具有I/O数据流队列编号的通用I/O数据流队列,则将该通用I/O数据流队列分配给第一SQ;如果专有队列集合中存在具有I/O数据流队列编号的专有I/O数据流队列,则将该专有I/O数据流队列分配给第一SQ;如果通用队列集合和专有队列集合中均不存在具有I/O数据流队列编号的I/O数据流队列,则在通用队列集合中选择存在任务最少的通用I/O数据流队列,分配给第一SQ。
在本申请实施例中,分配指令中可以携带I/O数据流队列编号,以表明要将哪个I/O数据流队列分配给第一SQ。
获得针对第一SQ的专有I/O数据流队列的分配指令后,可以先解析得到分配指令中携带的I/O数据流队列编号。
如果通用队列集合中存在具有该I/O数据流队列编号的通用I/O数据流队列,则可以认为已经指定要将哪个通用I/O数据流队列分配给第一SQ,可以直接将该通用I/O数据流队列分配给第一SQ。
可以理解的是,如果通用队列集合为空,即所有的I/O数据流队列都成为了专有I/O数据流队列,对于没有优先级要求的SQ的任务将无处存放。所以,为了保证系统有通用I/O数据流队列可以响应其他任务,需要在分配后保证通用队列集合中至少包含一个通用I/O数据流队列。即在已经指定要将哪个通用I/O数据流队列分配给第一SQ的情况下,可以先确定通用队列集合中除具有该I/O数据流队列编号的通用I/O数据流队列外,是否还存在至少一个通用I/O数据流队列,如果存在,则将具有该I/O数据流队列编号的通用I/O数据流队列分配给第一SQ,如果不存在,可以不分配,输出相应错误提示信息。
如,I/O数据流队列编号为p,p大于或等于0,通用队列集合中存在编号为p的通用I/O数据流队列,则将该通用I/O数据流队列分配给第一SQ;进一步的,在p大于或等于0,且在除编号为p的通用I/O数据流队列外还存在至少一个通用I/O数据流队列时,才将编号为p的通用I/O数据流队列分配给第一SQ,以保证还有自由的I/O数据流队列可以响应其它的任务。
如果专有队列集合中存在具有I/O数据流队列编号的专有I/O数据流队列,则可以将该专有I/O数据流队列分配给第一SQ。第一SQ与该专有I/O数据流队列对应的其他SQ共享该专有I/O数据流队列。
如果通用队列集合和专有队列集合中均不存在具有I/O数据流队列编号的I/O数据流队列,则可以认为没有指定要将哪个I/O数据流队列分配给第一SQ,或者指定有误。在这种情况下,可以在通用队列集合中选择一个通用I/O数据流队列,如选择存在任务最少的通用I/O数据流队列,分配给第一SQ。如,I/O数据流队列编号为p,p小于0,则可以在通用队列集合中选择存在任务最少的通用I/O数据流队列,分配给第一SQ,并将该通用I/O数据流的编号赋值给p。还可以如,I/O数据流队列编号为p,p小于0,且如果通用I/O数据流队列还存在2个或2个以上通用I/O数据流队列时,则可以在通用队列集合中选择存在任务最少的通用I/O数据流队列,分配给第一SQ,并将该通用I/O数据流的编号赋值给p,这样可以保证还有自由的I/O数据流队列可以响应其它的任务。可以在分配记录表中记录包含该通用I/O数据流的编号、第一SQ的编号等分配信息。
在本申请的一种具体实施方式中,可以根据分配指令,在通用队列集合或专有队列集合中选择一个I/O数据流队列,分配给第一SQ。如果在通用队列集合中选择一个I/O数据流队列,则在分配给第一SQ之前,可以先判断选择出的该I/O数据流队列中是否存在任务。如果在通用队列集合中选择出的该I/O数据流队列中存在任务,则在将该I/O数据流队列中的任务迁移到通用队列集合的其他通用I/O数据流队列中后,将该I/O数据流队列分配给第一SQ。
在本申请实施例中,根据分配指令,在通用队列集合或专有队列集合中选择一个I/O数据流队列,分配给第一SQ。如果是在通用队列集合中选择出的I/O数据流队列,要将该I/O数据流队列分配给第一SQ,将作为第一SQ的专有I/O数据流队列。所以,如果该I/O数据流队列中存在任务,需要将其中的任务迁移到其他通用I/O数据流队列中。具体的,可以迁移到其他的存在任务最少的通用I/O数据流队列中。迁移完成后,该I/O数据流队列为空,分配给第一SQ。这样可以避免第一SQ的专有I/O数据流队列中存在的其他任务阻塞第一SQ的任务的及时处理。
在本申请的一个实施例中,如果在通用队列集合中选择一个I/O数据流队列,在分配给第一SQ之前,该方法还可以包括以下步骤:确定通用队列集合中包含的通用I/O数据流队列个数是否大于或等于2;如果是,则执行分配给第一SQ的步骤。
可以理解的是,如果通用队列集合为空,即所有的I/O数据流队列都成为了专有I/O数据流队列,对于没有优先级要求的SQ的任务将无处存放。所以,为了保证系统有通用I/O数据流队列可以响应其他任务,需要在分配后保证通用队列集合中至少包含一个通用I/O数据流队列。
在本申请实施例中,在获得针对第一SQ的专有I/O数据流队列的分配指令之后,如果在通用队列集合中选择一个I/O数据流队列,则可以先确定通用队列集合中包含的通用I/O数据流队列个数是否大于或等于2。如果是,再继续执行将选择出的I/O数据流队列分配给第一SQ的操作,如果否,则可以返回不足以分配的错误信息,提示当前没有足够的通用I/O数据流队列可分配。这样可以保证通用队列集合中至少保留一个通用I/O数据流队列,保证没有优先级要求的SQ的任务的正常处理。
为便于理解,以图3所示的为SQ分配专有I/O数据流队列的具体实施过程和图4所示的为SQ删除专有I/O数据流队列的具体实施过程为例,对本申请实施例进行说明。
图3所示的为SQ分配专有I/O数据流队列的具体实施过程如下:
S301:获得分配专有I/O数据流队列的NVMe指令;
S302:对NVMe指令进行解析,获取到SQ编号q、I/O数据流队列编号p、权利终止时间、优先级;
S303:确定I/O数据流队列编号p是否大于或等于0;如果是,则表明NVMe指令中已指定分配哪一个I/O数据流队列给编号为q的SQ(以通用队列集合中存在编号p的通用I/O数据流为例),继续执行S304;如果否,则执行S305;
S304:确定通用队列集合中除编号为p的通用I/O数据流队列以外,是否还有其他通用I/O数据流队列,即是否还存在其他通用I/O数据流队列没有分配给SQ;如果是,则执行S306;如果否,则执行S307;
S305:确定通用队列集合中的通用I/O数据流队列个数是否大于或等于2;如果是,则执行S308;如果否,则执行S307;
S306:确定编号为p的通用I/O数据流队列的队列长度寄存器值是否大于0;如果是,则执行S309;如果否,则执行S310;
S307:返回不足以分配的错误信息,如“没有更多的I/O数据流队列可分配”;
S308:在通用队列集合中选择队列长度寄存器值最小的通用I/O数据流队列,获取其编号p’,并赋值给p;
S309:将编号为p的通用I/O数据流队列中的任务迁移到其他通用I/O数据流队列上;
S310:将编号为p的通用I/O数据流队列分配给NVMe指令中对应的编号为q的SQ,记录相对应的SQ的编号、权利终止时间、优先级;然后返回成功。
图4所示的为SQ删除专有I/O数据流队列的具体实施过程如下:
S401:获取删除专有I/O数据流队列的NVMe指令;
S402:对NVMe指令进行解析,获取到SQ编号q、I/O数据流队列编号p;
S403:确定I/O数据流队列编号p是否大于或等于0;如果是,则表明NVMe指令中已指定删除哪一个I/O数据流队列,继续执行S404;如果否,则执行S405;
S404:确定分配记录表中是否包含SQ编号为q、且专有I/O数据流队列编号为p的分配信息;如果是,则执行S406;如果否,则执行S407;
S405:确定分配记录表中是否包含SQ编号为q的分配信息;如果是,则执行S408;如果否,则执行S407;
S406:在分配记录表中删除全部SQ编号为q、且专有I/O数据流队列编号为p的分配信息;返回成功;
S407:返回没有分配记录的错误信息;
S408:在分配记录表中删除全部SQ编号为q的分配信息;返回成功。
在本申请的一个实施例中,该方法还可以包括以下步骤:
步骤一:获得第二SQ中的I/O指令;
步骤二:将I/O指令拆解为多个任务;
步骤三:确定第二SQ是否具有对应的专有I/O数据流队列;如果有,则执行步骤四,如果没有,则执行步骤五;
步骤四:将多个任务加入第二SQ对应的专有I/O数据流队列中;
步骤五:将多个任务加入通用队列集合包含的通用I/O数据流队列中。
为便于描述,将上述五个步骤结合起来进行说明。
在本申请实施例中,对SQ进行取指,可以获得SQ中的I/O指令。获得第二SQ中的I/O指令时,可以将I/O指令拆解为多个任务。如拆解为多个原子任务,多个原子任务构成一个任务序列。第二SQ可以为任意一个SQ。拆解后的任务的大小,可以根据系统固件设计、介质特性、文件系统格式、主机端的数据特性等因素合理设定。如,可以采用3pages作为拆解后的一个写任务的大小,采用16pages作为拆解后的一个读任务的大小。
确定第二SQ是否具有对应的专有I/O数据流队列。如果有,则表明第二SQ有一定的优先级,其对应的任务需要被及时处理,可以将多个任务加入到第二SQ对应的专有I/O数据流队列中。如果其对应的专有I/O数据流队列有多个,则可以将多个任务加入到存在任务最少的专有I/O数据流队列中。
如果第二SQ没有对应的专有I/O数据流队列,则表明第二SQ没有优先级要求,可以将多个任务加入到通用队列集合包含的通用I/O数据流队列中。具体的,可以将多个任务存入通用队列集合包含的任务最少的通用I/O数据流队列中。
如,第二SQ的写指令被SSD NVMe控制器取指后,由主控将一条写指令拆解成由若干原子写的子任务组合的写操作序列,分发到相应的相对空闲的写数据流队列中。
将多个任务加入到相应的I/O数据流队列中后,可以更新该I/O数据流队列的队列长度寄存器值,当然,在从I/O数据流队列中提取任务并处理后,也需要更新该I/O数据流队列长度寄存器值,以便后续再有任务要加入时,可以基于更新后的队列长度寄存器值判定哪个I/O数据流队列存在的任务最少。
将I/O指令拆解为多个任务,使得每个任务都较小,当正在对通用I/O数据流队列中的任务进行提取、处理等操作时,如果监测到专有队列集合中存在任务,则可以待当前正在执行的任务完成后,切换到专有队列集合包含的专有I/O数据流队列,对其中的任务进行提取、处理。因为任务较小,需要等待的时间较短,可以快速切换到专有队列集合进行相应较高优先级任务的处理。
需要说明的是,本申请实施例中的指令格式可以遵循NVMe接口标准,默认模式下不用进行额外的配置操作,与传统的应用系统或者框架可以无缝兼容。
图5所示为一种多数据流任务处理具体过程:
如果存在一个或以上I/O数据流队列长度寄存器值>0,则表明有任务需要处理;先确定是否存在最高优先级的专有I/O数据流队列;
如果存在最高优先级的专有I/O数据流队列,则定位一个长度寄存器值大于0的最高优先级的专有I/O数据流队列;
确定该专有I/O数据流队列的分配信息是否过期;如果过期,则删除分配信息,转到确定是否存在最高优先级的专有I/O数据流队列的步骤;如果未过期,则取出该专有I/O数据流队列中最早的一个原子I/O任务,调用I/O操作处理器完成该原子I/O任务,将该专有I/O数据流队列的长度寄存器值减1;
确定该专有I/O数据流队列的长度寄存器值是否大于0;如果该专有I/O数据流队列的长度寄存器值大于0,则转到取出该专有I/O数据流队列中最早的一个原子I/O任务的步骤;如果该专有I/O数据流队列的长度寄存器值不大于0,则转到确定是否存在最高优先级的专有I/O数据流队列的步骤;
如果不存在最高优先级的I/O数据流队列,则确定是否存在非最高优先级的专有I/O数据流队列;
如果存在非最高优先级的专有I/O数据流队列,则先定位一个长度寄存器值大于0的非最高优先级中优先级最高的专有I/O数据流队列,将优先级赋值给n;
确定该专有I/O数据流队列的分配信息是否过期;如果过期,则删除分配信息,转至确定是否存在非最高优先级的专有I/O数据流队列的步骤;如果未过期,则取出该专有I/O数据流队列中最早的1个原子I/O任务,调用I/O操作处理器完成该原子I/O任务,将该专有I/O数据流队列的长度寄存器值减1;
更新n=n-1;确定n是否大于0;如果n不大于0,可以判断不可以在该专有I/O数据流队列中提取任务进行轮询操作,则转至确定是否存在最高优先级的专有I/O数据流队列的步骤;如果n大于0,可以判断还可以在该专有I/O数据流队列中提取任务进行轮询操作,则确定该专有I/O数据流队列的长度寄存器值是否大于0;
如果该专有I/O数据流队列的长度寄存器值大于0,则转至取出该专有I/O数据流队列中最早的1个原子I/O任务的步骤;
如果该专有I/O数据流队列的长度寄存器值不大于0,则转至确定是否存在最高优先级的专有I/O数据流队列的步骤;
如果既不存在最高优先级的专有I/O数据流队列,也不存在非最高优先级的专有I/O数据流队列,则定位一个长度寄存器值大于0的通用I/O数据流队列;
取出该通用I/O数据流队列中最早的1个原子I/O任务,调用I/O操作处理器完成该原子I/O任务,将该通用I/O数据流队列的长度寄存器值减1;
确定是否存在专有I/O数据流队列;如果存在专有I/O数据流队列,则转至确定是否存在最高优先级的专有I/O数据流队列的步骤;如果不存在专有I/O数据流队列,则确定是否存在长度寄存器值大于0的通用I/O数据流队列;
如果存在长度寄存器值大于0的通用I/O数据流队列,则确定下一个通用I/O数据流队列的长度寄存器值是否大于0;如果下一个通用I/O数据流队列的长度寄存器值不大于0,则转至确定下一个通用I/O数据流队列的长度寄存器值是否大于0的步骤;如果下一个通用I/O数据流队列的长度寄存器值大于0,则定位下一个长度寄存器值>0的通用I/O数据流队列;
如果不存在长度寄存器值大于0的通用I/O数据流队列,则等待新任务加入队列。
相应于上面的方法实施例,本申请实施例还提供了一种多数据流任务处理装置,下文描述的多数据流任务处理装置与上文描述的多数据流任务处理方法可相互对应参照。
参见图6所示,该装置可以包括以下模块:
专有队列任务处理模块610,用于在专有队列集合中存在任务的情况下,在专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理;
通用队列任务处理模块620,用于在对专有队列集合中的任务处理完成后,在通用队列集合包含的通用I/O数据流队列中提取任务,调用I/O操作处理器进行处理;其中,专有队列集合中的任务的优先级高于通用队列集合中的任务的优先级。
应用本申请实施例所提供的装置,在专有队列集合中存在任务的情况下,先在专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理,然后在对专有队列集合中的任务处理完成后,在通用队列集合包含的通用I/O数据流队列中提取任务,调用I/O操作处理器进行处理。专有队列集合中的任务的优先级高于通用队列集合中的任务的优先级。为有需求的SQ预留I/O数据流队列,这样相当于为较高优先级的任务提供了专有通道,尽可能地避免被低优先级任务阻塞,使得较高优先级任务可以被及时处理,减少响应时间,充分发挥并行的性能优势,提升存储性能。
在本申请的一种具体实施方式中,专有队列任务处理模块610,用于:
确定专有队列集合包含的最高优先级的专有I/O数据流队列中是否存在任务;如果存在,则在最高优先级的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理;在对最高优先级的专有I/O数据流队列中的任务处理完成后,在专有队列集合包含的非最高优先级的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理。
在本申请的一种具体实施方式中,专有队列任务处理模块610,用于:
按照优先级从高到低的顺序,轮询专有队列集合包含的非最高优先级的专有I/O数据流队列;针对轮询到的优先级为i的专有I/O数据流队列,连续执行n次在该专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理的操作;n=f(i),i表示任意一个非最高优先级,i越大优先级越高,i越大n越大。
在本申请的一种具体实施方式中,通用队列任务处理模块620,用于:
轮询通用队列集合包含的通用I/O数据流队列;针对轮询到的通用I/O数据流队列,连续执行m次在该通用I/O数据流队列中提取任务,调用I/O操作处理器进行处理的操作,m>0。
在本申请的一种具体实施方式中,还包括专有队列分配模块,用于:
获得针对第一提取队列SQ的专有I/O数据流队列的分配指令;根据分配指令,在通用队列集合或专有队列集合中选择一个I/O数据流队列,分配给第一SQ;在分配记录表中记录分配信息。
在本申请的一种具体实施方式中,专有队列分配模块,用于:
确定分配指令中携带的I/O数据流队列编号;如果通用队列集合中存在具有I/O数据流队列编号的通用I/O数据流队列,则将该通用I/O数据流队列分配给第一SQ;如果专有队列集合中存在具有I/O数据流队列编号的专有I/O数据流队列,则将该专有I/O数据流队列分配给第一SQ;如果通用队列集合和专有队列集合中均不存在具有I/O数据流队列编号的I/O数据流队列,则在通用队列集合中选择存在任务最少的通用I/O数据流队列,分配给第一SQ。
在本申请的一种具体实施方式中,专有队列分配模块,用于:
如果在通用队列集合中选择一个I/O数据流队列,在分配给第一SQ之前,如果选择出的该I/O数据流队列中存在任务,则在将该I/O数据流队列中的任务迁移到通用队列集合的其他通用I/O数据流队列中后,执行分配给第一SQ的步骤。
在本申请的一种具体实施方式中,专有队列分配模块,还用于:
如果在通用队列集合中选择一个I/O数据流队列,在分配给第一SQ之前,确定通用队列集合中包含的通用I/O数据流队列个数是否大于或等于2;如果是,则执行分配给第一SQ的步骤。
在本申请的一种具体实施方式中,还包括分配信息第一删除模块,用于:
获得针对第一SQ的专有I/O数据流队列的删除指令;根据删除指令,在分配记录表中删除第一SQ对应的分配信息。
在本申请的一种具体实施方式中,还包括分配信息修改模块,用于:
获得针对第一SQ的专有I/O数据流队列的修改指令;根据修改指令,在分配记录表中删除第一SQ对应的分配信息;根据修改指令,在通用队列集合中选择一个通用I/O数据流队列,分配给第一SQ;在分配记录表中记录分配信息。
在本申请的一种具体实施方式中,分配信息包括权利终止时间,装置还包括分配信息第二删除模块,用于:删除分配记录表中到达权利终止时间的分配信息。
在本申请的一种具体实施方式中,还包括任务拆解加入模块,用于:
获得第二SQ中的I/O指令;将I/O指令拆解为多个任务;确定第二SQ是否具有对应的专有I/O数据流队列;如果有,则将多个任务加入第二SQ对应的专有I/O数据流队列中;如果没有,则将多个任务加入通用队列集合包含的通用I/O数据流队列中。
在本申请的一种具体实施方式中,任务拆解加入模块,用于:
将多个任务加入通用队列集合包含的存在任务最少的通用I/O数据流队列中。
相应于上面的方法实施例,本申请实施例还提供了一种多数据流任务处理设备,包括:
存储器,用于存储计算机程序;
处理器,用于执行计算机程序时实现上述多数据流任务处理方法的步骤。
如图7所示,为多数据流任务处理设备的组成结构示意图,多数据流任务处理设备可以包括:处理器10、存储器11、通信接口12和通信总线13。处理器10、存储器11、通信接口12均通过通信总线13完成相互间的通信。
在本申请实施例中,处理器10可以为中央处理器(Central Processing Unit,CPU)、特定应用集成电路、数字信号处理器、现场可编程门阵列或者其他可编程逻辑器件等。
处理器10可以调用存储器11中存储的程序,具体的,处理器10可以执行多数据流任务处理方法的实施例中的操作。
存储器11中用于存放一个或者一个以上程序,程序可以包括程序代码,程序代码包括计算机操作指令,在本申请实施例中,存储器11中至少存储有用于实现以下功能的程序:
在专有队列集合中存在任务的情况下,在专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理;
在对专有队列集合中的任务处理完成后,在通用队列集合包含的通用I/O数据流队列中提取任务,调用I/O操作处理器进行处理;
其中,专有队列集合中的任务的优先级高于通用队列集合中的任务的优先级。
在一种可能的实现方式中,存储器11可包括存储程序区和存储数据区,其中,存储程序区可存储操作系统,以及至少一个功能(比如任务监测功能、任务处理功能)所需的应用程序等;存储数据区可存储使用过程中所创建的数据,如任务处理数据、优先级数据等。
此外,存储器11可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件或其他易失性固态存储器件。
通信接口13可以为通信模块的接口,用于与其他设备或者系统连接。
当然,需要说明的是,图7所示的结构并不构成对本申请实施例中多数据流任务处理设备的限定,在实际应用中多数据流任务处理设备可以包括比图7所示的更多或更少的部件,或者组合某些部件。
相应于上面的方法实施例,本申请实施例还提供了一种计算机可读存储介质,计算机可读存储介质上存储有计算机程序,计算机程序被处理器执行时实现上述多数据流任务处理方法的步骤。
本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。
专业人员还可以进一步意识到,结合本文中所公开的实施例描述的各示例的单元及算法步骤,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各示例的组成及步骤。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。专业技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本申请的范围。
结合本文中所公开的实施例描述的方法或算法的步骤可以直接用硬件、处理器执行的软件模块,或者二者的结合来实施。软件模块可以置于随机存储器(RAM)、内存、只读存储器(ROM)、电可编程ROM、电可擦除可编程ROM、寄存器、硬盘、可移动磁盘、CD-ROM、或技术领域内所公知的任意其它形式的存储介质中。
本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的技术方案及其核心思想。应当指出,对于本技术领域的普通技术人员来说,在不脱离本申请原理的前提下,还可以对本申请进行若干改进和修饰,这些改进和修饰也落入本申请权利要求的保护范围内。

Claims (13)

1.一种多数据流任务处理方法,其特征在于,包括:
在专有队列集合中存在任务的情况下,在所述专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理;
在对所述专有队列集合中的任务处理完成后,在通用队列集合包含的通用I/O数据流队列中提取任务,调用所述I/O操作处理器进行处理;
其中,所述专有队列集合中的任务的优先级高于所述通用队列集合中的任务的优先级。
2.根据权利要求1所述的方法,其特征在于,所述在所述专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理,包括:
确定所述专有队列集合包含的最高优先级的专有I/O数据流队列中是否存在任务;
如果存在,则在所述最高优先级的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理;
在对所述最高优先级的专有I/O数据流队列中的任务处理完成后,在所述专有队列集合包含的非最高优先级的专有I/O数据流队列中提取任务,调用所述I/O操作处理器进行处理。
3.根据权利要求2所述的方法,其特征在于,所述在所述专有队列集合包含的非最高优先级的专有I/O数据流队列中提取任务,调用所述I/O操作处理器进行处理,包括:
按照优先级从高到低的顺序,轮询所述专有队列集合包含的非最高优先级的专有I/O数据流队列;
针对轮询到的每个非最高优先级的专有I/O数据流队列,连续执行n次在该专有I/O数据流队列中提取任务,调用所述I/O操作处理器进行处理的操作;
n=f(i),i表示任意一个非最高优先级,i越大优先级越高,i越大n越大。
4.根据权利要求1所述的方法,其特征在于,所述在通用队列集合包含的通用I/O数据流队列中提取任务,调用所述I/O操作处理器进行处理,包括:
轮询通用队列集合包含的通用I/O数据流队列;
针对轮询到的通用I/O数据流队列,连续执行m次在该通用I/O数据流队列中提取任务,调用所述I/O操作处理器进行处理的操作,m>0。
5.根据权利要求1所述的方法,其特征在于,还包括:
获得针对第一提取队列SQ的专有I/O数据流队列的分配指令;
根据所述分配指令,在所述通用队列集合或所述专有队列集合中选择一个I/O数据流队列,分配给所述第一SQ;
在分配记录表中记录分配信息。
6.根据权利要求5所述的方法,其特征在于,所述根据所述分配指令,在所述通用队列集合或所述专有队列集合中选择一个I/O数据流队列,分配给所述第一SQ,包括:
确定所述分配指令中携带的I/O数据流队列编号;
如果所述通用队列集合中存在具有所述I/O数据流队列编号的通用I/O数据流队列,则将该通用I/O数据流队列分配给所述第一SQ;
如果所述专有队列集合中存在具有所述I/O数据流队列编号的专有I/O数据流队列,则将该专有I/O数据流队列分配给所述第一SQ;
如果所述通用队列集合和所述专有队列集合中均不存在具有所述I/O数据流队列编号的I/O数据流队列,则在所述通用队列集合中选择存在任务最少的通用I/O数据流队列,分配给所述第一SQ。
7.根据权利要求5所述的方法,其特征在于,如果在所述通用队列集合中选择一个I/O数据流队列,在所述分配给所述第一SQ之前,还包括:
如果选择出的该I/O数据流队列中存在任务,则在将该I/O数据流队列中的任务迁移到所述通用队列集合的其他通用I/O数据流队列中后,执行所述分配给所述第一SQ的步骤。
8.根据权利要求5所述的方法,其特征在于,如果在所述通用队列集合中选择一个I/O数据流队列,在所述分配给所述第一SQ之前,还包括:
确定所述通用队列集合中包含的通用I/O数据流队列个数是否大于或等于2;
如果是,则执行所述分配给所述第一SQ的步骤。
9.根据权利要求5所述的方法,其特征在于,还包括:
获得针对所述第一SQ的专有I/O数据流队列的删除指令;
根据所述删除指令,在所述分配记录表中删除所述第一SQ对应的分配信息;
或者,
获得针对所述第一SQ的专有I/O数据流队列的修改指令;
根据所述修改指令,在所述分配记录表中删除所述第一SQ对应的分配信息;
根据所述修改指令,在所述通用队列集合中选择一个通用I/O数据流队列,分配给所述第一SQ;
在所述分配记录表中记录分配信息;
或者,
所述分配信息包括权利终止时间,删除所述分配记录表中到达所述权利终止时间的分配信息。
10.根据权利要求1至9之中任一项所述的方法,其特征在于,还包括:
获得第二SQ中的I/O指令;
将所述I/O指令拆解为多个任务;
确定所述第二SQ是否具有对应的专有I/O数据流队列;
如果有,则将所述多个任务加入所述第二SQ对应的专有I/O数据流队列中;
如果没有,则将所述多个任务加入所述通用队列集合包含的通用I/O数据流队列中。
11.一种多数据流任务处理装置,其特征在于,包括:
专有队列任务处理模块,用于在专有队列集合中存在任务的情况下,在所述专有队列集合包含的专有I/O数据流队列中提取任务,调用I/O操作处理器进行处理;
通用队列任务处理模块,用于在对所述专有队列集合中的任务处理完成后,在通用队列集合包含的通用I/O数据流队列中提取任务,调用所述I/O操作处理器进行处理;
其中,所述专有队列集合中的任务的优先级高于所述通用队列集合中的任务的优先级。
12.一种多数据流任务处理设备,其特征在于,包括:
存储器,用于存储计算机程序;
处理器,用于执行所述计算机程序时实现如权利要求1至11任一项所述多数据流任务处理方法的步骤。
13.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,所述计算机程序被处理器执行时实现如权利要求1至10任一项所述多数据流任务处理方法的步骤。
CN202010760502.XA 2020-07-31 2020-07-31 一种多数据流任务处理方法、装置、设备及存储介质 Pending CN111858011A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202010760502.XA CN111858011A (zh) 2020-07-31 2020-07-31 一种多数据流任务处理方法、装置、设备及存储介质

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202010760502.XA CN111858011A (zh) 2020-07-31 2020-07-31 一种多数据流任务处理方法、装置、设备及存储介质

Publications (1)

Publication Number Publication Date
CN111858011A true CN111858011A (zh) 2020-10-30

Family

ID=72953714

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202010760502.XA Pending CN111858011A (zh) 2020-07-31 2020-07-31 一种多数据流任务处理方法、装置、设备及存储介质

Country Status (1)

Country Link
CN (1) CN111858011A (zh)

Citations (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040054999A1 (en) * 2002-08-30 2004-03-18 Willen James W. Computer OS dispatcher operation with virtual switching queue and IP queues
CN101741751A (zh) * 2010-02-09 2010-06-16 华为技术有限公司 流量整形调度方法、流量整形调度装置及路由设备
US20150134857A1 (en) * 2013-11-14 2015-05-14 Sandisk Technologies Inc. System and Method for I/O Optimization in a Multi-Queued Environment
CN107818056A (zh) * 2016-09-14 2018-03-20 杭州华为数字技术有限公司 一种队列管理方法及装置
US20180188975A1 (en) * 2015-09-28 2018-07-05 Sandisk Technologies Llc Methods, systems and computer readable media for intelligent fetching of data storage device commands from submission queues
CN109246031A (zh) * 2018-11-01 2019-01-18 郑州云海信息技术有限公司 一种交换机端口流量排队方法和装置
WO2019072397A1 (en) * 2017-10-13 2019-04-18 Huawei Technologies Co., Ltd. QOS FLOW PLANNING IN A WIRELESS COMMUNICATION SYSTEM
CN110096344A (zh) * 2018-01-29 2019-08-06 北京京东尚科信息技术有限公司 任务管理方法、系统、服务器集群和计算机可读介质
CN110427295A (zh) * 2019-06-26 2019-11-08 苏州浪潮智能科技有限公司 一种云平台资源的监控方法、设备及可读介质
CN111061556A (zh) * 2019-12-26 2020-04-24 深圳前海环融联易信息科技服务有限公司 执行优先级任务的优化方法、装置、计算机设备及介质
CN111104210A (zh) * 2019-11-26 2020-05-05 苏宁云计算有限公司 一种任务处理方法、装置及计算机系统

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040054999A1 (en) * 2002-08-30 2004-03-18 Willen James W. Computer OS dispatcher operation with virtual switching queue and IP queues
CN101741751A (zh) * 2010-02-09 2010-06-16 华为技术有限公司 流量整形调度方法、流量整形调度装置及路由设备
US20150134857A1 (en) * 2013-11-14 2015-05-14 Sandisk Technologies Inc. System and Method for I/O Optimization in a Multi-Queued Environment
US20180188975A1 (en) * 2015-09-28 2018-07-05 Sandisk Technologies Llc Methods, systems and computer readable media for intelligent fetching of data storage device commands from submission queues
CN107818056A (zh) * 2016-09-14 2018-03-20 杭州华为数字技术有限公司 一种队列管理方法及装置
WO2018049899A1 (zh) * 2016-09-14 2018-03-22 华为技术有限公司 一种队列管理方法及装置
WO2019072397A1 (en) * 2017-10-13 2019-04-18 Huawei Technologies Co., Ltd. QOS FLOW PLANNING IN A WIRELESS COMMUNICATION SYSTEM
CN110096344A (zh) * 2018-01-29 2019-08-06 北京京东尚科信息技术有限公司 任务管理方法、系统、服务器集群和计算机可读介质
CN109246031A (zh) * 2018-11-01 2019-01-18 郑州云海信息技术有限公司 一种交换机端口流量排队方法和装置
CN110427295A (zh) * 2019-06-26 2019-11-08 苏州浪潮智能科技有限公司 一种云平台资源的监控方法、设备及可读介质
CN111104210A (zh) * 2019-11-26 2020-05-05 苏宁云计算有限公司 一种任务处理方法、装置及计算机系统
CN111061556A (zh) * 2019-12-26 2020-04-24 深圳前海环融联易信息科技服务有限公司 执行优先级任务的优化方法、装置、计算机设备及介质

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
扈啸;陈书明;: "面向多核片上Trace数据流合成的队列调度算法设计及实现", 计算机研究与发展, no. 03 *

Similar Documents

Publication Publication Date Title
EP3425502B1 (en) Task scheduling method and device
CN108647104B (zh) 请求处理方法、服务器及计算机可读存储介质
CN106569891B (zh) 一种存储系统中任务调度执行的方法和装置
CN108334396B (zh) 一种数据处理方法和装置、资源组的创建方法和装置
US20130160028A1 (en) Method and apparatus for low latency communication and synchronization for multi-thread applications
US7664823B1 (en) Partitioned packet processing in a multiprocessor environment
WO2018157836A1 (zh) 一种可编程硬件的资源管理方法、可编程硬件设备及存储介质
RU2397535C2 (ru) Устройство обработки информации, способ управления областью памяти и компьютерная программа
US9836516B2 (en) Parallel scanners for log based replication
CN114168271B (zh) 一种任务调度方法、电子设备及存储介质
KR20070090649A (ko) 멀티 코어 시스템에서 협력적 스케줄링을 제공하는 장치 및방법
CN115167996A (zh) 调度方法及装置、芯片、电子设备及存储介质
CN114168302A (zh) 任务调度方法、装置、设备及存储介质
CN115237556A (zh) 调度方法及装置、芯片、电子设备及存储介质
CN110851276A (zh) 一种业务请求处理方法、装置、服务器和存储介质
CN112860387A (zh) 分布式任务调度方法、装置、计算机设备及存储介质
CN108958903B (zh) 嵌入式多核中央处理器任务调度方法与装置
CN111831408A (zh) 异步任务处理方法、装置、电子设备及介质
US6757679B1 (en) System for building electronic queue(s) utilizing self organizing units in parallel to permit concurrent queue add and remove operations
CN111858011A (zh) 一种多数据流任务处理方法、装置、设备及存储介质
CN112748883B (zh) 一种io请求流水线处理设备、方法、系统及存储介质
CN113821174B (zh) 存储处理方法、装置、网卡设备及存储介质
CN116048756A (zh) 一种队列调度方法、装置及相关设备
CN114448909A (zh) 基于ovs的网卡队列轮询方法、装置、计算机设备及介质
CN111858095B (zh) 一种硬件队列多线程共享方法、装置、设备及存储介质

Legal Events

Date Code Title Description
PB01 Publication
PB01 Publication
SE01 Entry into force of request for substantive examination
SE01 Entry into force of request for substantive examination