CN114296656A - 平面编程方法及其闪存设备 - Google Patents

平面编程方法及其闪存设备 Download PDF

Info

Publication number
CN114296656A
CN114296656A CN202111670976.6A CN202111670976A CN114296656A CN 114296656 A CN114296656 A CN 114296656A CN 202111670976 A CN202111670976 A CN 202111670976A CN 114296656 A CN114296656 A CN 114296656A
Authority
CN
China
Prior art keywords
flash memory
memory device
programming
programming mode
request
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.)
Pending
Application number
CN202111670976.6A
Other languages
English (en)
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 Dapu Microelectronics Co Ltd
Original Assignee
Shenzhen Dapu Microelectronics 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 Dapu Microelectronics Co Ltd filed Critical Shenzhen Dapu Microelectronics Co Ltd
Priority to CN202111670976.6A priority Critical patent/CN114296656A/zh
Publication of CN114296656A publication Critical patent/CN114296656A/zh
Priority to PCT/CN2022/139078 priority patent/WO2023125016A1/zh
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Read Only Memory (AREA)

Abstract

本申请实施例涉及存储设备应用领域,公开了一种平面编程方法及其闪存设备,其中,该平面编程方法,应用于闪存设备,包括:实时计算闪存设备的IO压力;根据闪存设备的IO压力,动态调整闪存设备的编程模式,其中,每一编程模式对应一种编程粒度。通过实时计算闪存设备的IO压力,根据该IO压力,动态调整闪存设备的编程模式,本申请能够实现在不影响读写带宽的情况下,提高非带宽业务的IO延迟和服务质量,提高闪存设备的整体性能。

Description

平面编程方法及其闪存设备
技术领域
本申请涉及存储设备应用领域,特别是涉及一种平面编程方法及其闪存设备。
背景技术
闪存设备,例如:固态硬盘(Solid State Drives,SSD),是采用固态电子存储芯片阵列而制成的硬盘,固态硬盘包括控制单元和存储单元(FLASH存储芯片或DRAM存储芯片)。
NANDFlash为了提高命令并发,支持多平面编程(multi-plane program)方式,多平面编程能够提高编程效率,最终提高写带宽,很多固态硬盘都里面都使用多平面编程的方式。然而在很多非带宽业务场景,写带宽并不高,业务场景更多关心的是其他性能指标,如读延迟和服务质量(Qualityofservice,Qos),特别是读IO的Qos。在队列深度低的混合读写IO模型中,多平面编程对Qos没有多大帮助,反而是单平面编程对Qos更友好,原因在于,单平面编程对于Nand Flash总线占用时间短,读IO被延迟的时间更短。但是多平面编程写带宽更高,如果使用单平面编程,写带宽会降低。
基于此,现有技术亟待改进。
发明内容
本申请实施例提供一种平面编程方法及其闪存设备,其解决了使用单一编程模式导致的闪存设备的整体性能不足的问题,实现在不影响读写带宽的情况下,提高非带宽业务的IO延迟和服务质量,提高闪存设备的整体性能。
为解决上述技术问题,本申请实施例提供以下技术方案:
第一方面,本申请实施例提供一种平面编程方法,应用于闪存设备,方法包括:
实时计算闪存设备的IO压力;
根据闪存设备的IO压力,动态调整闪存设备的编程模式,其中,每一编程模式对应一种编程粒度。
在一些实施例中,根据闪存设备的IO压力,动态调整闪存设备的编程模式,包括:
判断闪存设备的IO压力是否大于第一IO压力阈值;
若是,则将闪存设备的编程模式调整为第一平面编程模式,其中,第一平面编程模式的编程粒度>第一粒度阈值;
若否,则将闪存设备的编程模式调整为第二平面编程模式,其中,第二平面编程模式的编程粒度≤第一粒度阈值。
在一些实施例中,根据闪存设备的IO压力,动态调整闪存设备的编程模式,包括:
测试闪存设备处于每一种编程模式下一一对应的最大IO带宽;
根据闪存设备的IO压力,结合每一种编程模式一一对应的最大IO带宽,动态调整闪存设备的编程模式。
在一些实施例中,根据闪存设备的IO压力,结合每一种编程模式一一对应的最大IO带宽,动态调整闪存设备的编程模式,包括:
根据每一种编程模式一一对应的最大IO带宽,确定每一种编程模式对应的带宽范围;
若闪存设备的IO压力处于某一编程模式对应的带宽范围,则将该编程模式确定为闪存设备的编程模式,其中,闪存设备的IO压力小于确定的编程模式的最大IO带宽。
在一些实施例中,方法还包括:
在接收到IO请求之后,基于编程模式,处理IO请求。
在一些实施例中,基于编程模式,处理IO请求,包括:
设置状态变量,其中,状态变量包括第一状态变量、第二状态变量和第三状态变量,第一状态变量表征当前执行的步骤号,第二状态变量表征剩余的步骤数,第三状态变量用于表征编程模式;
根据编程模式,调整状态变量,以处理IO请求。
在一些实施例中,IO请求包括写IO请求,根据编程模式,调整状态变量,以处理IO请求,包括:
获取闪存设备的平面的数量,并确定闪存设备的编程模式,其中,闪存设备的平面的数量不小于四;
在第一阶段,根据闪存设备的编程模式,确定第一状态变量的值、第二状态变量的值,并将写调度给硬件,以执行第一数量的平面的编程,其中,第一数量等于确定的编程模式对应的编程粒度;
在第二阶段,硬件完成第一数量的平面的编程,并调整第一状态变量的值、第二状态变量的值;
重复上述第一阶段和第二阶段的操作,直至完成所有平面的编程。
在一些实施例中,状态变量还包括写请求变量,写请求变量的取值为第一取值或第二取值,方法还包括:
在接收到写IO请求之后,确定写请求变量的取值,其中,若该写IO请求为新的IO请求,则所述写请求变量的取值为第一取值,若该写IO请求为上一次的IO请求,则所述写请求变量的取值为第二取值;
若写请求变量的取值为第一取值,则计算闪存设备的IO压力,根据闪存设备的IO压力,确定闪存设备的编程模式,并基于编程模式,处理IO请求。
在一些实施例中,方法还包括:
若写请求变量的取值为第二取值,则根据第三状态变量,确定闪存设备的编程模式,并基于第一状态变量,继续处理剩余平面的编程。
在一些实施例中,编程粒度与闪存设备的平面的数量成倍数关系。
第二方面,本申请实施例提供一种闪存设备,包括:
至少一个处理器;以及
与至少一个处理器通信连接的存储器;其中,存储器存储有可被至少一个处理器执行的指令,指令被至少一个处理器执行,以使至少一个处理器能够用于执行如第一方面的平面编程方法。
第三方面,本申请实施例还提供了一种非易失性计算机可读存储介质,计算机可读存储介质存储有计算机可执行指令,计算机可执行指令用于使闪存设备能够执行如第一方面的平面编程方法。
本申请实施例的有益效果是:区别于现有技术的情况下,本申请实施例提供的一种平面编程方法,应用于闪存设备,方法包括:实时计算闪存设备的IO压力;根据闪存设备的IO压力,动态调整闪存设备的编程模式,其中,每一编程模式对应一种编程粒度。通过实时计算闪存设备的IO压力,根据该IO压力,动态调整闪存设备的编程模式,本申请能够实现实现在不影响读写带宽的情况下,提高非带宽业务的IO延迟和服务质量,提高闪存设备的整体性能。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是本申请实施例提供的一种闪存设备的结构示意图;
图2是本申请实施例提供的一种闪存设备的平面的示意图;
图3是本申请实施例提供的一种数据传输时间和等待完成时间的示意图;
图4是本申请实施例提供的一种多平面编程的编程时间的示意图;
图5是本申请实施例提供的一种平面编程方法的流程示意图;
图6是图5中的步骤S20的一种细化流程示意图;
图7是图5中的步骤S20的另一种细化流程示意图;
图8是图7中的步骤S22的细化流程示意图;
图9是本申请实施例提供的一种闪存设备的固件***的结构示意图;
图10是本申请实施例提供的一种处理IO请求的流程示意图;
图11是图10中的步骤S92的细化流程示意图;
图12a是本申请实施例提供的一种IO调度场景的示意图;
图12b是本申请实施例提供的另一种IO调度场景的示意图;
图13是本申请实施例提供的一种闪存设备的结构示意图。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本申请,并不用于限定本申请。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
需要说明的是,如果不冲突,本申请实施例中的各个特征可以相互结合,均在本申请的保护范围之内。另外,虽然在装置示意图中进行了功能模块划分,在流程图中示出了逻辑顺序,但是在某些情况下,可以以不同于装置中的模块划分,或流程图中的顺序执行所示出或描述的步骤。再者,本申请所采用的“第一”、“第二”、“第三”等字样并不对数据和执行次序进行限定,仅是对功能和作用基本相同的相同项或相似项进行区分。
下面结合说明书附图具体说明本申请的技术方案:
请参阅图1,图1是本申请实施例提供的一种闪存设备的结构示意图;
如图1所示,闪存设备100包括闪存介质110以及与闪存介质110连接的控制器120。其中,闪存设备100通过有线或无线的方式与主机200通信连接,用以实现数据交互。
闪存介质110,作为闪存设备100的存储介质,也称作闪存、Flash、Flash存储器或Flash颗粒,属于存储器件的一种,是一种非易失性存储器,在没有电流供应的条件下也能够长久地保存数据,其存储特性相当于硬盘,使得闪存介质110得以成为各类便携型数字设备的存储介质的基础。
控制器120,包括数据转换器121、处理器122、缓存器123、闪存控制器124以及接口125。
数据转换器121,分别与处理器122和闪存控制器124连接,数据转换器121用于将二进制数据转换为十六进制数据,以及将十六进制数据转换为二进制数据。具体地,当闪存控制器124向闪存介质110写入数据时,通过数据转换器121将待写入的二进制数据转换为十六进制数据,然后再写入闪存介质110。当闪存控制器124从闪存介质110读取数据时,通过数据转换器121将闪存介质110中存储的十六进制数据转换为二进制数据,然后从二进制数据页寄存器中读取转换后的数据。其中,数据转换器121可以包括二进制数据寄存器和十六进制数据寄存器。二进制数据寄存器可以用于保存由十六进制转换为二进制后的数据,十六进制数据寄存器可以用于保存由二进制转换为十六进制后的数据。
处理器122,分别与数据转换器121、缓存器123、闪存控制器124以及接口125连接,其中,处理器122与数据转换器121、缓存器123、闪存控制器124以及接口125可以通过总线或者其他方式连接,处理器用于运行存储在缓存器123中的非易失性软件程序、指令以及模块,从而实现本申请任一方法实施例。
缓存器123,主要用于缓存主机200发送的读/写指令以及根据主机200发送的读/写指令从闪存介质110获取的读数据或者写数据。
闪存控制器124,与闪存介质110、数据转换器121、处理器122以及缓存器123连接,用于访问后端的闪存介质110,管理闪存介质110的各种参数和数据I/O;或者,用于提供访问的接口和协议,实现对应的SAS/SATAtarget协议端或者NVMe协议端,获取主机200发出的I/O指令并解码和生成内部私有数据结果等待执行;或者,用于负责闪存转换层(Flashtranslation layer,FTL)的核心处理。
接口125,连接主机200以及数据转换器121、处理器122以及缓存器123,用于接收主机200发送的数据,或者,接收处理器122发送的数据,实现主机200与处理器122之间的数据传输,接口125可以为SATA-2接口、SATA-3接口、SAS接口、MSATA接口、PCI-E接口、NGFF接口、CFast接口、SFF-8639接口和M.2NVME/SATA协议。
请参阅图2,图2是本申请实施例提供的一种闪存设备的平面的示意图;
如图2所示,一个LUN有很多block,将这些Block划分多个plane,例如:图2中的LUN0包括4个plane。Plane是物理上的一个存在,存储芯片内部对于每个plane都有对应的page register/cache register,主要作用提交芯片内部的并发。
多平面操作就是同时对多个plane(block)进行操作,比如:多平面编程就可以同时对plane0-plane3进行编程,对应的block就是block n,block n+1,block n+2,block n+3,n是4的倍数。对于4个plane的存储芯片,也支持单平面编程,也就是每次只对一个block进行编程。也支持两平面编程,即可以进行2个plane编程,也就是每次对两个block进行编程。例如:一个写请求需要对Block0/1/2/3进行编程,使用2个plane的编程方式,先对block0/1进行编程,完成之后,再对block2/3进行编程。
具体的,对写来说,主控先把数据写入第一个Plane的Cache Register当中,数据保持在那里,并不立即写入闪存介质,等待主控把同一个LUN上的另外一个或者几个Plane上的数据传输到相应的Cache Register当中,再统一写入闪存介质。假设写入一个Page的时间为1.5ms,传输一个Page的时间为50μs:如果按原始的Single Plane操作,写两个Page需要至少(1.5ms+50μs)x2;但如果按照Dual-Plane操作,由于隐藏了一个Page的写入时间,写入两个Page只要1.5ms+50x2μs,缩减了几乎一半的时间,写入速度几乎翻番。对读来说,使用Dual-Plane操作,两个不同Plane上的Page数据会在一个闪存读取时间加载到各自的Cache Register当中,从而用一个读取时间读取到两个Page的数据,使得读取速度加快。假设读取时间和数据传输时间相同,都是50μs,Single Plane读取传输两个Page需要50μsx 4=200μs,Dual-Plane则需要50μs x 2+50μs=150μs,时间为前者的75%,读取速度也有很大的提升。
目前,NANDFlash为了提高命令并发,支持多平面编程(multi-plane program),多平面编程能够提高写的速度。比如一个TLC的颗粒有2个plane,每个page有16K,tProgram是1ms,需要对2个plane的page进行编程。如果使用2次单平面编程(single plane program),总共需要2ms,如果使用多平面编程(multi-plane program),则只需要1ms时间。
可以理解的是,NAND Flash编程的时间由两部分组成,数据传输时间(tTransfer)和等待完成时间(tProgram)。
请参阅图3,图3是本申请实施例提供的一种数据传输时间和等待完成时间的示意图。
如图3所示,数据传输时间(tTransfer)和等待完成时间(tProgram)之和可视为NAND Flash的编程时间。
请再参阅图4,图4是本申请实施例提供的一种多平面编程的编程时间的示意图;
其中,多平面编程需要的编程时间为:N*tTransfer+tProgram,其中,N为一次性编程的plane的数量。
如图4所示,两个plane一次性完成编程,需要的时间是2*tTransfer+tProgram。
可以看出,多平面编程总的时间比单平面编程时间短,所以写带宽要高;但是单次占用总线时间要长,多平面编程占用时间是2*tTransfer+tProgram,而单平面编程占用时间是tTransfer+tProgram,比多平面编程要短tTransfer,如果这个时间点刚好有一个读IO,该读IO需要等待编程完成,在单平面编程的模式下,读IO需要等待时间短tTransfer,因此读IO的延迟也会短tTransfer。
可以理解的是,单次占用总线时间指的是一次编程需要占用的总线时间,例如:假定一个plane的数据是48K,两个plane的数据量就是96K。单平面编程需要传输48K数据,而多平面编程需要传输96K数据,所以多平面编程在NAND总线需要占用更长的时间。
对于存储设备的性能指标,除了通常的读写带宽,延迟和服务质量(Qualityofservice,Qos)也是非常重要的指标。通常固态硬盘内部对于不同IO类型会按照不同优先级进行调度,读IO的优先级会高于写IO。当写IO已经占用NANDFlash总线时候,读IO需要等写IO完成才能调度,所以写IO占用总线时间长度会影响读IO的Qos,mulit-planeprogram时间比single plane program长,对读IO的Qos影响更大。
基于此,本申请实施例提供一种平面编程方法及其闪存设备,提高闪存设备的整体性能。
请参阅图5,图5是本申请实施例提供的一种平面编程方法的流程示意图;
其中,该平面编程方法,应用于闪存设备,例如:固态硬盘,具体的,该平面编程方法的执行主体为闪存设备的一个或多个处理器。
如图5所示,该平面编程方法,包括:
步骤S10:实时计算闪存设备的IO压力;
具体的,实时计算闪存设备的IO压力,包括:在固定时间间隔内,统计读IO和写IO在某一时间段处理的数目,以计算闪存设备的IO压力,即读写带宽。例如:设置定时间隔是100ms,在某个100ms时间内,固件处理的1024个96K写IO,那么可以计算出写压力是1024*96K*1000ms/100ms=960MB/s。
步骤S20:根据闪存设备的IO压力,动态调整闪存设备的编程模式,其中,每一编程模式对应一种编程粒度。
具体的,请参阅图6,图6是图5中的步骤S20的一种细化流程示意图;
如图6所示,该步骤S20:根据闪存设备的IO压力,动态调整闪存设备的编程模式,包括:
步骤S201:获取闪存设备的IO压力;
具体的,闪存设备的IO压力由上述的步骤S10计算得到。
步骤S202:判断闪存设备的IO压力是否大于第一IO压力阈值;
具体的,第一IO压力阈值为预设的IO压力阈值,其根据闪存设备的实际性能需求来设置。若闪存设备的IO压力大于第一IO压力阈值,则进入步骤S203;若闪存设备的IO压力不大于第一IO压力阈值,则进入步骤S204。
步骤S203:将闪存设备的编程模式调整为第一平面编程模式,其中,第一平面编程模式的编程粒度>第一粒度阈值;
具体的,第一粒度阈值为预设的粒度阈值,假设第一粒度阈值为一,则在闪存设备的IO压力大于第一IO压力阈值时,将闪存设备的编程模式调整为两平面编程模式或多平面编程模式。
步骤S204:将闪存设备的编程模式调整为第二平面编程模式,其中,第二平面编程模式的编程粒度≤第一粒度阈值。
具体的,第一粒度阈值为预设的粒度阈值,假设第一粒度阈值为一,则在闪存设备的IO压力小于或等于第一IO压力阈值时,将闪存设备的编程模式调整为单平面编程模式。
在本申请实施例中,通过设置第一IO压力阈值,判断闪存设备的IO压力是否大于第一IO压力阈值,以选择对应的平面编程模式,本申请能够实现在不影响读写带宽的情况下,提高非带宽业务的IO延迟和服务质量,提高闪存设备的整体性能。
具体的,请再参阅图7,图7是图5中的步骤S20的另一种细化流程示意图;
如图7所示,该步骤S20:根据闪存设备的IO压力,动态调整闪存设备的编程模式,其中,每一编程模式对应一种编程粒度,包括:
步骤S21:测试闪存设备处于每一种编程模式下一一对应的最大IO带宽;
具体的,每一种编程模式对应一种编程粒度,编程粒度指的是一次性进行编程的平面(plane)的数量,其中,编程粒度与该闪存设备的平面的总数量有关。可以理解的是,编程粒度≤闪存设备的平面的总数量。
通过测试闪存设备处于每一编程模式下一一对应的最大IO带宽,例如:闪存设备的plane的个数是2,此时,该闪存设备的编程粒度包括1和2,即单平面编程和两平面编程,此时,测试闪存设备处于单平面编程和两平面编程的最大IO带宽,如下表1所示:
编程模式 最大IO带宽
单平面编程(singleplane) BW_P1
两平面编程(twoplane) BW_P2
表1
步骤S22:根据闪存设备的IO压力,结合每一种编程模式一一对应的最大IO带宽,动态调整闪存设备的编程模式。
具体的,请再参阅图8,图8是图7中的步骤S22的细化流程示意图;
如图8所示,该步骤S22:根据闪存设备的IO压力,结合每一种编程模式一一对应的最大IO带宽,动态调整闪存设备的编程模式,包括:
步骤S221:根据每一种编程模式一一对应的最大IO带宽,确定每一种编程模式对应的带宽范围;
可以理解的是,IO带宽越大,为了满足写的性能,一次性编程需要的plane越大,则编程粒度越大。因此,假设编程模式按照编程粒度从小到大的顺序排列,则可以确定第一编程模式,第二编程模式,…,第N编程模式,其中,N为编程粒度,则某一编程模式对应的带宽范围为(上一编程模式的最大IO带宽,本编程模式的最大IO带宽),其中,第一编程模式的带宽范围为(0,第一编程模式的最大IO带宽),由此,可以确定每一编程模式一一对应的带宽范围。
步骤S222:若闪存设备的IO压力处于某一编程模式对应的带宽范围,则将该编程模式确定为闪存设备的编程模式,其中,闪存设备的IO压力小于确定的编程模式的最大IO带宽。
具体的,获取闪存设备的IO压力,若闪存设备的IO压力处于某一编程模式对应的带宽范围,则将该编程模式确定为闪存设备的编程模式,其中,闪存设备的IO压力小于确定的编程模式的最大IO带宽。
在本申请实施例中,方法还包括:根据性能目标,确定对应的编程模式,以选择对应的编程粒度,该性能目标包括读延迟和服务质量。
例如:假定某个闪存设备的plane的数量为2,而写带宽是4GB/s,这个带宽是在两平面编程下该闪存设备能达到的带宽,此时可以先使用单平面编程,然后测试该闪存设备的带宽,假定是2GB/s。此时,固件内部如果识别到当前IO压力小于2GB/s,则切换到单平面编程。
而性能目标为闪存设备的实际性能需求,假如关注1GB/s写带宽下的读延迟和服务质量,显然1GB/s比2GB/s小,单平面编程完全可以达到,固件实际会使用1GB/s作为第一带宽阈值,而不是2GB/s。也就是说,此时,若闪存设备的IO压力小于第一带宽阈值,则调整为单平面编程,若闪存设备的IO压力大于第一带宽阈值,则调整为两平面编程。可以理解的是,考虑到需留一定的预留空间,第一带宽阈值小于单平面编程模式下对应的最大IO带宽。
在本申请实施例中,编程粒度的取值与IO带宽成正相关,具体的,根据闪存设备的IO带宽,确定编程粒度,其中,IO带宽越高,编程粒度越大。假设NANDFlash的plane的个数是N,则编程粒度的取值为1,2,…,N,其中,N为正整数且N≥2。例如:假设NANDFlash的plane的个数N=6,理论上可以选择1,2,3,4,5,6。一般原则是IO带宽越低,编程粒度的取值越低,使得既不影响写的性能,也会减少读延迟(latency)和提高服务质量(Qos)。在实际应用上,根据性能目标选择对应的编程粒度,该性能目标包括读延迟和服务质量,例如:若IO压力较低,则满足低IO压力下的性能目标,即读延迟和服务质量。比如,根据性能目标,设置两个编程粒度的取值,比如:取值为6和1。在IO压力较高时,确定编程粒度为6,以保证写带宽;而在IO压力较低时,确定编程粒度为1,以减少读延迟(latency)和提高服务质量。
在本申请实施例中,由于利用了闪存设备的实时IO压力,动态调整闪存设备的编程模式,本申请能够实现实现在不影响读写带宽的情况下,提高非带宽业务的IO延迟和服务质量,提高闪存设备的整体性能。
在本申请实施例中,在确定动态调整闪存设备的编程模式的方式之后,方法还包括:
在接收到IO请求之后,基于编程模式,处理IO请求。
具体的,基于当前确定的编程模式,处理接收到的IO请求。
请再参阅图9,图9是本申请实施例提供的一种闪存设备的固件***的结构示意图;
其中,闪存设备包括闪存控制器,闪存控制器包括固件***,固件***用于连接主机(HOST)和闪存阵列,实现数据IO的处理。
如图9所示,该固件***80,包括:
前端模块91,即(Front End,FE),连接数据存储接口,用于处理和主机***的通信协议以及分发主机***发送的数据存储操作,即用于获取主机命令,以产生IO操作,其中,前端模块还用于负责和主机(Host)的通信协议,主机命令、固态硬盘命令的解析等操作;
数据处理模块92,即(Data Process,DP),连接前端模块91,用于数据通路的处理,具体的,用于负责命令级数据处理,比如缓存数据等;
映射表管理模块93,即闪存算法模块,又称闪存转换层(Flash TranslationLayer,FTL),连接数据处理模块92,用于映射表的管理以及写入闪存数据颗粒度的管理,例如:对IO操作进行映射处理,以确定下发的闪存阵列,映射表管理模块83向后端模块(BackEnd,BE)发送IO操作,以使后端模块(Back End,BE)接收该I O操作;
后端模块94,即(Back End,BE),连接映射表管理模块93以及闪存介质,用于闪存数据读写以及闪存命令的管理。
其中,前端模块获取到主机命令后,进行处理以产生IO操作,并依次通过数据处理模块、映射表管理模块以及后端模块,以对闪存阵列进行操作。例如:主机读数据时,主机(Host)发送主机命令给闪存设备(device),闪存设备的前端模块(FE)接收到主机命令,通过数据处理模块92进行处理后分发到闪存算法模块(FTL),闪存算法模块收到后,通过逻辑到物理的转化处理,然后将请求NAND读操作发送给后端模块(BE),后端模块(BE)收到之后,将硬件指令发送给HW Op Nand Mode(操作NAND的硬件模块,由BE进行控制),并行地进行操作NAND处理。
在本申请实施例中,动态多平面编程在固件***上的实现由后端模块完成,闪存算法模块(FTL)可以不感知。
请再参阅图10,图10是本申请实施例提供的一种处理IO请求的流程示意图;
步骤S101:设置状态变量,其中,状态变量包括第一状态变量、第二状态变量和第三状态变量,第一状态变量表征当前执行的步骤号,第二状态变量表征剩余的步骤数,第三状态变量用于表征编程模式;
可以理解的是,多平面编程需要分多个步骤完成,因此,需要通过状态变量进行记录。
具体的,假设第一状态变量为currentStep,currentStep用于表征当前执行的步骤号,第二状态变量为remainStep,remainStep用于表征剩余的步骤数,第三状态变量为opPlaneMode,opPlaneMode用于表征编程模式。
步骤S102:根据编程模式,调整状态变量,以处理IO请求。
具体的,根据确定的当前的编程模式,调整状态变量,以处理IO请求。其中,当前的编程模式包括单编程模式或多编程模式。
具体的,请再参阅图11,图11是图10中的步骤S102的细化流程示意图;
如图11所示,该步骤S102:根据编程模式,调整状态变量,以处理IO请求,包括:
步骤S1021:确定闪存设备的编程模式;
步骤S1022:确定第一状态变量的值、第二状态变量的值;
步骤S1023:将写调度给硬件,以执行第一数量的平面的编程;
步骤S1024:硬件完成第一数量的平面的编程,并调整第一状态变量的值、第二状态变量的值;
步骤S1025:是否完成所有平面的编程;
具体的,判断是否完成所有平面的编程,若是,则结束;若否,则返回步骤S1022:确定第一状态变量的值、第二状态变量的值。
下面以闪存设备的平面的数量为四个,分别为plane0、plane1、plane2、plane3,当前的编程模式为两平面编程模式(2plane)为例进行说明:
第一阶段,写IO请求被调度,第一次执行,初始化状态变量的取值,即remainStep=2,currentStep=0,opPlaneMode=2,把写调度给硬件执行Plane0和plane1的编程。
第二阶段,硬件完成Plane0和Plane1的编程,remainStep=1,写IO请求重新进入后端的调度队列等待调度;
重复第一阶段的操作,写IO请求被调度,第二次执行,currentStep=1,把写调度给硬件执行Plane2和plane3的编程。
重复第二阶段的操作,硬件完成Plane2和Plane3的编程,remainStep=0。
此时,确定完成所有平面的编程,即写请求在后端模块完成,后端模块生成完成信息,并将完成信息发给映射表管理模块(Flash Translation Layer,FTL)。
在本申请实施例中,状态变量还包括写请求变量,写请求变量的取值为第一取值或第二取值,方法还包括:
在接收到写IO请求之后,确定写请求变量的取值,其中,若该写IO请求为新的IO请求,则所述写请求变量的取值为第一取值,若该写IO请求为上一次的IO请求,则所述写请求变量的取值为第二取值;第一取值表征该写IO请求为新的IO请求,需要重新处理;第二取值表征该IO请求为上一次的IO请求,需要继续处理;
若写请求变量的取值为第一取值,即写请求变量=0,则计算闪存设备的IO压力,根据闪存设备的IO压力,确定闪存设备的编程模式,并基于编程模式,处理IO请求。
在本申请实施例中,方法还包括:
若写请求变量的取值为第二取值,即写请求变量=1,则根据第三状态变量,确定闪存设备的编程模式,并基于第一状态变量,继续处理剩余平面的编程。
具体的,假设写请求变量为NewIOFlag,其中,NewIOFlag用于表征当前接收的IO请求是否为新的写请求,写请求变量的取值为第一取值或第二取值,其中,第一取值为0,第二取值为1。
可以理解的是,后端模块接收到的IO请求,例如:写请求是一个多平面的编程,该IO请求进入后端模块的调度流程。该IO请求在后端需要经过多次调度(分步完成)。因此需要记录该请求的状态。NewIOFlag表示该请求是后端模块刚收到的写请求,需要先确定编程模式。
当后端模块调度该请求之后,等到该请求完成第一个步骤的编程,该请求重新加入后端模块的调度队列,这个时候NewIO Flag已经置上了,不需要再次选择编程模式。在下一次调度时候,接着上一次的位置开始编程,例如:NewI OFlag的取值为0或1,其中,第一取值为0,第二取值为1。
例如:写请求的处理流程,包括:
步骤(1)、后端模块从映射表管理模块收到一个写请求,该写请求是一个fourplane的写。此时,初始化相关的状态变量,例如:初始化第一状态变量、第二状态变量和第三状态变量,以及,初始化写请求变量New IO Flag=1。
步骤(2)、后端模块开始调度IO请求,调度到一个写请求,如果New IOFlag=1,此时,确定编程模式opPlaneMode,初始化currentStep,remainStep的值,将New IO Flag设置为0。如果New IO Flag=0,跳转到步骤(3);
步骤(3)、根据currentStep和opPlaneMode的值,给硬件下发program命令,其中,currentStep可以指示上一次编程的位置,opPlaneMode指示本次需要编程的平面个数。
步骤(4)、编程完成之后,currentStep加1,remainStep减1。如果remainStep等于0,则确定完成所有平面的编程,写请求完成。否则继续进入调度流程。
可以理解的是,正常一个写IO请求在后端模块只需要要第一阶段和第二阶段,而对于动态多平面编程,后端模块需要将多平面的编程拆成几次完成,从而保证读IO能够穿插在写请求中间执行,从而提高读请求响应的速度。
请再参阅图12a,图12a是本申请实施例提供的一种IO调度场景的示意图;
假设有一个Die的调度队列,有一个已经在执行的执行队列。调度队列里面一般会优先调度读IO,读IO会优先放在队列头部,执行队列则是按前后顺序执行。
如图12a所示的IO调度场景,其中,该IO调度场景为多平面编程的IO调度场景,在T0时间点,只有一个Write IO,Write IO被调度到硬件之后,收到一个Read IO,Read IO需要等待WriteIO完成之后才能得到调度,所以最终ReadIO的延迟就等于Read IO本身的延时加上Write IO的延迟。
请再参阅图12b,图12b是本申请实施例提供的另一种IO调度场景的示意图;
如图12b所示的IO调度场景,其中,该IO调度场景为单平面编程的IO调度场景,由于读IO只需要等Write IO完成一部分就可以调度,所以Read IO的延时等于Read IO本身的延时加上Write IO(step0)的延时。Write IO(step0)延迟要比图12a中的Write IO延时要短,
Write IO(step0)是单平面编程,Write IO是多平面编程。所以使用单平面编程,Read IO在遇到Write IO的时候,延时要比多平面编程短。
在本申请实施例中,通过提供一种平面编程方法,应用于闪存设备,包括:实时计算闪存设备的IO压力;根据闪存设备的IO压力,动态调整闪存设备的编程模式,其中,每一编程模式对应一种编程粒度。通过实时计算闪存设备的IO压力,根据该IO压力,动态调整闪存设备的编程模式,本申请能够实现在不影响读写带宽的情况下,提高非带宽业务的IO延迟和服务质量,提高闪存设备的整体性能。
请再参阅图13,图13是本申请实施例提供的一种闪存设备的结构示意图;
如图13所示,该闪存设备130包括一个或多个处理器131以及存储器132。其中,图13中以一个处理器131为例。
处理器131和存储器132可以通过总线或者其他方式连接,图13中以通过总线连接为例。
处理器131,用于提供计算和控制能力,以控制闪存设备130执行相应任务,例如,控制闪存设备130执行上述任一方法实施例中的平面编程方法,包括:实时计算闪存设备的IO压力;根据闪存设备的IO压力,动态调整闪存设备的编程模式,其中,每一编程模式对应一种编程粒度。
通过实时计算闪存设备的IO压力,根据该IO压力,动态调整闪存设备的编程模式,本申请能够实现在不影响读写带宽的情况下,提高非带宽业务的IO延迟和服务质量,提高闪存设备的整体性能。
处理器131可以是通用处理器,包括中央处理器(Central Processing Unit,CPU)、网络处理器(Network Processor,NP)、硬件芯片或者其任意组合;还可以是数字信号处理器(Digital Signal Processing,DSP)、专用集成电路(Application SpecificIntegrated Circuit,ASIC)、可编程逻辑器件(programmable logic device,PLD)或其组合。上述PLD可以是复杂可编程逻辑器件(complex programmable logic device,CPLD),现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(genericarray logic,GAL)或其任意组合。
存储器132作为一种非暂态计算机可读存储介质,可用于存储非暂态软件程序、非暂态性计算机可执行程序以及模块,如本申请实施例中的平面编程方法对应的程序指令/模块。处理器131通过运行存储在存储器132中的非暂态软件程序、指令以及模块,可以实现下述任一方法实施例中的平面编程方法。具体地,存储器132可以包括易失性存储器(volatile memory,VM),例如随机存取存储器(random access memory,RAM);存储器132也可以包括非易失性存储器(non-volatile memory,NVM),例如只读存储器(read-onlymemory,ROM),快闪存储器(flash memory),硬盘(hard disk drive,HDD)或固态硬盘(solid-state drive,SSD)或其他非暂态固态存储器件;存储器132还可以包括上述种类的存储器的组合。
存储器132可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,存储器132可选包括相对于处理器131远程设置的存储器,这些远程存储器可以通过网络连接至处理器131。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。
一个或者多个模块存储在存储器132中,当被一个或者多个处理器131执行时,执行上述任意方法实施例中的平面编程方法,例如,执行以上描述的图5所示的各个步骤。
在本申请实施例中,闪存设备130还可以具有有线或无线网络接口、键盘以及输入输出接口等部件,以便进行输入输出,闪存设备130还可以包括其他用于实现设备功能的部件,在此不做赘述。
本申请实施例的闪存设备以多种形式存在,在执行以上描述的图5所示的各个步骤时,包括但不限于:固态硬盘等存储设备。
本申请实施例还提供了一种计算机可读存储介质,例如包括程序代码的存储器,上述程序代码可由处理器执行以完成上述实施例中的平面编程方法。例如,该计算机可读存储介质可以是只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random AccessMemory,RAM)、只读光盘(Compact Disc Read-Only Memory,CDROM)、磁带、软盘和光数据存储设备等。
本申请实施例还提供了一种计算机程序产品,该计算机程序产品包括一条或多条程序代码,该程序代码存储在计算机可读存储介质中。电子设备的处理器从计算机可读存储介质读取该程序代码,处理器执行该程序代码,以完成上述实施例中提供的平面编程方法的方法步骤。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来程序代码相关的硬件完成,该程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
通过以上的实施方式的描述,本领域普通技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程是可以通过计算机程序来指令相关的硬件来完成,程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random Access Memory,RAM)等。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;在本申请的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上述的本申请的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (10)

1.一种平面编程方法,其特征在于,应用于闪存设备,所述方法包括:
实时计算所述闪存设备的IO压力;
根据所述闪存设备的IO压力,动态调整所述闪存设备的编程模式,其中,每一编程模式对应一种编程粒度。
2.根据权利要求1所述的方法,其特征在于,所述根据所述闪存设备的IO压力,动态调整所述闪存设备的编程模式,包括:
判断所述闪存设备的IO压力是否大于第一IO压力阈值;
若是,则将所述闪存设备的编程模式调整为第一平面编程模式,其中,第一平面编程模式的编程粒度>第一粒度阈值;
若否,则将所述闪存设备的编程模式调整为第二平面编程模式,其中,第二平面编程模式的编程粒度≤第一粒度阈值。
3.根据权利要求1所述的方法,其特征在于,所述根据所述闪存设备的IO压力,动态调整所述闪存设备的编程模式,包括:
测试所述闪存设备处于每一种编程模式下一一对应的最大IO带宽;
根据所述闪存设备的IO压力,结合每一种所述编程模式一一对应的最大IO带宽,动态调整所述闪存设备的编程模式。
4.根据权利要求3所述的方法,其特征在于,所述根据所述闪存设备的IO压力,结合每一种所述编程模式一一对应的最大IO带宽,动态调整所述闪存设备的编程模式,包括:
根据每一种所述编程模式一一对应的最大IO带宽,确定每一种所述编程模式对应的带宽范围;
若所述闪存设备的IO压力处于某一所述编程模式对应的带宽范围,则将该编程模式确定为所述闪存设备的编程模式,其中,所述闪存设备的IO压力小于确定的编程模式的最大IO带宽。
5.根据权利要求1所述的方法,其特征在于,所述方法还包括:
在接收到IO请求之后,基于所述编程模式,处理所述IO请求;
基于所述编程模式,处理所述IO请求,包括:
设置状态变量,其中,所述状态变量包括第一状态变量、第二状态变量和第三状态变量,所述第一状态变量表征当前执行的步骤号,所述第二状态变量表征剩余的步骤数,所述第三状态变量用于表征编程模式;
根据所述编程模式,调整所述状态变量,以处理所述IO请求。
6.根据权利要求5所述的方法,其特征在于,所述IO请求包括写IO请求,所述根据所述编程模式,调整所述状态变量,以处理所述IO请求,包括:
获取所述闪存设备的平面的数量,并确定所述闪存设备的编程模式;
在第一阶段,根据所述闪存设备的编程模式,确定第一状态变量的值、第二状态变量的值,并将写调度给硬件,以执行第一数量的平面的编程,其中,第一数量等于确定的编程模式对应的编程粒度;
在第二阶段,硬件完成第一数量的平面的编程,并调整第一状态变量的值、第二状态变量的值;
重复上述第一阶段和第二阶段的操作,直至完成所有平面的编程。
7.根据权利要求6所述的方法,其特征在于,所述状态变量还包括写请求变量,所述写请求变量的取值为第一取值或第二取值,所述方法还包括:
在接收到写IO请求之后,确定所述写请求变量的取值,其中,若该写IO请求为新的IO请求,则所述写请求变量的取值为第一取值,若该写IO请求为上一次的IO请求,则所述写请求变量的取值为第二取值;
若所述写请求变量的取值为第一取值,则计算所述闪存设备的IO压力,根据所述闪存设备的IO压力,确定所述闪存设备的编程模式,并基于所述编程模式,处理所述IO请求。
8.根据权利要求7所述的方法,其特征在于,所述方法还包括:
若所述写请求变量的取值为第二取值,则根据所述第三状态变量,确定所述闪存设备的编程模式,并基于所述第一状态变量,继续处理剩余平面的编程。
9.根据权利要求1-8任一项所述的方法,其特征在于,所述编程粒度与所述闪存设备的平面的数量成倍数关系。
10.一种闪存设备,其特征在于,包括:
至少一个处理器;以及
与所述至少一个处理器通信连接的存储器;其中,所述存储器存储有可被所述至少一个处理器执行的指令,所述指令被所述至少一个处理器执行,以使所述至少一个处理器能够用于执行如权利要求1-9中任一项所述的平面编程方法。
CN202111670976.6A 2021-12-31 2021-12-31 平面编程方法及其闪存设备 Pending CN114296656A (zh)

Priority Applications (2)

Application Number Priority Date Filing Date Title
CN202111670976.6A CN114296656A (zh) 2021-12-31 2021-12-31 平面编程方法及其闪存设备
PCT/CN2022/139078 WO2023125016A1 (zh) 2021-12-31 2022-12-14 平面编程方法及其闪存设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202111670976.6A CN114296656A (zh) 2021-12-31 2021-12-31 平面编程方法及其闪存设备

Publications (1)

Publication Number Publication Date
CN114296656A true CN114296656A (zh) 2022-04-08

Family

ID=80972847

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202111670976.6A Pending CN114296656A (zh) 2021-12-31 2021-12-31 平面编程方法及其闪存设备

Country Status (2)

Country Link
CN (1) CN114296656A (zh)
WO (1) WO2023125016A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN114546294A (zh) * 2022-04-22 2022-05-27 苏州浪潮智能科技有限公司 一种固态硬盘读方法、***及相关组件
WO2023125016A1 (zh) * 2021-12-31 2023-07-06 深圳大普微电子科技有限公司 平面编程方法及其闪存设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110191525A1 (en) * 2010-02-04 2011-08-04 Phison Electronics Corp. Flash memory storage device, controller thereof, and data programming method thereof
CN105511806A (zh) * 2015-11-30 2016-04-20 华为技术有限公司 处理写请求的方法和移动终端
CN111324296A (zh) * 2018-12-16 2020-06-23 华为技术有限公司 一种数据处理的方法、控制器、存储设备及存储***
CN112035381A (zh) * 2020-09-29 2020-12-04 深圳大普微电子科技有限公司 一种存储***及存储数据处理方法

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8006013B2 (en) * 2008-08-07 2011-08-23 International Business Machines Corporation Method and apparatus for preventing bus livelock due to excessive MMIO
CN114296656A (zh) * 2021-12-31 2022-04-08 深圳大普微电子科技有限公司 平面编程方法及其闪存设备

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110191525A1 (en) * 2010-02-04 2011-08-04 Phison Electronics Corp. Flash memory storage device, controller thereof, and data programming method thereof
CN105511806A (zh) * 2015-11-30 2016-04-20 华为技术有限公司 处理写请求的方法和移动终端
CN111324296A (zh) * 2018-12-16 2020-06-23 华为技术有限公司 一种数据处理的方法、控制器、存储设备及存储***
CN112035381A (zh) * 2020-09-29 2020-12-04 深圳大普微电子科技有限公司 一种存储***及存储数据处理方法

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023125016A1 (zh) * 2021-12-31 2023-07-06 深圳大普微电子科技有限公司 平面编程方法及其闪存设备
CN114546294A (zh) * 2022-04-22 2022-05-27 苏州浪潮智能科技有限公司 一种固态硬盘读方法、***及相关组件
CN114546294B (zh) * 2022-04-22 2022-07-22 苏州浪潮智能科技有限公司 一种固态硬盘读方法、***及相关组件

Also Published As

Publication number Publication date
WO2023125016A1 (zh) 2023-07-06

Similar Documents

Publication Publication Date Title
US11199996B2 (en) Method of scheduling requests to banks in a flash controller
WO2023125016A1 (zh) 平面编程方法及其闪存设备
US20200089537A1 (en) Apparatus and method for bandwidth allocation and quality of service management in a storage device shared by multiple tenants
JP6743010B2 (ja) 3dメモリに対するアクセス動作のための階層モードに係るメモリデバイス、メモリコントローラ、システム、方法、装置
US8429337B2 (en) Apparatus for controlling NAND flash memory
CN105528299B (zh) 读取命令排程方法以及使用该方法的装置
US11481342B2 (en) Data storage system data access arbitration
US20220197563A1 (en) Qos traffic class latency model for just-in-time (jit) schedulers
US7120765B2 (en) Memory transaction ordering
US20200379546A1 (en) Dynamic power management network for memory devices
US20200409561A1 (en) Data storage system with i/o determinism latency optimization
US9971546B2 (en) Methods for scheduling read and write commands and apparatuses using the same
US11307768B2 (en) Namespace auto-routing data storage system
US11256621B2 (en) Dual controller cache optimization in a deterministic data storage system
JP2022554137A (ja) 重み付きメモリアクセス動作タイプを使用したメモリデバイスのサービスの品質
US11651803B2 (en) Method and apparatus and computer program product for reading data from multiple flash dies
US11620053B2 (en) Quality of service for the multiple functions in memory devices
US10394486B2 (en) Methods for garbage collection in a flash memory and apparatuses using the same
US11868287B2 (en) Just-in-time (JIT) scheduler for memory subsystems
JP2022553361A (ja) プログラムおよび消去動作の中断および再開を使用したメモリデバイスのためのサービスの品質
JP2022049405A (ja) 記憶装置および制御方法
CN118051181A (zh) 存储器子***中的服务质量管理
CN118331511A (zh) 存储器管理方法及存储器控制器
CN117292738A (zh) 验证微指令序列的***及方法
CN117292739A (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