CN109164976A - 利用写缓存优化存储设备性能 - Google Patents
利用写缓存优化存储设备性能 Download PDFInfo
- Publication number
- CN109164976A CN109164976A CN201810767761.8A CN201810767761A CN109164976A CN 109164976 A CN109164976 A CN 109164976A CN 201810767761 A CN201810767761 A CN 201810767761A CN 109164976 A CN109164976 A CN 109164976A
- Authority
- CN
- China
- Prior art keywords
- cache unit
- data
- write order
- write
- written
- 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
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/0223—User address space allocation, e.g. contiguous or non contiguous base addressing
- G06F12/023—Free address space management
- G06F12/0238—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
- G06F12/0246—Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0629—Configuration or reconfiguration of storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0656—Data buffering arrangements
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
本申请提供利用写缓存优化存储设备性能。所提供的处理向NVM写入数据的写命令的方法,其中提供缓存单元,所述缓存单元包括第一部分和第二部分,该方法包括:接收第一写命令;响应于所述第一写命令对应的数据被写入缓存单元的第一部分,向主机发送指示第一写命令处理完成的第一消息。本申请公开的技术方案至少能够降低“小写”命令带来的延迟,提升处理效率。
Description
技术领域
本申请涉及存储领域,更具体地,涉及在固态存储设备中优化对“小写”命令的处理。
背景技术
参看图1,展示了存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA(Serial Advanced Technology Attachment,串行高级技术附件)、SCSI(Small Computer System Interface,小型计算机***接口)、SAS(Serial AttachedSCSI,串行连接SCSI)、IDE(Integrated Drive Electronics,集成驱动器电子)、USB(Universal Serial Bus,通用串行总线)、PCIE(Peripheral Component InterconnectExpress,PCIe,高速***组件互联)、NVMe(NVM Express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM芯片105以及DRAM(Dynamic Random Access Memory,动态随机访问存储器)110。
NAND闪存、相变存储器、FeRAM(Ferroelectric RAM,铁电存储器)、MRAM(MagneticRandom Access Memory,磁阻存储器)、RRAM(Resistive Random Access Memory,阻变存储器、XPoint存储器)等是常见的NVM。
接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SAS、以太网、光纤通道等方式与主机交换数据。
控制部件104用于控制在接口103、NVM芯片105以及固件存储器110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。可通过软件、硬件、固件或其组合的多种方式实现控制部件104。控制部件104可以是FPGA(Field-programmable gate array,现场可编程门阵列)、ASIC(ApplicationSpecific IntegratedCircuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器。,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理IO(Input/Output)命令。控制部件104还可以耦合到DRAM 110,并可访问DRAM 110的数据。在DRAM可存储FTL表和/或缓存的IO命令的数据。
在控制部件104中运行的软件和/或固件(下面统称为“固件”)可被存储在NVM芯片105或另外的固件存储器中。在固态存储设备102上电时,从固件存储器将固件加载到DRAM110和/或控制部件104内部的存储器中。可选地,通过接口103或调试接口接收并加载固件。
控制部件104耦合到NVM芯片105,并以遵循NVM芯片105的接口协议的方式向NVM芯片105发出命令,以操作NVM芯片105,并接收从NVM芯片105输出的命令执行结果。已知的NVM芯片接口协议包括“Toggle”、“ONFI”等。
存储器目标(Target)是NAND闪存封装内的共享芯片使能(CE,Chip Enable)信号的一个或多个逻辑单元(LUN,Logic UNit)。NAND闪存封装内可包括一个或多个管芯(Die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(Plane)。逻辑单元内的多个平面可以并行存取,而NAND闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。在可从http://www.micron.com/~/media/Documents/Products/Other%20Documents/ONFI3_0Gold.ashx获得的“Open NAND Flash Interface Specification(Revision 3.0)”中,提供了关于目标(target)、逻辑单元、LUN、平面(Plane)的含义,其为现有技术的一部分。
存储介质上通常按页来存储和读取数据。而按块来擦除数据。块包含多个页。存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节。物理页也可以具有其他的尺寸。
在固态存储设备中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作***等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在现有技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。
存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是固态存储设备中的重要元数据。通常FTL表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。
在NVMe标准中定义了易失性写高速缓存(Volatile Write Cache)。
NVM在被编程时,需要写入整页数据,而主机发送的写命令要写入的数据量的大小有时小于NVM的物理页页的大小,这种情况也称为“小写”。在一些情况下,发生“小写”时,需要从NVM中读取部分数据同被写入的数据拼接成整页数据,再写入闪存(称为读-修改-写回,RMW),这导致处理“小写”时较高的延迟。
发明内容
本申请的目的在于对针对NVM的“小写”命令进行处理,以克服现有技术中“小写”命令带来较高延迟的缺陷。
根据本发明的第一方面,提供了根据本发明第一方面的处理向NVM写入数据的写命令的第一方法,其中提供缓存单元,所述缓存单元包括第一部分和第二部分,该方法包括:接收第一写命令;响应于所述第一写命令对应的数据被写入缓存单元的第一部分,向主机发送指示第一写命令处理完成的第一消息。
根据本发明第一方面的处理向NVM写入数据的写命令的第一方法,提供一种处理向NVM写入数据的写命令的第二方法,进一步包括:响应于所述第一写命令对应的数据正在被写入所述缓存单元第一部分,发出指示所述缓存单元处于“繁忙”状态的第二消息。
根据本发明第一方面的处理向NVM写入数据的写命令的第二方法,提供一种处理向NVM写入数据的写命令的第三方法,其中,当所述缓存单元处于“繁忙”状态时,将所述第一写命令之外的、针对该缓存单元的其他写命令置入等待状态。
根据本发明第一方面的处理向NVM写入数据的写命令的第一方法,提供一种处理向NVM写入数据的写命令的第四方法,进一步包括:检测所述第一写命令是否命中缓存单元,如果所述第一写命令命中所述缓存单元,则向命中的缓存单元中写入数据。
根据本发明第一方面的处理向NVM写入数据的写命令的第四方法,提供一种处理向NVM写入数据的写命令的第五方法,其中,如果所述缓存单元记录的逻辑地址范围包含所述第一写命令的逻辑地址,则所述第一写命令命中所述缓存单元。
根据本发明第一方面的处理向NVM写入数据的写命令的第四或第五方法,提供一种处理向NVM写入数据的写命令的第六方法,其中,在所述第一写命令命中所述缓存单元的情况下,如果所述第一写命令访问的逻辑地址范围同所述所命中的缓存单元所包含的数据的逻辑地址范围不重叠,则向所述缓存单元写入所述第一写命令所对应的数据。
根据本发明第一方面的处理向NVM写入数据的写命令的第四至第六方法之一,提供一种处理向NVM写入数据的写命令的第七方法,其中,在所述第一写命令命中所述缓存单元的情况下,如果所述第一写命令访问的逻辑地址范围同所述所命中的缓存单元包含的数据的逻辑地址范围重叠,则等待将所述缓存单元清空;向清空的所述缓存单元写入所述第一写命令所对应的数据。
根据本发明第一方面的处理向NVM写入数据的写命令的第四至第七方法之一,提供一种处理向NVM写入数据的写命令的第八方法,进一步包括:如果所述第一写命令未命中所述缓存单元,则为所述第一写命令分配处于“空闲”状态的缓存单元。
根据本发明第一方面的处理向NVM写入数据的写命令的第一方法,提供一种处理向NVM写入数据的写命令的第九方法,进一步包括:响应于所述第一写命令对应的数据被写入缓存单元的第一部分,基于所述缓存单元的第二部分的逻辑地址范围,读取所述第二部分的逻辑地址范围对应的数据,并将读取的数据填充到所述缓存单元的第二部分;以及将所述缓存单元标记为处于“繁忙”状态。
根据本发明第一方面的处理向NVM写入数据的写命令的第一或第九方法,提供一种处理向NVM写入数据的写命令的第十方法,进一步包括:响应于所述第一写命令对应的数据被写入缓存单元的第一部分,将所述缓存单元标记为处于被“占用”状态。
根据本发明第一方面的处理向NVM写入数据的写命令的第十方法,提供一种处理向NVM写入数据的写命令的第十一方法,进一步包括:基于处于被“占用”状态的所述缓存单元的第二部分的逻辑地址范围,读取所述第二部分的逻辑地址范围对应的数据,并将读取的数据填充到所述缓存单元的第二部分;以及将所述缓存单元标记为处于“繁忙”状态。
根据本发明第一方面的处理向NVM写入数据的写命令的第一至第十一方法之一,提供一种处理向NVM写入数据的写命令的第十二方法,进一步包括:接收第二写命令;根据所述第二写命令,将所述第二写命令对应的数据写入所述缓存单元的第二部分。
根据本发明第一方面的处理向NVM写入数据的写命令的第十二方法,提供一种处理向NVM写入数据的写命令的第十三方法,进一步包括:若所述第二写命令命中所述缓存单元,所述第二写命令访问的逻辑地址范围同所述第一写命令访问的逻辑地址范围不存在重叠,以及所述缓存单元处于“繁忙”状态,则暂停对所述第二写命令的处理,直到所述缓存单元处于“空闲”状态,以及将第二命令对应的数据写入处于“空闲”状态的所述缓存单元的第二部分。
根据本发明第一方面的处理向NVM写入数据的写命令的第十二方法,提供一种处理向NVM写入数据的写命令的第十四方法,进一步包括:若所述第二写命令命中所述缓存单元,以及所述缓存单元处于被“占用”状态,则将第二命令对应的数据写入所述缓存单元的第二部分。
根据本发明第一方面的处理向NVM写入数据的写命令的第十二方法,提供一种处理向NVM写入数据的写命令的第十五方法,进一步包括:响应于所述缓存单元第二部分被写入数据,发出第四消息,该第四消息指示所述缓存单元被“占用”的第二部分的位置。
根据本发明第一方面的处理向NVM写入数据的写命令的第十五方法,提供一种处理向NVM写入数据的写命令的第十六方法,进一步包括:基于所述缓存单元中第二部分的逻辑地址,读取所述第二部分的逻辑地址对应的数据,并将读取的数据填充到所述缓存单元的第二部分;如果被填充的位置已被写入数据,则丢弃要写入被填充的位置的被读取的数据。
根据本发明第一方面的处理向NVM写入数据的写命令的第九至第十六方法之一,提供一种处理向NVM写入数据的写命令的第十七方法,进一步包括:将所述缓存单元的数据发送给非易失存储器,并将所述缓存单元标记为处于“空闲”状态。
根据本发明的第二方面,提供一种根据本发明第二方面的处理向NVM写入数据的写命令的第一方法,其中提供多个缓存单元,每个缓存单元包括第一部分和第二部分,以及所述多个缓存单元被分为第一组和第二组,该方法包括:接收第一写命令;响应于所述第一写命令对应的数据被写入属于第一组的第一缓存的第一部分,向主机发送指示第一写命令处理完成的第一消息;以及至少将属于第二组的第二缓存单元的数据写入NVM。
根据本发明第二方面的处理向NVM写入数据的写命令的第一方法,提供了处理向NVM写入数据的写命令的第二方法,进一步包括:将第一缓存单元设置为属于第二组;和/或将第二缓存单元设置为属于第一组。
根据本发明第二方面的处理向NVM写入数据的写命令的第一或第二方法,提供了处理向NVM写入数据的写命令的第三方法,其中,写命令对应的数据仅被写入属于第一组的缓存单元;以及仅将属于第二组的缓存单元的数据写入NVM。
根据本发明第二方面的处理向NVM写入数据的写命令的第一至第三方法之一,提供了处理向NVM写入数据的写命令的第四方法,进一步包括:将属于第二组的缓存单元的全部数据写入NVM。
根据本发明第二方面的处理向NVM写入数据的写命令的第一至第四方法之一,提供了处理向NVM写入数据的写命令的第五方法,其中,基于第二缓存单元的第二部分的逻辑地址范围,读取所述第二部分的逻辑地址范围对应的数据,并将读取的数据填充到第二缓存单元的第二部分;以及将第二缓存单元的完整数据写入NVM。
根据本发明第二方面的处理向NVM写入数据的写命令的第五方法,提供了处理向NVM写入数据的写命令的第六方法,其中,所述第二缓存单元的第二部分的逻辑地址范围,是所述第二缓存单元的逻辑地址范围中未被写入数据的地址范围。
根据本发明第二方面的处理向NVM写入数据的写命令的第二至第六方法之一,提供了处理向NVM写入数据的写命令的第七方法,进一步包括:接收第二写命令;若所述第二写命令命中所述第一缓存单元,所述第二写命令访问的逻辑地址范围同所述第一写命令访问的逻辑地址范围不存在重叠,则将所述第二命令对应的数据写入所述第一缓存单元的第二部分。
根据本发明第二方面的处理向NVM写入数据的写命令的第二至第六方法之一,提供了处理向NVM写入数据的写命令的第八方法,进一步包括:接收第二写命令;若所述第二写命令命中所述第一缓存单元,所述第二写命令访问的逻辑地址范围同所述第一写命令访问的逻辑地址范围存在重叠,则暂停对所述第二写命令的处理,直到为所述第二写命令分配了属于第一组的第三缓存单元;以及将第二命令对应的数据写入所述第三缓存单元。
根据本发明第二方面的处理向NVM写入数据的写命令的第二至第六方法之一,提供了处理向NVM写入数据的写命令的第九方法,进一步包括:接收第二写命令;若所述第二写命令命中所述第一缓存单元,则将第二命令对应的数据写入所述第一缓存单元。
根据本发明第二方面的处理向NVM写入数据的写命令的第七至第九方法之一,提供了处理向NVM写入数据的写命令的第十方法,其中,如果所述缓存单元记载的逻辑地址范围包含所述写命令的逻辑地址,则所述写命令命中所述缓存单元。
根据本发明第二方面的处理向NVM写入数据的写命令的第一方法,提供了处理向NVM写入数据的写命令的第十一方法,进一步包括:至少将所述第二缓存单元清空。
根据本发明第二方面的处理向NVM写入数据的写命令的第二方法,提供了处理向NVM写入数据的写命令的第十二方法,其中,在指定条件下,将第一缓存单元设置为属于第二组;和/或将第二缓存单元设置为属于第一组。
根据本发明第二方面的处理向NVM写入数据的写命令的第十二方法,提供了处理向NVM写入数据的写命令的第十三方法,其中,所述指定条件为一定的时间段。
根据本发明第二方面的处理向NVM写入数据的写命令的第十二方法,提供了处理向NVM写入数据的写命令的第十四方法,其中,所述指定条件为,所述第二缓存单元被清空。
根据本发明第二方面的处理向NVM写入数据的写命令的第十二方法,提供了处理向NVM写入数据的写命令的第十五方法,其中,所述指定条件为,所述第一缓存单元存储的数据达到指定阈值。
根据本发明第二方面的处理向NVM写入数据的写命令的第十二方法,提供了处理向NVM写入数据的写命令的第十六方法,其中,所述指定条件为,所述第一组的缓存单元中被写入数据的存储单元的数量达到指定阈值。
根据本发明第二方面的处理向NVM写入数据的写命令的第一方法,提供了处理向NVM写入数据的写命令的第十七方法,其中,根据写入操作的整体时长与读取操作的整体时长之比来确定第一组和第二组中缓存单元的数量。
根据本发明的第三方面,提供一种处理向NVM写入数据的写命令的处理器,包括:一个或者多个处理器;存储器;存储在所述存储器中的程序,当被所述一个或者多个处理器执行时,所述程序使所述处理器执行如上所述的方法。
根据本发明第四方面,提供一种处理向NVM写入数据的写命令的设备,其中提供缓存单元,所述缓存单元包括第一部分和第二部分,该设备包括:用于接收第一写命令的装置;用于响应于所述第一写命令对应的数据被写入缓存单元的第一部分,向主机发送指示第一写命令处理完成的第一消息的装置。
根据本发明第五方面,提供一种处理向NVM写入数据的写命令的设备,其中提供多个缓存单元,每个缓存单元包括第一部分和第二部分,以及所述多个缓存单元被分为第一组合第二组,第一组中的缓存单元为第一缓存单元,第二组中的缓存单元为第二缓存单元,该设备包括:用于接收第一写命令的装置;用于响应于所述第一写命令对应的数据被写入第一缓存的第一部分,向主机发送指示第一写命令处理完成的第一消息的装置;以及用于至少将第二缓存单元的数据写入NVM的装置。
根据本发明的第六方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有程序,当所述程序被一个设备执行时,使得所述设备进行上面所述的方法。
本申请公开的实施方式至少能够降低“小写”命令带来的延迟,提升处理效率。
附图说明
图1示出了现有技术的存储设备的框图;
图2示出了根据本申请实施例的存储设备的控制部件的框图;
图3示出了根据本发明实施例的前端缓存的示意图;
图4示出了根据本发明实施例的处理向NVM写入数据的写命令的流程图;
图5示出了根据本发明实施例的前端缓存的示意图;
图6A和图6B示出了根据本发明一个实施方式的写命令命中缓存单元时的示意图;
图7示出了根据本发明另一个实施例的前端缓存的示意图;
图8示出了根据本发明实施例的清空前端缓存的缓存单元的示意图;
图9A-图9E示出了在不同写入命令的情况下各个缓存单元的状态以及缓存子单元中数据的变化;
图10示出了根据本发明又一实施例的处理向NVM写入数据的写命令的方法流程图;以及
图11A-图11C示出了根据图10所示的实施例接收到多个不同写命令时缓存单元和缓存子单元的状态变化情况。
具体实施方式
下面结合附图对本发明的具体实施方式进行详细描述。需要理解的是,本公开中“第一”、“第二”仅用于指示对象,而并不用于限制数量和/或顺序。
图2示出了根据本发明实施例的存储设备的控制部件的框图。控制部件104包括主机接口210、前端处理模块220、闪存管理模块230与后端处理模块240。
主机接口210用于同主机交换命令与数据。在一个例子中,主机与存储设备通过NVMe/PCIe协议通信,主机接口210处理PCIe协议数据包,提取出NVMe协议命令,并向主机返回NVMe协议命令的处理结果。FTL模块230将NVMe协议命令的逻辑地址转换为物理地址,并对闪存实施管理,提供磨损均衡、垃圾回收等服务。后端处理模块240依据物理地址访问一个或多个NVM芯片。将在访问FTL之前的处理称为前端处理,而将在访问FTL之后的处理称为后端处理。前端控制部件104还耦合到外部存储器(例如,RAM)260。存储器260的部分空间被用作前端缓存(前端缓存265),前端处理模块220可访问存储器260来使用前端缓存。可选地,在控制部件104内提供前端缓存模块225用作前端缓存。
图3示出了根据本发明实施例的前端缓存的示意图。以举例的方式,前端缓存可以包括多个缓存单元(为简化起见,图3中仅示出了一个缓存单元310)。每个缓存单元可以包括多个缓存子单元(图3中,展示为缓存子单元A、B、C与D)。作为举例,每个缓存子单元大小为1KB,而每个缓存单元的大小为4KB。可以理解的是,缓存单元与缓存子单元也可具有其他的尺寸。优选地,缓存子单元的大小等于主机发送给固态存储设备的IO命令的最小数据单元大小,而缓存单元的大小为FTL表中的一个条目的物理地址所对应的数据单元大小。
前端缓存还记录元数据。元数据记录与缓存单元相对应的状态、逻辑地址和/或缓存单元的缓存子单元被使用情况。缓存单元的逻辑地址记录了缓存单元中被写入的数据的逻辑地址。
通过比较IO命令的逻辑地址与元数据中记录的缓存单元的逻辑地址,确定IO命令是否命中缓存单元。作为举例,若IO命令的逻辑地址同缓存单元的逻辑地址存在交叠,则IO命令命中缓存单元。
缓存单元存储IO命令所对应的数据。例如,对于写命令,缓存单元记录主机发来的要写入NVM芯片的数据,并在写命令的数据写入缓存单元后向主机提供写命令处理完成的指示,以降低写命令处理延迟。可选地,前端缓存还还可用作加速读操作的高速缓存。
可选地,由存储器260(参看图2)提供缓存单元,而由控制部件104内部的存储器存储元数据。
为了实现本申请的至少一个目的,本申请可以通过如下方式来实施。
实施例1
缓存单元中的缓存子单元(例如图3中的缓存子单元A、B、C和D)可被分为第一部分和第二部分。第一部分表示被写入了数据的那部分缓存子单元,而第二部分表示未被写入数据的那部分缓存子单元。需要理解的是,第一部分和第二部分中均可以包括多个缓存子单元,并且在同一部分中的缓存子单元可以是相邻的,也可以是不相邻的。此外,第一部分和第二部分也不是静态的,第二部分缓存子单元也可以在后续被写入数据,而第一部分缓存子单元中的数据可以在后续被清除。例如,图3中的缓存子单元A和C可以属于第一部分,而缓存子单元B和D可以属于第二部分。
图4示出了根据本发明实施例的处理向NVM写入数据的写命令的流程图。该方法包括:在操作S410,接收写命令;在操作S420,响应于所接收的写命令对应的数据被写入缓存单元的部分,向主机发送指示写命令处理完成的消息。
需要指出的是,这里的写命令是针对NVM进行写入的命令,缓存单元对于写命令是透明的。在本申请的实施例中,数据被写入到缓存单元但尚未被写入到NVM中时,向主机发送应答消息,使得主机认为写命令处理完成。从而降低写命令处理延迟。
在元数据中记录缓存单元的状态。根据本发明的实施例,缓存单元可处于“空闲”或“繁忙”状态。可以理解地,还可为缓存单元提供其他状态。
结合表1来描述缓存单元的状态转换。
表1
参看表1,对于处于“空闲”状态的缓存单元,响应于写命令的数据被写入该缓存单元的子单元,该缓存单元的状态从“空闲”变为“繁忙”,以及作为状态转换的输出事件,向主机提供ACK(应答)消息以指示对该写命令处理完成。以及可选地,发起对该缓存单元的“清空”过程。即使写命令的数据仅填充了该缓存单元的部分缓存子单元,也发起“清空”过程。
在“清空”过程中,从固态存储设备的NVM中读出该缓存单元中未被写入数据的缓存子单元的逻辑地址所对应的数据,并将读出的数据填入缓存单元。响应于从闪存中读出的数据被写入到缓存单元的未被使用的缓存子单元(缓存单元被填满,而不存在未被写入数据的缓存子单元),将整个缓存单元的数据写入缓存单元的元数据所记录的逻辑地址范围。
继续参看表1,对于处于“繁忙”状态的缓存单元,响应于从NVM读出的数据同缓存单元中的数据合并,以及将缓存单元的完整数据写入NVM(“清空”过程完成),该缓存单元的状态变为“空闲”。处于“空闲”状态的缓存单元可被分配来接收写命令对应的数据。以及对于处于“繁忙”状态的缓存单元,若收到命中了该缓存的写命令,则挂起该写命令(暂停对该写命令的处理)作为响应,以及该存储单元依然处于“繁忙”状态。
下面描述根据本发明实施例对写命令进行处理的过程。
响应于接收到写命令,为该写命令分配缓存单元。新分配的缓存单元可以处于“空闲”(Free)状态,以及在所分配的缓存单元的元数据中记录写命令的逻辑地址。对于“小写”命令,写命令的逻辑地址的范围可能小于缓存单元的元数据中要记录的逻辑地址范围。在此情况下,截取写命令的逻辑地址,以适配缓存单元的逻辑地址范围,并将所截取的逻辑地址记录在缓存单元的元数据中。
将写命令要写入的数据写入缓存单元。对于“小写”命令,根据写命令的逻辑地址将数据写入缓存单元中的相应的缓存子单元。例如,写命令指示向逻辑地址空间中100KB开始的地址范围写入1KB数据,而缓存单元的大小为4KB。依据该写命令的逻辑地址范围(100KB-101KB的1K空间),在分配给该写命令的缓存单元的元数据中记录逻辑地址100KB-104KB(不含)的4K大小的空间(截取的逻辑地址)。由于地址100KB开始的1K空间位于100KB-104KB(不含)地址范围的第1个1K空间,相应地将写命令的1KB数据写入缓存单元的第一个缓存子单元中(缓存单元的第一部分)。在缓存单元的元数据中还记录第一个缓存子单元被使用,以及其他三个缓存子单元(缓存单元的第二部分)未被使用。
一旦“小写”命令的数据被全部写入缓存单元,即向主机发送指示该“小写”命令处理或执行完成的应答消息,从而降低了写命令的处理延迟。
可选地,响应于“小写”命令对应的数据正在被写入缓存单元中,将缓存单元的状态置为“繁忙”。以及依然可选地,发出指示该缓存单元处于“繁忙”状态的消息。
在“清空”过程中,对于缓存单元中未被写入数据的那些缓存子单元(或者逻辑地址空间),从固态存储设备的NVM中读出该缓存单元中未被写入数据的缓存子单元的逻辑地址所对应的数据,并将读出的数据填入缓存单元。例如,缓存单元的元数据中记录了逻辑地址100KB-104KB(不含)的4K大小的范围,其中缓存单元的第一个缓存子单元(逻辑地址为100KB-101KB的1K范围)被写入了数据,其他三个缓存子单元(逻辑地址为103KB-104KB的3K空间)未被使用,则读取逻辑地址为103KB-104KB的3K范围的数据,并将读出的数据填入其他三个缓存子单元。响应于从闪存中读出的数据被写入到缓存单元的未被使用的缓存子单元,将整个缓存单元的数据(例如,4KB大小)写入缓存单元的元数据所记录的逻辑地址范围(例如,逻辑地址100KB-104KB(不含)的4K大小的范围)。
当“清空”过程完成,整个缓存单元的数据被写入闪存,缓存单元的状态从“繁忙”变为“空闲”,并且可以再次被分配来处理写命令。
本领域技术人员可以理解的是,根据逻辑地址读出或写入数据,需要从FTL模块230(参看图2)获得物理地址,并从物理地址读出或向物理地址写入数据。
实施例2
根据本发明的实施例2,响应于收到“小写”命令,检测该“小写”命令是否命中缓存单元,将小写命令对应的数据写入命中的缓存单元。若没有任何缓存单元被命中,则为该“小写”命令分配缓存单元。
根据本发明的一个实施方式,对于“小写”命令是否命中缓存单元,可以通过识别缓存单元记录的逻辑地址范围是否包含该“小写”命令的逻辑地址范围来确定。如果该“小写”命令的逻辑地址范围被包含在某一缓存单元的逻辑地址范围中,则该“小写”命令命中了该缓存单元,否则,认为该“小写”命令没有命中该缓存单元。
在“小写”命令命中缓存单元时,可能存在两种情况。(1)缓存单元中,由该“小写”命令所指示的逻辑地址范围未被写入数据(参看图5);(2)缓存单元中,由该“小写”命令所指示的逻辑地址范围已被写入数据(参看图6A)。
图5示出了根据本发明实施例的前端缓存的示意图。如图5所示,缓存单元的缓存子单元A和C中均存储有数据,而缓存子单元B和D中未存储有任何数据。而小写命令命中了该缓存单元,并将要在未被写入任何数据的缓存子单元B和/或D写入数据。在图5的例子中,所命中的缓存子单元B和/或D未被写入数据,则可以直接向所命中的缓存单元写入对应的数据。一般地,如果“小写”命令访问的逻辑地址范围同所命中的缓存单元所包含的数据的逻辑地址范围不重叠,则可以直接向所命中的缓存单元写入对应的数据。
图6A和图6B示出了根据本发明一个实施方式的写命令命中缓存单元时的另一个状态变化示意图。如图6A所示,缓存单元的缓存子单元B、C和D中存储有数据,而缓存子单元A中未存储有数据,“小写”命令命中了该缓存单元并且要在缓存子单元B和/或D中写入数据。如图6A所示,“小写”命令访问的逻辑地址范围同所述所命中的缓存单元包含的数据的逻辑地址范围重叠,在此情况下,需要发起“清空”过程,将缓存单元中的数据清空,以使得该缓存单元处于“空闲”状态。清空后的缓存单元如图6B所示。然后,再向被清空的缓存单元中写入该“小写”命令所对应的数据。需要理解的是,在清空该缓存单元中的数据时,将“小写”命令挂起,直到该清空操作完成。
如果“小写”命令未命中任何缓存单元,则为该“小写”命令分配新的缓存单元。所分配的新的缓存单元可以是处于“空闲”状态的缓存单元,也可以是处于“繁忙”状态的缓存单元。如果所分配的新的缓存单元是处于“空闲”状态的缓存单元,则将“小写”命令的数据写入到该“空闲”状态的缓存单元中。如果所分配的新的缓存单元可以是处于“繁忙”状态的缓存单元,则先将所分配的缓存单元清空,然后再在被清空的缓存单元中写入“小写”命令所对应的数据。
作为举例,参看图7。图7示出了根据本发明依然另一个实施例的前端缓存的示意图。如图7所示,缓存单元710的元数据中的逻辑地址指示100KB-104KB(不含)的范围。
已经为向逻辑地址空间中100KB开始的地址范围写入1KB数据的写命令分配了缓存单元710(如图7所示)。缓存单元710处于“占用”状态。相应地,缓存单元710的元数据中的逻辑地址指示100KB-104KB(不含)的范围。接下来,响应于接收到访问逻辑地址空间101KB开始的地址范围写入2KB数据的写命令(记为W2)。由于该写命令W2访问的逻辑地址范围也属于缓存单元710的元数据中记录的逻辑地址范围,则将缓存单元710分配给该写命令W2。可选地,如果没有任何缓存单元的元数据中记录了与该写命令W2对应的逻辑地址,则为该写命令W2分配缓存单元。
若缓存单元710处于“繁忙”状态,则将写命令W2加入等待列表或者挂起。若缓存单元710中至少第2与第3个缓存子单元(101K和102K)中未被数据占用,则根据逻辑地址将写命令W2的数据写入缓存单元710的第2与第3个缓存子单元(图7中,指示为101K和102K),以及缓存单元710的状态从“占用”变为“繁忙”。
可以理解的是,图7中“100K”指示的逻辑地址范围为100K-101K(不含),类似地,“103K”指示的逻辑地址范围是103K至104K(不含)。
图8示出了根据本发明实施例的清空前端缓存的缓存单元的示意图。如图8所示,图8中的示例性缓存单元810包括缓存子单元A,B,C和D,其中,“小写”命令在缓存子单元C中写入了数据,而缓存子单元A、B和D中未被写入数据。
根据本发明的实施例,当为写命令分配缓存单元时,依据写命令的逻辑地址在缓存单元的元数据中记录缓存单元所对应的逻辑地址。缓存单元所对应的逻辑地址(即,缓存单元的元数据所指示的逻辑地址)范围均按指定边界对齐(例如4KB对齐,其起始地址位于4KB的整数倍地址处,例如,0、4KB、8KB),缓存单元所对应的逻辑地址空间大小为例如4KB。例如,在图8中,在缓存子单元C中写入了数据的“小写”命令访问101KB-102KB(不含)的范围,响应于为该“小写”命令分配缓存单元810,在缓存单元810中按4KB边界对齐设置缓存单元810所对应的逻辑地址范围(100KB-104KB(不含)),以及缓存子单元A对应的逻辑地址范围是100KB-101KB(不含),缓存子单元B对应的逻辑地址范围是101KB-102KB(不含),缓存子单元C对应的逻辑地址范围是102KB-103KB(不含),以及缓存子单元D对应的逻辑地址范围是103KB-104KB(不含)。
“小写”命令在缓存子单元C中写入了数据,根据缓存子单元A、B和D的逻辑地址,从NVM中读取该逻辑地址所对应的数据,并将所读取的数据填充到缓存子单元A、B和D中。以及当缓存单元810的缓存子单元A、B、C与D都被填充了数据,将缓存单元810的数据整体写入NVM。
实施例3
在根据本发明的实施例3中,缓存单元的状态包括“空闲”(Free)状态、“占用”(Dirty)状态和“繁忙”(Busy)状态。
表2是实施例3的缓存单元的状态转换表。
表2
如表2所示,缓存单元最初处于“空闲”状态。写命令将数据写入其中的某些缓存子单元后,即向主机发送ACK(应答)消息以指示写入操作完成,并记录被写入数据的这些缓存子单元。以及,根据那些未被写入数据的缓存子单元的地址范围,就未被写入数据的缓存子单元发起从NVM读数据的操作。以及,缓存单元的状态变为“占用”状态。
当缓存单元处于“占用”状态时,意味着缓存单元中至少有一些缓存子单元中存储有数据。在此情况下,若收到的写命令访问之前被写入数据的缓存子单元,则依据写命令将数据写入这些缓存子单元;若收到的写命令访问之前未被写入数据的缓存子单元,同样依据写命令将数据写入这些缓存子单元。当依据写命令向缓存子单元写入数据后,向主机发送ACK消息以指示写命令处理完成,此时,缓存单元处于“占用”状态。
在另一种情形下,当缓存单元处于“占用”状态,并且某些缓存子单元已被填充了来自NVM的数据,在此情况下,如果写命令访问这些已被填充了来自NVM的数据的缓存子单元,则将该写命令挂起,等待将缓存单元清空。此时,缓存单元依然处于“占用”状态。
当所有从NVM读出的数据被写入缓存子单元中时,将该缓存单元中的数据整体写入到NVM(也称为该缓存单元被“清空”)。缓存单元的状态从“占用”状态变为“繁忙”状态。,并且在将缓存单元的数据整体写入NVM的过程中,缓存单元的状态保持为“繁忙”状态。
如果缓存单元处于“繁忙”状态,则命中该缓存单元的写命令被挂起,直到缓存单元从“繁忙”状态变为“空闲”状态。
当缓存单元中的数据被整体写入到NVM之后,缓存单元被清空,此时缓存单元的状态从“繁忙”变为“空闲”。
作为举例,有四个写命令(分别记为W3、W4、W5与W6)。写命令W3向逻辑地址200KB写入1KB数据,写命令W4向逻辑地址300KB写入1KB数据,而写命令W5向逻辑地址201KB写入2KB数据;W6向逻辑地址203KB写入1KB数据。图9A-图9E示出了在不同写入命令的情况下各个缓存单元的状态以及缓存子单元中数据的变化情况。
以及有处于“空闲”状态的缓存单元910与缓存920。
首先,如图9A所示,响应于接收到写命令W3,为写命令W3分配缓存单元910。作为响应,在缓存单元910的元数据中标记逻辑地址范围200KB-204KB(不含)。依据写命令W3访问逻辑地址200KB开始的第1个1KB空间,将写命令W3的数据写入缓存子单元912。在元数据中记录逻辑单元910的状态从“空闲”变为“占用”,以及记录缓存子单元(912)被写入数据。以及从未被写入数据的缓存子单元(914、916与918)对应的逻辑地址范围(201KB-204KB(不含))读取数据。
此时,缓存单元920依然处于“空闲”状态。
接下来,如图9B所示,响应于接收到写命令W4,其访问的逻辑地址位于300KB开始的1KB空间。经查询,没有任何一个缓存单元的逻辑地址范围包含写命令W4访问的地址范围,因而为写命W4分配“空闲”状态的缓存单元920,并将写命令W4的数据写入子缓存单元922。以及在缓存单元920的元数据中标记逻辑地址范围300KB-304KB(不含),状态为“占用”,并且记录第1个缓存子单元922被写入数据。以及从未被写入数据的缓存子单元(924、926和928)对应的逻辑地址范围(301KB-304KB(不含))读取数据。
参看图9C,响应于接收到写命令W5,其访问的逻辑地址位于201KB开始的2KB空间。通过查询缓存单元的逻辑地址,发现缓存单元910的逻辑地址范围覆盖了写命令W5访问的逻辑地址范围。由于缓存单元910处于“占用”状态,以及缓存子单元914与916尚未被写入数据,将写命令W5要写入的数据,写入缓存单元910的缓存子单元914与916。缓存单元910的状态依然为“占用”,以及标记缓存子单元912、914和916被写入数据。
需要理解的是,当本申请中描述某缓存单元处于“占用”状态时,表明的是该缓存单元中至少有一个缓存子单元被占用,但此时,该缓存单元中还可能存在其他未被写入数据的缓存子单元,这些未被写入数据的缓存子单元仍可被用于承载来自写命令的数据。
当写命令W5将数据写入到缓存单元之后,可以发出消息,以指示缓存单元处于“占用”状态和/或被占用的位置,特别是被写命令W5新占用的位置(例如缓存子单元914和916)。可以理解的是,该消息可以并不发送给主机。
接下来,参看图9D,收到从NVM读出的逻辑地址范围201KB-204KB(不含)的数据。由于对应逻辑地址范围201KB起的2KB空间的子缓存单元914和916被写入来自写命令W5的数据,所以对应于此地址范围的读出数据将被丢弃。以及将从逻辑地址203KB-204KB(不含)读出的数据写入缓存子单元918。
响应于缓存单元910的所有缓存子单元都被填充数据(来自写命令的数据和/或从对应逻辑地址范围读出的数据),用缓存单元910的数据完整地写入逻辑地址范围200KB-204KB(不含),并将正处于该写入过程的缓存单元910的状态设置为“繁忙”。
类似地,对于缓存单元920,响应于接收到从逻辑地址范围301KB-304KB(不含)读出的数据,并写入缓存单元920中未被写入数据的缓存子单元(924/926/928),用缓存单元920的完整数据写入逻辑地址300KB-304KB(不含),并将处于该写入过程的缓存单元920的状态设置为“繁忙”。
接下来,继续参看图9D,响应于接收到写命令W6,查询缓存单元发现缓存单元910的元数据中的逻辑地址范围覆盖了写命令W6的逻辑地址,但由于缓存单元910处于“繁忙”状态,暂停对写命令W6的处理。以及可选地,在缓存单元910的状态从“繁忙”状态变为“空闲”状态后,再处理写命令W6。
参看图9E,响应于将缓存单元910的数据完整地写入逻辑地址范围200KB-204KB(不含)的处理完成,缓存单元910的状态从“繁忙”变为“空闲”。类似地,响应于将缓存单元920的数据完整地写入逻辑地址范围300KB-304KB(不含)的处理完成,缓存单元920的状态从“繁忙”变为“空闲”。
实施例4
根据本发明的实施例4,将多个缓存单元分成两组。每组包括一个或多个缓存单元。一组仅接收写命令的数据,另外一组仅用于处理清空操作。这将避免来自写命令的数据与来自NVM的数据在缓存单元上的冲突,有利地提升写命令处理速度。
图10示出了根据本发明实施例4的处理向NVM写入数据的写命令的方法流程图。如图10所示,该方法包括如下操作:在操作S1010,接收写命令;在操作S1020,响应于写命令对应的数据被写入属于第一组的第一缓存单元的第一部分,向主机发送指示写命令处理完成的消息;以及,在操作S1030,将属于第二组的至少第二缓存单元的数据写入NVM。
组可以具有两种状态:“工作”(working)状态和“交换”(Swaping)状态。表3是处于“工作”状态的组中的缓存单元的状态转换表。表4是处于“交换”状态的组中的缓存单元的状态转换表。
处于“工作”状态的组的缓存单元仅用于承载写命令的数据。换句话说,写命令对应的数据仅被写入属于“工作”状态的组的缓存单元。而在处于“交换”状态的组的缓存单元上仅发生清空操作。在清空操作中,对于处于“交换”状态的组中的缓存单元,根据其未被写入数据的缓存子单元的逻辑地址范围从NVM读出数据,并将读出的数据填充到相应的缓存子单元中。对于处于“交换”状态的组中的其所有缓存子单元都被写入数据(无论是写命令的数据还是从NVM读出的数据)的缓存单元,将缓存单元的数据整体写入NVM。
处于“交换”状态的组中的所有缓存单元不承载写命令,处于“工作”状态的存储单元组中的所有缓存单元不承载将缓存单元的数据写入NVM的任务(清空任务)。从而处理“小写”命令时,无需等待从NVM读出数据、拼接数据再写入NVM的过程,进一步加快了“小写”命令的处理。
参看表3,处于“工作”状态的组中的缓存单元可能处于“空闲”状态或“占用”状态。处于“空闲”状态的缓存单元可被分配来响应写命令。响应于写命令的数据被写入缓存子单元,缓存单元从“空闲”状态变为“占用”状态。响应于写命令的数据被写入缓存单元,生成确认(ACK)消息以向主机指示写命令处理完成。以及还在缓存单元的元数据中记录被写入数据的缓存子单元。
处于“占用”状态的缓存单元也可以响应写命令。若写命令命中了处于“占用”状态的缓存单元,响应于写命令的数据被写入被命中的缓存单元,生成确认(ACK)消息以向主机指示写命令处理完成,并且该缓存单元依然处于“占用”状态。以及还在缓存单元的元数据中记录被写入数据的缓存子单元。
表3
参考表4,处于“交换”状态的组中的缓存单元可能处于“空闲”状态或“占用”状态。
响应于缓存单元进入处于“交换”状态的组,对于“空闲”状态的缓存单元无需进行任何操作,而对处于“占用”状态的缓存单元发起清空操作,将缓存单元中的全部数据写到缓存单元的元数据所指示的逻辑地址范围。具体而言,若缓存单元中的所有缓存子单元均被占用,直接将缓存单元中的完整数据写入元数据所指示的逻辑地址范围。若缓存单元中的部分缓存子单元未被占用,从未被占用的缓存子单元对应的逻辑地址读出数据填充未被占用的缓存子单元。在缓存单元的所有未被占用的缓存子单元均填充数据后,将缓存单元中的完整数据写入元数据所指示的逻辑地址范围。以及缓存单元从“占用”状态变为“空闲”状态。
表4
在指定情况下,将处于“工作”状态的组中的缓存单元设置为处于“交换”状态的组中,以及/或者,可以将处于“交换”状态的组中的缓存单元设置为处于“工作”状态的组中。需要理解的是,这种状态组的转换可以是独立的,例如,可以将某个(些)特定的缓存单元从属于“工作”状态的组转换到属于“交换”状态的组,此时并不必然要求也将属于交换“交换”状态的组的存储单元转换到属于“工作”状态的组。两组的转换也可以是相关联的,例如,可以交换两组中的缓存单元。
在指定条件下,存储单元组的状态在“工作”状态与“交换”状态之间转换。例如,该指定条件可以为一定的时间段,即在该时间段到期时,发生状态的转换。
作为举例,该指定条件可以为,属于“交换”状态的组的缓存单元的清空操作完成。一旦一个缓存单元的清空操作完成,则将该缓存单元从属于交换状态的组转换为属于“工作”状态的组。在另一个例子中,在一定数量或比例的缓存单元的清空操作完成后,将这些缓存单元从属于“交换”状态的组转换为属于“工作”状态的组。还可以是当属于“交换”状态的组的全部的缓存单元的清空操作后完成,将这些缓存单元从属于“交换”状态的组转换为属于“工作”状态的组。
在另一个例子中,该指定条件为,属于“工作”状态的组中的缓存单元中存储的数据量达到指定阈值。
在依然又一个例子中,该指定条件是,属于“工作”状态的组的缓存单元中被写入数据的缓存单元的数量达到指定阈值。该例子与上面例子的区别在于,本例考虑的是被写入数据的缓存单元的数量,而上一例子考虑的是缓存单元中被写入的数据的量。
上述的指定阈值可以根据实际情况来由本领域技术人员设置,在此,该指定阈值的具体大小并不对本申请要求保护的范围构成任何限制。
下面通过结合图11A-11C详细描述实施例4。
图11A-11C示出了根据本发明另一个实施方式的在不同写入命令的情况下各个缓存单元的状态以及缓存子单元中数据的变化情况。
作为举例,有四个写命令(分别记为W7、W8、W9与W10)。写命令W7向逻辑地址200KB写入4KB数据,写命令W8向逻辑地址303KB写入1KB数据,写命令W9向逻辑地址201KB写入1KB数据;W10向逻辑地址60KB写入4KB数据。
首先,如图11A所示,缓存单元1110与缓存单元1120属于第一组,且处于“工作”状态;缓存单元1130与缓存单元1140属于第二组,且处于“交换”状态。
响应于接收到写命令W7,查询第一组中的缓存单元的元数据。由于第一组中的任何缓存单元的元数据中未记录覆盖了写命令W7的逻辑地址范围的逻辑地址范围,因而写命令W7未命中任何缓存单元,为写命令W7分配例如缓存单元1110。
作为响应,在缓存单元1110的元数据中标记逻辑地址范围200KB-204KB(不含)。依据写命令W7访问逻辑地址200KB开始的4KB空间,将写命令W7的数据写入缓存单元1110的4个缓存子单元(1112/1114/1116/1118)。逻辑单元1110的状态从“空闲”变为“占用”,以及记录4个缓存子单元(1112/1114/1116/1118)被写入数据。
响应于接收到写命令W8,查询第一组中的缓存单元的元数据。由于第一组中的任何缓存单元的元数据中都未记录覆盖了写命令W8的逻辑地址范围的逻辑地址范围,因而写命令W8未命中任何缓存单元,为写命令W8分配例如缓存单元1220。
作为响应,在缓存单元1120的元数据中标记逻辑地址范围300KB-304KB(不含)。依据写命令W8访问逻辑地址303KB开始的1KB空间,将写命令W8的数据写入缓存单元1120的第4个缓存子单元(1128)。逻辑单元1120的状态从“空闲”变为“占用”,以及记录缓存子单元(1128)被写入数据。
继续参看图11A,处于“交换”状态的第二组包括缓存单元1130与缓存单元1140。缓存单元1130例如处于“占用”状态,其4个缓存子单元(1132/1134/1136/1138)均被写入数据,逻辑地址范围为100K-104K(不含)。响应于第二组进入“交换”状态,将缓存单元1130的数据完整地写入逻辑地址100K开始的4K逻辑地址空间。
缓存单元1140处于“占用”状态,其中仅缓存子单元1142被写入数据。缓存单元1140的逻辑地址范围为20KB-24KB(不含)。响应于第二组进入“交换”状态,要将缓存单元1140中的数据写入NVM。由于仅缓存子单元1142被写入数据,所以向其他缓存子单元(1144/1146/1148)对应的逻辑地址范围(21KB-24KB(不含))发出读请求,并将读出的数据填入对应的缓存子单元(1144/1146/1148)。期间,缓存单元1140保持“占用”状态。
在缓存单元1140的所有缓存子单元都被填充了数据之后,将该缓存单元1140的数据完整地写入NVM。
图11B展示了接收到写命令W9。响应于接收到写命令W9,查询第一组中的缓存单元的元数据。由于缓存单元1110的元数据中记录的逻辑地址200-204KB(不含)包含了写命令W9访问的逻辑地址范围,所以W9命中了缓存单元1110。将写命令W9要写入的数据写入缓存单元1110的缓存子单元1114(覆盖了写命令W7的数据)。以及在元数据中记录缓存子单元1114被写入数据,缓存单元1110依然处于“占用”状态。可选地,由于在响应写命令W9时缓存子单元1114已经被写入数据,可以无需重复记录缓存子单元1114已被写入数据。
在依然本发明的另一实施方式中,由于缓存子单元1114中之前存在写命令W7写入的数据,写命令W9访问的逻辑地址同写命令W7访问的逻辑地址范围重叠,作为响应,从第一组中为写命令W9分配新的缓存单元。如果没有新缓存单元可用,则暂停对写命令W9的处理,直到为写命令W9分配了新的缓存单元。
尽管上面示出了写命令W9命中的缓存单元的缓存子单元中已被写入了数据,但也可能出现写命令命中的缓存单元的缓存子单元中不存在任何数据的情况。换言之,若在后写命令访问的逻辑地址范围同在前写命令访问的逻辑地址范围不存在重叠,那么,可以直接向所命中的缓存单元的相应缓存子单元中写入在后写命令的数据。
对于属于第二组的缓存单元1130与缓存单元1140,响应于缓存单元1130与缓存单元1140中的数据被写入NVM,或者缓存单元1130和1140被清空,缓存单元1130/1140的状态均从“占用”变为“空闲”,以及可选地清除关于其缓存子单元被写入数据的信息。
参看图11C,响应于第二组中的缓存单元的状态均变为“空闲”,将第一组与第二组“交换”,第一组变为处于“交换”状态,而第二组变为处于“工作”状态。可选地,第一组的状态不依赖于第二组的状态或状态变化,即第一组和第二组的状态相互独立,这在上文中已经进行了详细的描述。
在交换之后,由于第二组处于“工作”状态,由缓存单元1130/1140来承载写命令。响应于接收到写命令W10(图11C),查询第二组中的缓存单元的元数据。由于第二组中的缓存单元均处于空闲状态,第二组中任何缓存单元的元数据都未记录覆盖了写命令W10的逻辑地址范围的逻辑地址范围,因而写命令W10未命中任何缓存单元,为写命令W10分配缓存单元1130。作为响应,在缓存单元1130的元数据中标记逻辑地址范围60KB-64KB(不含)。依据写命令W10访问逻辑地址60KB开始的4KB空间,将写命令W10的数据写入缓存单元1130的4个缓存子单元(1132/1134/1136/1138)。逻辑单元1130的状态从“空闲”变为“占用”,以及记录4个缓存子单元(1132/1134/1136/1138)被写入数据。
响应于第一组变为处于“交换”状态,就缓存单元1110与缓存单元1120发起清空操作,将其中的数据写入NVM。由于缓存单元1110的缓存子单元均被写入数据,所以将缓存单元1110的数据整体写入逻辑地址200KB开始的4KB空间。由于缓存单元1120中仅缓存子单元1128被写入数据,从对应未被占用的缓存子单元(1122/1124/1126)的逻辑地址范围(300KB-303KB(不含))读出数据,并填充未被写入数据的缓存子单元(1122/1124/1126)。以及在缓存单元1120的所有缓存子单元都被写入数据后,将缓存单元1120的数据整体写入逻辑地址范围(300KB-304KB(不含))的4KB空间。
在本申请的实施例中,确定第一组和第二组中缓存单元的数量的方式可以有多种,例如,可以平均划分第一组和第二组中缓存单元的数量,也可以按照特定的比例来确定各个组中缓存单元的数量。
根据一个实施方式,根据写入操作的处理时长与读取操作的处理时长之比来确定第一组和第二组中缓存单元的数量。例如,如果一个写命令的平均处理时长为T1,写命令的平均数量为N1,而一个读命令的平均处理时长为T2,读命令的平均数量为N2,则为了保持读写之间的均衡,可以按照T1*N1:T2*N2的比例来确定第一组与第二组中缓存单元数量的比例。
需要理解的是,上述确定第一组与第二组中缓存单元数量的方式仅仅为示例性的,本领域技术人员可以采用任何适当的方式来确定该比例,本公开所提供的实际例子并不会对本申请的范围造成任何限制。
本申请的方法和装置可以以硬件、软件、固件以及上述中的任意组合来实现。硬件可以包括数字电路、模拟电路、数字信号处理器(DSP)、专用继承电路(ASIC)等等。软件可以被记录于计算机可读存储介质,这些计算机可读存储介质在被处理器执行时,实现本申请实施例所提供的方法。
例如,本发明可以在控制器中实施,该控制器可以包括:一个或者多个处理器;存储器;存储在存储器中的程序,当被所述一个或者多个处理器执行时,程序使出其里执行本申请实施例所提供的方法。
本申请的软件还可以存储在计算机可读存储介质,例如硬盘,光盘等等中,该计算机可读存储介质存储有程序,当所述程序被一个设备执行时,使得所述设备进行本申请实施例所提供的方法。
上面的描述仅仅是对本发明示例性而非穷尽式的描述,本领域技术人员可以对上述方法、设备、装置、模块等进行添加,删减、修改、替换等等,而并不脱离本发明的实质和保护范围。
Claims (7)
1.一种处理写命令的方法,包括:
接收写命令;
如果所述写命令命中缓存单元,则向被命中的缓存单元中写入数据;
如果所述写命令未命中缓存单元,则为所述写命令分配缓存单元。
2.根据权利要求1所述的方法,进一步包括:
如果在所分配的缓存单元中存储有数据,则在将所分配的缓存单元中存储的数据清空前,暂定对所述写命令的执行。
3.根据权利要求1或2所述的方法,进一步包括:
如果所分配的缓存单元中未存储有效数据,则向所述缓存单元中写入对应于所述写命令的数据。
4.根据权利要求1所述的方法,其中,
根据缓存单元的大小,将所述写命令拆分为多个子命令,其中每个子命令所访问的逻辑地址的范围不超过一个缓存单元的逻辑地址的范围。
5.根据权利要求4所述的方法,其中,
若所述多个子命令中的任何子命令命中对应的缓存单元,则将命中了缓存单元的子命令对应的数据写入到所命中的缓存单元中,而不管其他子命令是否命中缓存单元。
6.根据权利要求1-5中任意一项所述的方法,进一步包括:
响应于将所述写命令所对应的数据写入缓存单元,向主机指示所述写命令处理完成。
7.根据权利要求1-6中任意一项所述的方法,响应于掉电,利用备用电源将缓存单元中的数据写入NVM。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810767761.8A CN109164976B (zh) | 2016-12-21 | 2016-12-21 | 利用写缓存优化存储设备性能 |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201611193448.5A CN108228470B (zh) | 2016-12-21 | 2016-12-21 | 一种处理向nvm写入数据的写命令的方法和设备 |
CN201810767761.8A CN109164976B (zh) | 2016-12-21 | 2016-12-21 | 利用写缓存优化存储设备性能 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611193448.5A Division CN108228470B (zh) | 2016-12-21 | 2016-12-21 | 一种处理向nvm写入数据的写命令的方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109164976A true CN109164976A (zh) | 2019-01-08 |
CN109164976B CN109164976B (zh) | 2021-12-31 |
Family
ID=62656736
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810767761.8A Active CN109164976B (zh) | 2016-12-21 | 2016-12-21 | 利用写缓存优化存储设备性能 |
CN201611193448.5A Active CN108228470B (zh) | 2016-12-21 | 2016-12-21 | 一种处理向nvm写入数据的写命令的方法和设备 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201611193448.5A Active CN108228470B (zh) | 2016-12-21 | 2016-12-21 | 一种处理向nvm写入数据的写命令的方法和设备 |
Country Status (1)
Country | Link |
---|---|
CN (2) | CN109164976B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110968520B (zh) * | 2018-09-30 | 2024-04-12 | 北京忆恒创源科技股份有限公司 | 基于统一缓存架构的多流存储设备 |
CN110968528B (zh) * | 2018-09-30 | 2024-05-28 | 北京忆恒创源科技股份有限公司 | 应用统一缓存架构为非易失存储介质组装数据 |
CN111176826A (zh) * | 2018-11-13 | 2020-05-19 | 北京忆芯科技有限公司 | 基于资源分配优化的命令处理方法 |
CN114840452A (zh) * | 2018-12-24 | 2022-08-02 | 北京忆芯科技有限公司 | 一种控制部件 |
CN109918352B (zh) * | 2019-03-04 | 2021-11-05 | 北京百度网讯科技有限公司 | 存储器***和存储数据的方法 |
CN110007859B (zh) * | 2019-03-27 | 2022-04-08 | 新华三云计算技术有限公司 | 一种i/o请求处理方法、装置及客户端 |
CN111831306B (zh) * | 2020-03-26 | 2021-07-20 | 成都万创科技股份有限公司 | 一种基于网卡NVM的串号和ProjectName读写方法 |
Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1273392A (zh) * | 1999-05-07 | 2000-11-15 | 英业达集团(南京)电子技术有限公司 | 一种新型的快擦写存储器结构及操作方法 |
CN1851673A (zh) * | 2005-12-13 | 2006-10-25 | 华为技术有限公司 | 处理器***及其数据操作方法 |
US20090240894A1 (en) * | 2002-08-28 | 2009-09-24 | Intel Corporation | Method and aparatus for the synchronization of distributed caches |
CN101819509A (zh) * | 2010-04-19 | 2010-09-01 | 清华大学深圳研究生院 | 一种固态硬盘读写方法 |
CN101840310A (zh) * | 2009-12-25 | 2010-09-22 | 创新科存储技术有限公司 | 数据读写方法及应用该方法的磁盘阵列*** |
CN103198840A (zh) * | 2012-01-05 | 2013-07-10 | 国际商业机器公司 | 带存储装置 |
CN103218337A (zh) * | 2013-03-13 | 2013-07-24 | 北京安拓思科技有限责任公司 | 基于wishbone总线实现主与主、从与从通信的片上***和方法 |
CN103257935A (zh) * | 2013-04-19 | 2013-08-21 | 华中科技大学 | 一种缓存管理方法及其应用 |
US20150058560A1 (en) * | 2011-04-14 | 2015-02-26 | International Business Machines Corporation | Writing adjacent tracks to a stride, based on a comparison of a destaging of tracks to a defragmentation of the stride |
CN104899158A (zh) * | 2014-03-05 | 2015-09-09 | 华为技术有限公司 | 访存优化方法和装置 |
CN104991743A (zh) * | 2015-07-02 | 2015-10-21 | 西安交通大学 | 应用于固态硬盘阻变存储器缓存的损耗均衡方法 |
CN105474183A (zh) * | 2013-09-27 | 2016-04-06 | 英特尔公司 | 存储器管理 |
CN105528180A (zh) * | 2015-12-03 | 2016-04-27 | 浙江宇视科技有限公司 | 一种数据存储方法、装置及设备 |
CN105740164A (zh) * | 2014-12-10 | 2016-07-06 | 阿里巴巴集团控股有限公司 | 支持缓存一致性的多核处理器、读写方法、装置及设备 |
CN105872040A (zh) * | 2016-03-30 | 2016-08-17 | 华中科技大学 | 一种利用网关节点缓存优化分布式块存储写性能的方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8341332B2 (en) * | 2003-12-02 | 2012-12-25 | Super Talent Electronics, Inc. | Multi-level controller with smart storage transfer manager for interleaving multiple single-chip flash memory devices |
WO2003085677A1 (fr) * | 2002-04-05 | 2003-10-16 | Renesas Technology Corp. | Memoire non volatile |
CN101963891A (zh) * | 2010-09-25 | 2011-02-02 | 成都市华为赛门铁克科技有限公司 | 数据存储处理方法与装置、固态硬盘***与数据处理*** |
CN102955751B (zh) * | 2011-08-17 | 2015-11-18 | 群联电子股份有限公司 | 存储器储存装置、存储器控制器与数据写入方法 |
KR101856506B1 (ko) * | 2011-09-22 | 2018-05-11 | 삼성전자주식회사 | 데이터 저장 장치 및 그것의 데이터 쓰기 방법 |
CN103324441A (zh) * | 2012-03-19 | 2013-09-25 | 联想(北京)有限公司 | 一种信息处理方法及电子设备 |
CN102799392B (zh) * | 2012-06-16 | 2015-12-16 | 北京忆恒创源科技有限公司 | 存储设备及其中断控制方法 |
US9076530B2 (en) * | 2013-02-07 | 2015-07-07 | Seagate Technology Llc | Non-volatile write buffer data retention pending scheduled verification |
CN103559146B (zh) * | 2013-11-05 | 2016-03-30 | 山东大学 | 一种提高NAND flash控制器读写速度的方法 |
CN104750621B (zh) * | 2013-12-27 | 2018-04-06 | 珠海全志科技股份有限公司 | 缓存方法及控制*** |
-
2016
- 2016-12-21 CN CN201810767761.8A patent/CN109164976B/zh active Active
- 2016-12-21 CN CN201611193448.5A patent/CN108228470B/zh active Active
Patent Citations (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1273392A (zh) * | 1999-05-07 | 2000-11-15 | 英业达集团(南京)电子技术有限公司 | 一种新型的快擦写存储器结构及操作方法 |
US20090240894A1 (en) * | 2002-08-28 | 2009-09-24 | Intel Corporation | Method and aparatus for the synchronization of distributed caches |
CN1851673A (zh) * | 2005-12-13 | 2006-10-25 | 华为技术有限公司 | 处理器***及其数据操作方法 |
CN101840310A (zh) * | 2009-12-25 | 2010-09-22 | 创新科存储技术有限公司 | 数据读写方法及应用该方法的磁盘阵列*** |
CN101819509A (zh) * | 2010-04-19 | 2010-09-01 | 清华大学深圳研究生院 | 一种固态硬盘读写方法 |
US20150058560A1 (en) * | 2011-04-14 | 2015-02-26 | International Business Machines Corporation | Writing adjacent tracks to a stride, based on a comparison of a destaging of tracks to a defragmentation of the stride |
CN103198840A (zh) * | 2012-01-05 | 2013-07-10 | 国际商业机器公司 | 带存储装置 |
CN103218337A (zh) * | 2013-03-13 | 2013-07-24 | 北京安拓思科技有限责任公司 | 基于wishbone总线实现主与主、从与从通信的片上***和方法 |
CN103257935A (zh) * | 2013-04-19 | 2013-08-21 | 华中科技大学 | 一种缓存管理方法及其应用 |
CN105474183A (zh) * | 2013-09-27 | 2016-04-06 | 英特尔公司 | 存储器管理 |
CN104899158A (zh) * | 2014-03-05 | 2015-09-09 | 华为技术有限公司 | 访存优化方法和装置 |
CN105740164A (zh) * | 2014-12-10 | 2016-07-06 | 阿里巴巴集团控股有限公司 | 支持缓存一致性的多核处理器、读写方法、装置及设备 |
CN104991743A (zh) * | 2015-07-02 | 2015-10-21 | 西安交通大学 | 应用于固态硬盘阻变存储器缓存的损耗均衡方法 |
CN105528180A (zh) * | 2015-12-03 | 2016-04-27 | 浙江宇视科技有限公司 | 一种数据存储方法、装置及设备 |
CN105872040A (zh) * | 2016-03-30 | 2016-08-17 | 华中科技大学 | 一种利用网关节点缓存优化分布式块存储写性能的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN109164976B (zh) | 2021-12-31 |
CN108228470B (zh) | 2021-05-18 |
CN108228470A (zh) | 2018-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108572796B (zh) | 具有异构nvm类型的ssd | |
CN109164976A (zh) | 利用写缓存优化存储设备性能 | |
CN102693198B (zh) | Dma传输方法及*** | |
CN102681952B (zh) | 将数据写入存储设备的方法与存储设备 | |
US8924659B2 (en) | Performance improvement in flash memory accesses | |
CN107885456A (zh) | 减少io命令访问nvm的冲突 | |
CN105095116A (zh) | 缓存替换的方法、缓存控制器和处理器 | |
CN107797759B (zh) | 访问缓存信息的方法、装置与驱动器 | |
US11416162B2 (en) | Garbage collection method and storage device | |
CN107797760B (zh) | 一种访问缓存信息的方法、装置与固态驱动器 | |
JP2015035010A (ja) | メモリシステムおよび情報処理装置 | |
CN108228483B (zh) | 处理原子写命令的方法和设备 | |
CN115993930A (zh) | 用于有序访问块修改存储器中的数据的***、方法和装置 | |
CN107229580A (zh) | 顺序流检测方法与装置 | |
CN115048034A (zh) | 用于sgl的存储空间映射方法及其装置 | |
CN109840048A (zh) | 存储命令处理方法及其存储设备 | |
CN109213425A (zh) | 利用分布式缓存在固态存储设备中处理原子命令 | |
CN110968527B (zh) | Ftl提供的缓存 | |
CN109815157A (zh) | 编程命令处理方法与装置 | |
CN108877862A (zh) | 页条带的数据组织以及向页条带写入数据的方法与装置 | |
CN107885667A (zh) | 降低读命令处理延迟的方法与装置 | |
CN108664212A (zh) | 固态存储设备的分布式缓存 | |
CN110515861B (zh) | 处理刷写命令的存储设备及其方法 | |
CN111290975A (zh) | 使用统一缓存处理读命令与预读命令的方法及其存储设备 | |
CN111290974A (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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: 100192 room A302, building B-2, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing Applicant after: Beijing yihengchuangyuan Technology Co.,Ltd. Address before: 100192 room A302, building B-2, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing Applicant before: BEIJING MEMBLAZE TECHNOLOGY Co.,Ltd. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |