一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种基于硬件的固态硬盘读命令自动整合的方法及系统与流程

2022-07-10 01:07:46 来源:中国专利 TAG:


1.本发明涉及固态硬盘技术领域,尤其涉及一种基于硬件的固态硬盘读命令自动整合的方法及系统。


背景技术:

2.随着云计算、云存储、大数据和元宇宙等各种远端数据业务的需求,存储业务越来越多的被布置到远端服务器上,这对存储数据的反应速度要求越来越高,同时对存储的成本控制和功耗要求也越来越高。固态硬盘被发明用来适应这一技术发展的潮流,其超快的反应速度和大容量的进出口资源相较传统机械硬盘有着明显的优势。其中读取数据的性能和延迟更是固态硬盘中最重要的参数指标,是主控之间技术竞争的核心参数。
3.传统的重复读取命令优化的方案多为通过预读取再利用缓存(cache)命中的方法,这种方法会出现缓存没有命中造成的惩罚以及缓存换进换出和查询缓存造成的延迟问题。
4.现有技术存在以下问题:
5.1.实际测试中发现随机数据cache(高速缓冲存储器)命中率其实非常低,实际用户场景很可能cache利用率很低,造成了芯片设计资源的浪费,并且要承受由于cache不命中带来的延迟增大惩罚。
6.2.即使cache有命中相隔时间跨度一般也很大,如果要提高命中率需要提升cache的容量,这会造成cache占有芯片大量内存,增加了芯片的成本和功耗以及设计的复杂度。
7.3.已知整合命令方式通常只能整合连续相关的命令且增加延迟。
8.4.已知整合命令方式通常由软件实现,性能限制且无法跟随硬件资源和系统负载动态调整。
9.5.硬盘有多个主机线程访问时,关联的读数据访问(例如连续数据或数据库中有规律间隔或关联的数据)可能短时间内被交叉。所以优化短时间内读命令命中相同闪存页边界依然可以在此场景下提高读命令的性能、延迟和功耗来满足特定客户得需求。


技术实现要素:

10.本发明的目的是针对现有技术的缺陷,提供了一种基于硬件的固态硬盘读命令自动整合的方法及系统,能够在大量关联读命令访问硬盘时讲读命令进行整合,从而减少了固态硬盘闪存的访问命令和延迟,对特定场景的数据类型访问情形下(例如关联数据多次读取、关联数据和随机数据混合)固态硬盘的读性能和延迟以及功耗都有较大的改进。相较于传统的cache设计方案在提高读性能延迟和降低功耗的同时,具有硬件设计消耗资源很小可控,没有命中失败惩罚,延迟灵活可控的优点;相较于软件或硬件实现的只能进行连续命令命中整合的方法,具有更高的整合效率,整合延迟惩罚可控的和无需关心计算整合起始时间点的优点。
11.为了实现以上目的,本发明采用以下技术方案:
12.一种基于硬件的固态硬盘读命令自动整合的方法,包括:
13.s1.获取主机发送的读命令,根据获取的读命令进行优先级的分类整理,并对分类整理后的读命令进行选取;
14.s2.对选择的读命令基于映射表单次读取单元进行切分,得到切分后的读命令片段;
15.s3.将得到的读命令片段基于映射表进行查询,得到读命令物理目标地址;
16.s4.识别读命令物理目标地址在闪存中的页边界,并根据页边界对读命令进行再次切分;
17.s5.将根据页边界切分后的读命令放入再整合缓冲区中进行整合;
18.s6.将再整合缓存区内命中相同闪存页的读命令根据条件再次整合;
19.s7.重新执行步骤s5-s6,当缓冲区的命令整合超时和/或超过预设次数时,停止整合。
20.进一步的,所述步骤s1中进行优先级的分类整理具体为:利用机器学习方法预测读命令在闪存中是否关联,或者用户指定的特殊范围预测改读命令的数据特性是随机的还是关联的。
21.进一步的,所述步骤s2中的映射表单次读取单元是基于映射表所存缓存区的单次最高效率长度;其中,最高效率长度的计算方法为单次映射表读数据长度除以单次映射表读数据长度下读取映射表数据返回的延迟。
22.进一步的,所述步骤s6中再次整合的整合的方式包括:当相邻两个读命令处于同一页闪存内时,两个读命令将会发生合并。
23.进一步的,所述步骤s6中再次整合的整合的方式包括:当不相邻两个或多个读命令处于同一页闪存内时,对应的两个或多个读命令将会发生合并。
24.进一步的,所述步骤s6中再次整合的整合的方式包括:当相邻或不相邻的一个或多个读命令的部分闪存页页码位置相同且数据位移也相同,将再整合缓存区的读命令进行合并。
25.进一步的,所述步骤s6中再次整合的整合的方式包括:当多个读命令被整合变成一个读命令后,原始读命令的标识以链表形式存在于新的读命令。
26.进一步的,所述步骤s6中的条件为:再整合命令缓冲区中的命令大于指定的数量时进行整合;当再整合命令缓冲区中的命令少于指定的数量时不进行整合。
27.进一步的,所述步骤s5中将根据页边界切分后的读命令放入再整合缓冲区中是以单项链表的方式存储于再整合缓冲区的。
28.相应的,还提供一种基于硬件的固态硬盘读命令自动整合的系统,包括:
29.获取模块,用于获取主机发送的读命令,根据获取的读命令进行优先级的分类整理,并对分类整理后的读命令进行选取;
30.第一切分模块,用于对选择的读命令基于映射表单次读取单元进行切分,得到切分后的读命令片段;
31.查询模块,用于将得到的读命令片段基于映射表进行查询,得到读命令物理目标地址;
32.第二切分模块,用于识别读命令物理目标地址在闪存中的页边界,并根据页边界
对读命令进行再次切分;
33.第一整合模块,用于将根据页边界切分后的读命令放入再整合缓冲区中进行整合;
34.第二整合模块,用于将再整合缓存区内命中相同闪存页的读命令根据条件再次整合;
35.循环模块,用于重新执行第一整合模块、第二整合模块,当缓冲区的命令整合超时和/或超过预设次数时,停止整合。
36.与现有技术相比,本发明收取主机读命令;根据读命令优先级进行分类;根据读命令优先级权重进行提取;根据最大闪存命令长度进行读命令拆分;读取主机逻辑地址和闪存地址映射表;根据闪存页边界进行读命令拆分;提取读命令进入闪存通道缓存区;根据缓存区空间进行同页命令再整合;提取缓存区再整合命令到闪存通道执行;命令整合超时强制冲刷;异常情况发生时固件可主动控制发起冲刷。本发明采用硬件和软件结合的方法对读命令进行了自动拆分再整合,避免了对闪存同一页面的短时间重复读,从而降低了主机读命令的延迟和功耗,提高了固态硬盘的整体读吞吐量、并且延长了闪存数据保存寿命;基于硬件的实现大大降低了固件负载,进一步降低了主机读命的延迟;并且给固件提供了充分可调整、配置以及控制方法,能够很好的处理异常中断和根据用户场景进行动态性能调整。
附图说明
37.图1是实施例一提供的一种基于硬件的固态硬盘读命令自动整合的方法框图;
38.图2是实施例一提供的一种基于硬件的固态硬盘读命令自动整合的方法流程图;
39.图3是实施例一提供的变化状态示意图;
40.图4是实施例一提供的闪存地址排列示意图;
41.图5是实施例一提供的拆分后的命令格式示意图;
42.图6是实施例一提供的链式结构简易视图;
43.图7是实施例一提供的连续序列示意图。
具体实施方式
44.以下通过特定的具体实例说明本发明的实施方式,本领域技术人员可由本说明书所揭露的内容轻易地了解本发明的其他优点与功效。本发明还可以通过另外不同的具体实施方式加以实施或应用,本说明书中的各项细节也可以基于不同观点与应用,在没有背离本发明的精神下进行各种修饰或改变。需说明的是,在不冲突的情况下,以下实施例及实施例中的特征可以相互组合。
45.本发明的目的是针对现有技术的缺陷,提供了一种基于硬件的固态硬盘读命令自动整合的方法及系统。
46.实施例一
47.本实施例提供一种基于硬件的固态硬盘读命令自动整合的方法,如图1-2所示,包括:
48.s1.获取主机发送的读命令,根据获取的读命令进行优先级的分类整理,并对分类
整理后的读命令进行选取;
49.s2.对选择的读命令基于映射表单次读取单元进行切分,得到切分后的读命令片段;
50.s3.将得到的读命令片段基于映射表进行查询,得到读命令物理目标地址;
51.s4.识别读命令物理目标地址在闪存中的页边界,并根据页边界对读命令进行再次切分;
52.s5.将根据页边界切分后的读命令放入再整合缓冲区中进行整合;
53.s6.将再整合缓存区内命中相同闪存页的读命令根据条件再次整合;
54.s7.重新执行步骤s5-s6,当缓冲区的命令整合超时和/或超过预设次数时,停止整合。
55.在步骤s1中,获取主机发送的读命令,根据获取的读命令进行优先级的分类整理,并对分类整理后的读命令进行选取。
56.主机通过非易失性内存主机控制器接口规范(nvme)驱动层发送读命到控制器。
57.固态硬盘控制器根据nvme协议提取读命令。负责解释nvme命令的硬件模块(hif)根据nvme规范查询读写命令队列后获取nvme读命令,并将读命令打包成消息送给固态硬盘控制器的嵌入式中央处理器(cpu)。
58.运行于cpu上的固件对读命令的优先级和地址进行分析,固件根据以往历史统计,可以利用机器学习的方法预测读命令在闪存中是否关联,或者用户指定的特殊范围预测改读命令的数据特性是随机的还是关联的。
59.是否关联的判断方式如下实例:
60.(1)当发现读命令读取的数据是指定的系统引导区或option rom驱动加载区,那么它读取的数据在闪存中都是关联的(因为这部分一般属于冷数据,不经常更新,一次写完都在关联的区域),此时该读命令就被标记为可以参与整合的命令。
61.(2)当固件通过历史统计或机器学习发现用户在读写一定逻辑地址(lba)范围的数据时明显具有随机属性,那么它读取的数据在闪存中大概率都是非关联的,此时再做整合命令反而会因为多次整合失败造成延迟,这时就把该读命令标记为不可整合的命令。
62.(3)当用户非常清晰的了解硬盘的用途时,比如sql数据库随机访问,或者存放大文件的冷数据时,用户也可通过符合nvme协议的定制命令(vdm)发送给硬盘指定特殊lba范围的属性,将属于随机访问的范围的读命令标记为不可整合(me=0),而属于大文件冷数据的范围的读命令则标记为可以整合(me=1)。若数据库经常发生规律性访问,比如从固定间隔提取特性数据,而数据间隔处以一个关联页面也可以设定为可整合数据。
63.根据上述将读命令标记为关联的或者不关联,固件将标记好的读命令返还给hif,hif根据读命令优先级进行选取。
64.在步骤s2中,对选择的读命令基于映射表单次读取单元进行切分,得到切分后的读命令片段。
65.硬件模块(hif)大命令拆分模块把选中的命令根据nvme协议获取读命令的地址和长度,并按照映射表最大读取的单元进行切分。
66.本实施例的主控映射表为存放于ddr的直接映射表,且ddr的颗粒宽度为64bit,控制器单次访问的最小单位为64b,而一个逻辑地址对应的闪存地址(也就是真实的物理存放
地址)为32bit,所64b对应的逻辑地址为:
67.64*8/32=16个。因此对于读命令按照关联的16个逻辑地址一组进行拆分。
68.若挂载ddr颗粒为32bit时,同一控制的单次访问的最小长度单位为32b,则对应拆分的逻辑边界变为8个。
69.定义切分逻辑地址的数量为lm。
70.若命令开始的地址不在被16或8整除的边界,则第一次先切到整除的边界之后再进行切分,直到命令结束为止。
71.例如起始地址是0x10000003,长度32,切分大小lm为16,则:
72.逻辑地址0x100000003~0x10000000f为第一组,组成第一个读命令。
73.逻辑地址0x100000010~0x10000001f为第二组,组成第二个读命令。
74.逻辑地址0x100000020~0x100000022为第三组,组成第三个读命令。
75.在本实施例中,对选择的读命令按照映射表单次最大读取单元进行切分中的映射表单次读取单元取决于映射表所存缓存区的单次最高效率长度;其中最高效率的计算方法位单次映射表读数据长度(mlen)除以该长度下读取映射表数据返回的延迟(trl)。
76.在对选择的读命令按照映射表单次最大读取单元进行切分的过程中切分大小固件是可控的,且切分大小固件是可以对每个读命令进行单独的切分大小控制,每个读命令的切分单元大小可以不同;本实施例中的固件可以根据硬件支持的最大映射表读取长度对应的读命令大小准确值直接指定切分模块按照该准确值进行切分,也可以指定小于该准确值进行切分。且在对选择的读命令按照映射表单次最大读取单元进行切分的过程中。
77.本实施例中切分后的读命令仍然保存原始主机读命令的标识(cmd tag),并且cmd tag会不加更改的通过后续的各个模块,直到读命令的数据返回给负责发送返回命令给主机的模块,保证数据的对应关系。
78.在步骤s3中,将得到的读命令片段基于映射表进行查询,得到读命令物理目标地址。
79.硬件模块(hif)将拆分后得读命令一次送入逻辑物理地址转换模块(ftla)。
80.ftla根据读命令的起始地址读取对应的映射表,长度为lm乘以单个逻辑地址在映射表的空间大小4b(32bit)。flta将物理地址追加到原始读命令中,每一个逻辑地址对应一个,组成新的读命令,命令大小变大但是命令个数保持不变。变化状态如图3所示。
81.在步骤s4中,识别读命令物理目标地址在闪存中的页边界,并根据页边界对读命令进行再次切分。
82.逻辑物理地址转换模块(ftla)将添加了物理地址的读命令送到闪存页边界的拆分模块(fsp)。
83.fsp将遍历读命令里面的物理地址,根据fsp寄存器的配置,每当发现物理地址的闪存页地址及以上的单位(包括块地址block address、逻辑单元地址lun address、颗粒地址die address和通道地址channel address)发生翻转时,则翻转之前的物理地址合并成一个闪存读命令,而当前翻转的物理地址单元开始组建下一个闪存读命令,直到最后一个物理地址单元结束。如图4中的闪存地址排列为参考进行举例说明:
84.示例地址排列中要求大于page的地址比特位都在位于高位。
85.示例地址排列中bit 31~4可以为一个page的编号。
86.示例地址排列中bit 3~0则作为数据在一个闪存页内的位置偏移,其中bit3~2表示在数据在那个plane,而bit 1~0则表示数据在哪个plane的页中的便宜。
87.当bit4到bit31作为一个28位变量发生变化时,则认为跨越闪存页边界地址。
88.需要注意的是bit3~0的数值在一个命令组里是可以不连续的。比如:
89.原来读命令里的15个物理地址分别为:
90.0x1005510,0x1005511,0x1005513,0x1005515,0x1005514,0x1005522,0x1005521,0x1005523,0x1005514,0x1005515,0x1005517,0x1005518,0x1005520,0x1005521,0x1005522。
91.则切分后变为4组分别放入不同的命令一共4个名字中:
92.第一个命令c1里的物理地址:{0x1005510,0x1005511,0x1005513,0x1005515,0x1005514}
93.第二个命令c2里的物理地址:{0x1005522,0x1005521,0x1005523}
94.第三个命令c3里的物理地址:{0x1005514,0x1005515,0x1005517,0x1005518}
95.第四个命令c4里的物理地址:{0x1005520,0x1005521,0x1005522}
96.拆分后的命令格式会发生变化,如图5所示,其中每个数据块的逻辑地址和物理的地址会变成两个相邻的32bit放在一起,这会方便(降低硬件实现复杂度)后面最终访问闪存命令的生成以及可能的读命令整合。
97.在本实施例中,闪存页边界可根据实际硬盘挂载的闪存颗粒特性进行配置;且根据页边界对读命令进行再次切分是以硬件方式实现的,该硬件模块可以根据固件配置的寄存器自动提取读命令数据映射目标的闪存地址中的页标识位,当相邻两个数据块对应的闪存地址中的标识位不一致时,会自动将前面页标识位关联相同的一个或多个数据组成一个新的读命令放到后面的读命令缓存模块。
98.在步骤s5中,将根据页边界切分后的读命令放入再整合缓冲区中进行整合。
99.闪存页边界的拆分模块(fsp)将拆分后的读命令发送给闪存命令整合模块(fcm),fcm首先将收到命令存放到其内部管理一个命令整合缓冲器(command merge buffer:cmb)中。cmb为链表结构,收到读命令按照收到的顺序在打上时间戳以后链接到一起;因此将根据页边界切分后的读命令放入再整合缓冲区中的再整合缓冲区是以单项链表的方式存在于主控的核心缓冲区中,可以根据实际需求尤其是后端挂载闪存容量的大小灵活配置大小。链式结构简易视图如图6所示。
100.需要注意的是链表的个数(不是长度)是根据控制器所挂载的闪存独立逻辑单元(lun)的数量相同的,这是因为闪存的lun在读数据时可以并行操作加载数据缓存。考虑到硬件资源的消耗以及实际硬盘容量的限制,最大支持的链表个数为256个。相应的整合完成的命令会存放于每个lun对应的out fifo中,out fifo支持的最大数目也为256个。
101.命令头中有两个关键的控制标记:me和cl,分别表示可整合(merge enable)和整合一次读闪存命令中的一个命令(command last)。
102.命令头中还有一个计数器mc表示被整合的次数(merge count),初始值是0。
103.其中me的初始值来自于步骤s3中固件的配置。cl的初始值是1,表示每个命令在再整合前都是一个独立的命令。
104.需要说明的是多个整合后得命令会得到一个或多个cl=0并以cl=1的连续序列,
这个序列在逻辑上一个真正的读闪存命令的一个完整的闪存读命令,如图7所示。
105.在步骤s6中,将再整合缓存区内命中相同闪存页的读命令(包括相邻和不相邻)根据条件再次整合。
106.再次整合的整合的方式包括:
107.当相邻两个读命令处于同一页闪存内时,两个读命令将会发生合并。
108.当不相邻两个或多个读命令处于同一页闪存内时,对应的两个或多个读命令将会发生合并。例如步骤s4中c1和c3整合,c2和c4整合。
109.当相邻或不相邻的一个或多个读命令的部分闪存页页码位置相同且数据位移也相同,即多个读命令中的数据块有完全匹配的情况时,对应的数据块的读命令在整合后会有相应的整合次数标识,在避免重复从闪存传输数据的同时具有从固态硬盘内部数据缓存区重复返回给主机的能力。例如步骤s4中c2和c4中都有的0x1005522。
110.当多个读命令被整合变成一个读命令后,原始命令的标识会以链表形式存在于新的读命令,这样保证在最少的访问闪存的情况下,在返回数据后根据链表里的信息依然可以还原回原始的读命令,保证了读数据返回目标的一致性。
111.在步骤s7中,重新执行步骤s5-s6,当缓冲区的命令整合超时和/或超过预设次数时,停止整合。
112.每当一个新的读命令cmn到达fcm后,fcm将按照以下步骤进行整合尝试:
113.(1)检查当前的缓存命令个数是否大于指定的整合阈值,若小于等于指定阈值则直接添加到相应的lun链表的尾部。
114.(2)若缓存命令个数大于指定的整合阈值,fcm将已有的读命令中从链表开头起第一个me=1的读命令cmx开始尝试整合。
115.(3)提取cmx的第一个物理地址然后与新的读命令cmn中的第一个物理地址的进行比较,其中低4位不进行比较,只比较31~4比特。需要说明的是每组命令中的页地址是一样的,所以跟任何一个相比较结果都是一样的,只是为了实现方便选中了第一个。
116.(4)若步骤(3)比较的结果不匹配则找到从cmx开始找cl=1的读命令后再提取下一个me=1的读命令,并设置为新的cmx然后重复步骤(3)。
117.(5)若步骤(3)比较的结果匹配,则将新命令插入到链表中从cmx开始包括cmx的读命令头中cl=1的读命令的后面,并将前面命令的cl=1改写为cl=0,新的读命令的cl=1保持不变。并且将cmx中的整合计数mc加1。若mc大于整合次数的限制次数则把cmx的me改成0并停止新命令cmn的整合。
118.例如当cmx的物理地址匹配,而cmx的cl=0,cmx之后的两个读命令(cmx 1,cmx 2)的cl=0,cmx之后的第三个(cmx 3)cl=1,cmx之后的第四个读命令为cmy,则:
119.整合前的序列为:
120.cmx(cl=0),cmx 1(cl=0),cmx 2(cl=0),cmx 3(cl=1),cmy
121.整合后的序列为:
122.cmx(cl=0),cmx 1(cl=0),cmx 2(cl=0),cmx 3(cl=0),cmn(cl=1),cmy
123.(6)若链表到达尾部或不再有可整合的命令,则整合停止,将新的读命令cmn添加到链表尾部。
124.在上述整合命令的执行的同时,fcm有一个固件可配置的定计时器,每隔一个配置
的时间后检查链表头部读命令的时间戳ts,当定时器的当前时间减去ts大于配置的超时阈值mtmax时,fcm会把链表头命令头部的me配置成0,当fcm的out fifo有空间时会立即将头部的命令从链表中取走放入out fifo,并立刻检查新的链表头部的命令是否超时,若超时则重复之前的步骤。
125.当固件发现系统异常需要终止命令整合时,可以通过给fcm配置相应flush寄存器触发冲刷流程。fcm发现flush配置后会停止当前的整合,新的命令会直接放入链表尾部,并且不断的把头部的命令取走放入out fifo中。
126.闪存命令执行模块fsq会根据闪存的工作状态,当fsq发现闪存lun处于可执行闪存读命令的状态时会查询fcm的对应的out fifo中是否有读命令,如果有就会一次从out fifo中取出直到取到一个cl=1的命令。fsq根据整合后的读命令序列发送优化后得读命令到闪存的lun中:
127.若获取到的读命令一共只有一个逻辑地址,则发送延迟低带偏移地址的快速闪存读取命令。读取命令完成后将数据从闪存中获取发还给hif模块。
128.若获取到的读命令一共只有多个逻辑地址,则发送延迟稍大但具有页缓存的正常闪存读取命令。页缓存加载完后,再根据每个读序列里的物理地址分别用不同的偏移地址从页缓存中提取数据发还给hif模块。
129.hif模块将接收到的数据根据读命令头里面的信息返还给主机。
130.本实施例中整合命令的缓冲区中的命令大于指定的数量(mth)后才会进行整合,当闪存的速度足够快时缓冲区的命令数量会少于指定值mth,这时缓冲区的命令将不会进行整合。读延迟是固态硬盘性能的最高优先级,此方法可以保证闪存速度足够快的时候不会因为整合造成额外延迟。
131.当闪存的速度不足以满足数据通路的线性速度时,缓冲区的命令数量会逐渐增多,当命令数量大于指定的数量mth后就会进行整合和再整合。该整合会减少闪存访问和传输数据的数量,从而降低读延迟、功耗以及闪存数据的保持寿命(read retention time)。
132.缓冲区的命令整合在整合后会放回缓冲区可以再次参与整合,可以重复利用缓冲区的大小进行最大程度的整合。
133.在本实施例中,缓冲区的命令整合具有超时设置,可防止命令过度整合造成较大延迟。整合后的命令再放回缓冲区并可以再次参与整合直到从最开始参与整合的命令放入缓冲区开始到最近的一次整合的命令存在缓冲区的时间超过了设定的阈值,则改整合后的命令停止整合并不再参与后续的整合。
134.缓冲区的命令整合具有超次数设置,可防止命令过度整合造成较大延迟。整合后的命令再放回缓冲区并可以再次参与整合直到参与整合的原始命令数量超过了设定的阈值,则改整合后的命令停止整合并不再参与后续的整合。其中,次数包括整合发生的次数、检查查询整合是否可以发生时的查询缓冲区读命令的次数、以及前面三种次数的任意两个或多个的线性或非线性组合。
135.缓冲区的命令在整合超时或超次数后,会按照最早的被整合命令的时间排序,时间最早的命令会排在缓冲区的最前面来保证命令的延迟不超过系统预计的最大值。
136.整合模块的维护一个起始整合命令指针(msp)和一个整合命令查询指针(mcp)。msp初始值是0,只有当前的整合结束(包括整合和再整合)并且链表后面剩余的读命令个数
大于1时才会加一,当msp指向最后一个命令时,msp会直接返回到链表的头部(mlh)。mcp总是在msp更新后重新指向msp的下一个读命令,而当一次整合操作结束时,mcp会指向下一个读命令,直到整合终止时msp更新。
137.整合模块里有一个出口先入先出缓冲区(out fifo)。整合超时或超次数或被强行终止的读命令会被立即从链表里删除并放入out fifo。放入out fifo的读命令将不再参与整合,等待下一级模块来获取。
138.整合模块里有一个超时管理的计时模块,该模块以时钟单位乘以固件配置的寄存器值作为精度计算出当前的时钟时间戳(gstmp)。计时模块在读命令放入缓冲区时打上时间戳,当整合管理状态机轮询到一个读命令时会将当前读命令时间戳(cstmp)和gstmp计算得到该命令在缓冲区的等待时间(tw)。当tw大于等于超时时间时,命令就会终止整合并被放入out fifo。
139.整合模块拥有一个固件可控的寄存器接口。通过该寄存器可以将缓冲区里所有的读命令进行冲刷,冲刷过程中整合状态机会被锁住停止整合,直至所有命令都被刷出缓冲区进入out fifo。
140.与现有技术相比,本实施例采用硬件和软件结合的方法对读命令进行了自动拆分再整合,避免了对闪存同一页面的短时间重复读,从而降低了主机读命令的延迟和功耗,提高了固态硬盘的整体读吞吐量、并且延长了闪存数据保存寿命;基于硬件的实现大大降低了固件负载,进一步降低了主机读命的延迟;并且给固件提供了充分可调整、配置以及控制方法,能够很好的处理异常中断和根据用户场景进行动态性能调整;本实施例的缓冲区的命令整合具有超时设置和次数限制,可防止命令过度整合造成延迟;缓冲区的命令可以根据固件控制随时冲刷,防止异常条件造成的命令堵塞。固件可以利用历史记录统计、用户指定以及机器学习方法预测读命令在闪存的关联性来决定是否运行读命令参与整合。
141.实施例二
142.相应的,还提供一种基于硬件的固态硬盘读命令自动整合的系统,包括:
143.获取模块,用于获取主机发送的读命令,根据获取的读命令进行优先级的分类整理,并对分类整理后的读命令进行选取;
144.第一切分模块,用于对选择的读命令基于映射表单次读取单元进行切分,得到切分后的读命令片段;
145.查询模块,用于将得到的读命令片段基于映射表进行查询,得到读命令物理目标地址;
146.第二切分模块,用于识别读命令物理目标地址在闪存中的页边界,并根据页边界对读命令进行再次切分;
147.第一整合模块,用于将根据页边界切分后的读命令放入再整合缓冲区中进行整合;
148.第二整合模块,用于将再整合缓存区内命中相同闪存页的读命令根据条件再次整合;
149.循环模块,用于重新执行第一整合模块、第二整合模块,当缓冲区的命令整合超时和/或超过预设次数时,停止整合。
150.需要说明的是,本实施例体统的一种基于硬件的固态硬盘读命令自动整合的系统
与实施例一类似,在此不多做赘述。
151.与现有技术相比,本实施例采用硬件和软件结合的方法对读命令进行了自动拆分再整合,避免了对闪存同一页面的短时间重复读,从而降低了主机读命令的延迟和功耗,提高了固态硬盘的整体读吞吐量、并且延长了闪存数据保存寿命;基于硬件的实现大大降低了固件负载,进一步降低了主机读命的延迟;并且给固件提供了充分可调整、配置以及控制方法,能够很好的处理异常中断和根据用户场景进行动态性能调整。
152.注意,上述仅为本发明的较佳实施例及所运用技术原理。本领域技术人员会理解,本发明不限于这里所述的特定实施例,对本领域技术人员来说能够进行各种明显的变化、重新调整和替代而不会脱离本发明的保护范围。因此,虽然通过以上实施例对本发明进行了较为详细的说明,但是本发明不仅仅限于以上实施例,在不脱离本发明构思的情况下,还可以包括更多其他等效实施例,而本发明的范围由所附的权利要求范围决定。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献