CN117215503A - 一种读取闪存数据的方法 - Google Patents

一种读取闪存数据的方法 Download PDF

Info

Publication number
CN117215503A
CN117215503A CN202311484659.4A CN202311484659A CN117215503A CN 117215503 A CN117215503 A CN 117215503A CN 202311484659 A CN202311484659 A CN 202311484659A CN 117215503 A CN117215503 A CN 117215503A
Authority
CN
China
Prior art keywords
read
flash memory
reading
data
threshold voltage
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.)
Granted
Application number
CN202311484659.4A
Other languages
English (en)
Other versions
CN117215503B (zh
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 Spark Semiconductor Technology Co ltd
Original Assignee
Shenzhen Spark Semiconductor Technology 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 Spark Semiconductor Technology Co ltd filed Critical Shenzhen Spark Semiconductor Technology Co ltd
Priority to CN202311484659.4A priority Critical patent/CN117215503B/zh
Publication of CN117215503A publication Critical patent/CN117215503A/zh
Application granted granted Critical
Publication of CN117215503B publication Critical patent/CN117215503B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Techniques For Improving Reliability Of Storages (AREA)

Abstract

本发明提供一种读取闪存数据的方法,所述方法包括:存储设备响应于收到的读命令,获取本次读取任务对应的闪存物理地址;存储设备检测到读取本次读取任务对应的闪存物理地址对应的数据中存在不可纠正的错误时,判断是否存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压;其中,所述最佳阈值电压是在由存储设备在空闲时,基于获取到的本次读取任务对应的闪存物理地址而生成的;若存储设备检测到存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压,则使用已经生成的最佳阈值电压读取闪存中的数据。能够在降低Read Disturb的风险的情况下,加快对读取闪存数据过程中发生错误的处理速度。

Description

一种读取闪存数据的方法
技术领域
本发明涉及存储设备技术领域,特别涉及一种读取闪存数据的方法。
背景技术
Nand Flash是一种非易失性存储介质,广泛应用于SD,eMMC,UFS,SSD等存储产品。Nand Flash的基本存储单元(Cell)是一种类NMOS的带浮栅(Floating Gate)的MOS管。读数据时,在栅极加读电压,读电压大于阈值电压时,晶体管导通。读取Nand Flash数据时,一般用默认电压就可以正确读出。但是随着磨损次数(P/E),温度的变化,阈值电压会发生改变,此时默认电压不能正确读出数据。当默认电压不能正确读出数据时,就需要用其他电压读出数据,所以一般厂家会给出几十组读电压(也就是重读电压表Retry Table),用来应对默认电压不能正确读出数据的情况。Retry Table的作用是应对各种应用场景,比如高温写低温读,低温写高温读,磨损次数少,磨损次数多,读干扰(Read Disturb)等等。存储主控芯片厂商一般会在固件算法里面,通过遍历Retry Table中电压的方法,来读取Nand Flash的数据。
存储主控芯片厂商一般都会直接用Nand Flash原厂提供的Retry Table。 RetryTable中读电压的数量,顺序,电压值,直接关系到读取Nand Flash数据的效率和准确性。遍历Retry Table的方法中,如果当前的数据需要使用最后一组电压,那么遍历前面的电压都是无效的,这样造成读的速度慢,效率低。因此遍历Retry Table的方法,会造成读性能的下降。
经检索,专利文献1披露了一种读取闪存数据的方法,该方法利用已经记录的最佳阈值电压来加快错误处理过程,在处理不可纠正的错误时,无需搜索所有可用的阈值电压,而直接利用所记录的最佳阈值电压,在大多数情况下能够降低错误处理过程所需的时间。专利文献1提供的方案一定程度上解决了现有技术中遍历Retry Table的方法,所造成读性能的下降的问题。专利文献1提供的方案中,需要提前记录闪存中各物理地址对应的最佳阈值电压。而为了获得闪存每个物理地址对应的最佳阈值电压,需要对每个物理地址执行搜索最佳阈值电压的步骤:提前遍历Retry Table,对同一物理页施加多个读重做命令,识别每一个读重做命令读取结果的比特错误率,来搜索最佳阈值电压或指示最佳阈值电压的标识/索引。
然而专利文献1提供的方案在实施过程中,仍然面临如下困难:如果对闪存中的所有物理地址都全部提前记录对应的最佳阈值电压,就需要将闪存所有物理地址都执行对每个物理地址执行搜索最佳阈值电压的步骤,会造成对闪存很多不必要的读次数,增加ReadDisturb的风险,可能会造成数据丢失等问题。如果不提前对闪存中的所有物理地址都全部提前记录对应的最佳阈值电压,可以减少对闪存很多不必要的读次数,但是如果在读取某个物理地址的数据过程中,发现该物理地址存在不可纠正的错误时,由于该物理地址并未提前记录对应的最佳阈值电压,会导致错误处理过程所需的时间增加,减慢错误处理过程。
专利文献1:专利名称,读取闪存数据的方法、装置以及固态驱动器,授权公告号,CN106448737B,首次公开日,2017-02-22。
发明内容
本发明的目的在于提供一种读取闪存数据的方法及装置,能够在降低ReadDisturb的风险的情况下,加快对读取闪存数据过程中发生错误的处理速度。
本发明的发明构思为,只对接下来将会被主机(host)读取的数据所对应的闪存物理地址进行提前记录对应的最佳阈值电压,对于接下来不会被主机(host)读取的数据所对应的闪存物理地址不提前记录对应的最佳阈值电压,从而不会造成对闪存很多不必要的读次数,降低了Read Disturb的风险,而对于接下来将会被主机(host)读取的数据所对应的闪存物理地址进行提前记录对应的最佳阈值电压,能够加快对读取闪存数据过程中发生错误的处理速度。
为了实现上述发明目的,提供如下技术方案:
第一方面,提供一种读取闪存数据的方法,所述方法包括:
存储设备响应于收到的读命令,获取本次读取任务对应的闪存物理地址;
存储设备检测到读取本次读取任务对应的闪存物理地址对应的数据中存在不可纠正的错误时,判断是否存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压;其中,所述最佳阈值电压是在由存储设备在空闲时,基于获取到的本次读取任务对应的闪存物理地址而生成的;
若存储设备检测到存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压,则使用已经生成的最佳阈值电压读取闪存中的数据。
作为进一步改进,所述存储设备响应于收到的读命令,获取本次读取任务对应的闪存物理地址,具体包括:
存储设备接收到主机发送的新命令处理通知时,从主机提供的多个提交队列中优先选择优先级最高的提交队列作为目标队列,对所述目标队列执行读取读命令的操作;所述目标队列仅用于放置本次读取任务对应的读命令;
存储设备响应于从目标队列中收到的第一条读命令,将所述读命令添加到命令缓冲队列中;
存储设备检测到目标队列不为空时,持续将目标队列中的其余读命令添加到命令缓冲队列中;
存储设备检测到目标队列为空时,根据命令缓冲队列中的所有读命令,确定本次读取任务对应的闪存物理地址。
第二方面,提供一种读取闪存数据的方法,所述方法包括:
存储设备响应于收到的读命令,获取要访问的闪存物理地址,以读取所述闪存物理地址对应的数据;
存储设备检测到读取到的闪存物理地址对应的数据中存在不可纠正的错误时,判断是否存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压;其中,所述最佳阈值电压是在由存储设备在空闲时,基于一个时长周期内被读取次数大于预设次数的闪存物理地址而生成的;
若存储设备检测到存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压,则使用已经生成的最佳阈值电压读取闪存中的数据。
作为进一步改进,存储设备在空闲时,基于一个时长周期内被读取次数大于预设次数的闪存物理地址生成所述最佳阈值电压,具体包括:
存储设备将在一个时长周期内被读取次数大于预设次数的闪存物理地址,按照被读次数从高到低进行排序,得到读次数排序结果;
存储设备在空闲时,按照所述读次数排序结果,优先为排序靠前的闪存物理地址生成最佳阈值电压。
作为进一步改进,所述方法还包括:
存储设备获取闪存的数据保存时间;
存储设备在空闲时,对数据保存时间与数据保存期限的差值小于时长阈值的闪存物理地址执行读操作。
作为进一步改进,存储设备在空闲时,对数据保存时间与数据保存期限的差值小于时长阈值的闪存物理地址执行读操作,具体包括:
存储设备对数据保存时间与数据保存期限的差值小于时长阈值的闪存物理地址,按照数据保存时间的时长从长到短进行排序,得到时长排序结果;
存储设备在空闲时,按照所述时长排序结果,优先对排序靠前的闪存物理地址执行读操作。
第三方面,提供一种读取闪存数据的方法,所述方法包括:
存储设备响应于收到的读命令,获取本次读取任务对应的闪存物理地址;
存储设备生成本次读取任务对应的闪存物理地址对应的最佳阈值电压,并保存在最佳阈值电压表中;其中,所述最佳阈值电压为闪存中相应物理地址对应的最低比特错误率的阈值电压;
存储设备使用所获取的最佳阈值电压读取闪存中的数据。
作为进一步改进,所述存储设备响应于收到的读命令,获取本次读取任务对应的闪存物理地址,具体包括:
存储设备接收到主机发送的新命令处理通知时,从主机提供的多个提交队列中优先选择优先级最高的提交队列作为目标队列,对所述目标队列执行读取读命令的操作;所述目标队列仅用于放置本次读取任务对应的读命令;
存储设备响应于从目标队列中收到的第一条读命令,将所述读命令添加到命令缓冲队列中;
存储设备检测到目标队列不为空时,持续将目标队列中的其余读命令添加到命令缓冲队列中;
存储设备检测到目标队列为空时,根据命令缓冲队列中的所有读命令,确定本次读取任务对应的闪存物理地址。
作为进一步改进,所述方法还包括:在存储设备执行读取读命令的操作的过程中,主机持续将与本次读取任务对应的其余读命令添加到目标队列中。
作为进一步改进,所述方法还包括:在主机持续将与本次读取任务对应的其余读命令添加到目标队列的过程中,主机将本次读取任务中所有具有同源的分割描述符的文件的读命令,连续地添加到目标队列中。
相较于现有技术,本发明提供的一种读取闪存数据的方法,至少具有如下有益效果:
由于只对接下来将会被主机(host)读取的数据所对应的闪存物理地址进行提前记录对应的最佳阈值电压,对于接下来不会被主机(host)读取的数据所对应的闪存物理地址不提前记录对应的最佳阈值电压,从而不会造成对闪存很多不必要的读次数,降低了Read Disturb的风险,而对于接下来将会被主机(host)读取的数据所对应的闪存物理地址进行提前记录对应的最佳阈值电压,能够加快对读取闪存数据过程中发生错误的处理速度。
附图说明
图1为本发明提供的一种读取闪存数据的方法的应用环境图;
图2为本发明实施例1提供的一种读取闪存数据的方法的流程示意图;
图3为本发明实施例2提供的一种读取闪存数据的方法的流程示意图;
图4为本发明实施例2提供的一种读取闪存数据的方法的流程示意图;
图5为本发明实施例3提供的一种读取闪存数据的方法的流程示意图;
图6为现有技术中主机形成提交队列(NVMe SQ)的原理示意图;
图7为本发明实施例1提供的一种读取闪存数据的方法的原理示意图;
图8为本发明实施例3提供的一种读取闪存数据的方法的原理示意图;
本发明目的实现、功能特点及优点将结合实施例,参照附图做进一步说明。
具体实施方式
本部分将详细描述本发明的具体实施例,本发明之较佳实施例在附图中示出,附图的作用在于用图形补充说明书文字部分的描述,使人能够直观地、形象地理解本发明的每个技术特征和整体技术方案,但其不能理解为对本发明保护范围的限制。
在详细描述本发明提供的实施例之前,有必要再次强调本发明的发明构思,以便于本领域技术人员理解本发明相较于现有技术做出的技术贡献。本发明的发明构思为,只对接下来将会被主机(host)读取的数据所对应的闪存物理地址进行提前记录对应的最佳阈值电压,对于接下来不会被主机(host)读取的数据所对应的闪存物理地址不提前记录对应的最佳阈值电压,从而不会造成对闪存很多不必要的读次数,降低了Read Disturb的风险,而对于接下来将会被主机(host)读取的数据所对应的闪存物理地址进行提前记录对应的最佳阈值电压,能够加快对读取闪存数据过程中发生错误的处理速度。
为了提前获取将会被主机(host)读取的数据所对应的闪存物理地址,本发明提供了两种实现的技术思路,第一种是基于NVMe规范的特性,通过调整现有技术中的仲裁规则,从提交队列(Submission Queue,简写为:SQ)中提前获取将会被主机(host)读取的数据所对应的闪存物理地址。即对于第一种技术路径,采用的思路是对主机与存储设备之间的读命令队列的仲裁规则进行改进。为了便于理解现有技术中的主机与存储设备之间的读命令队列的仲裁规则,以专利文献2(专利名称,System and method for I/O optimization ina multi-queued environment,授权公告号,US9317204B2,公告日,2016-04-19)提供的多队列环境中I/O优化的方法为例,做简要说明。如图6所示,主机(host)为每个进程维护一个主机队列(即Host Queues),如图6所示每个主机队列长度为10,主机(host)还维护多个用于将命令提交给存储设备的提交队列(即NVMe SQ),如图6所示每个提交队列长度为8,主机(host)会将对应进程的主机队列(即Host Queues)中的命令添加到对应类型的提交队列(即NVMe SQ),主机(host)写DB(Doorbell)寄存器通知存储设备有新命令待处理,由存储设备预先设置的仲裁规则(即Arbitration)来决定将哪些提交队列(即NVMe SQ)中的命令读取到存储设备中,以便存储设备的命令处理模块执行这些命令,例如这些命令可以是读命令。第二种是根据各物理地址一段时间内被读访问的次数来预测这些物理地址将会被访问的概率,对于一段时间内被读访问的次数多的物理地址,其被读访问的概率也大,可以在空闲时仅生成这些物理地址对应的最佳阈值电压,无需对闪存的全部存储单元执行生成最佳阈值电压的步骤,可以减少很多不必要的读次数。以下提供的实施例1和2属于第一种思路,实施例3属于第二种思路。
参照图1,本发明提供的一种读取闪存数据的方法应用于图1所示的***中,该***包括主机110和存储设备100。主机110包括接口111、处理器112和DRAM(Dynamic RandomAccess Memory,动态随机访问存储器)113,存储设备100包括接口101、控制部件102、一个或多个NVM芯片103以及DRAM(Dynamic Random Access Memory,动态随机访问存储器)104。主机110通过接口111与存储设备100的接口101进行连接。其中,主机队列和提交队列位于主机110的DRAM113上,控制部件102包括仲裁模块105、电压优化模块107以及命令处理模块109,命令缓冲队列106和最佳阈值电压表108位于DRAM104上。
实施例1
参照图1、图2和图7,本实施例提供了一种读取闪存数据的方法,所述方法包括:
步骤S202,存储设备100响应于收到的读命令,获取本次读取任务对应的闪存物理地址。
步骤S204,存储设备100检测到读取本次读取任务对应的闪存物理地址对应的数据中存在不可纠正的错误时,判断是否存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压。其中,所述最佳阈值电压是在由存储设备100在空闲时,基于获取到的本次读取任务对应的闪存物理地址而生成的。
所述最佳阈值电压为闪存中相应物理地址对应的最低比特错误率的阈值电压,电压优化模块107如何确定最佳阈值电压属于现有技术,具体可以参照专利文献1,此处不再赘述。
需要说明的是,空闲是指Idle状态,指主机110没有对存储设备100进行任何写读操作的状态,此时存储设备100可以进行内部的初始化,比如垃圾回收(garbagecollection),磨损均衡(wear leveling),数据校验等等。
在步骤S204中,最佳阈值电压是由存储设备100在空闲时,基于获取到的本次读取任务对应的闪存物理地址而生成的,在空闲时,即Idle状态时,主机110不对存储设备100进行任何写读操作,此时存储设备100的电压优化模块107基于获取到的本次读取任务对应的闪存物理地址生成相应的最佳阈值电压,不会干扰主机110读取数据的速度。当退出Idle状态时,存储设备100就可以利用获取的最佳阈值电压执行步骤S206,加快对读取闪存数据过程中发生错误的处理速度。
步骤S206,若存储设备100检测到存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压,则使用已经生成的最佳阈值电压读取闪存中的数据。
在一个场景中,如图7所示,若本次读取任务对应的读命令数量为14笔,14笔读命令被依次记作F1至F14,14笔读命令被仲裁模块105从提交队列115中全部取出后,先添加到命令缓冲队列106中,当本次读取任务的所有命令都取出后,命令处理模块109就会按顺序从命令缓冲队列106中取出这14笔读命令来执行。可以理解的是,基于更快响应的考虑,本实施例中,命令处理模块109执行14笔读命令时,优先使用默认读电压来从对应物理地址中读取数据,只有在存储设备100检测到读取本次读取任务对应的闪存物理地址对应的数据中存在不可纠正的错误时,才考虑使用已经生成的最佳阈值电压读取闪存中的数据。而本实施例中,最佳阈值电压是在由存储设备100在空闲时,基于获取到的本次读取任务对应的闪存物理地址而生成的。
如图7所示,具体生成过程为:在命令处理模块109执行命令缓冲队列106中的读命令过程中,执行完F3之后,进入Idle状态,此时电压优化模块107会对命令缓存队列中的剩余未被执行的命令按照顺序依次生成对应的最佳阈值电压,并将生成的最佳阈值电压添加到最佳阈值电压表108中。例如,本次Idle状态生成了F4对应的闪存物理地址对应的最佳阈值电压集合V4,然后退出了Idle状态,最佳阈值电压表108中就保存了F4对应的闪存物理地址对应的最佳阈值电压集合V4。如,F4对应的物理地址包括三个块(Block),即B1、B2和B3三个块,则F4对应的闪存物理地址对应的最佳阈值电压集合V4中包含了B1、B2和B3三个块对应的最佳阈值电压。Nand Flash是由很多个块(Block)组成的,每个块里面包含很多层(Layer),每一层是由很多字线Word Line(WL)组成,每一层里面的所有的WL读电压基本相同。Idle的时候通过读Block内每一层的第一条WL,获取所读WL的读电压,以寻找具有最低比特错误率的阈值电压,最终生成当前Block的最佳阈值电压。
当退出Idle状态后,存储设备100检测到读取本次读取任务中的F4命令对应的闪存物理地址对应的数据中存在不可纠正的错误时,判断最佳阈值电压表108中存在已经生成的最佳阈值电压,即最佳阈值电压集合V4。于是使用最佳阈值电压集合V4来读取闪存中的数据。
上述实施例至少具有如下的有益效果:
1.本实施例中,只有在确定要读取闪存中的数据时并在读取闪存中的数据之前,才需要生成本次读取任务对应的闪存物理地址对应的最佳阈值电压,即只对接下来将会被主机110(host)读取的数据所对应的闪存物理地址进行提前记录对应的最佳阈值电压,对于接下来不会被主机110(host)读取的数据所对应的闪存物理地址不提前记录对应的最佳阈值电压,从而不会造成对闪存很多不必要的读次数,降低了Read Disturb的风险,而对于接下来将会被主机110(host)读取的数据所对应的闪存物理地址进行提前记录对应的最佳阈值电压,能够加快对读取闪存数据过程中发生错误的处理速度。
2.本实施例中,生成的最佳阈值电压还可以用于其他的读取任务中,若后续读取任务涉及对本次读取任务对应闪存物理地址的访问,能够提升后续读取任务的处理效率。
3.本实施例中,存储设备100仅在空闲时生成最佳阈值电压,Idle状态时,主机110不对存储设备100进行任何写读操作,不会干扰主机110读取数据的速度。
进一步的,本实施例中,所述存储设备100响应于收到的读命令,获取本次读取任务对应的闪存物理地址,具体包括:
步骤S2021,存储设备100接收到主机110发送的新命令处理通知时,从主机110提供的多个提交队列115中优先选择优先级最高的提交队列115作为目标队列,对所述目标队列执行读取读命令的操作;所述目标队列仅用于放置本次读取任务对应的读命令。
具体的,本实施例中,仲裁规则为:从主机110提供的多个提交队列115中优先选择优先级最高的提交队列115作为目标队列,对所述目标队列执行读取读命令的操作。而提交队列115的优先级是由主机110预先设置好的,如图7中,SQ1的优先级最高,SQ2、SQ3、SQ4按顺序优先级依次降低。主机110会将本次读取任务对应的读命令依次从主机队列114Task1中添加到SQ1中。
步骤S2022,存储设备100响应于从目标队列中收到的第一条读命令,将所述读命令添加到命令缓冲队列106中。
在步骤S2022中,仲裁模块105先从SQ1收到第一条读命令F1,然后将F1添加到命令缓冲队列106中。
步骤S2023,存储设备100检测到目标队列不为空时,持续将目标队列中的其余读命令添加到命令缓冲队列106中。
具体的,假设本次读取任务需要从存储设备100中读取14个文件,在取到F1之后,存储设备100检测到目标队列不为空时,持续将目标队列SQ1中的其余读命令添加到命令缓冲队列106中,则依次是F2至F14,每个文件对应一个读命令。
步骤S2024,存储设备100检测到目标队列为空时,根据命令缓冲队列106中的所有读命令,确定本次读取任务对应的闪存物理地址。
本实施例中,在用户使用网盘进行下载的场景中,一次读取任务是一次下载任务,用户在网盘程序的文件浏览界面选择了14个文件,然后触发下载选项生成下载请求并发送给云服务器,作为云服务器的主机110(host)响应于该下载请求,将下载请求中对应的14个文件包含在本次读取任务中,并依次将这14个文件对应的读命令添加到优先级最高的提交队列115SQ1中。接着,执行步骤S2021至步骤S2024,使得存储设备100能够提前确定本次读取任务对应的闪存物理地址,而本次读取任务对应的闪存物理地址是接下来必然需要被读取的,因此可以在空闲时提前对将要被读取的物理块(block)生成最佳阈值电压,以便在发生不可纠正的错误时可以直接使用最佳阈值电压来加快错误的处理时间。
进一步的,所述方法还包括:
步骤S601,主机110基于本次读取任务对应的文件数量,确定目标队列的队尾位置。
如图7所示,在一个示例中,目标队列的深度大于200,作为云服务器的主机110接收到客户端发送的下载请求,确认本次读取任务对应的文件数量为200个,进一步也可以确定接下来分配给本次读取任务的目标队列中的元素数量应该为200,即目标队列SQ1的队尾位置(tail)应该为200,队头位置(head)为1。
步骤S602,主机110将本次读取任务对应的部分文件相应的读命令添加到目标队列之后,将所述目标队列的队尾位置写入到存储设备100上与所述目标队列对应的队尾门铃寄存器。
具体的,主机110将本次读取任务对应的前20个文件相应的读命令添加到目标队列SQ1之后,将200写入到存储设备100上与所述目标队列SQ1对应的队尾门铃寄存器(即tail Doorbell,简称tail DB)使得tail DB=200。在存储设备100中还包括队头门铃寄存器(即head Doorbell,简称head DB),head DB由存储设备100维护,tail DB由主机110维护,存储设备100检测到head DB=200时,可以判断目标队列为空。
步骤S603,主机110将所述目标队列的队尾位置写入到存储设备100上与所述目标队列对应的队尾门铃寄存器之后,在存储设备100执行从目标队列中读取读命令的操作的过程中,主机110持续将与本次读取任务对应的其余读命令添加到目标队列中。
具体的,主机110更新SQ1对应的队尾门铃寄存器使得tail DB=200的同时,也是在通知存储设备100的控制部件102有新的命令需要处理,并且基于本实施例中的仲裁规则,存储设备100接收到主机110发送的新命令处理通知时,仲裁模块105优先从优先级最高的SQ1中读取命令到命令缓冲队列106中。由于在步骤S602中,主机110仅将本次读取任务对应的前20个文件相应的读命令添加到目标队列SQ1中,还有180个并未添加,因此,在步骤S603中,在存储设备100执行从目标队列SQ1中读取读命令的操作的过程中,主机110持续将与本次读取任务对应的其余180个读命令添加到目标队列SQ1中。可以理解的是,本实施例中,主机110无需等待将本次读取任务对应的所有读命令都添加到目标队列中后才能够确定tailDB的值,而是直接根据本次读取任务对应的文件数量确定tail DB的值,从而无需将本次读取任务对应的所有读命令都添加到目标队列之后才能写SQ1对应的队尾门铃寄存器,加快了将数量较大的文件从存储设备100读取到主机110上的速度,从而加快用户的下载速度。而现有技术一般需要先将所有命令添加到队列中,才能够知道命令数量,从而确定tail DB的值,本发明中是以一次下载任务为单位,因此可以提前确定tail DB的值。假设主机110将200个读命令添加到目标队列中的消耗时间为t1,将20个读命令添加到目标队列中的消耗时间为t2,则节省的时间为△t=(t1-t2)。
需要说明的是,当存在多个同为最高优先级的提交队列115情况下,例如,还存在SQ0与SQ1具有相同的最高优先级,当SQ0与SQ1同时存在读命令时,仲裁模块105可以通过轮询的方式,从SQ0与SQ1中取出读命令到存储设备100中的中间暂存队列中,待SQ0与SQ1都为空之后,仲裁模块105再将保存在中间暂存队列中的SQ0与SQ1对应的读命令分为两组,以组为单位将两组读命令分别写入到对应的命令缓冲队列P1、P2中,然后电压优化模块107、命令处理模块109再依次对命令缓冲队列P1、P2中的读命令进行处理,处理的方式可以是上述步骤S202-S206,以及步骤S2021-S2024。可以理解的是,当最高优先级的提交队列115为更多数量时,处理方式类似。
进一步的,所述方法还包括:在主机110持续将与本次读取任务对应的其余读命令添加到目标队列的过程中,主机110将本次读取任务中所有具有同源的分割描述符的文件的读命令,连续地添加到目标队列中。
在一个场景中,当一个文件被分割为多个压缩包时,每个被分割的压缩包都具有同源的分割描述符,分割描述符具体可以是由文件的格式以及文件名组成,例如,当主机110识别多个文件的格式为.rar压缩包格式,并且文件名称的区别仅在于最后一个字符,各文件之间最后一个字符为按照顺序排列的数字,则认为这些文件具有同源的分割描述符,则主机110判断这些压缩包属于同一个文件,主机110会将这些压缩包对应的读命令被连续地添加到目标队列中,以便于属于同一个文件的所有压缩包可以在集中时间下载到客户端,以便用户可以尽快将多个压缩包进行合并形成一个文件,加快用户在客户端对该文件的处理流程。
实施例2
参照图1、图3和图4,本实施例提供了一种读取闪存数据的方法,所述方法包括:
步骤S302,存储设备100响应于收到的读命令,获取要访问的闪存物理地址,以读取所述闪存物理地址对应的数据。
步骤S304,存储设备100检测到读取到的闪存物理地址对应的数据中存在不可纠正的错误时,判断是否存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压;其中,所述最佳阈值电压是在由存储设备100在空闲时,基于一个时长周期内被读取次数大于预设次数的闪存物理地址而生成的。
所述最佳阈值电压为闪存中相应物理地址对应的最低比特错误率的阈值电压,电压优化模块107如何确定最佳阈值电压属于现有技术,具体可以参照专利文献1,此处不再赘述。
需要说明的是,空闲是指Idle状态,指主机110没有对存储设备100进行任何写读操作的状态,此时存储设备100可以进行内部的初始化,比如垃圾回收(garbagecollection),磨损均衡(wear leveling),数据校验等等。
举例而言,在步骤S304中,最佳阈值电压是在由存储设备100在空闲时,基于一个时长周期内被读取次数大于预设次数的闪存物理地址而生成的。以一个时长周期为24小时,预设次数为100次为例,在空闲时,即Idle状态时,主机110不对存储设备100进行任何写读操作,此时存储设备100的电压优化模块107为24小时内被读取次数大于100次的物理块(block)生成相应的最佳阈值电压,不会干扰主机110读取数据的速度。当退出Idle状态时,存储设备100就可以利用获取的最佳阈值电压执行步骤S306,加快对读取闪存数据过程中发生错误的处理速度。
步骤S306,若存储设备100检测到存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压,则使用已经生成的最佳阈值电压读取闪存中的数据。
上述实施例至少具有如下的有益效果:
1.本实施例中,只对一个时长周期内被读取次数大于预设次数的闪存物理地址提前生成最佳阈值电压而非对全部闪存物理块(block)都提前生成最佳阈值电压,从而不会造成对闪存很多不必要的读次数,降低了Read Disturb的风险,而对于接下来将会被主机110(host)读取的数据所对应的闪存物理地址进行提前记录对应的最佳阈值电压,能够加快对读取闪存数据过程中发生错误的处理速度。
2.本实施例中,生成的最佳阈值电压还可以用于其他的读取任务中,若后续读取任务涉及对本次读取任务对应闪存物理地址的访问,能够提升后续读取任务的处理效率。
3.本实施例中,存储设备100仅在空闲时生成最佳阈值电压,Idle状态时,主机110不对存储设备100进行任何写读操作,不会干扰主机110读取数据的速度。
进一步的,存储设备100在空闲时,基于一个时长周期内被读取次数大于预设次数的闪存物理地址生成所述最佳阈值电压,具体包括:
步骤S3041,存储设备100将在一个时长周期内被读取次数大于预设次数的闪存物理地址,按照被读次数从高到低进行排序,得到读次数排序结果。
步骤S3042,存储设备100在空闲时,按照所述读次数排序结果,优先为排序靠前的闪存物理地址生成最佳阈值电压。
在一个示例中,通过一个时长周期内每个逻辑地址的读次数,转换成物理地址的读次数,来确定每个物理块(block)的被读取次数,从而生成被读取次数表。空闲时,存储设备100根据被读取次数表,获取24小时内被读取次数大于100次的物理块(block),然后将这些符合条件的物理块中被读取次数最高的优先生成最佳阈值电压。可以理解的是,这些符合条件的物理块中被读取次数最高的后续继续被读取访问的概率越大,所以应该优先生成这些被读取次数最高的闪存物理地址对应的最佳阈值电压,从而加快对读取错误的处理时间。
在一个示例中,所述方法还包括:
步骤S402,存储设备100获取闪存的数据保存时间。
步骤S404,存储设备100在空闲时,对数据保存时间与数据保存期限的差值小于时长阈值的闪存物理地址执行读操作。
在本示例中,数据保存时间(即data retention)是11个月,根据存储设备100厂商提供的参数得知数据保存期限是12个月,时长阈值是2个月。数据保存时间可以通过记录数据上一次读时间(或者写入时间),根据这次读时间与上一次读时间的差值计算数据保存时间。通过在空闲时对数据保存时间与数据保存期限的差值小于时长阈值的闪存物理地址执行读操作,可以有效降低由于数据保存时间太长造成的数据丢失问题,并且不会影响主机110对存储设备100的操作。
进一步的,存储设备100在空闲时,对数据保存时间与数据保存期限的差值小于时长阈值的闪存物理地址执行读操作,具体包括:
步骤S4041,存储设备100对数据保存时间与数据保存期限的差值小于时长阈值的闪存物理地址,按照数据保存时间的时长从长到短进行排序,得到时长排序结果;
步骤S4042,存储设备100在空闲时,按照所述时长排序结果,优先对排序靠前的闪存物理地址执行读操作。
本示例中,在空闲时,存储设备100优先对数据保存时间更接近数据保存期限的物理块进行读操作,可以有效降低由于数据保存时间太长造成的数据丢失问题,并且不会影响主机110对存储设备100的操作。
实施例3
参照图1、图5和图8,本实施例提供了一种读取闪存数据的方法,所述方法包括:
步骤S502,存储设备100响应于收到的读命令,获取本次读取任务对应的闪存物理地址。
在用户使用网盘的场景中,一次读取任务就是用于发起的一次下载任务。具体的,参照图8,用户在网盘程序的文件浏览界面选择了14个文件,然后触发下载选项生成下载请求并发送给云服务器,作为云服务器的主机110(host)响应于该下载请求,将下载请求中对应的14个文件包含在本次读取任务中,并依次将这14个文件对应的读命令添加到优先级最高的提交队列115SQ1中。
步骤S504,存储设备100生成本次读取任务对应的闪存物理地址对应的最佳阈值电压,并保存在最佳阈值电压表108中;其中,所述最佳阈值电压为闪存中相应物理地址对应的最低比特错误率的阈值电压。
所述最佳阈值电压为闪存中相应物理地址对应的最低比特错误率的阈值电压,电压优化模块107如何确定最佳阈值电压属于现有技术,具体可以参照专利文献1,此处不再赘述。
步骤S506,存储设备100使用所获取的最佳阈值电压读取闪存中的数据。
在一个场景中,如图8所示,若本次读取任务对应的读命令数量为14笔,14笔读命令被依次记作F1至F14(图8中仅展示了其中8笔),14笔读命令被仲裁模块105从提交队列115中全部取出后,先添加到命令缓冲队列106中,当本次读取任务的所有命令都取出后,命令处理模块109就会按顺序从命令缓冲队列106中取出这14笔读命令来执行。可以理解的是,由于已经获得了这14笔读命令对应的物理块的最佳阈值电压,因此,命令处理模块109执行这14笔读命令时,直接使用最佳阈值电压表108中的最佳阈值电压来从对应物理地址中读取数据。
如图8所示,具体生成过程为:仲裁模块105将SQ1中的所有读命令都添加到命令缓冲队列106中之后,电压优化模块107会对命令缓冲队列106中的所有读命令对应的物理块(block)按照顺序依次生成对应的最佳阈值电压,并将生成的最佳阈值电压添加到最佳阈值电压表108中。例如,F1对应的闪存物理地址对应的最佳阈值电压集合V1,最佳阈值电压表108中就保存了F4对应的闪存物理地址对应的最佳阈值电压集合V1。如,F1对应的物理地址包括两个块(Block),即B1、B2两个块,则F1对应的闪存物理地址对应的最佳阈值电压集合V4中包含了B1、B2两个块对应的最佳阈值电压。Nand Flash是由很多个块(Block)组成的,每个块里面包含很多层(Layer),每一层是由很多字线Word Line(WL)组成,每一层里面的所有的WL读电压基本相同。Idle的时候通过读Block内每一层的第一条WL,获取所读WL的读电压,以寻找具有最低比特错误率的阈值电压,最终生成当前Block的最佳阈值电压。
相较于现有技术,本实施例提供的一种读取闪存数据的方法至少具有如下的有益效果:
1.本发明只有在确定要读取闪存中的数据时并在读取闪存中的数据之前,才需要生成本次读取任务对应的闪存物理地址对应的最佳阈值电压,即只对接下来将会被主机110(host)读取的数据所对应的闪存物理地址进行提前记录对应的最佳阈值电压,对于接下来不会被主机110(host)读取的数据所对应的闪存物理地址不提前记录对应的最佳阈值电压,从而不会造成对闪存很多不必要的读次数,降低了Read Disturb的风险,而对于接下来将会被主机110(host)读取的数据所对应的闪存物理地址进行提前记录对应的最佳阈值电压,能够加快对读取闪存数据过程中发生错误的处理速度。
2.由于在读取闪存中的数据之前,生成了本次读取任务对应的闪存物理地址对应的最佳阈值电压,因此读取本次读取任务对应的闪存中的数据时,是直接使用所获取的最佳阈值电压读取闪存中的数据,而最佳阈值电压都是经过纠正的读电压,可以节省读取数据过程中纠正错误的过程。
3.本发明中生成的最佳阈值电压还可以用于其他的读取任务中,若后续读取任务涉及对本次读取任务对应闪存物理地址的访问,能够提升后续读取任务的处理效率。
进一步的,所述存储设备100响应于收到的读命令,获取本次读取任务对应的闪存物理地址,具体包括:
步骤S5021,存储设备100接收到主机110发送的新命令处理通知时,从主机110提供的多个提交队列115中优先选择优先级最高的提交队列115作为目标队列,对所述目标队列执行读取读命令的操作;所述目标队列仅用于放置本次读取任务对应的读命令。
具体的,本实施例中,仲裁规则为:从主机110提供的多个提交队列115中优先选择优先级最高的提交队列115作为目标队列,对所述目标队列执行读取读命令的操作。而提交队列115的优先级是由主机110预先设置好的,如图8中,SQ1的优先级最高,SQ2、SQ3、SQ4按顺序优先级依次降低。主机110会将本次读取任务对应的读命令依次从主机队列114Task1中添加到SQ1中。
步骤S5022,存储设备100响应于从目标队列中收到的第一条读命令,将所述读命令添加到命令缓冲队列106中。
在步骤S2022中,仲裁模块105先从SQ1收到第一条读命令F1,然后将F1添加到命令缓冲队列106中。
步骤S5023,存储设备100检测到目标队列不为空时,持续将目标队列中的其余读命令添加到命令缓冲队列106中。
具体的,假设本次读取任务需要从存储设备100中读取14个文件,在取到F1之后,存储设备100检测到目标队列不为空时,持续将目标队列SQ1中的其余读命令添加到命令缓冲队列106中,则依次是F2至F14,每个文件对应一个读命令。
步骤S5024,存储设备100检测到目标队列为空时,根据命令缓冲队列106中的所有读命令,确定本次读取任务对应的闪存物理地址。
本实施例中,在用户使用网盘进行下载的场景中,一次读取任务是一次下载任务,用户在网盘程序的文件浏览界面选择了14个文件,然后触发下载选项生成下载请求并发送给云服务器,作为云服务器的主机110(host)响应于该下载请求,将下载请求中对应的14个文件包含在本次读取任务中,并依次将这14个文件对应的读命令添加到优先级最高的提交队列115SQ1中。接着,执行步骤S5021至步骤S5024,使得存储设备100能够提前确定本次读取任务对应的闪存物理地址,而本次读取任务对应的闪存物理地址是接下来必然需要被读取的,因此可以实现提前对将要被读取的物理块(block)生成最佳阈值电压,以便在发生不可纠正的错误时可以直接使用最佳阈值电压来加快错误的处理时间。
进一步的,所述方法还包括:
步骤S601,主机110基于本次读取任务对应的文件数量,确定目标队列的队尾位置。
如图8所示,在一个示例中,目标队列的深度大于200,作为云服务器的主机110接收到客户端发送的下载请求,确认本次读取任务对应的文件数量为200个,进一步也可以确定接下来分配给本次读取任务的目标队列中的元素数量应该为200,即目标队列SQ1的队尾位置(tail)应该为200,队头位置(head)为1。
步骤S602,主机110将本次读取任务对应的部分文件相应的读命令添加到目标队列之后,将所述目标队列的队尾位置写入到存储设备100上与所述目标队列对应的队尾门铃寄存器。
具体的,主机110将本次读取任务对应的前20个文件相应的读命令添加到目标队列SQ1之后,将200写入到存储设备100上与所述目标队列SQ1对应的队尾门铃寄存器(即tail Doorbell,简称tail DB)使得tail DB=200。在存储设备100中还包括队头门铃寄存器(即head Doorbell,简称head DB),head DB由存储设备100维护,tail DB由主机110维护,存储设备100检测到head DB=200时,可以判断目标队列为空。
步骤S603,主机110将所述目标队列的队尾位置写入到存储设备100上与所述目标队列对应的队尾门铃寄存器之后,在存储设备100执行从目标队列中读取读命令的操作的过程中,主机110持续将与本次读取任务对应的其余读命令添加到目标队列中。
具体的,主机110更新SQ1对应的队尾门铃寄存器使得tail DB=200的同时,也是在通知存储设备100的控制部件102有新的命令需要处理,并且基于本实施例中的仲裁规则,存储设备100接收到主机110发送的新命令处理通知时,仲裁模块105优先从优先级最高的SQ1中读取命令到命令缓冲队列106中。由于在步骤S602中,主机110仅将本次读取任务对应的前20个文件相应的读命令添加到目标队列SQ1中,还有180个并未添加,因此,在步骤S603中,在存储设备100执行从目标队列SQ1中读取读命令的操作的过程中,主机110持续将与本次读取任务对应的其余180个读命令添加到目标队列SQ1中。可以理解的是,本实施例中,主机110无需等待将本次读取任务对应的所有读命令都添加到目标队列中后才能够确定tailDB的值,而是直接根据本次读取任务对应的文件数量确定tail DB的值,从而无需将本次读取任务对应的所有读命令都添加到目标队列之后才能写SQ1对应的队尾门铃寄存器,加快了将数量较大的文件从存储设备100读取到主机110上的速度,从而加快用户的下载速度。而现有技术一般需要先将所有命令添加到队列中,才能够知道命令数量,从而确定tail DB的值,本发明中是以一次下载任务为单位,因此可以提前确定tail DB的值。假设主机110将200个读命令添加到目标队列中的消耗时间为t1,将20个读命令添加到目标队列中的消耗时间为t2,则节省的时间为△t=(t1-t2)。
需要说明的是,当存在多个同为最高优先级的提交队列115情况下,例如,还存在SQ0与SQ1具有相同的最高优先级,当SQ0与SQ1同时存在读命令时,仲裁模块105可以通过轮询的方式,从SQ0与SQ1中取出读命令到存储设备100中的中间暂存队列中,待SQ0与SQ1都为空之后,仲裁模块105再将保存在中间暂存队列中的SQ0与SQ1对应的读命令分为两组,以组为单位将两组读命令分别写入到对应的命令缓冲队列P1、P2中,然后电压优化模块107、命令处理模块109再依次对命令缓冲队列P1、P2中的读命令进行处理,处理的方式可以是上述步骤S502-S506,以及步骤S5021-S5024。可以理解的是,当最高优先级的提交队列115为更多数量时,处理方式类似。
进一步的,所述方法还包括:在主机110持续将与本次读取任务对应的其余读命令添加到目标队列的过程中,主机110将本次读取任务中所有具有同源的分割描述符的文件的读命令,连续地添加到目标队列中。
在一个场景中,当一个文件被分割为多个压缩包时,每个被分割的压缩包都具有同源的分割描述符,分割描述符具体可以是由文件的格式以及文件名组成,例如,当主机110识别多个文件的格式为.rar压缩包格式,并且文件名称的区别仅在于最后一个字符,各文件之间最后一个字符为按照顺序排列的数字,则认为这些文件具有同源的分割描述符,则主机110判断这些压缩包属于同一个文件,主机110会将这些压缩包对应的读命令被连续地添加到目标队列中,以便于属于同一个文件的所有压缩包可以在集中时间下载到客户端,以便用户可以尽快将多个压缩包进行合并形成一个文件,加快用户在客户端对该文件的处理流程。
在一个实施例中,所述方法还包括:
步骤S701,存储设备100在第一时间节点接收到主机110发送的针对目标队列的第一命令处理通知之后,在第二时间节点又接收到主机110发送的针对同一目标队列的第二命令处理通知时,计算第二时间节点与第一时间节点的时间差;
步骤S702,存储设备100检测到所述时间差小于预设时长时,判断所述目标队列是否处于执行中状态;所述执行中状态为目标队列对应的读命令全部被读取完毕但未被全部执行完的状态。
步骤S703,存储设备100检测到所述目标队列处于执行中状态时,将第二命令处理通知对应的读命令划分为与第一命令处理通知对应的读命令相同的执行优先级。
步骤S704,存储设备100根据第二命令处理通知对应的读命令的执行优先级控制对应的读命令的执行顺序。
举例来说,如果存储设备100中有3组命令需要执行,经过电压优化模块107处理后,这3组命令都分别被从相应的中间暂存队列中写入到对应的命令缓冲队列106中,执行次序(即执行优先级)分别为1、2、3,如果按照现有技术,来了第4组命令(即第二命令处理通知对应的读命令),执行次序应该排在第4,即被写入到第4组命令缓冲队列106中。但是如果第4组命令是第1组的一部分,则为了集中时间下载,应该将第4组命令划分为第1组,也就是将第4组命令写入到第1组命令缓冲队列106中,优先于2、3组执行,实现集中时间下载。从用户的角度来看,第1组命令是A用户触发下载按钮之后发送的下载请求对应的读命令,接着A用户觉得漏选了某些文件,于是又马上选择新的文件并触发下载按钮发送新的下载请求,此时对应第4组命令,显然属于同一个用户在极短时间内触发的两次下载任务,应该将两次下载任务对应的文件在集中的时间提供给用户,以便用户完成对这些文件的处理。为了实现该目的,本实施例中,设计了预设时长,由作为云服务器的主机110根据同一个用户两次下载请求的时间是否小于预设时长来判断是否应该集中时间将两次下载请求对应的文件提供给用户,如果主机110检测到同一个用户在预设时长之内发送了两次下载请求,也会同样在预设时长之内对同一个目标队列对应的门铃寄存器进行更新,以在预设时长之内通知存储设备100这个目标队列又有新的命令需要处理。考虑到存储设备100并无法判断同一个目标队列中的两次读命令是否属于同一个用户,因此,本实施例对仲裁规则做了改进,即步骤S702至步骤S703,如果符合步骤S702至步骤S703,则说明同一个目标队列中的两次读命令属于同一个用户,于是存储设备100将第二命令处理通知对应的读命令划分为与第一命令处理通知对应的读命令相同的执行优先级。可以理解的是,对于属于其他用户的下载请求,主机110在预设时长之内不会将对应的读命令写入该目标队列。例如,若A用户当前下载任务使用了SQ1队列,预设时长为10秒,则在20之内,不会允许其他用户的下载任务使用SQ1队列。
假设有100个同为最高优先级的提交队列115,会统计这100个提交队列115的使用次数,每次有新的下载任务需要分配提交队列115时,会优先选择被使用次数最少的提交队列115来使用。其目的是,保证正在使用的提交队列115尽可能少的受到干扰。举例来说,SQ1队列一旦被使用,其使用次数加1,则其他提交队列115的使用次数就是比较少的,优先选择被使用次数最少的提交队列115来使用,可以避免SQ1正在使用过程中,被添加入其他的命令,避免干扰。
在一个实施例中,提供了一种电子设备,包括:存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时执行上述一种读取闪存数据的方法的步骤。此处一种读取闪存数据的方法的步骤可以是上述各个实施例的一种读取闪存数据的方法中的步骤。
在一个实施例中,提供了一种计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使计算机执行上述一种读取闪存数据的方法的步骤。此处一种读取闪存数据的方法的步骤可以是上述各个实施例的一种读取闪存数据的方法中的步骤。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一非易失性计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和/或易失性存储器。非易失性存储器可包括只读存储器(ROM)、可编程ROM(PROM)、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)或闪存。易失性存储器可包括随机存取存储器(RAM)或者外部高速缓冲存储器。作为说明而非局限,RAM以多种形式可得,诸如静态RAM(SRAM)、动态RAM(DRAM)、同步DRAM(SDRAM)、双数据率SDRAM(DDRSDRAM)、增强型SDRAM(ESDRAM)、同步链路(Synchlink)DRAM(SLDRA)、存储器总线(Rambus)直接RAM(RDRA)、直接存储器总线动态RAM(DRDRAM)、以及存储器总线动态RAM(RDRAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。

Claims (10)

1.一种读取闪存数据的方法,其特征在于,所述方法包括:
存储设备响应于收到的读命令,获取本次读取任务对应的闪存物理地址;
存储设备检测到读取本次读取任务对应的闪存物理地址对应的数据中存在不可纠正的错误时,判断是否存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压;其中,所述最佳阈值电压是在由存储设备在空闲时,基于获取到的本次读取任务对应的闪存物理地址而生成的;
若存储设备检测到存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压,则使用已经生成的最佳阈值电压读取闪存中的数据。
2.根据权利要求1所述的一种读取闪存数据的方法,其特征在于,所述存储设备响应于收到的读命令,获取本次读取任务对应的闪存物理地址,具体包括:
存储设备接收到主机发送的新命令处理通知时,从主机提供的多个提交队列中优先选择优先级最高的提交队列作为目标队列,对所述目标队列执行读取读命令的操作;所述目标队列仅用于放置本次读取任务对应的读命令;
存储设备响应于从目标队列中收到的第一条读命令,将所述读命令添加到命令缓冲队列中;
存储设备检测到目标队列不为空时,持续将目标队列中的其余读命令添加到命令缓冲队列中;
存储设备检测到目标队列为空时,根据命令缓冲队列中的所有读命令,确定本次读取任务对应的闪存物理地址。
3.一种读取闪存数据的方法,其特征在于,所述方法包括:
存储设备响应于收到的读命令,获取要访问的闪存物理地址,以读取所述闪存物理地址对应的数据;
存储设备检测到读取到的闪存物理地址对应的数据中存在不可纠正的错误时,判断是否存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压;其中,所述最佳阈值电压是在由存储设备在空闲时,基于一个时长周期内被读取次数大于预设次数的闪存物理地址而生成的;
若存储设备检测到存在不可纠正错误的数据对应的物理地址已经生成的最佳阈值电压,则使用已经生成的最佳阈值电压读取闪存中的数据。
4.根据权利要求3所述的一种读取闪存数据的方法,其特征在于,存储设备在空闲时,基于一个时长周期内被读取次数大于预设次数的闪存物理地址生成所述最佳阈值电压,具体包括:
存储设备将在一个时长周期内被读取次数大于预设次数的闪存物理地址,按照被读次数从高到低进行排序,得到读次数排序结果;
存储设备在空闲时,按照所述读次数排序结果,优先为排序靠前的闪存物理地址生成最佳阈值电压。
5.根据权利要求3所述的一种读取闪存数据的方法,其特征在于,所述方法还包括:
存储设备获取闪存的数据保存时间;
存储设备在空闲时,对数据保存时间与数据保存期限的差值小于时长阈值的闪存物理地址执行读操作。
6.根据权利要求5所述的一种读取闪存数据的方法,其特征在于,存储设备在空闲时,对数据保存时间与数据保存期限的差值小于时长阈值的闪存物理地址执行读操作,具体包括:
存储设备对数据保存时间与数据保存期限的差值小于时长阈值的闪存物理地址,按照数据保存时间的时长从长到短进行排序,得到时长排序结果;
存储设备在空闲时,按照所述时长排序结果,优先对排序靠前的闪存物理地址执行读操作。
7.一种读取闪存数据的方法,其特征在于,所述方法包括:
存储设备响应于收到的读命令,获取本次读取任务对应的闪存物理地址;
存储设备生成本次读取任务对应的闪存物理地址对应的最佳阈值电压,并保存在最佳阈值电压表中;其中,所述最佳阈值电压为闪存中相应物理地址对应的最低比特错误率的阈值电压;
存储设备使用所获取的最佳阈值电压读取闪存中的数据。
8.根据权利要求7所述的一种读取闪存数据的方法,其特征在于,所述存储设备响应于收到的读命令,获取本次读取任务对应的闪存物理地址,具体包括:
存储设备接收到主机发送的新命令处理通知时,从主机提供的多个提交队列中优先选择优先级最高的提交队列作为目标队列,对所述目标队列执行读取读命令的操作;所述目标队列仅用于放置本次读取任务对应的读命令;
存储设备响应于从目标队列中收到的第一条读命令,将所述读命令添加到命令缓冲队列中;
存储设备检测到目标队列不为空时,持续将目标队列中的其余读命令添加到命令缓冲队列中;
存储设备检测到目标队列为空时,根据命令缓冲队列中的所有读命令,确定本次读取任务对应的闪存物理地址。
9.根据权利要求8所述的一种读取闪存数据的方法,其特征在于,所述方法还包括:在存储设备执行读取读命令的操作的过程中,主机持续将与本次读取任务对应的其余读命令添加到目标队列中。
10.根据权利要求9所述的一种读取闪存数据的方法,其特征在于,所述方法还包括:在主机持续将与本次读取任务对应的其余读命令添加到目标队列的过程中,主机将本次读取任务中所有具有同源的分割描述符的文件的读命令,连续地添加到目标队列中。
CN202311484659.4A 2023-11-09 2023-11-09 一种读取闪存数据的方法 Active CN117215503B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311484659.4A CN117215503B (zh) 2023-11-09 2023-11-09 一种读取闪存数据的方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311484659.4A CN117215503B (zh) 2023-11-09 2023-11-09 一种读取闪存数据的方法

Publications (2)

Publication Number Publication Date
CN117215503A true CN117215503A (zh) 2023-12-12
CN117215503B CN117215503B (zh) 2024-06-11

Family

ID=89046653

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311484659.4A Active CN117215503B (zh) 2023-11-09 2023-11-09 一种读取闪存数据的方法

Country Status (1)

Country Link
CN (1) CN117215503B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150134857A1 (en) * 2013-11-14 2015-05-14 Sandisk Technologies Inc. System and Method for I/O Optimization in a Multi-Queued Environment
US9236147B1 (en) * 2013-12-12 2016-01-12 SK Hynix Inc. Threshold carrying for solid state storage
CN106448737A (zh) * 2016-09-30 2017-02-22 北京忆芯科技有限公司 读取闪存数据的方法、装置以及固态驱动器
CN109065092A (zh) * 2017-02-21 2018-12-21 北京忆恒创源科技有限公司 Nvm芯片的读阈值设置方法及其装置
CN112599177A (zh) * 2020-12-23 2021-04-02 深圳大普微电子科技有限公司 一种阈值电压的管理方法、读取闪存数据的方法
CN113076218A (zh) * 2020-07-03 2021-07-06 北京忆芯科技有限公司 Nvm芯片读数据错误快速处理方法及其控制器
CN113096711A (zh) * 2019-12-23 2021-07-09 北京忆恒创源科技有限公司 基于卡尔曼滤波的读阈值跟踪方法与装置
CN113409854A (zh) * 2020-03-16 2021-09-17 爱思开海力士有限公司 数据存储装置及其操作方法

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20150134857A1 (en) * 2013-11-14 2015-05-14 Sandisk Technologies Inc. System and Method for I/O Optimization in a Multi-Queued Environment
US9236147B1 (en) * 2013-12-12 2016-01-12 SK Hynix Inc. Threshold carrying for solid state storage
CN106448737A (zh) * 2016-09-30 2017-02-22 北京忆芯科技有限公司 读取闪存数据的方法、装置以及固态驱动器
CN109065092A (zh) * 2017-02-21 2018-12-21 北京忆恒创源科技有限公司 Nvm芯片的读阈值设置方法及其装置
CN113096711A (zh) * 2019-12-23 2021-07-09 北京忆恒创源科技有限公司 基于卡尔曼滤波的读阈值跟踪方法与装置
CN113409854A (zh) * 2020-03-16 2021-09-17 爱思开海力士有限公司 数据存储装置及其操作方法
CN113076218A (zh) * 2020-07-03 2021-07-06 北京忆芯科技有限公司 Nvm芯片读数据错误快速处理方法及其控制器
CN112599177A (zh) * 2020-12-23 2021-04-02 深圳大普微电子科技有限公司 一种阈值电压的管理方法、读取闪存数据的方法

Also Published As

Publication number Publication date
CN117215503B (zh) 2024-06-11

Similar Documents

Publication Publication Date Title
US10776263B2 (en) Non-deterministic window scheduling for data storage systems
US11150836B2 (en) Deterministic optimization via performance tracking in a data storage system
US11704239B2 (en) Garbage collection method for storage medium, storage medium, and program product
US8990480B2 (en) Semiconductor memory device and computer program product
CN108733306B (zh) 一种文件合并方法及装置
US8397017B2 (en) Controller and data storage device
US9772790B2 (en) Controller, flash memory apparatus, method for identifying data block stability, and method for storing data in flash memory apparatus
US11853599B2 (en) Memory system and information processing system
US20180276123A1 (en) Memory system and control method
TWI703566B (zh) 快閃記憶體控制器及相關的存取方法及電子裝置
JP6167646B2 (ja) 情報処理装置、制御回路、制御プログラム、および制御方法
WO2016101145A1 (zh) 一种控制器、识别数据块稳定性的方法和存储***
US10776265B2 (en) Data storage devices and data processing methods
US10872015B2 (en) Data storage system with strategic contention avoidance
CN111694806B (zh) 一种事务日志的缓存方法、装置、设备和存储介质
CN117215503B (zh) 一种读取闪存数据的方法
EP4198745A1 (en) Automatic deletion in a persistent storage device
CN114974365A (zh) Ssd有限窗口数据去重识别方法、装置和计算机设备
US20200004448A1 (en) Data storage system die set mapping
US8503241B2 (en) Electronic apparatus and data reading method
CN107436726B (zh) 数据写入方法、存储控制器、计算设备以及存储装置
CN110888588A (zh) 快闪记忆体控制器及相关的访问方法及电子装置
US11886335B2 (en) Memory system and controlling method of performing rewrite operation at maximum rewrite speed
CN110941571B (zh) 闪存控制器及相关的存取方法及电子装置
CN113703671B (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
GR01 Patent grant
GR01 Patent grant