本发明涉及固态硬盘,具体涉及一种基于软件控制层的固态硬盘控制方法、装置、设备及介质。
背景技术:
1、ssd(solidstatedrive,固态硬盘)的核心软件控制和算法层被称为ftl(flashtranslationlayer,软件控制层)。ftl的实现方案决定了ssd在可靠性、耐用性、读写性能等方面的优劣。ftl的主要功能是完成host(使用ssd的主机)命令中的逻辑地址到闪存物理地址的转换,以及控制包括读、写、trim(ssd的主机命令,用于声明一段地址的数据变为无效)等host命令的执行与反馈。
2、现有大多数ssd产品的固件中均封装了上述ftl软件,以针对性地调度不同类型nand(ssd内部的实际物理存储介质),缓存硬件和其他硬件算法模块协同工作。然而,现有ftl软件对ssd内部的硬件资源进行统一调度与管理的能力较弱,无法做到对ssd中host处理流程的整体管控,无法以单一流程处理读、写、trim等host命令。
3、因此,现有技术存在无法以单一流程控制固态硬盘执行多种主机命令的问题。
技术实现思路
1、有鉴于此,本发明提供了一种基于软件控制层的固态硬盘控制方法、装置、设备及介质,以解决无法以单一流程控制固态硬盘执行多种主机命令的问题。
2、第一方面,本发明提供了一种基于软件控制层的固态硬盘控制方法,该方法包括:
3、根据预设逻辑地址将获取到的多种主机命令进行拆分,得到第一数量个主机操作;
4、根据主机操作中的逻辑地址边界,构建包含第二数量个子区段的子区段分布结构,其中,子区段是根据逻辑地址边界得到的;
5、根据子区段将主机操作进行拆分,得到第三数量个主机子操作,将主机子操作与子区段分布结构结合,得到子操作排列结构,其中,子操作排列结构包含存储单元子操作,存储单元子操作是根据主机子操作得到的;
6、根据子操作排列结构,生成主机子操作和存储单元子操作的依赖关系结构;
7、基于依赖关系结构,将主机子操作和存储单元子操作加入执行队列,并根据固态硬盘和内存传输模块的空闲资源数量,从执行队列中取出主机子操作和/或存储单元子操作并执行。
8、本实施例提供的基于软件控制层的固态硬盘控制方法,先将获取到的多种主机命令进行拆分,拆分为完成该主机命令所需的主机操作,再对主机操作进行拆分,拆分为小范围的主机子操作,进而生成子操作排列结构和依赖关系结构。基于依赖关系结构,将主机子操作和存储单元子操作加入执行队列,并根据固态硬盘和内存传输模块的空闲资源数量,从执行队列中取出主机子操作和/或存储单元子操作并执行,通过上述方法,ftl能够对ssd内部的空闲资源数量进行统一调度与管理,以达到以单一流程控制固态硬盘执行读、写、垃圾回收等多种主机命令的效果,解决了现有技术无法以单一流程控制固态硬盘执行多种主机命令的问题。
9、在一种可选的实施方式中,在根据预设逻辑地址将获取到的多种主机命令进行拆分之前,方法还包括:
10、从主机获取多种主机命令,并根据优先级资源设置主机命令的第一优先级,其中,优先级资源包含优先级阈值;
11、如果第一优先级达到优先级阈值或没有命令暂存空间,则暂停从主机获取主机命令,其中,命令暂存空间用于暂存主机命令。
12、在本实施方式中,为每一批主机命令设置第一优先级,使得越早获取的主机命令越被优先执行。如果达到优先级阈值或没有命令暂存空间,则暂停获取主机命令,确保ssd执行每个主机命令时都有足够的资源。
13、在一种可选的实施方式中,在根据预设逻辑地址将获取到的多种主机命令进行拆分,得到第一数量个主机操作之后,方法还包括:
14、根据第一优先级,设置主机操作的优先级,并设置主机操作的主机地址偏移量,其中,主机地址偏移量用于确定主机地址;
15、在预设逻辑地址未关联缓冲区且主机操作为主机读取操作的情况下,判断主机读取操作的读取范围是否存在损坏位;
16、如果读取范围不存在损坏位,则将主机读取操作调整为联动读操作,并将联动读操作加入联动读操作执行队列,其中,联动读操作用于直接把存储单元的数据读取到主机;
17、如果读取范围存在损坏位,则将主机读取操作绑定到预设缓冲区。
18、在本实施方式中,为每个主机操作设置优先级,使得优先级越高的主机操作越被优先执行,并设置主机操作的主机地址偏移量确定主机地址。如果预设逻辑地址未关联缓冲区,通过判断主机读取操作的读取范围是否存在损坏位,确定是调整主机读取操作的范围,还是将主机读取操作绑定到预设缓冲区,确保主机读取操作能够被ssd中的硬件正确执行。
19、在一种可选的实施方式中,根据子区段将主机操作进行拆分,得到第三数量个主机子操作,将主机子操作与子区段分布结构结合,得到子操作排列结构,包括:
20、根据子区段将主机操作进行拆分,得到第三数量个主机子操作;
21、将主机子操作与子区段分布结构组合,得到中间结构,其中,中间结构包含第二数量个操作列,主机子操作包含主机无效子操作、主机写入子操作以及主机读取子操作;
22、判断中间结构的每个操作列中是否存在主机无效子操作,如果存在主机无效子操作,则获取第一增加内容,其中,第一增加内容用于在操作列中加入存储单元无效子操作;
23、判断中间结构的每个操作列中是否存在主机写入子操作且不存在主机无效子操作,如果存在主机写入子操作且不存在主机无效子操作,则获取第二增加内容,其中,第二增加内容用于在操作列中加入存储单元写入子操作;
24、判断中间结构的每个操作列中执行顺序为第一的主机子操作是否为主机读取子操作,如果是主机读取子操作,则获取第三增加内容,其中,第三增加内容用于在操作列中加入存储单元读取子操作,存储单元无效子操作、存储单元写入子操作以及存储单元读取子操作包含于存储单元子操作;
25、根据中间结构、第一增加内容、第二增加内容以及第三增加内容,得到子操作排列结构,其中,子操作排列结构包含于缓冲区,缓冲区与预设逻辑地址关联。
26、在本实施方式中,将主机操作拆分为主机子操作,根据主机子操作生成存储单元子操作,将主机子操作、子区段分布结构、存储单元子操作结合,得到子操作排列结构,根据该子操作排列结构,ftl能够针对性地调度不同类型nand、缓存硬件和其他硬件算法模块协同工作,执行host命令。
27、在一种可选的实施方式中,在得到子操作排列结构之后,方法还包括:
28、判断缓冲区中的子操作排列结构是否包含存储单元写入子操作;
29、如果子操作排列结构包含存储单元写入子操作,则缓冲区的分类为第一类缓冲区;
30、如果子操作排列结构不包含存储单元写入子操作,则缓冲区的分类为第二类缓冲区。
31、在本实施方式中,根据子操作排列结构是否包含存储单元写入子操作,将缓冲区分为第一类缓冲区和第二类缓冲区,方便对缓冲区进行管理。
32、在一种可选的实施方式中,根据子操作排列结构,生成主机子操作和存储单元子操作的依赖关系结构,包括:
33、根据空闲资源数量,从第一类缓冲区和第二类缓冲区中获取第四数量个缓冲区;
34、将缓冲区的子操作排列结构中除主机无效子操作和存储单元无效子操作之外的所有子操作加入依赖关系图;
35、如果依赖关系图中存在存储单元读取子操作,且存储单元读取子操作的读取范围存在损坏位,则进行第一调整流程,包括修改读取范围,并在依赖关系图中插入修复子操作,其中,修复子操作与存储单元读取子操作相邻;
36、获取缓冲区关联的预设逻辑地址对应的物理地址,如果获取不到物理地址,则将预设值作为物理地址;
37、如果物理地址是预设值,则进行第二调整流程,包括将所有存储单元读取子操作对应的主机命令做命令失败处理,其中,主机命令是根据存储单元读取子操作关联的命令标识确定的;
38、如果物理地址不是预设值,则进行第三调整流程,包括将物理地址赋值给存储单元读取子操作;
39、如果依赖关系图中存在存储单元写入子操作,则进行第四调整流程,包括获取一个新的物理地址,并将新的物理地址赋值给存储单元写入子操作,并将存储单元读取子操作进行垃圾回收标记,其中,垃圾回收标记用于表示存储单元读取子操作对应的物理地址待释放;
40、如果无法获取新的物理地址,则进行第五调整流程,包括将存储单元写入子操作关联的命令标识对应的主机命令做命令失败处理;
41、获取依赖关系图中最顶层的子操作,并基于最顶层的子操作在依赖关系图中构建新的存储单元读取子操作,并将新的存储单元读取子操作与缓冲区关联;
42、根据依赖关系图、第一调整流程、第二调整流程、第三调整流程、第四调整流程、第五调整流程以及新的存储单元读取子操作,得到依赖关系结构。
43、在本实施方式中,根据空闲资源数量挑选缓冲区,将缓冲区中非无效子操作加入依赖关系图,并对依赖关系图中的子操作进行调整,包括:修复损坏位、地址翻译、获取新的物理地址、垃圾回收、构建新的存储单元读取子操作等流程,最终得到依赖关系结构。为后续将buffer管理的子操作交由后端执行提供基础。
44、在一种可选的实施方式中,在获取依赖关系图中最顶层的子操作之前,方法还包括:
45、在依赖关系图中获取目标存储单元读取子操作,将目标存储单元读取子操作加入执行队列,并更新已提交执行队列的子操作数量。
46、在本实施方式中,将依赖关系图中的目标存储单元读取子操作加入执行队列,便于后续提交ssd中的硬件执行。
47、在一种可选的实施方式中,在并在依赖关系图中插入修复子操作之后,方法还包括:
48、如果存在无法修复的子区段,则获取无法修复的子区段中所有子操作关联的命令标识;
49、将命令标识对应的主机命令做命令失败处理。
50、在本实施方式中,如果存在无法修复的子区段,则与该子区段关联的主机命令无法执行,做命令失败处理。ftl能够快速向主机反馈命令失败消息,并回收固态硬盘的硬件资源。
51、在一种可选的实施方式中,在并将存储单元读取子操作进行垃圾回收标记之后,方法还包括:
52、在软件控制层支持细粒度无效的情况下,根据存储单元无效子操作更新逻辑地址有效记录表,得到更新后的逻辑地址有效记录表,其中,逻辑地址有效记录表用于记录逻辑地址是否有效;
53、如果更新后的逻辑地址有效记录表显示整个预设逻辑地址无效,且依赖关系图中存在存储单元读取子操作,则将存储单元读取子操作进行垃圾回收标记;
54、在软件控制层不支持细粒度无效的情况下,如果存储单元无效子操作覆盖所有预设逻辑地址,且依赖关系图中存在存储单元读取子操作,则将存储单元读取子操作进行垃圾回收标记。
55、在本实施方式中,分别设计了支持细粒度trim和不支持细粒度trim的情况下,将存储单元读取子操作进行垃圾回收标记的流程。提高了本发明的应用范围,并且通过垃圾回收标记,及时释放已分配的资源,提高了固态硬盘执行主机命令的效率。
56、在一种可选的实施方式中,将新的存储单元读取子操作与缓冲区关联,包括:
57、将新的存储单元读取子操作设置为缓冲区的当前存储单元读取子操作;
58、将缓冲区中的子区段分布结构和子操作排列结构清空;
59、将缓冲区从第一类缓冲区或第二类缓冲区中移除;
60、建立缓冲区与当前存储单元读取子操作的关联。
61、在本实施方式中,将新的存储单元读取子操作设置为缓冲区的当前存储单元读取子操作,将缓冲区清空,并将缓冲区从分类中移除,建立缓冲区与当前存储单元读取子操作的关联。通过当前存储单元读取子操作,保证在flush前面的操作执行完之后,才执行flush后面的操作。
62、在一种可选的实施方式中,基于依赖关系结构,将主机子操作和存储单元子操作加入执行队列,并根据固态硬盘和内存传输模块的空闲资源数量,从执行队列中取出主机子操作和/或存储单元子操作并执行,包括:
63、根据空闲资源数量,从执行队列中取出主机子操作和/或存储单元子操作提交固态硬盘中的硬件执行;
64、如果硬件执行完成,确定已完成子操作和已完成子操作关联的命令标识;
65、判断命令标识关联的所有子操作是否执行完毕,如果所有子操作执行完毕,则向主机发送命令完成消息;
66、如果存在具有垃圾回收标记的存储单元读取子操作,则指示垃圾回收系统释放存储单元读取子操作对应的物理地址;
67、将依赖关系结构中,已完成子操作对应的子节点加入执行队列,并更新已提交执行队列的子操作数量,其中,子节点表示依赖于已完成子操作的主机子操作和/或存储单元子操作;
68、根据已提交执行队列的子操作数量,判断已完成子操作对应的缓冲区是否满足缓冲区删除条件,如果满足缓冲区删除条件,则删除缓冲区,并在依赖关系结构中删去已完成子操作和子节点。
69、在本实施方式中,根据固态硬盘和内存传输模块的空闲资源数量,从执行队列中取出子操作执行。基于已完成子操作,判断主机命令是否完成、指示垃圾回收系统回收具有垃圾回收标记的存储单元读取子操作的物理地址、将已完成子操作的子节点加入执行队列、判断是否需要删除缓冲区。通过上述方法,ftl能够对内部的硬件资源进行统一调度与管理,以及控制包括读、写、垃圾回收、raid恢复以及trim等多种主机命令的执行与反馈。
70、在一种可选的实施方式中,在确定已完成子操作之后,方法还包括:
71、如果已完成子操作为存储单元写入子操作,则获取已完成子操作的返回信息;
72、根据返回信息更新损坏位标记。
73、在本实施方式中,根据已完成存储单元写入子操作的返回信息,更新损坏位标记,使得ftl可以更好地对内部的硬件资源进行统一调度与管理,对流程整体管控。
74、在一种可选的实施方式中,在从执行队列中取出主机子操作和/或存储单元子操作并执行之后,方法还包括:
75、判断固态硬盘中的垃圾回收系统是否需要执行物理地址搬移操作;
76、如果需要执行物理地址搬移操作,则确定待回收预设逻辑地址;
77、如果待回收预设逻辑地址未关联缓冲区,则分配一个新的缓冲区作为待回收预设逻辑地址关联的缓冲区;
78、在缓冲区中确定存储单元读取子操作和存储单元写入子操作对应的逻辑位置;
79、开启缓冲区中逻辑位置的主机子操作和存储单元子操作。
80、在本实施方式中,通过询问固态硬盘中的垃圾回收系统,确定是否需要执行物理地址搬移操作。并通过垃圾回收系统实现物理地址的搬移,可以动态地移动ssd中的数据,以使ssd的性能更好,并确保ssd的均衡使用。
81、在一种可选的实施方式中,在从执行队列中取出主机子操作和/或存储单元子操作并执行之后,方法还包括:
82、从主机获取下一批主机命令,并设置下一批主机命令的第二优先级。
83、在本实施方式中,从主机获取下一批主机命令,并设置下一批主机命令的第二优先级。之后采用相同方法对下一批主机命令进行处理,提高了ftl处理host命令的效率。
84、第二方面,本发明提供了一种基于软件控制层的固态硬盘控制装置,该装置包括:
85、第一拆分模块,用于根据预设逻辑地址将获取到的多种主机命令进行拆分,得到第一数量个主机操作;
86、构建模块,用于根据主机操作中的逻辑地址边界,构建包含第二数量个子区段的子区段分布结构,其中,子区段是根据逻辑地址边界得到的;
87、第二拆分模块,用于根据子区段将主机操作进行拆分,得到第三数量个主机子操作,将主机子操作与子区段分布结构结合,得到子操作排列结构,其中,子操作排列结构包含存储单元子操作,存储单元子操作是根据主机子操作得到的;
88、生成模块,用于根据子操作排列结构,生成主机子操作和存储单元子操作的依赖关系结构;
89、执行模块,用于基于依赖关系结构,将主机子操作和存储单元子操作加入执行队列,并根据固态硬盘和内存传输模块的空闲资源数量,从执行队列中取出主机子操作和/或存储单元子操作并执行。
90、第三方面,本发明提供了一种计算机设备,包括:存储器和处理器,存储器和处理器之间互相通信连接,存储器中存储有计算机指令,处理器通过执行计算机指令,从而执行上述第一方面或其对应的任一实施方式的基于软件控制层的固态硬盘控制方法。
91、第四方面,本发明提供了一种计算机可读存储介质,该计算机可读存储介质上存储有计算机指令,计算机指令用于使计算机执行上述第一方面或其对应的任一实施方式的基于软件控制层的固态硬盘控制方法。