硬盘操作命令的执行方法、硬盘及存储介质转让专利

申请号 : CN201710915987.3

文献号 : CN109582215B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 褚小伟赵献明陈昊

申请人 : 华为技术有限公司

摘要 :

本发明实施例公开了一种硬盘操作命令的执行方法、硬盘及存储介质。该方法应用于硬盘,包括控制器和至少两个闪存颗粒组,每个闪存颗粒组包括至少一个闪存颗粒,每个闪存颗粒包括多个物理块,每个闪存颗粒组中的任一闪存颗粒组成一个LUN,同一闪存颗粒组中位于不同LUN中的闪存颗粒不同,方法包括:接收操作命令后,确认空闲状态的目标LUN;从目标LUN中确认待执行操作命令时所访问的目标物理块;保存操作命令至目标物理块所属的闪存颗粒对应的等待处理队列中;在目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于预设阈值时,修改目标LUN的工作状态为非空闲状态。能够降低I/O读命令的时延。

权利要求 :

1.一种硬盘操作命令的执行方法,其特征在于,应用于硬盘,所述硬盘包括控制器和至少两个闪存颗粒组,每个闪存颗粒组包括至少一个闪存颗粒,每个闪存颗粒包括多个物理块,每个闪存颗粒组中的任一闪存颗粒组成一个逻辑单元LUN,同一闪存颗粒组中位于不同LUN中的闪存颗粒不同,所述方法由所述控制器执行,包括:接收操作命令后,确认目标LUN,所述目标LUN的工作状态为空闲状态,所述目标LUN处于所述空闲状态时,所述目标LUN中每个所述闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量小于或等于预设阈值;其中,所述操作命令包括I/O写命令、垃圾回收写命令或垃圾回收读命令;

从所述目标LUN中确认待执行所述操作命令时所访问的目标物理块;

保存所述操作命令至所述目标物理块所属的所述闪存颗粒对应的等待处理队列中;

在所述目标LUN中每个所述闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于所述预设阈值时,修改所述目标LUN的工作状态为非空闲状态。

2.如权利要求1所述的方法,其特征在于,每个闪存颗粒组中的任一闪存颗粒中的任一所述物理块组成一个逻辑块,同一所述闪存颗粒在不同的所述逻辑块中的所述物理块不同,所述确认工作状态为空闲状态的目标LUN之前,还包括:确认目标逻辑块,所述目标逻辑块的操作状态为空闲状态,所述目标逻辑块处于所述空闲状态时,所述目标逻辑块中每个物理块所属的闪存颗粒分别对应的等待处理队列中不包括待访问所述目标逻辑块中的任意物理块时所要执行的其他操作命令,所述目标LUN由所述目标逻辑块中每个物理块所属的闪存颗粒组成。

3.如权利要求2所述的方法,其特征在于,所述操作命令为所述I/O写命令或所述垃圾回收写命令时,所述目标LUN中的所述目标物理块为新块。

4.如权利要求2所述的方法,其特征在于,所述确认目标LUN,包括:

查询LUN状态表,确认工作状态参数的值表示空闲状态的目标LUN,所述LUN状态表包括所述硬盘中各LUN的工作状态参数,所述LUN的工作状态参数用于指示所述LUN的工作状态。

5.如权利要求2所述的方法,其特征在于,如果所述预设阈值为零,还包括:执行所述操作命令,以及修改所述目标逻辑块的操作状态为非空闲状态。

6.如权利要求2所述的方法,其特征在于,如果所述预设阈值为零,还包括:在所述操作命令执行结束后,修改所述目标逻辑块的操作状态为空闲状态。

7.如权利要求4所述的方法,其特征在于,还包括:

在所述目标LUN中的所有逻辑块的操作状态为空闲状态时,将所述目标LUN的工作状态参数的值修改为空闲状态。

8.一种硬盘,其特征在于,所述硬盘包括控制器和至少两个闪存颗粒组,每个闪存颗粒组包括至少一个闪存颗粒,每个闪存颗粒包括多个物理块,每个闪存颗粒组中的任一闪存颗粒组成一个LUN,同一闪存颗粒组中位于不同LUN中的闪存颗粒不同;所述控制器包括:确认单元,用于接收操作命令后,确认目标LUN,所述目标LUN的工作状态为空闲状态,所述目标LUN处于所述空闲状态时,所述目标LUN中每个所述闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量小于或等于预设阈值;其中,所述操作命令包括I/O写命令、垃圾回收写命令或垃圾回收读命令;

所述确认单元还用于从所述目标LUN中确认待执行所述操作命令时所访问的目标物理块;

保存单元,用于保存所述操作命令至所述目标物理块所属的所述闪存颗粒对应的等待处理队列中;

修改单元,用于在所述目标LUN中每个所述闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于所述预设阈值时,修改所述目标LUN的工作状态为非空闲状态。

9.如权利要求8所述的硬盘,其特征在于,每个闪存颗粒组中的任一闪存颗粒中的任一所述物理块组成一个逻辑块,同一所述闪存颗粒在不同的所述逻辑块中的所述物理块不同;

所述确认单元,还用于确认目标逻辑块,所述目标逻辑块的操作状态为空闲状态,所述目标逻辑块处于所述空闲状态时,所述目标逻辑块中每个物理块所属的闪存颗粒分别对应的等待处理队列中不包括待访问所述目标逻辑块中的任意物理块时所要执行的其他操作命令,所述目标LUN由所述目标逻辑块中每个物理块所属的闪存颗粒组成。

10.如权利要求9所述的硬盘,其特征在于,所述操作命令为所述I/O写命令或所述垃圾回收写命令时,所述目标LUN中的所述目标物理块为新块。

11.如权利要求9项所述的硬盘,其特征在于,所述确认单元具体用于查询LUN状态表,确认工作状态参数的值表示空闲状态的目标LUN,所述LUN状态表包括所述硬盘中各LUN的工作状态参数,所述LUN的工作状态参数用于指示所述LUN的工作状态。

12.如权利要求9项所述的硬盘,其特征在于,如果所述预设阈值为零,所述控制器还包括:执行单元,用于执行所述操作命令;

所述修改单元还用于修改所述目标逻辑块的操作状态为非空闲状态。

13.如权利要求9项所述的硬盘,其特征在于,如果所述预设阈值为零,所述修改单元还用于在所述操作命令执行结束后,修改所述目标逻辑块的操作状态为空闲状态。

14.如权利要求11所述的硬盘,其特征在于,所述修改单元还用于在所述目标LUN中的所有逻辑块的操作状态为空闲状态时,将所述目标LUN的工作状态参数的值修改为空闲状态。

15.一种硬盘,其特征在于,包括:一个或多个处理器、存储器、通信接口;

所述存储器、所述通信接口与所述一个或多个处理器耦合;

所述存储器用于存储计算机程序代码,所述计算机程序代码包括指令,当所述一个或多个处理器执行所述指令时,所述硬盘执行如权利要求1-7中任意一项所述的硬盘操作命令的执行方法。

16.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有指令,当所述指令在硬盘上运行时,使得硬盘执行权利要求1-7任一项所述的硬盘操作命令的执行方法。

说明书 :

硬盘操作命令的执行方法、硬盘及存储介质

技术领域

[0001] 本发明涉及通信技术领域,尤其涉及一种硬盘操作命令的执行方法、硬盘及存储介质。

背景技术

[0002] 固态硬盘(Solid-State Disk,SSD)包括控制器和闪存阵列,闪存阵列中包括多个闪存颗粒。每个闪存颗粒内部由成千上万个大小相同的物理块组成,物理块的大小一般在数百KB到数MB之间,在每一个物理块的内部,又分成若干个大小相同的页,页的大小一般为4KB或8KB。在写入数据之前,控制器以物理块为粒度清空物理块中的数据。在写入数据时,控制器以页为粒度写入数据至闪存阵列。在存储领域,数据清空和数据写入这两个动作合起来称作数据擦写(Program/Erase,P/E)。每个物理块中的P/E次数有限,当某个物理块的P/E次数达到上限后,就无法保证该物理块能够继续有效地存取数据。
[0003] 为了避免物理块因P/E次数达到上限而失效,也为了加快固态硬盘对写请求的响应速度,固态硬盘采用地址空间虚拟化的方式进行管理,所有闪存颗粒在逻辑上被划分为多个组,由不同组中任一闪存颗粒中的一个物理块组成一个逻辑块,每个逻辑块中的物理块为不同闪存颗粒中的不同物理块。当有新数据写入时,固态硬盘在确定写入新数据需要访问的逻辑块后,不会选择该逻辑块中的保存旧数据的页所属的物理块保存数据,而是选择被清空的页所属的物理块来保存新数据,同时通过映射表记录逻辑块的地址和被清空的页所属的物理块的地址之间的映射关系。保存旧数据的页称为垃圾页,固态硬盘会按照回收策略读取垃圾页,以及回收垃圾页,即将垃圾页中的数据清空,例如将垃圾页中的数据删除或移动至其他的冗余闪存颗粒或冗余物理块中,以便下次写入数据至被清空的页中。
[0004] 固态硬盘接收到操作命令后,通过控制器确认操作命令执行时所访问的物理块,将操作命令保存至物理块所属的闪存颗粒对应的等待处理队列中,控制器按照操作命令存储的先后顺序依次处理闪存颗粒对应的等待处理队列中的操作命令。操作命令的类型有四种,分别是输入输出(Input and Output,I/O)读命令、I/O写命令、垃圾回收(Gabage Collection,GC)写命令和GC读命令。其中,I/O读命令用于指示读取I/O读命令执行时所访问的物理块中的数据,I/O写命令用于指示在I/O写命令执行时所访问的物理块中写入数据,GC读命令用于指示读取GC读命令执行时所访问的物理块中的数据,GC写命令用于指示在I/O写命令执行时所访问的物理块中写入GC读命令所读取的数据。其中,执行I/O读命令所访问的物理块是由客户端确定的,控制器对于执行I/O读命令所访问的物理块没有其他选择。如果保存I/O读命令之前,在闪存颗粒对应的等待处理队列中已经保存了多个其他操作命令,控制器必须处理完成其他操作命令后才可以执行I/O读命令,从而增大了客户端的I/O读命令的时延,进而降低了客户端的通信效率。

发明内容

[0005] 本申请提供了一种硬盘操作命令的执行方法、硬盘及存储介质,能够减少I/O读命令的时延,提高客户端的通信效率。
[0006] 第一方面,本申请提供了一种硬盘操作命令的执行方法,应用于硬盘,硬盘包括控制器和至少两个闪存颗粒组,每个闪存颗粒组包括至少一个闪存颗粒,每个闪存颗粒包括多个物理块,每个闪存颗粒组中的任一闪存颗粒组成一个逻辑单元(Logical Unit Number,LUN),同一闪存颗粒组中位于不同LUN中的闪存颗粒不同,方法由控制器执行,包括:
[0007] 接收操作命令后,确认目标LUN,目标LUN的工作状态为空闲状态,目标LUN处于空闲状态时,目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量小于或等于预设阈值;
[0008] 从目标LUN中确认待执行操作命令时所访问的目标物理块;
[0009] 保存操作命令至目标物理块所属的闪存颗粒对应的等待处理队列中;
[0010] 在目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于预设阈值时,修改目标LUN的工作状态为非空闲状态。
[0011] 本申请中,硬盘中控制器在接收操作命令后,可以先确认出工作状态为空闲状态的目标LUN,然后从工作状态为空闲状态的目标LUN中确认出待执行操作命令时所访问的目标物理块。由于目标LUN处于空闲状态时,目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量小于或等于预设阈值,所以目标LUN中每个物理块所属的闪存颗粒对应的等待处理队列中等待处理的操作命令的数量小于或等于预设阈值,如此本申请中,控制器将所属颗粒对应的等待处理队列中保存的操作命令小于或等于预设阈值的物理块作为目标物理块,可以使I/O读命令所访问的目标物理块所属闪存颗粒对应的等待处理队列中包括的其他操作命令数量较少,从而可以降低客户端的I/O读命令的时延,提高客户端的通信效率。
[0012] 结合第一方面,在第一方面的第一种可能的实施方式中,每个闪存颗粒组中的任一闪存颗粒中的任一物理块组成一个逻辑块,同一闪存颗粒在不同的逻辑块中的物理块不同,操作命令包括I/O写命令、垃圾回收写命令或垃圾回收读命令,确认工作状态为空闲状态的目标LUN之前,还包括:
[0013] 确认目标逻辑块,目标逻辑块的操作状态为空闲状态,目标逻辑块处于空闲状态时,目标逻辑块中每个物理块所属的闪存颗粒分别对应的等待处理队列中不包括待访问目标逻辑块中的任意物理块时所要执行的其他操作命令,目标LUN由目标逻辑块中每个物理块所属的闪存颗粒组成。
[0014] 结合第一方面或上述可能的实施方式,在第一方面的第二种可能的实施方式中,操作命令为I/O写命令或垃圾回收写命令时,目标LUN中的目标物理块为新块。
[0015] 结合第一方面或上述可能的实施方式,在第一方面的第三种可能的实施方式中,操作命令包括I/O写命令、垃圾回收写命令或垃圾回收读命令,确认目标LUN,包括:
[0016] 查询LUN状态表,确认工作状态参数的值表示空闲状态的目标LUN,LUN状态表包括硬盘中各LUN的工作状态参数,LUN的工作状态参数用于指示LUN的工作状态。
[0017] 结合第一方面或上述可能的实施方式,在第一方面的第四种可能的实施方式中,如果预设阈值为零,还包括:
[0018] 执行操作命令,以及修改目标逻辑块的操作状态为非空闲状态。
[0019] 结合第一方面或上述可能的实施方式,在第一方面的第五种可能的实施方式中,如果预设阈值为零,还包括:
[0020] 在操作命令执行结束后,修改目标逻辑块的操作状态为空闲状态。
[0021] 结合第一方面或上述可能的实施方式,在第一方面的第六种可能的实施方式中,还包括:
[0022] 在目标LUN中的所有逻辑块的操作状态为空闲状态时,将目标LUN的工作状态参数的值修改为空闲状态。
[0023] 第二方面,本申请提供了一种硬盘,装置设置于硬盘中,硬盘包括控制器和至少两个闪存颗粒组,每个闪存颗粒组包括至少一个闪存颗粒,每个闪存颗粒包括多个物理块,每个闪存颗粒组中的任一闪存颗粒组成一个LUN,同一闪存颗粒组中位于不同LUN中的闪存颗粒不同;控制器包括:
[0024] 确认单元,用于确认单元,用于接收操作命令后,确认目标LUN,目标LUN的工作状态为空闲状态,目标LUN处于空闲状态时,目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量小于或等于预设阈值;
[0025] 确认单元还用于从目标LUN中确认待执行操作命令时所访问的目标物理块;
[0026] 保存单元,用于保存操作命令至目标物理块所属的闪存颗粒对应的等待处理队列中;
[0027] 修改单元,用于在目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于预设阈值时,修改目标LUN的工作状态为非空闲状态。
[0028] 结合第二方面,在第二方面的第一种可能的实施方式中,每个闪存颗粒组中的任一闪存颗粒中的任一物理块组成一个逻辑块,同一闪存颗粒在不同的逻辑块中的物理块不同,操作命令包括I/O写命令、垃圾回收写命令或垃圾回收读命令;
[0029] 确认单元还用于确认目标逻辑块,目标逻辑块的操作状态为空闲状态,目标逻辑块处于空闲状态时,目标逻辑块中每个物理块所属的闪存颗粒分别对应的等待处理队列中不包括待访问目标逻辑块中的任意物理块时所要执行的其他操作命令,目标LUN由目标逻辑块中每个物理块所属的闪存颗粒组成。
[0030] 结合第二方面或上述可能的实施方式,在第二方面的第二种可能的实施方式中,操作命令为I/O写命令或垃圾回收写命令时,目标LUN中的目标物理块为新块。
[0031] 结合第二方面或上述可能的实施方式,在第二方面的第三种可能的实施方式中,操作命令包括I/O写命令、垃圾回收写命令或垃圾回收读命令,确认单元具体用于查询LUN状态表,确认工作状态参数的值表示空闲状态的目标LUN,LUN状态表包括硬盘中各LUN的工作状态参数,LUN的工作状态参数用于指示LUN的工作状态。
[0032] 结合第二方面或上述可能的实施方式,在第二方面的第四种可能的实施方式中,如果预设阈值为零,控制器还包括:
[0033] 执行单元,用于执行操作命令;
[0034] 修改单元还用于修改目标逻辑块的操作状态为非空闲状态。
[0035] 结合第二方面或上述可能的实施方式,在第二方面的第五种可能的实施方式中,如果预设阈值为零,修改单元还用于在操作命令执行结束后,修改目标逻辑块的操作状态为空闲状态。
[0036] 结合第二方面或上述可能的实施方式,在第二方面的第六种可能的实施方式中,修改单元还用于在目标LUN中的所有逻辑块的操作状态为空闲状态时,将目标LUN的工作状态参数的值修改为空闲状态。
[0037] 第三方面,本申请提供一种硬盘,包括:一个或多个处理器、存储器、通信接口;
[0038] 所述存储器、所述通信接口与所述一个或多个处理器耦合;
[0039] 所述存储器用于存储计算机程序代码,所述计算机程序代码包括指令,当所述一个或多个处理器执行所述指令时,所述硬盘执行如第一方面所述的方法。
[0040] 第四方面,本申请提供一种计算机可读存储介质,计算机可读存储介质中存储有指令,当其在硬盘上运行时,使得硬盘执行第一方面所述的方法。
[0041] 第五方面,本申请提供一种包含指令的计算机程序产品,计当所述计算机程序产品在硬盘上运行时,使得硬盘执行第一方面所述的方法。

附图说明

[0042] 为了更清楚地说明本发明实施例的技术方案,下面将对本发明实施例中所需要使用的附图作简单地介绍,显而易见地。
[0043] 图1是根据本发明实施例提供的一种网络架构示意图;
[0044] 图2是根据本发明实施例提供的一种闪存阵列的结构示意图;
[0045] 图3是根据本发明一实施例提供的一种硬盘操作命令的执行方法的示意性流程图;
[0046] 图4是根据本发明一实施例提供的又一种硬盘操作命令的执行方法的示意性流程图;
[0047] 图5是根据本发明一实施例提供的另一种硬盘操作命令的执行方法的示意性流程图;
[0048] 图6是根据本发明一实施例提供的再一种硬盘操作命令的执行方法的示意性流程图;
[0049] 图7是根据本发明一实施例提供的一种硬盘示意性框图。

具体实施方式

[0050] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述。
[0051] 本发明实施例适用于硬盘中执行操作指令的场景,本发明实施例以固态硬盘中执行操作指令为例进行说明。如图1所示,为本发明实施例适用的一种网络架构示意图。如图1所示,包括主机(客户端)11和固态硬盘12,主机11和固态硬盘12之间连接。
[0052] 固态硬盘12用于执行主机11下发的操作命令。
[0053] 例如,主机11在需要向固态硬盘12写入数据或读取固态硬盘12中存储的数据时,主机11向固态硬盘12下发操作命令。操作命令包括I/O读命令和I/O写命令。当操作命令为I/O读命令时,指示读取固态硬盘12中的数据,当操作命令为I/O写命令时,指示向固态硬盘12中写入数据。
[0054] 如图1所示,固态硬盘12包括控制器121、闪存阵列122和通信接口124,通信接口124用于与主机11等设备进行通信,例如用于接收主机11下发的操作命令。闪存阵列122中包括多个闪存颗粒。每个闪存颗粒内部由成千上万个大小相同的物理块组成,物理块的大小一般在数百KB到数MB之间,在每一个物理块的内部,又分成若干个大小相同的页,页的大小一般为4KB或8KB。控制器121可以执行主机下发的I/O写命令。在写入数据时,控制器121以页为粒度写入数据至闪存阵列122。写入数据后,在主机11有读数据的需求时,控制器121执行主机11下发的I/O读命令,以读取之前写入至存储阵列122的数据。
[0055] 如果物理块中存在垃圾数据,控制器121会对物理块中的垃圾数据进行清空,以便于后续有写数据的需求时,以页为粒度把要写入的数据写入干净的物理块中。在对物理块中的数据进行清空时,则控制器121会通过执行GC读命令读取物理块中待清空的垃圾页中的垃圾数据,再通过执行GC写命令将通过执行GC读命令读取的垃圾数据写入其他物理块中,以将垃圾页中的垃圾数据移动至其他物理块中,进而把垃圾页清空为干净页。所以控制器121可以执行的操作命令包括I/O读命令、I/O写命令、GC写命令和GC读命令。控制器121接收操作命令后,确认出待执行操作命令时所访问的物理块,然后将操作命令保存至待执行操作命令时所访问的物理块所属的闪存颗粒对应的等待处理队列中,并且控制器121可以按照操作命令存储的先后顺序依次处理闪存颗粒对应的等待处理队列中的操作命令。控制器121可以通过控制芯片实现,例如,可以为专用集成电路(Application Specific Integrated Circuit,ASIC)或可编程逻辑器件(Programmable Logic Device,PLD)或处理器。
[0056] 如图1所示,固态硬盘12还可以包括存储器123。控制器121和存储器123连接。存储器123可以是独立存在的,通过总线125与控制器121相连接。存储器123也可以和控制器121集成在一起。存储器123可以用于存储软件程序以及应用模块,控制器121通过运行存储在存储器123的软件程序以及应用模块,从而执行各操作指令以及响应的数据处理。存储器123主要包括存储程序区。其中,存储程序区可存储操作系统、至少一个功能所需的应用程序,比如执行各操作指令所需的应用程序等。
[0057] 如图1所示,控制器121、闪存阵列122、存储器123和通信接口124均可以通过总线125相互连接。
[0058] 固态硬盘12中采用地址空间虚拟化的方式进行管理。所有闪存颗粒在逻辑上被划分为多个组,每个闪存颗粒组包括至少一个闪存颗粒,每个闪存颗粒包括多个物理块,每个闪存颗粒组中的任一闪存颗粒组成一个LUN,同一闪存颗粒组中位于不同LUN中的闪存颗粒不同。由不同组中任一闪存颗粒中的一个物理块组成一个逻辑块,每个逻辑块中的物理块为不同闪存颗粒中的不同物理块。逻辑块中每个物理块所属的闪存颗粒组成LUN。
[0059] 以图2所示闪存阵列结构为例进行说明。如图2所示,闪存阵列122包括20个闪存颗粒,将闪存颗粒划分为4个组,编号分别为CH0、CH1、CH2和CH3。每个组中包括5个闪存颗粒,每个组中闪存颗粒的编号均为D0、D1、D2、D3和D4。每个闪存颗粒包括的物理块以同样的方式编号,如图2中所示,每个组中编号为D0的闪存颗粒中包括一个编号相同的物理块b0。在图2所示结构中,设置每个组中编号相同的闪存颗粒中编号相同的物理块组成一个逻辑块,则可以确定,每个组中编号为D0的闪存颗粒所包括的编号为b0的物理块组成一个逻辑块,设置此逻辑块的编号为K1,即逻辑块K1包括:组CH0中颗粒D0所包括的物理块b0、组CH1中颗粒D0所包括的物理块b0、组CH2中颗粒D0所包括的物理块b0和组CH3中颗粒D0所包括的物理块b0。进而可以得出组CH0中颗粒D0、组CH1中颗粒D0、组CH2中颗粒D0和组CH3中颗粒D0组成一个LUN。
[0060] 由于控制器121执行I/O读命令时所访问的物理块是由主机11确定的,所以控制器121可以根据I/O读命令中的信息确认执行I/O读命令所访问的物理块。而对于I/O写命令、GC写命令和GC读命令的操作命令,控制器121可以根据闪存阵列122中物理块和闪存颗粒中的数据存储量和数据存储类型来确认执行操作命令时所访问的物理块。因此,控制器121执行I/O读命令时所访问的物理块是被动确定的,控制器121执行I/O写命令、GC写命令和GC读命令时可以主动确定执行I/O写命令、GC写命令和GC读命令时所访问的物理块。
[0061] 控制器121接收上述操作命令后,首先确认待执行操作命令时所访问的目标逻辑块,然后从目标逻辑块所包括的各物理块中,确认出待执行操作命令时所访问的目标物理块,并将操作命令保存至目标物理块所属的闪存颗粒对应的等待处理队列中。由于闪存颗粒对应的等待处理队列中的操作命令是按照存储的先后顺序依次处理的,所以为了避免执行I/O读命令所访问的目标物理块所属闪存颗粒对应的等待处理队列中保存了多个其他操作命令,增大主机11的I/O读命令的时延,降低主机11的通信效率的情况,本发明实施例中控制器在确认待执行包括I/O写命令、GC写命令和GC读命令的操作命令时所访问的目标物理块时,可以确认没有保存等待处理的操作命令的等待处理队列所对应的闪存颗粒中的物理块为执行I/O写命令、GC写命令或GC读命令时所访问的物理块,这样可以使I/O读命令所访问的目标物理块所属的闪存颗粒对应的等待处理队列中最多保存了一个非I/O读命令的其他操作命令,从而可以降低主机11的I/O读命令的时延,提高主机11的通信效率。
[0062] 控制器121中可以存储所有LUN的工作状态,LUN的工作状态包括空闲状态和非空闲状态,空闲状态表示LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量小于或等于预设阈值,例如,LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量都为零时,可以确认LUN的工作状态为空闲状态。非空闲状态表示LUN中至少一个闪存颗粒对应的等待处理队列中等待处理的操作命令的数量大于所述预设阈值,例如,LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量都不为零时,即LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于0时,可以确认LUN的工作状态为非空闲状态。所以处于空闲状态的LUN所包括的闪存颗粒中的物理块为本发明实施例中待执行操作命令时所访问的目标物理块,即处于空闲状态的LUN所包括的颗粒中的物理块组成的逻辑块为本发明实施例中待执行操作命令时所访问的目标逻辑块。
[0063] 可选的,如果控制器121要确认待执行操作命令时所访问的目标物理块,首先确认处于空闲状态的一个或多个目标逻辑块,根据每个目标逻辑块中每个物理块所属的闪存颗粒对应的等待处理队列中等待处理的操作命令的数量,确认出处于空闲状态的目标LUN,然后从目标LUN中确认出待执行操作命令时所访问的目标物理块。如果控制器存储有所有LUN的工作状态参数,则可以通过查询LUN的工作状态参数确认处于空闲状态的目标LUN。所述LUN的工作状态参数用于指示所述LUN的工作状态。
[0064] 控制器121通过LUN状态表保存LUN的工作状态参数,LUN状态表中存储各LUN的工作状态参数的值。例如,设置工作状态参数的值为1表示LUN的工作状态为空闲状态,参数值为0表示LUN的工作状态为非空闲状态,则通过查询LUN状态表可以查询各LUN工作状态参数的值,即可确认出LUN的工作状态。
[0065] 本发明一实施例提供了一种硬盘操作命令的执行方法,可以应用于图1所示的硬盘12,具体可由硬盘12中的控制器121执行,如图3所示,该方法包括以下步骤。
[0066] 101,接收操作命令后,确认目标LUN。
[0067] 目标LUN的工作状态为空闲状态。所述目标LUN处于所述空闲状态时,所述目标LUN中每个所述闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量小于或等于预设阈值。
[0068] 具体的,控制器121在确认目标LUN时,可以查询LUN状态表,确认工作状态参数的值表示空闲状态的目标LUN。
[0069] 控制器121在确认目标LUN之前,还可以先确认操作状态为空闲状态的一个或多个目标逻辑块。目标逻辑块处于空闲状态时,目标逻辑块中每个物理块所属的闪存颗粒分别对应的等待处理队列中不包括待访问目标逻辑块中的任意物理块时所要执行的其他操作命令。控制器121在确认出操作状态为空闲状态的目标逻辑块后,可以再基于目标逻辑块确认出由所述目标逻辑块中每个物理块所属的闪存颗粒组成的LUN是否为目标LUN。
[0070] 基于目标逻辑块确认出由所述目标逻辑块中每个物理块所属的闪存颗粒组成的LUN是否为目标LUN的一种具体实现方式为,查询LUN状态表,确认由所述目标逻辑块中每个物理块所属的闪存颗粒组成的LUN的工作状态参数的值是否表示空闲状态,如果表示空闲状态,则由所述目标逻辑块中每个物理块所属的闪存颗粒组成的LUN为目标LUN。
[0071] 基于目标逻辑块确认出由所述目标逻辑块中每个物理块所属的闪存颗粒组成的LUN是否为目标LUN的另一种具体实现方式为,查询由所述目标逻辑块中每个物理块所属的闪存颗粒组成的LUN中的每个闪存颗粒对应的等待处理队列中等待处理的操作命令的数量是否小于或等于预设阈值,如果小于或等于预设阈值,则确认由所述目标逻辑块中每个物理块所属的闪存颗粒组成的LUN为目标LUN。
[0072] 如果确认的目标逻辑块的个数有多个,且每个目标逻辑块中每个物理块所属的闪存颗粒组成的LUN是多个不同的LUN,则基于上述两种确认目标LUN的实现方式从所述多个不同的LUN中确认的处于空闲状态的LUN的个数可能是多个,则选择一个处于空闲状态的LUN为目标LUN。
[0073] 需要说明的是,控制器121还可以存储逻辑块的操作状态参数,操作状态参数用于指示逻辑块的操作状态是否处于空闲状态,操作状态包括空闲状态和非空闲状态。在逻辑块的操作状态中,空闲状态表示逻辑块中每个物理块所属的闪存颗粒分别对应的等待处理队列中不包括待访问目标逻辑块中的任意物理块时所要执行的其他操作命令,非空闲状态表示逻辑块中至少一个物理块所属的闪存颗粒分别对应的等待处理队列中包括待访问目标逻辑块中的任一或多个物理块时所要执行的其他操作命令。控制器121中存储逻辑块的操作状态的方式可以为存储逻辑块操作状态表,逻辑块操作状态表中存储各逻辑块的操作状态参数值,逻辑块的操作状态参数用于指示逻辑块的操作状态。
[0074] 本发明实施例中操作命令包括I/O写命令、垃圾回收写命令或垃圾回收读命令。控制器121接收的I/O写命令为主机下发的,控制器121接收的I/O写命令GC读命令和GC写命令为存储阵列的存储状态符合垃圾回收策略时触发的,或主机11在用户输入的用户回收垃圾指令后向固态硬盘12下发垃圾回收指令后触发的,或主机11检测到客户端应用程序的存储需求时触发的,例如主机11定期发送垃圾回收指令至固态硬盘12,固态硬盘12接收到垃圾回收指令时,生成GC读命令和GC写命令。
[0075] 作为本发明实施例的一个可选的实施方式,I/O写命令或GC写命令分别属于写类型的一种操作命令,GC读命令属于读类型的一种操作命令。控制器121接收的操作命令为I/O写命令或GC写命令后,先不确认目标LUN,而是先查询前一次执行相同写类型的操作命令时所访问的逻辑块是否可以继续被访问,如果可以继续被访问,例如查询目标逻辑块是否被写满,如果没有写满,则以页的粒度继续被访问,如果不可以继续被访问,则通过本步骤101确认目标LUN,从目标LUN中选择一个物理块用于I/O写命令或GC写命令执行时进行访问。如果控制器121接收的操作命令为GC读命令,或控制器121接收的操作命令为I/O写命令或GC写命令时,查询前一次执行相同类型的操作命令时所访问的逻辑块不可以继续被访问,则控制器121可以通过本步骤101查询LUN状态表确认目标LUN,或先确认新的一个或多个目标逻辑块,再从根据一个或多个目标逻辑块分别确认的一个或多个LUN中确认目标LUN。其中,目标逻辑块的操作状态为空闲状态,目标LUN的工作状态为空闲状态,从新的目标LUN中确认出作为待执行本次接收的操作命令时所访问的目标物理块。
[0076] 如果操作命令为I/O写命令或GC写命令,本步骤中确认的待执行所述操作命令时所访问的目标物理块为新块。当操作命令为I/O写命令或GC写命令时,新块表示未写满数据的物理块,包括未写入任何数据或写入的数据已被清空或没有写满的物理块。I/O写命令或GC写命令为同一写类型的操作命令,GC读命令为读类型的操作命令。
[0077] 102,从目标LUN中确认待执行操作命令时所访问的目标物理块。
[0078] 如果操作命令为I/O写命令或GC写命令,则控制器121可以从目标LUN中确认任意的新块,用于控制器121执行所述I/O写命令或GC写命令时写入数据至从所述目标LUN中确认的任意的新块。如果操作命令为GC读命令,则控制器121可以从目标LUN中确认包括的所有页为垃圾页的物理块,用于控制器121执行所述GC读命令时从所述目标LUN中确认的包括的所有页为垃圾页的物理块中读取垃圾数据。
[0079] 103,保存操作命令至目标物理块所属的闪存颗粒对应的等待处理队列中。
[0080] 其中,在步骤102中控制器121确认出目标物理块后,控制器121将操作命令保存至目标物理块所属的闪存颗粒对应的等待处理队列中,以便于控制器121对操作命令进行处理。
[0081] 104,在所述目标LUN中每个所述闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于所述预设阈值时,修改目标LUN的工作状态为非空闲状态。
[0082] 其中,将操作命令保存至目标物理块所属闪存颗粒对应的等待处理队列中后,查询所述目标LUN中每个所述闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量,如果所述目标LUN中每个所述闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于所述预设阈值大于所述预设阈值,修改目标LUN的工作状态为非空闲状态。例如,所述阈值为0,在保存所述操作命令至所述目标物理块所属的所述闪存颗粒对应的等待处理队列中之后,目标物理块所属闪存颗粒对应的等待处理队列中等待处理的操作命令的数量不再是零,则包括目标物理块所属闪存颗粒的目标LUN的工作状态转换为非空闲状态,所以将目标LUN的工作状态修改为非空闲状态。控制器121中存储LUN状态表时,需要将目标LUN的工作状态参数的值修改,修改后的目标LUN的工作状态参数的值表示目标LUN处于非空闲状态,以保证LUN状态表的准确性。
[0083] 需要说明的是,控制器121还可以在目标LUN中的所有逻辑块的操作状态为空闲状态时,将目标LUN的工作状态参数的值修改为空闲状态。
[0084] 目标LUN中的逻辑块表示目标LUN包括的每个闪存颗粒中的任一物理块所组成的逻辑块。目标LUN中的所有逻辑块的操作状态为空闲状态时,说明没有待访问目标逻辑块中的任意物理块时所要执行的其他操作命令,进而说明目标LUN包括的闪存颗粒对应的等待处理队列中等待处理的操作命令的数量为零,即目标LUN处于空闲状态,所以可以将目标LUN的工作状态修改为空闲状态。控制器121中存储LUN状态表时,可以将目标LUN的工作状态参数的值修改为空闲状态,以保证LUN状态表的准确性。
[0085] 本发明实施例中,硬盘中控制器121在接收操作命令后,可以先确认出工作状态为空闲状态的目标LUN,然后从工作状态为空闲状态的目标LUN中确认出待执行操作命令时所访问的目标物理块。由于目标LUN处于空闲状态时,目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量为小于或等于预设阈值,如此本发明实施例中使I/O读命令所访问的目标物理块所属闪存颗粒对应的等待处理队列中包括的其他操作命令数量较少,从而可以降低客户端的I/O读命令的时延,提高客户端的读数据的通信效率。
[0086] 如果所述预设阈值为零,则控制器121在执行完成操作命令后,目标物理块所属的闪存颗粒对应的等待处理队列中待访问目标逻辑块中的物理块的操作命令执行完成,所以目标逻辑块的操作状态转换为空闲状态,则可以修改目标逻辑块的操作状态为空闲状态。控制器121中存储逻辑块的操作状态表时,需要将目标逻辑的操作状态参数的值修改为空闲状态。
[0087] 具体的,当操作命令为GC读命令时,以预设阈值等于零为例,如图4所示,图3所示实施例可以具体执行为如下步骤。
[0088] 301,控制器121接收GC读命令。
[0089] 控制器121在执行垃圾回收时会触发GC读命令,控制器121接收GC读命令后,通过GC读命令读取待执行GC读命令时所访问的物理块中的数据。
[0090] 302,判断前一次执行GC读命令时所访问的物理块是否可以继续被访问,若不可以继续被访问,则执行步骤304;若可以继续被访问,则执行步骤303。
[0091] 其中,由于待清空的物理块被清空之前,需要先将待转移的垃圾页中的数据转移存储到其他物理块中,所以需要先通过GC读命令读取待转移的垃圾页中数据。当前一次执行GC读命令时所访问的物理块中待转移的垃圾页中的数据被读完时,会对其执行后续的清空等操作,则此时前一次执行GC读命令时所访问的物理块不可以继续被访问,控制器121可以再确认待执行步骤301接收的GC读命令时所访问的目标物理块,即执行步骤304;当前一次执行GC读命令时所访问的物理块中待转移的垃圾页中的数据未被读完时,需要继续读取此物理块中剩余数据,则此时前一次执行GC读命令时所访问的物理块可以继续被访问,控制器121可以将此物理块确认为待执行GC读命令时所访问的目标物理块,执行步骤303。
[0092] 303,将GC读命令保存至前一次执行GC读命令时所访问的物理块所属闪存颗粒对应的等待处理队列。
[0093] 控制器121将GC读命令保存至前一次执行GC读命令时所访问的物理块确认为目标物理块,则将GC读命令保存至前一次执行GC读命令时所访问的物理块所属闪存颗粒的等待处理队列。
[0094] 304,确认操作状态为空闲状态的目标逻辑块。
[0095] 目标逻辑块处于空闲状态时,目标逻辑块中每个物理块所属的闪存颗粒分别对应的等待处理队列中不包括待访问目标逻辑块中的任意物理块时所要执行的其他操作命令。控制器121可以通过逻辑块的操作状态表来确认目标逻辑块。
[0096] 305,确认工作状态处于空闲状态的目标LUN。
[0097] 目标LUN处于空闲状态时,目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量为零。控制器121在确认出目标逻辑块后,可以根据每个目标逻辑块中每个物理块所属的闪存颗粒对应的等待处理队列中等待处理的操作命令的数量,确认出处于空闲状态的目标LUN。
[0098] 本步骤中控制器121还可以通过LUN状态表确认工作状态处于空闲状态的目标LUN,而不需要执行步骤304。
[0099] 306,从目标LUN中确认待执行GC读命令时所访问的目标物理块。
[0100] 控制器121可以从目标LUN中确认包括的所有页为垃圾页的物理块,用于控制器121执行GC读命令时从目标LUN中确认的包括的所有页为垃圾页的物理块中读取垃圾数据。
[0101] 307,将GC读命令保存至目标物理块所属闪存颗粒的等待处理队列。
[0102] 308,在目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于零时,修改目标LUN的工作状态为非空闲状态。
[0103] 将GC读命令保存至目标物理块所属闪存颗粒对应的等待处理队列中后,目标物理块所属闪存颗粒对应的等待处理队列中等待处理的操作命令的数量不再是零。所以在目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于零时,修改目标LUN的工作状态为非空闲状态。
[0104] 309,修改目标逻辑块的操作状态为非空闲状态。
[0105] 由于目标逻辑块中目标物理块所属的闪存颗粒对应的等待处理队列中包括了待访问目标逻辑块中的物理块的操作命令,所以目标逻辑块的操作状态转换为非空闲状态,则可以修改目标逻辑块的操作状态为非空闲状态。
[0106] 310,通过GC读命令读取目标物理块中待转移的垃圾页中的数据。
[0107] 需要说明的是,步骤308、步骤309和步骤310在执行时可以没有先后顺序。
[0108] 311,修改目标逻辑块的操作状态为空闲状态。
[0109] 在控制器121在执行完成GC读命令后,目标物理块所属的闪存颗粒对应的等待处理队列中待访问目标逻辑块中的物理块的GC读命令执行完成,所以目标逻辑块的操作状态转换为空闲状态,则可以修改目标逻辑块的操作状态为空闲状态。
[0110] 具体的,当操作命令为GC写命令时,以预设阈值等于零为例,如图5所示,图3所示实施例可以具体执行为如下步骤。
[0111] 401,控制器121接收GC写命令。
[0112] 控制器121执行垃圾回收时,通过GC读命令读取待清空的物理块中数据,然后触发GC写命令。控制器121接收GC写命令后,通过GC写命令将GC读命令读取的数据写入其他物理块中。
[0113] 402,判断前一次执行写类型的操作命令时所访问的物理块是否可以继续被访问,若不可以继续被访问,则执行步骤404;若可以继续被访问,则执行步骤403。
[0114] 其中,控制器121接收到GC写命令后,需要先判断前一次执行写类型的操作命令时所访问的物理块是否可以继续被访问,例如判断是否已经被写满。如果前一次执行写类型的操作命令时所访问的物理块不可以继续被访问,即已经被写满,则可以再确认执行待执行GC写命令时所访问的目标物理块,执行步骤404;如果前一次执行写类型的操作命令时所访问的物理块可以继续被访问,即未被写满,则将前一次执行写命令时所访问的物理块确认为待执行步骤401接收的GC写命令时所访问的目标物理块,执行步骤403。
[0115] 403,将GC写命令保存至前一次执行写类型的操作命令时所访问的物理块所属闪存颗粒对应的等待处理队列。
[0116] 控制器121将GC写命令保存至前一次执行写类型的操作命令时所访问的物理块确认为目标物理块,则将GC写命令保存至前一次执行写类型的操作命令时所访问的物理块所属闪存颗粒的等待处理队列。
[0117] 404,确认操作状态为空闲状态的目标逻辑块。
[0118] 目标逻辑块处于空闲状态时,目标逻辑块中每个物理块所属的闪存颗粒分别对应的等待处理队列中不包括待访问目标逻辑块中的任意物理块时所要执行的其他操作命令。控制器121可以通过逻辑块的操作状态表来确认目标逻辑块。
[0119] 405,确认工作状态处于空闲状态的目标LUN。
[0120] 目标LUN处于空闲状态时,目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量为零。控制器121在确认出目标逻辑块后,可以根据每个目标逻辑块中每个物理块所属的闪存颗粒对应的等待处理队列中等待处理的操作命令的数量,确认出处于空闲状态的目标LUN。
[0121] 406,从目标LUN中确认待执行GC写命令时所访问的目标物理块。
[0122] 控制器121可以从目标LUN中确认任意的新块为目标物理块,来写入GC写命令中的数据。
[0123] 407,将GC写命令保存至目标物理块所属闪存颗粒的等待处理队列。
[0124] 408,在目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于零时,修改目标LUN的工作状态为非空闲状态。
[0125] 将GC写命令保存至目标物理块所属闪存颗粒对应的等待处理队列中后,目标物理块所属闪存颗粒对应的等待处理队列中等待处理的操作命令的数量不再是零。所以在目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于零时,修改目标LUN的工作状态为非空闲状态。
[0126] 409,修改所述目标逻辑块的操作状态为非空闲状态。
[0127] 410,通过GC写命令将GC读命令读取的数据写入目标物理块。
[0128] 需要说明的是,步骤408、步骤409和步骤410在执行时可以没有先后顺序。
[0129] 411,修改目标逻辑块的操作状态为空闲状态。
[0130] 在控制器121在执行完成GC写命令后,目标物理块所属的闪存颗粒对应的等待处理队列中待访问目标逻辑块中的物理块的GC写命令执行完成,所以目标逻辑块的操作状态转换为空闲状态,则可以修改目标逻辑块的操作状态为空闲状态。
[0131] 具体的,当操作命令为I/O写命令时,以预设阈值等于零为例,如图6所示,图3所示实施例可以具体执行为如下步骤。
[0132] 501,控制器121接收主机11下发的I/O写命令。
[0133] 502,判断前一次执行写类型操作命令时所访问的物理块是否可以继续被访问,若不可以继续被访问,则执行步骤504;若可以继续被访问,则执行步骤503。
[0134] 其中,控制器121接收到主机11下发的I/O写命令后,需要先判断前一次执行写类型操作命令时所访问的物理块是否可以继续被访问,例如判断是否已经被写满。如果前一次执行写类型的操作命令时所访问的物理块不可以继续被访问,即已经被写满,则可以再确认执行待I/O写命令时所访问的目标物理块,执行步骤504;如果前一次执行写类型的操作命令时所访问的物理块可以继续被访问,即未被写满,则将前一次执行写命令时所访问的物理块确认为待执行步骤401接收的I/O写命令时所访问的目标物理块,执行步骤503。
[0135] 503,将I/O写命令保存至前一次执行I/O写类型的操作命令时所访问的物理块所属LUN的等待处理队列。
[0136] 控制器121将I/O写命令保存至前一次执行写类型的操作命令时所访问的物理块确认为目标物理块,则将I/O写命令保存至前一次执行写类型的操作命令时所访问的物理块所属闪存颗粒的等待处理队列。
[0137] 504,确认操作状态为空闲状态的目标逻辑块。
[0138] 目标逻辑块处于空闲状态时,目标逻辑块中每个物理块所属的闪存颗粒分别对应的等待处理队列中不包括待访问目标逻辑块中的任意物理块时所要执行的其他操作命令。控制器121可以通过逻辑块的操作状态表来确认目标逻辑块。
[0139] 505,确认工作状态处于空闲状态的目标LUN。
[0140] 目标LUN处于空闲状态时,目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量为零。控制器121在确认出目标逻辑块后,可以根据每个目标逻辑块中每个物理块所属的闪存颗粒对应的等待处理队列中等待处理的操作命令的数量,确认出处于空闲状态的目标LUN。
[0141] 506,从目标LUN中确认待执行I/O写命令时所访问的目标物理块。
[0142] 控制器121可以从目标LUN中确认任意的新块为目标物理块,来写入I/O写命令中的数据。
[0143] 507,将I/O写命令保存至目标物理块所属闪存颗粒的等待处理队列。
[0144] 508,在目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于零时,修改目标LUN的工作状态为非空闲状态。
[0145] 将I/O写命令保存至目标物理块所属闪存颗粒对应的等待处理队列中后,目标物理块所属闪存颗粒对应的等待处理队列中等待处理的操作命令的数量不再是零。所以在目标LUN中每个闪存颗粒分别对应的等待处理队列中等待处理的操作命令的数量大于零时,修改目标LUN的工作状态为非空闲状态。
[0146] 509,修改所述目标逻辑块的操作状态为非空闲状态。
[0147] 510,通过I/O写命令将I/O写命令中的数据写入目标物理块。
[0148] 需要说明的是,步骤508、步骤509和步骤510在执行时可以没有先后顺序。
[0149] 511,修改目标逻辑块的操作状态为空闲状态。
[0150] 在控制器121在执行完成I/O写命令后,目标物理块所属的闪存颗粒对应的等待处理队列中待访问目标逻辑块中的物理块的I/O写命令执行完成,所以目标逻辑块的操作状态转换为空闲状态,则可以修改目标逻辑块的操作状态为空闲状态。
[0151] 需要说明的是,图4、图5和图6所示方法的原理与图3所示实施例的数据处理原理相同,详细内容可以参考图3所示实施例。
[0152] 本发明实施例中,图4、图5和图6所示方法分别描述了控制器121处理I/O写命令、GC读命令和GC写命令时确认待执行时所访问的目标物理块的过程,以使I/O读命令所访问的目标物理块所属闪存颗粒对应的等待处理队列中最多保存了一个其他操作命令,从而可以降低客户端的I/O读命令的时延,提高客户端的通信效率。
[0153] 本发明实施例提供一种硬盘600,该硬盘600包括控制器和至少两个闪存颗粒组,每个闪存颗粒组包括至少一个闪存颗粒,每个闪存颗粒包括多个物理块,每个闪存颗粒组中的任一闪存颗粒组成一个LUN,同一闪存颗粒组中位于不同LUN中的闪存颗粒不同。
[0154] 该硬盘600中控制器用于执行以上硬盘操作命令的执行方法中的控制器121所执行的步骤。本发明实施例提供的控制器可以包括相应步骤所对应的模块。
[0155] 本发明实施例可以根据上述方法示例对控制器进行功能模块的划分,例如,可以对应各个功能划分各个功能模块,也可以将两个或两个以上的功能集成在一个处理模块中。上述集成的模块既可以采用硬件的形式实现,也可以采用软件功能模块的形式实现。本发明实施例中对模块的划分是示意性的,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
[0156] 在采用对应各个功能划分各个功能模块的情况下,图7示出上述实施例中所涉及的硬盘600的一种可能的结构示意图(图7中未示出硬盘600包括的至少两个闪存颗粒组)。如图7所示,控制器包括确认单元601、保存单元602、修改单元603和执行单元604。确认单元
601用于支持该控制器执行图3所示实施例中的步骤101和步骤102,和/或用于本文所描述的技术的其它过程;保存单元602用于支持该控制器执行图3所示实施例中的步骤103,和/或用于本文所描述的技术的其它过程;修改单元603用于支持该控制器执行上图3所示实施例中的步骤104,修改目标逻辑块的操作状态为非空闲状态,在操作命令执行结束后修改目标逻辑块的操作状态为空闲状态,在目标LUN中的所有逻辑块的操作状态为空闲状态时、将目标LUN的工作状态参数的值修改为空闲状态,和/或用于本文所描述的技术的其它过程;
执行单元504用于执行操作命令,和/或用于本文所描述的技术的其它过程。其中,上述方法实施例涉及的各步骤的所有相关内容均可以援引到对应功能模块的功能描述,在此不再赘述。当然,本发明实施例提供的控制器包括但不限于上述模块,例如控制器还可以包括接收单元和存储单元。接收单元用于与其他设备通信,如与主机通信。存储单元可以用于存储该控制器的程序代码。
[0157] 在采用集成的单元的情况下,本申请实施例中的确认单元601、保存单元602、修改单元603和执行单元604可以是图1中的控制器121,接收单元可以是图1中的通信接口124,存储单元可以是图1中的存储器123。
[0158] 当控制器运行时,该控制器执行如图3所示的实施例的硬盘操作命令的执行方法。硬盘操作命令的执行方法可参见上述如图3所示的实施例中的步骤101、102、103和104的相关描述,此处不再赘述。
[0159] 在其他实现方式中,确认单元601、保存单元602、修改单元603和执行单元604可以是集成在一起或任意组合的形式实现,具体实现方式不受本申请实施例的限制。
[0160] 本发明另一实施例还提供一种计算机可读存储介质,该计算机可读存储介质中存储有指令,当指令在硬盘600上运行时,该硬盘600执行如图3所示的硬盘操作命令的执行方法中的步骤101、102、103和104。
[0161] 在本发明的另一实施例中,还提供一种计算机程序产品,该计算机程序产品包括计算机执行指令,该计算机执行指令存储在计算机可读存储介质中;硬盘600的控制器可以从计算机可读存储介质读取该计算机执行指令,控制器执行该计算机执行指令使得硬盘实施执行如图3所示的硬盘操作命令的执行方法中的步骤101、102、103和104。
[0162] 在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘)等。