本发明
实施例提供一种命令处理方法、装置和存储设备,从而提高混合IOPS。
本发明实施例提供了一种命令处理方法,包括:
判断连续执行读命令的次数是小于切换
阈值还是等于切换阈值;
当所述连续执行读命令的次数小于所述切换阈值时,执行所述读命令队列中的读命令,所述读命令队列用于存储接收的主机发送的读命令;
当所述连续执行读命令的次数等于所述切换阈值时,执行所述写命令队列中的写命令,所述写命令队列用于存储接收的主机发送的写命令。
本发明实施例还提供了一种命令处理装置,包括:
设置模
块,用于预先设置读命令队列和写命令队列,所述读命令队列用于存储接收的主机发送的读命令,所述写命令队列用于存储接收的主机发送的写命令;
判断模块,用于判断连续执行读命令的次数小于切换阈值还是等于切换阈值;
执行模块,用于当所述判断模块判断出连续执行读命令的次数小于所述切换阈值时执行所述读命令队列中的读命令,或者当所述判断模块判断出连续执行读命令的次数等于所述切换阈值时执行所述写命令队列中的写命令。
本发明实施例还提供了一种存储设备,包括上述命令处理装置。
本发明实施例的技术方案中,将读命令和写命令分别存储在读命令队列中和写命令队列中,执行命令时,通过判断连续执行读命令的次数与切换阈值的关系来确定所执行的命令类型,当连续执行读命令的次数小于切换阈值时,执行读命令队列中的读命令,当连续执行读命令的次数等于切换阈值时才执行写命令,因此,可能在执行多个读命令后才执行一个写命令,有效降低了写命令对读命令的影响,从而提高了混合IOPS,保证了读操作的性能。
附图说明
为了更清楚地说明本发明实施例或
现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例一提供的命令处理方法的
流程图;
图2为本发明实施例二提供的命令处理方法的流程图;
图3为本发明实施例三提供的命令处理装置的结构示意图;
图4为本发明实施例四提供的命令处理装置的结构示意图。
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例一提供的命令处理方法的流程图,需要说明的是,相比于现有技术中仅采用一个命令队列混合存储读命令和写命令,本实施例中分别设置有一个读命令队列和一个写命令队列,读命令队列用于存储接收的主机发送的读命令,写命令队列用于存储所接收的主机发送的写命令。读命令队列和写命令队列均可采用先入先出队列(First Input First Output,简称:FIFO)。进入读命令队列的命令的标记值范围可以为0到31,也就是说读命令队列的队列深度可以为32。同样,进入写命令队列的命令的标记值范围也可以为0到31,则读命令队列的队列深度也可以为32。
如图1所示,该命令处理方法包括:
步骤101、判读连续执行读命令的次数小于切换阈值还是等于切换阈值,如果连续执行读命令的次数小于切换阈值则执行步骤102,如果连续执行读命令的次数等于切换阈值则执行步骤103;
本实施例中,每执行一个读命令队列中的读命令,就可更新一次连续执行读命令的次数,具体地,可以将连续执行读命令的次数加1。因此,连续执行读命令的次数为连续执行读命令次数的累加值。
可以预先设置切换阈值。具体地,可以预先统计一段时间内主机发送的读命令的数量和写命令的数量,根据统计出的读命令的数量和写命令的数量的比值确定切换阈值。例如,在一段时间内,统计出的读命令的数量为700,统计出的写命令的数量为300,则读命令的数量与写命令的数量的比值为2.3。当计算出的比值为整数时,可直接采用该比值作为切换阈值;当计算出的比值为小数时,可采用该比值的整数部分加1后得到的整数为切换阈值。在上述实例中,计算出的比值为2.3,则可以采用整数3作为切换阈值。切换阈值是根据一段时间内统计出的读命令的数量和写命令的数量确定的,实际应用中可根据需要每隔一定的时间重新确定一次切换阈值,因此切换阈值是可以动态调整的。
步骤102、执行读命令队列中的读命令,所述读命令队列用于存储接收的主机发送的读命令;
具体地,执行的读命令为位于读命令队列队首的读命令。
步骤103、执行写命令队列中的写命令,所述写命令队列用于存储接收的主机发送的写命令。
具体地,执行的写命令为位于写命令队列队首的写命令。本实施例中,当连续执行读命令的次数等于切换阈值时,停止执行读命令队列中的读命令,执行写命令队列中的写命令。换言之,本实施例中,当连续执行了多个读命令并且执行的读命令的次数等于切换阈值时,才执行写命令队列中的一个写命令。
本实施例的技术方案中,将读命令和写命令分别存储在读命令队列中和写命令队列中,在执行命令时,首先判断连续执行读命令的次数是否小于切换预置,如果连续执行读命令的次数小于切换阈值,则执行读命令队列中的读命令,当连续执行读命令的次数等于切换阈值时才执行写命令,因此,可能会在连续执行多个读命令后才执行一个写命令,有效降低了写命令对读命令的影响,从而提高了混合IOPS,保证了读操作的性能。
图2为本发明实施例二提供的命令处理方法的流程图,如图2所示,该方法包括:
步骤201、预先设置读命令队列和写命令队列,该读命令队列用于存储主机发送的读命令,该写命令队列用于存储主机发送的写命令;
本实施例中,预先设置读命令队列和写命令队列,并接收主机发送的命令。识别接收到的命令为读命令还是写命令,如果为读命令则将接收到的命令存储到读命令队列中,具体地,可以将该接收到的命令插入到当前读命令队列的队尾,从而将该接收到的命令存储到读命令队列中;如果为写命令则将接收到的命令存储到写命令队列中,具体地,可以将该接收到的命令插入到当前写命令队列的队尾,从而将接收到的命令存储到写命令队列中。
步骤202、查询读命令队列是否为空,如果是则执行步骤206,否则执行步骤203;
步骤203、判断连续执行读命令的次数小于切换阈值还是等于切换阈值,如果小于切换阈值则执行步骤204,如果等于切换阈值则执行步骤206;
步骤204、执行读命令队列中的读命令,并执行步骤205;
具体地,可以执行读命令队列中的一个读命令。
步骤205、对连续执行读命令的次数进行更新处理,并继续执行步骤202;
具体的,每执行一个读命令队列中的读命令,就可更新一次连续执行读命令的次数,具体地,可以将连续执行读命令的次数加1。因此,连续执行读命令的次数为连续执行读命令次数的累加值。当然,可以理解的是,还可以每执行完一个读命令将所述连续执行读命令的次数增加一个固定值以对所述执行读命令的次数进行更新。
步骤206、查询写命令队列是否为空,如果是则执行步骤208,否则执行步骤207;
步骤207、执行写命令队列中的写命令,并执行步骤208;
具体地,可以执行写命令队列中的一个写命令。
步骤208、对连续执行读命令的次数进行清零处理,并继续执行步骤202。
具体的,由于执行写命令的时间较长,因此,本实施例中,每执行写队列中的一个写命令,就将连续执行读命令的次数进行清零,并返
回执行步骤202,通过对连续执行读命令的次数与切换阈值的关系判断是执行读队列中的读命令还是开始执行写队列中的写命令。
本实施例的技术方案中,将读命令和写命令分别存储在读命令队列中和写命令队列中,当连续执行读命令的次数等于切换阈值时才执行一个写命令,因此,可能连续执行多个读命令,才执行一个写命令,有效降低了写命令对读命令的影响,从而提高了混合IOPS,保证了存储设备读操作的性能。本实施例中通过统计一段时间内的读命令数量和写命令数量确定切换阈值,该切换阈值为连续执行的读命令的数量,通过设置切换阈值可以保证存储设备均衡的执行读命令和写命令。本实施例的技术方案实现简单,资源开销小,灵活性强,能够很好的应用于多种读命令数量和写命令数量的比例不同的情况特别是当用户对读操作性能要求较高时,本实施例的技术方案可以很好的满足用户的需要。
图3为本发明实施例三提供的命令处理装置的结构示意图,如图3所示,该装置包括设置模块11、判断模块12和执行模块13。
设置模块11,用于预先设置读命令队列和写命令队列,该读命令队列用于存储接收的主机发送的读命令,该写命令队列用于存储接收的主机发送的写命令。
判断模块12,用于判断连续执行读命令的次数小于切换阈值还是等于切换阈值;
其中,对于连续执行读命令的次数以及切换阈值的具体描述可参见上述实施例一,具体不再赘述。
执行模块13,用于当判断模块12判断出连续执行读命令的次数小于切换阈值时执行读命令队列中的读命令,或者当判断模块12判断出连续执行读命令的次数等于切换阈值时执行写命令队列中的写命令。
本实施例的技术方案中,设置模块预先设置读命令队列和写命令队列,并将读命令和写命令分别存储在读命令队列中和写命令队列中,当判断模块判断出连续执行读命令的次数小于切换阈值时由执行模块优先执行读队列中的读命令,当判断模块判断出连续执行读命令的次数等于切换阈值时才由执行模块执行写命令,因此,有效降低了写命令对读命令的影响,从而提高了混合IOPS,保证了读操作的性能。
图4为本发明实施例四提供的命令处理装置的结构示意图,如图4所示,该装置包括设置模块11、判断模块12和执行模块13,具体描述可参见实施例三,此处不再赘述。进一步地,本实施例中的装置还包括:
更新模块14,用于当执行模块13执行读命令队列中的一个读命令之后,对连续执行读命令的次数进行更新处理,并将经过更新处理的连续执行读命令的次数发送给判断模块12。
进一步地,本实施例中的装置还包括:
清零模块15,用于当执行模块13执行写命令队列中的一个写命令之后,对连续执行读命令的次数进行清零处理,并将经过清零处理的连续执行读命令的次数发送给判断模块12。
进一步地,本实施例中的装置还可以包括:
第一查询模块16,用于查询读命令队列是否为空。
具体的,当第一查询模块16查询出读命令队列不为空时,触发判断模块12,由判断模块12判断连续执行读命令的次数小于切换阈值还是等于切换阈值。
进一步地,本实施例中的装置还可以包括:
第二查询模块17,用于当第一查询模块16查询出读命令队列为空时,查询所述写命令队列是否为空。
具体的,当第二查询模块17查询出写命令队列不为空时,触发执行模块13,由执行模块13执行写命令队列中的命令,并触发清零模块15,由清零模块15对连续执行读命令的次数进行清零处理。当第二查询模块17查询出写命令队列为空时触发清零模块15,由清零模块15对连续执行读命令的次数进行清零处理。
进一步地,当判断模块12判断出连续执行读命令的次数等于切换阈值时,触发第二查询模块17。当第二查询模块17查询出写命令队列不为空时,再由执行模块13执行写命令队列中的命令。
本发明实施例中的主机与存储设备通信的装置可应用于各类存储设备中,例如:串行高级技术附件(Serial Advanced Technology Attachment,以下简称:SATA)存储设备、小型
计算机系统接口(Small Computer SystemInterface,以下简称:SCSI)存储设备等。
本实施例的技术方案中,设置模块预先设置读命令队列和写命令队列,并将读命令和写命令分别存储在读命令队列中和写命令队列中,当判断模块判断出连续执行读命令的次数小于切换阈值时,由执行模块优先执行多个读命令,当判断模块判断出连续执行读命令的次数等于切换阈值时才由执行模块执行写命令,有效降低了写命令对读命令的影响,从而提高了混合IOPS,保证了存储设备读操作的性能。本实施例中通过统计一段时间内的读命令数量和写命令数量确定切换阈值,该切换阈值为连续执行的读命令的数量,通过设置切换阈值可以保证存储设备均衡的执行读命令和写命令。本实施例的技术方案实现简单,资源开销小,灵活性强,能够很好的应用于多种读命令数量和写命令数量的比例不同的情况。特别是当用户对读操作性能要求较高时,本实施例的技术方案可以很好的满足用户的需要。
本发明实施例还提供了一种存储设备,该存储设备包括上述实施例三或者实施例四中的命令处理的装置,此处不再赘述。
本实施例中的存储设备将读命令和写命令分别存储在读命令队列中和写命令队列中,当判断出连续执行读命令的次数小于切换阈值时,优先执行读队列中的读命令,当判断出连续执行读命令的次数等于切换阈值时才执行写命令,因此,可能在执行多个读命令后才执行一个写命令,有效降低了写命令对读命令的影响,从而提高了混合IOPS,保证了存储设备读操作的性能。本实施例中通过统计一段时间内的读命令数量和写命令数量确定切换阈值,该切换阈值为连续执行的读命令的数量,通过设置切换阈值可以保证存储设备均衡的执行读命令和写命令。本实施例的技术方案实现简单,资源开销小,灵活性强,能够很好的应用于多种读命令数量和写命令数量的比例不同的情况。特别是当用户对读操作性能要求较高时,本实施例的技术方案可以很好的满足用户的需要。
本领域普通技术人员可以理解:实现上述方法实施例的全部或部分步骤可以通过程序指令相关的
硬件来完成,前述的程序可以存储于一计算机可读取存储介质中,该程序在执行时,执行包括上述方法实施例的步骤;而前述的存储介质包括:ROM(Read-Only Memory,只读存储记忆体)、RAM(RandomAccess Memory,随机存储记忆体)、磁碟或者光盘等各种可以存储程序代码的介质。
最后应说明的是:以上实施例仅用以说明本发明的技术方案而非对其进行限制,尽管参照较佳实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对本发明的技术方案进行
修改或者等同替换,而这些修改或者等同替换亦不能使修改后的技术方案脱离本发明技术方案的精神和范围。