CN110580228A - 去分配命令处理方法及其存储设备 - Google Patents

去分配命令处理方法及其存储设备 Download PDF

Info

Publication number
CN110580228A
CN110580228A CN201810594487.9A CN201810594487A CN110580228A CN 110580228 A CN110580228 A CN 110580228A CN 201810594487 A CN201810594487 A CN 201810594487A CN 110580228 A CN110580228 A CN 110580228A
Authority
CN
China
Prior art keywords
deallocation
command
allocation
address
processing
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
CN201810594487.9A
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.)
Beijing Memblaze Technology Co Ltd
Original Assignee
Beijing Memblaze 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 Beijing Memblaze Technology Co Ltd filed Critical Beijing Memblaze Technology Co Ltd
Priority to CN201810594487.9A priority Critical patent/CN110580228A/zh
Priority to US17/044,457 priority patent/US11397672B2/en
Priority to PCT/CN2018/093483 priority patent/WO2019105029A1/zh
Publication of CN110580228A publication Critical patent/CN110580228A/zh
Priority to US17/846,524 priority patent/US20220327049A1/en
Pending legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0238Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory
    • G06F12/0246Memory management in non-volatile memory, e.g. resistive RAM or ferroelectric memory in block erasable memory, e.g. flash memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • 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
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0629Configuration or reconfiguration of storage systems
    • 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
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]

Abstract

本申请公开了处理去分配命令的方法及其存储设备,该方法包括如下步骤:响应于接收到去分配命令,获取去分配命令所指示的地址范围;根据去分配命令所指示的地址范围,更新去分配表的表项。本申请可以降低去分配命令以及处理去分配命令对IO命令处理造成的延迟,减轻降低处理去分配命令对IO命令处理带宽的影响,并进一步降低垃圾回收过程引入的写放大。

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,阻变存储器)等是常见的NVM。
接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SAS、以太网、光纤通道等方式与主机交换数据。
控制部件104用于控制在接口103、NVM芯片105以及DRAM 110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。控制部件104可通过软件、硬件、固件或其组合的多种方式实现,例如,控制部件104可以是FPGA(Field-programmable gate array,现场可编程门阵列)、ASIC(Application SpecificIntegrated Circuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理IO(Input/Output)命令。控制部件104还可以耦合到DRAM 110,并可访问DRAM 110的数据。在DRAM可存储FTL表和/或缓存的IO命令的数据。
控制部件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闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。
存储介质上通常按页来存储和读取数据。而按块来擦除数据。块(也称物理块)包含多个页。块包含多个页。存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节。物理页也可以具有其他的尺寸。
大块包括来自多个逻辑单元(LUN),也称为逻辑单元组的每个的物理块。每个逻辑单元可以为大块提供一个物理块。例如,在图2所示出的大块的示意图中,在每16个逻辑单元(LUN)上构造大块。每个大块包括16个分别来自16个逻辑单元(LUN)的物理块。在图2的例子中,大块0包括来自16个逻辑单元(LUN)中的每个逻辑单元的物理块0,而大块1包括来自每个逻辑单元(LUN)的物理块1。也可以以多种其他方式来构造大块。
例如,在大块中构造页条带,每个逻辑单元(LUN)内相同物理地址的物理页构成了“页条带”。图2中,物理页P0-0、物理页P0-1……与物理页P0-x构成了页条带0,其中,物理页P0-0、物理页P0-1……物理页P0-14用于存储用户数据,而物理页P0-x用于存储根据条带内的所有用户数据计算得到的校验数据。类似地,图2中,物理页P2-0、物理页P2-1……与物理页P2-x构成了页条带2。用于存储校验数据的物理页可以位于页条带中的任意位置。作为又一个例子,在申请号为201710752321.0的中国专利申请的图3A及其说明书中对图3A的相关描述中,提供了大块的又一种构造方式。
在固态存储设备中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在相关技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。
存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是固态存储设备中的重要元数据。FTL表的数据项记录了固态存储设备中以数据单元为单位的地址映射关系。在一个例子中,FTL表中的逻辑页对应4KB存储空间,而物理页的存储空间也为4KB(还包括附加的带外存储空间)。FTL表为每个4KB的数据单元提供一条记录,以记录其逻辑地址到物理地址的映射。在另一个例子中,数据单元对应的存储空间大小和物理页的存储空间大小不同,例如物理页可容纳多个数据单元,数据单元对应4KB的存储空间,而物理页的存储空间能够容纳多个数据单元(例如4个)
FTL表包括多个FTL表条目(或称表项)。在一种情况下,每个FTL表条目中记录了一个逻辑页地址与一个物理页的对应关系。在另一种情况下,每个FTL表条目中记录了连续的多个逻辑页地址与连续的多个物理页的对应关系。在又一种情况下,每个FTL表条目中记录了逻辑块地址与物理块地址的对应关系。在依然又一种情况下,FTL表中记录逻辑块地址与物理块地址的映射关系,和/或逻辑页地址与物理页地址的映射关系。
在处理来自主机的读命令时,固态存储设备利用读命令中携带的逻辑地址从FTL表中获得对应的物理地址,并依据物理地址向NVM芯片发出读请求,并接收NVM芯片响应于读请求输出的数据。在处理来自主机的写命令时,固态存储设备为写命令分配物理地址,在FTL表中记录写命令的逻辑地址与分配的物理地址的对应关系,并依据分配的物理地址向NVM芯片发出写请求。
在ATA8-ACS2中定义了Trim(修剪)命令,具有相同或类似含义的命令在SCSI(Small Computer System Interface,小型计算机系统接口)规范中被称为UNMAP(解除映射),而在NVMe规范中被称为Deallocate(去分配)命令。下文中,用“去分配”来指示具有同ATA8-ACS2的“修剪”、SCSI的“解除映射”、NVMe的“去分配”具有相同或相似功能的数据集管理命令,以及也指示在其他或将来的协议、规范或技术中出现的具有相同或相似功能的命令。
在去分配命令中,描述了逻辑地址范围。在执行了去分配命令后,可以有不同的效果。例如,(1)执行去分配命令后,(执行对该逻辑地址范围的其他写入操作之前)再读取去分配命令所指示的逻辑地址范围时,所得到的是确定的;(2)执行去分配命令后,(执行对该逻辑地址范围的其他写入操作之前)再读取去分配命令所指示的逻辑地址范围时,所得到的结果是全0;(3)执行去分配命令后,(执行对该逻辑地址范围的其他写入操作之前)再读取去分配命令所指示的逻辑地址范围时,所得到的结果可以是任意值。在去分配命令或者其他命令中可设置或选择去分配命令的执行效果。
发明内容
通过使用去分配命令,主机能够告知固态硬盘哪些逻辑地址空间不再存储有效数据,从而固态硬盘在回收存储空间时,不必搬移已经失效的数据。然而,现有技术中,随着固态存储设备的存储容量变大,FTL表的尺寸随之增大,导致在执行去分配命令过程中,需要大量的内存访问操作,这严重延长了对去分配命令进行处理的时间,并影响固态硬盘的性能,进而影响对同时发生的IO命令的执行。
需要降低去分配命令的处理延迟。进一步地,需要降低处理去分配命令对IO命令处理造成的延迟。也减轻降低处理去分配命令对IO命令处理带宽的影响。还希望通过对去分配命令的处理,降低垃圾回收过程引入的写放大(WA,Write Amplification)。
本申请的第一方面提供一种处理去分配命令的方法,包括如下步骤:响应于接收到去分配命令,获取去分配命令所指示的地址范围;根据去分配命令所指示的地址范围,更新去分配表的表项。
根据本申请第一方面的处理去分配命令的方法,所述方法还包括:根据去分配命令所指示的地址范围,更新FTL表的表项;其中FTL表记录了同逻辑地址对应的物理地址。
根据本申请第一方面的处理去分配命令的方法,其中FTL表中由去分配命令所描述的逻辑地址范围所指示的FTL表项被设置为特殊标记。
根据本申请第一方面的处理去分配命令的方法,其中去分配表中,存储对应于每个地址是否被去分配的信息。
根据本申请第一方面的处理去分配命令的方法,其中响应于地址被分配,在去分配表中,将该地址标记为被分配。
根据本申请第一方面的处理去分配命令的方法,其中当地址未被分配或者已经被应用了去分配命令时,该地址在去分配表中被标记为去分配。
根据本申请第一方面的处理去分配命令的方法,其中在更新了去分配表后,向主机指示去分配命令执行完成。
根据本申请第一方面的处理去分配命令的方法,其中更新FTL表包括将去分配命令所指示的一个或多个逻辑地址对应的FTL表项设置为指定值。
根据本申请第一方面的处理去分配命令的方法,其中在更新FTL表前,对要更新的一个或多个地址对应的FTL表的表项加锁。
根据本申请第一方面的处理去分配命令的方法,其中在更新FTL表后,对被更新的一个或多个地址对应的FTL表的表项解锁。
本申请的第二方面提供一种固态存储设备,其特征在于,包括:控制部件,执行如上所述的方法;与控制部件连接的外部存储器以及非易失性存储器;
其中去分配表存储在固态存储设备的控制部件的内部存储器或者存储在外部存储器中。
根据本申请第二方面的固态存储设备,其中当固态存储设备断电时,将去分配表写入非易失性存储器。
本申请的第三方面提供一种处理去分配命令的系统,包括:控制部件与外部存储器;控制部件包括分配器与多个CPU,所述分配器,接收IO命令,并将IO命令分配给多个CPU中的每一个;所述多个CPU,用于并行处理接收到的IO命令;外部存储器,存储去分配表。
根据本申请第三方面的处理去分配命令的系统,其中存储器中还存储了FTL表,FTL表记录了同逻辑地址对应的物理地址。
根据本申请第三方面的处理去分配命令的系统,其中去分配表被分为多个部分,每个部分由多个CPU中的一个维护。
根据本申请第三方面的处理去分配命令的系统,其中分配器将去分配命令同时提供给多个CPU中的一个或多个,CPU对去分配命令中与自己维护的去分配表相关的部分进行处理。
根据本申请第三方面的处理去分配命令的系统,其中依据IO命令访问的地址,将IO命令分配给CPU。
根据本申请第三方面的处理去分配命令的系统,其中由分配器根据IO命令访问的逻辑地址将IO命令分配给多个CPU。
根据本申请第三方面的处理去分配命令的系统,其中去分配表记录地址处于去分配状态。
根据本申请第三方面的处理去分配命令的系统,其中对去分配表进行检查,根据记录了去分配状态的去分配表表项,更新FTL表的对应表项,在FTL表项中记录去分配状态。
根据本申请第三方面的处理去分配命令的系统,其中响应于处理去分配命令而更新了去分配表,一个或多个CPU在空闲时或周期性地检查其维护的去分配表。
根据本申请第三方面的处理去分配命令的系统,其中一个或多个CPU保存检查标记。
根据本申请第三方面的处理去分配命令的系统,其中检查标记至少指示了CPU所维护的去分配表中存在至少一项条目被标记为去分配。
根据本申请第三方面的处理去分配命令的系统,其中检查标记还指示对去分配表的检查的进展。
根据本申请第三方面的处理去分配命令的系统,其中CPU仅可更新其维护的去分配表,但可读取全部的去分配表。
根据本申请第三方面的处理去分配命令的系统,其中IO命令访问的地址空间被分为多个区域,每个区域被映射到多个去分配表之一。
根据本申请第三方面的处理去分配命令的系统,其中使得来自主机的去分配命令所访问的地址空间被尽量均匀地映射给各个去分配表的方式将逻辑地址空间映射到去分配表。
根据本申请第三方面的处理去分配命令的系统,其中去分配表的每个表项所指示的地址区域的大小可配置。
本申请的第四方面提供一种,包括如下步骤:将接收的去分配命令同时发送给多个CPU;收到去分配命令的CPU根据去分配命令指示的地址范围,获取去分配命令指示的地址范围中属于自己的去分配表的一个或多个地址,并根据获取的所述一个或多个地址更新自己维护的去分配表,以在该去分配表中记录的所述一个或多个地址被去分配。
根据本申请第四方面的处理去分配命令的方法,其中还包括:根据去分配命令指示的地址范围更新FTL表。
根据本申请第四方面的处理去分配命令的方法,其中定时或周期性的对去分配表进行检查,找出被标记为去分配的第一表项,根据第一表项在FTL表中记录对应的逻辑地址被去分配,并清除去分配表中第一表项的去分配标记。
根据本申请第四方面的处理去分配命令的方法,其中还包括根据去分配命令指示的地址范围更新大块描述符中记录的有效数据量。
根据本申请第四方面的处理去分配命令的方法,其中若检查标记被清除,在处理读命令或写命令时,无须访问去分配表。
根据本申请第四方面的处理去分配命令的方法,其中若检查标记被设置,在处理读命令或写命令时,需要访问去分配表。
根据本申请第四方面的处理去分配命令的方法,响应于收到读命令,查询去分配表;判断读命令所读取的逻辑地址是否被去分配;若去分配表指示读命令所读取的逻辑地址处于去分配状态,则以全0或者其他指定的结果作为对读命令的响应。
根据本申请第四方面的处理去分配命令的方法,若去分配表指示读命令所读取的地址已被分配时,查询FTL表获得物理地址,并从获该得的物理地址读取数据作为对读命令的响应。
根据本申请第四方面的处理去分配命令的方法,还包括如下步骤:响应于收到去分配命令,标记在执行去分配命令的状态。
根据本申请第四方面的处理去分配命令的方法,还包括如下步骤,在执行处于去分配命令的状态时,若收到读命令,则首先查询去分配表,以判断读命令所读取的地址是否被去分配。
根据本申请第四方面的处理去分配命令的方法,还包括如下步骤,当去分配命令执行完成后,标记已经完成去分配命令的执行的状态。
根据本申请第四方面的处理去分配命令的方法,在处于已经完成去分配命令的执行的状态时,若收到读命令,则查询FTL表获得要读取的逻辑地址对应的物理地址,并从获得的物理该地址读取数据作为对读命令的响应。
根据本申请第四方面的处理去分配命令的方法,响应于收到写命令,为写命令分配物理地址,并用写命令所指示的地址更新FTL表;向被分配的物理地址写入数据,;更新去分配表,将被写入的地址在去分配表中的表项设置为已分配。
根据本申请第四方面的处理去分配命令的方法,在更新FTL表之后,向主机反馈写命令处理完成。
本申请的第五方面提供一种存储设备垃圾回收方法,包括如下步骤:根据大块描述符表选择待回收的大块;根据待回收大块,获取待回收的数据的地址;若去分配表须检查,依据待回收数据的地址访问去分配表,若去分配表的对应表项记录了去分配,从待回收大块中获取下一待回收数据的地址。
根据本申请第五方面的存储设备垃圾回收方法,若去分配表的对应表项未记录去分配,则根据待回收数据的地址查询FTL表,以识别待回收数据是否有效;若待回收数据有效,则将待回收数据写入新大块,并更新FTL表。
根据本申请第五方面的存储设备垃圾回收方法,根据检查标记识别去分配表是否须检查,其中检查标记指示该去分配表中是否存在至少一项条目被标记为去分配。
根据本申请第五方面的存储设备垃圾回收方法,若去分配表无须检查,则通过该地址查询FTL表,得到记录的物理地址,依据记录的物理地址与待回收数据的物理地址是否一致来识别待回收数据是否有效。
根据本申请第五方面的存储设备垃圾回收方法,对于有效的待回收数据,将有效的待回收数据写入新的大块,以及还用新大块的物理地址更新FTL表,以在FTL表中记录有效的待回收数据的新存储位置。
本申请的第六方面提供一种处理去分配命令的方法,包括如下步骤:将接收的去分配命令发送给多个CPU;各个CPU从去分配命令指示的地址范围中获取属于自己维护的去分配表的一个或多个地址,并根据所述一个或多个地址更新自己维护的去分配表,以在该去分配表中记录所述一个或多个地址被去分配。
根据本申请第六方面的处理去分配命令的方法,根据接收了去分配命令,CPU更新其维护的检查标记,其中检查标记指示该去分配表中是否存在至少一项条目被标记为去分配。
根据本申请第六方面的处理去分配命令的方法,CPU根据去分配命令所指示的地址范围,更新FTL表的表项;其中FTL表记录了同逻辑地址对应的物理地址。
根据本申请第六方面的处理去分配命令的方法,为根据去分配命令所指示的地址范围更新FTL表的表项:CPU判断去分配表中是否存在至少一项条目被标记为去分配,将同获得的标记为去分配的第一表项对应的FTL表的第二表项所记录的地址标记为被去分配。
根据本申请第六方面的处理去分配命令的方法,在FTL表中标记表项所记录的地址被去分配后,将去分配表的表项的去分配标记清除。
根据本申请第六方面的处理去分配命令的方法,其中在更新FTL表前,对要更新的一个或多个地址对应的FTL表的表项加锁。
根据本申请第六方面的处理去分配命令的方法,其中将去分配命令同时提供给多个CPU中的每一个或多个,多个CPU并行处理去分配命令。
根据本申请第六方面的处理去分配命令的方法,CPU对去分配命令中与自己维护的去分配表相关的部分进行处理。
根据本申请第六方面的处理去分配命令的方法,其中依据IO命令访问的地址,将关联于FTL表的不同部分的IO命令分配给不同CPU处理。
根据本申请第六方面的处理去分配命令的方法,其中将IO命令随机分配给不同CPU处理。
根据本申请第六方面的处理去分配命令的方法,其中响应于接收读命令,若去分配表的检查标记被设置,CPU访问去分配表,检查读命令所访问的地址是否被去分配。
根据本申请第六方面的处理去分配命令的方法,其中响应于接收读命令,若去分配表的检查标记未被设置,CPU查询FTL表获取地址,从该地址读取数据作为对读命令的响应。
根据本申请第六方面的处理去分配命令的方法,还包括:响应于要进行垃圾回收,选择待回收的大块;根据待回收大块,获取待回收的数据的地址;若去分配表须检查,依据待回收数据的地址访问去分配表,若去分配表的对应表项记录了去分配,从待回收大块中获取下一待回收数据。
根据本申请第六方面的处理去分配命令的方法,若去分配表的对应表项未记录去分配,则根据待回收数据的地址查询FTL表,以识别待回收数据是否有效;若待回收数据有效,则将待回收数据写入新大块,并更新FTL表。
根据本申请第六方面的处理去分配命令的方法,根据检查标记识别去分配表是否待检查,其中检查标记指示该去分配表中是否存在至少一项条目被标记为去分配。
根据本申请第六方面的处理去分配命令的方法,若去分配表无须检查,则通过该地址查询FTL表,得到记录的物理地址,依据记录的物理地址与待回收数据的物理地址是否一致来识别待回收数据是否有效。
根据本申请第六方面的处理去分配命令的方法,对于有效的待回收数据,将有效的待回收数据写入新的大块,以及还用新大块的物理地址更新FTL表,以在FTL表中记录有效的待回收数据的新存储位置。
根据本申请第六方面的处理去分配命令的方法,其中检查标记记录检查去分配表的开始位置、当前位置与结尾位置。
根据本申请第六方面的处理去分配命令的方法,其中检查标记还记录下次检查去分配表的开始位置与结尾位置。
根据本申请第六方面的处理去分配命令的方法,还包括:依据检查标记对去分配表进行清理。
根据本申请第六方面的处理去分配命令的方法,对去分配表表进行清理包括:从检查标记中记录的去分配表的开始位置到去分配表的结尾位置,逐个检查去分配表的表项,如果表项被标记为去分配,则据此更新FTL表的对应表项,在FTL表的表项中记录去分配状态,并清除去分配表中该表项的去分配状态。
根据本申请第六方面的处理去分配命令的方法,其中对去分配表进行清理期间,若接收到新的去分配命令,根据新的去分配命令更新检查标记的去分配表的开始位置、当前位置与结尾位置。
根据本申请第六方面的处理去分配命令的方法,其中更新检查标记包括:如果新的去分配命令的开始位置和结尾位置均在检查标记所记录的结尾位置之后,则将检查标记中的结尾位置更新为新的去分配命令的结尾位置。
根据本申请第六方面的处理去分配命令的方法,其中更新检查标记包括:如果新的去分配命令的开始位置在检查标记所记录的开始位置之后,结尾位置在检查标记所记录的结尾位置之前,且当前位置在新的去分配命令的开始位置之前,则无需更新检查标记。
根据本申请第六方面的处理去分配命令的方法,其中更新检查标记包括:如果新的去分配命令的开始位置在检查标记所记录的开始位置之后,结尾位置在检查标记所记录的结尾位置之前,且当前位置在新的去分配命令的开始位置之后,则在检查标记中记录下次扫描的开始位置为新的去分配命令的开始位置,下次扫描的结尾位置为当前位置。
根据本申请第六方面的处理去分配命令的方法,其中更新检查标记包括:如果新的去分配命令的开始位置和结尾位置均在检查标记所记录的开始位置之前,且当前位置在新的去分配命令的结尾位置之后,则在检查标记中记录下次扫描的开始位置为新的去分配命令的开始位置,下次扫描的结尾位置为新的去分配命令的结尾位置。
根据本申请第六方面的处理去分配命令的方法,其中更新检查标记包括:如果新的去分配命令的开始位置在检查标记所记录的开始位置之前,结尾位置在检查标记所记录的开始位置之后,且当前位置在新的去分配命令的结尾位置之后,则在检查标记中记录下次扫描的开始位置为新的去分配命令的开始位置,下次扫描的结尾位置为新的去分配命令的结尾位置。
根据本申请第六方面的处理去分配命令的方法,其中对去分配表进行检查或清理期间,若接收到一个或多个新的去分配命令,根据新的去分配命令更新检查标记的下次检查去分配表的开始位置与结尾位置。
根据本申请第六方面的处理去分配命令的方法,通过比较检查标记中记录的结尾位置与清理去分配表的当前位置来判断对去分配表的清理是否完成。
根据本申请第六方面的处理去分配命令的方法,若清理去分配表的当前位置未达到检查标记的结尾位置,则对去分配表的清理未完成。
根据本申请第六方面的处理去分配命令的方法,若对去分配表的清理的当前位置已达到结尾位置,还检查是否需要对去分配表进行再次清理。
根据本申请第六方面的处理去分配命令的方法,通过识别检查标记中是否记录了下次扫描开始位置与下次扫描结尾位置来确定是否要对去分配表进行再次清理。
根据本申请第六方面的处理去分配命令的方法,若检查标记中记录了下次扫描开始位置与下次扫描结尾位置,则从下次扫描开始位置开始新一轮的对去分配表的清理。
本申请的第七方面提供一种固态存储设备,包括动态随机存储器、控制器与非易失性存储器,其中,控制器执行如上所述的方法。
本申请的第八方面提供一种包含程序代码的程序,当被载入CPU并在CPU中执行时,程序使CPU执行根据本申请第一方面、第四方面、第五方面或第六方面提供的方法之一。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为现有技术的固态存储设备的框图;
图2示出了大块的示意图;
图3A是根据本申请实施例的处理去分配命令前的FTL表的部分的示意图;
图3B是根据本申请实施例的处理去分配命令后的FTL表的部分的示意图。
图4A为本申请实施例中处理去分配命令前的去分配表的示意图;
图4B为本申请实施例中处理去分配命令后的去分配表的示意图;
图5A为本申请实施例的处理去分配命令的方法的流程图;
图5B为本申请实施例的响应读命令的方法的流程图;
图5C为本申请实施例的响应写命令的方法的流程图;
图6为根据本申请实施例的控制部件的框图;
图7为根据本申请实施例的IO命令访问的逻辑地址与去分配表的映射的示意图;
图8为根据本申请实施例的处理去分配命令的流程图;
图9为根据本申请实施例的根据去分配表更新FTL表的流程图;
图10为根据本申请实施例的垃圾回收过程的流程图;
图11A-图11E为根据本申请实施例的去分配表与检查标记的对应关系的示意图;
图12为根据本申请实施例的处理去分配命令的示意图;
图13为根据本申请实施例的根据去分配表更新FTL表的流程图;
图14为根据本申请另一实施例的控制部件的框图。
具体实施方式
下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图3A是根据本申请实施例的处理去分配命令前的FTL表的部分的示意图。图3B是根据本申请实施例的处理去分配命令后的FTL表的部分的示意图。
参看图3A,FTL表中记录了同逻辑地址范围0-7(分别记为LBA 0到LBA 7)对应的物理地址(记为PPA a-b),其中“PPA”指示物理地址,“a”指示物理块,而“b”指示物理页。以物理块1为例,其物理地址为“PPA 1-4”的物理页中存储了逻辑地址为“LBA 0”的数据,而物理地址为“PPA 1-10”的物理页中存储了逻辑地址为“LBA3”的数据。
根据本申请的实施例,为执行去分配操作,将FTL表中,由去分配命令所描述的逻辑地址范围所指示的FTL表项设置为特殊标记(例如,0或其他值)。例如,去分配命令指示的逻辑地址范围包括0-7与100-103。为执行该去分配命令,将FTL表中记录了逻辑地址0-7以及100-103的条目的内容设置为0。参看图3B,FTL表中同逻辑地址范围0-3(分别记为LBA 0到LBA 3)对应的物理地址变为0,而同逻辑地址范围4-7(分别记为LBA 4到LBA 7)对应的逻辑地址相对于图3A未被改变。
从而接下来要读取逻辑地址LBA 0-7或LBA 100-103中的一个或多个时,在FTL表中查询到这些逻辑地址对应的物理地址为0(含义为特殊标记),从而以符合去分配命令的指定效果的结果(例如,全0)作为对读命令的响应。可以理解的是,去分配命令所指示的逻辑地址范围可以与FTL表的表项的具有不同的单位大小。例如,去分配命令中,一个逻辑地址对应512字节的存储空间,而在FTL表中,一个表项对应4KB的存储空间。
根据本申请的实施例,为高效处理去分配命令,还维护去分配表。图4A为本申请实施例中处理去分配命令前的去分配表的示意图;图4B为本申请实施例中处理去分配命令后的去分配表的示意图。去分配表中,存储对应于FTL表中的每个逻辑地址是否被去分配的信息。作为举例,在去分配表中为FTL表的每个逻辑地址提供1比特的存储空间。
如图4A所示,当逻辑地址已经被分配(即在FTL表中该逻辑地址具有有效的物理地址)(也参看图3A),在去分配表中,将该逻辑地址标记为“被分配”(例如,将对应的1比特存储空间设置为0)。当逻辑地址未被分配或者已经被应用了去分配命令时(也参看图3B),该逻辑地址在去分配表中被标记为“去分配”(例如,将对应的1比特存储空间设置为1)。
示例性地,在与图3A所示的处理去分配命令前的FTL表对应的图4A所示的去分配表中,FTL表中逻辑地址LBA 0-LBA 7都被分配了有效的物理地址。因而在如图4A所示的去分配表中,LBA 0-LBA 7都被标记为“被分配”(对应的1比特存储空间均设置为0)。响应于收到去分配命令,对LBA 0-LBA 3的逻辑地址范围执行去分配命令,FTL表的部分如图3B所示,而去分配表的部分如图4B所示。去分配表中LBA 0-LBA 3都被标记为“去分配”(对应的1比特存储空间均设置为1),而去分配表中LBA 4-LBA 7依然被标记为“被分配”(对应的1比特存储空间均设置为0)。
示例性地,根据本申请实施例的去分配表存储在控制部件104(参看图1)的内部存储器或DRAM 110中。可选地,通过DMA操作更新去分配表。
进一步地,固态存储断电时,还将去FTL表与分配表写入NVM,从而在异常掉电后重新启动时,能够从NVM中恢复掉电时的FTL表与去分配表。
图5A为本申请实施例的处理去分配命令的方法的流程图。响应于收到去分配命令(510),获取去分配命令所指示的逻辑地址范围(512)。例如,去分配命令指示要对LBA 0–LBA 3的逻辑地址范围执行去分配。根据去分配命令所指示的逻辑地址范围,更新去分配表(参看图4A与图4B)的表项(514),例如将图4A所示的去分配表中与逻辑地址LBA 0-LBA 3对应的表项标记为“去分配”(具有1值)(如图4B所示)。在更新了去分配表后,即可向主机指示去分配命令执行完成。从而去分配命令的执行速度得到了极大的提升。还依据去分配命令所指示的逻辑地址范围,更新FTL表的表项(518)。例如,将去分配命令所指示的一个或多个逻辑地址对应的FTL表项清零,或设置为指定值(参看图3B)。可选地,在更新FTL表前,还对要更新的一个或多个逻辑地址对应的FTL表的表项加锁,从而避免FTL表项被更新期间,其他任务读取这些FTL表项。以及在更新FTL表后,还对被更新的一个或多个逻辑地址对应的FTL表的表项解锁。
图5B为本申请实施例的响应读命令的方法的流程图。主机读取被去分配的逻辑地址时,应当收到诸如全0的指定指示。
参看图5B,响应于收到读命令(530),查询去分配表(也参看图4B),判断读命令所读取的逻辑地址是否被去分配(532)。若去分配表指示所读取的逻辑地址处于去分配状态,则以全0或者其他指定的结果作为对读命令的响应(534)。在步骤532,若去分配表指示所读取的逻辑地址已被分配时,查询FTL表获得要读取的逻辑地址对应的物理地址(536),并从获得的物理地址读取数据作为对读命令的响应(538)。
可选地,查询去分配表将增加读操作的延迟,对于访问已被分配的逻辑地址的读命令,查询去分配表是没有积极意义的。为此,还记录固态存储设备正在执行去分配命令的状态。响应于收到去分配命令(510),标记存储设备正在执行去分配命令。在此情况下,若收到读命令,则首先查询去分配表(参看图5B中532)。而当去分配命令执行完成后,例如在图5A所示的步骤518执行完成后,标记存储设备已经完成对去分配命令的执行。在此情况下,若收到读命令,则不必执行图5B中步骤532,而直接执行图5B中步骤536。
图5C为本申请实施例的响应写命令的方法的流程图。
对于未被写入数据的固态存储设备,其去分配表中指示所有的逻辑地址均处于去分配状态。响应于逻辑地址被写入数据,去分配表的与被写入数据的逻辑地址对应的表项被修改为已分配状态。而响应于执行去分配命令,被去分配的逻辑地址在去分配表中的表项被再次修改为去分配状态。
参看图5C,当收到写命令(540),为写命令分配物理地址,并用写命令所指示的逻辑地址与分配的物理地址更新FTL表(542)。向被分配的物理地址写入数据,并向主机反馈写命令处理完成(544)。可选地,为降低写命令处理延迟,在步骤542之后,在将数据写入物理地址之前,即向主机反馈写命令处理完成。还更新去分配表,将被写入的逻辑地址在去分配表中的表项设置为已分配(548)。图5C中,步骤542、步骤544与步骤548的顺序可以调整,也可以并行或同时被执行。优选地,步骤544与步骤548发生在步骤542之后。
图6是根据本申请又一实施例的控制部件的框图。图6中示出的控制部件104包括主机接口610、分配器630、多个CPU(CPU0与CPU1)和用于访问NVM芯片105的介质接口620。
主机接口610用于同主机交换命令与数据。在一个例子中,主机与存储设备通过NVMe/PCIe协议通信,主机接口610处理PCIe协议数据包,提取出NVMe协议命令,并向主机返回NVMe协议命令的处理结果。
分配器630耦合到主机接口610,用于接收主机发送给存储设备的IO命令,并将IO命令分配给多个CPU之一。分配器630可由CPU或专用硬件实现。对于去分配命令,分配器630将去分配命令同时发送给多个CPU的每个,使得多个CPU协同处理同一去分配命令,以进一步加快对去分配命令的处理。
控制部件104还耦合到外部存储器(例如,DRAM)110。外部存储器110存储FTL表、去分配表0与去分配表1。多个CPU通过使用FTL表与去分配表来处理FTL任务。
根据图6的实施例,将IO命令分配个多个CPU的每个,从而多个CPU并行处理多个IO命令。例如,根据IO命令访问的逻辑地址为奇数或偶数,将IO命令分配给CPU 0或CPU 1。又例如,将访问前一半逻辑地址空间的IO命令分配给CPU 0,而将访问后一半逻辑地址空间的IO命令分配给CPU 1。再又一个例子中,将IO命令随机或轮流地分配给CPU 0或CPU 1,而不考虑IO命令所访问的逻辑地址。
去分配表被分为两部分(去分配表0与去分配表1)。CPU 0维护去分配表0而CPU 1维护去分配表1。例如,按逻辑地址为奇数或偶数,确定逻辑地址对应的条目位于去分配表0还是去分配表1。可选地,控制部件有更多数量的CPU来处理FTL任务,每个CPU维护各自的去分配表。例如,将逻辑地址按大小依次分配给各去分配表来维护。例如,有n个去分配表(n为正整数),将逻辑地址对n取模的结果,作为维护该逻辑地址的去分配表的索引。
返回参看图6,对于去分配命令,分配器630将去分配命令同时提供给CPU 0与CPU1。CPU 0对去分配命令中由去分配表0维护的部分进行处理,而CPU 1对去分配命令中由去分配表1维护的部分进行处理。从而CPU 0与CPU 1同时处理同一去分配命令,加快了去分配命令的处理过程。例如,去分配表0中维护值为偶数的逻辑地址的去分配表条目,去分配表1中维护值为奇数的逻辑地址的去分配表条目。
关联于FTL表的不同部分的IO命令,由不同CPU处理。由分配器630根据IO命令访问的逻辑地址将IO命令分配给CPU 0与CPU 1之一。CPU 0与CPU 1并行处理多个IO命令。
对于写命令,分配器630根据写命令访问的逻辑地址将写命令分配给CPU 0或CPU1。例如,CPU 0所对应的去分配表0维护偶数逻辑地址的去分配表条目,则将访问偶数逻辑地址的读命令或写命令也分配给CPU 0。作为又一个例子,将读命令或写命令随机地分配给CPU 0或CPU 1。作为依然又一个例子,将读命令或写命令轮流地分配给CPU 0或CPU 1。作为再一个例子,根据CPU 0或CPU 1的负载,将读命令或写命令分配给CPU 0或CPU 1。
在例如CPU 0的指示下,为写命令指示的要写入数据的逻辑地址分配新的物理地址,在FTL中记录逻辑地址与物理地址的映射关系。
对于读命令,分配器630将读命令分配给CPU 0或CPU 1。在例如CPU 0的指示下,访问FTL表,获得同读命令的逻辑地址对应的物理地址,并从物理地址读出数据。
去分配表临时地记录逻辑地址处于“去分配”状态。CPU 0或CPU 1还对去分配表进行检查,根据记录了“去分配”状态的去分配表表项,更新FTL表的对应表项,在FTL表项中记录“去分配”状态。响应于处理去分配命令而更新了去分配表,CPU 0或CPU 1在空闲时或周期性地检查去分配表。还记录用于指示去分配表待检查或检查尚未完成的检查标记。参看图6,CPU 0维护的检查标记0指示去分配表0是否需要检查或者检查尚未完成,CPU 1维护的检查标记1指示去分配表1是否需要检查或检查尚未完成。
检查标记0与检查标记1,至少指示了各自对应的去分配表中是否存在至少一项条目被标记为“去分配”。从而,作为举例,对于去分配表0,检查标记0仅用一比特信息,指示去分配表0中是否存在至少一项条目被标记为“去分配”;对于去分配表1,检查标记1仅用一比特信息,指示去分配表1中是否存在至少一项条目被标记为“去分配”。从而检查标记0与检查标记1所需的存储空间极小,可存储在CPU内部的寄存器或存储器中。可选地,连同检查标记还存储去分配表的描述符,用于指示对去分配表的检查的进展。后面将对其进行详细介绍。
在依然可选的实施方式中,CPU 0可更新去分配表0,不可更新去分配表1,CPU 1可更新去分配表1,不可更新去分配表0。CPU 0与CPU 1都可读取去分配表0与去分配表1。
在依然可选的实施方式中,用大块描述符表描述存储设备的各个大块。大块描述符表的每个表项描述大块之一,例如记录了大块的编号、构成大块的物理块的物理地址、大块的有效数据量、大块被擦除的次数等。大块描述符表被存储在DRAM 110中。
图7展示了根据本申请实施例的IO命令访问的逻辑地址与去分配表的映射的示意图。在图7中,沿逻辑地址递增的方向,逻辑地址空间被分为多个区域(702、704……724等),每个区域被映射到多个去分配表(去分配表0与去分配表1)之一。
在根据图7的实施例中,将各逻辑地址区域轮流映射到去分配表之一。例如,将区域702、706、710、714、718映射到去分配表0,将区域704、708、712、716、720映射到去分配表1。以此方式,使得来自主机的去分配命令所访问的逻辑地址空间被尽量均匀地映射给各个去分配表。每个逻辑地址区域的大小可配置。例如,每个逻辑地址区域同每个FTL表项指示的逻辑地址范围大小相同,例如4KB。
可以理解地,逻辑地址空间有其他划分方式。例如,将逻辑地址空间分为同去分配表数量相同的区域,每个区域被映射到一个去分配表。
在又一个例子中,有例如4个去分配表。将逻辑地址区域轮流映射到4个去分配表之一。例如,将逻辑地址对4取模,将结果作为该逻辑地址被映射的去分配表的索引。
继续参看图7,作为举例,去分配命令指示对逻辑地址区域710、712与714执行去分配。逻辑地址区域710与714被映射到去分配表0,而逻辑地址区域712被映射到去分配表1。去分配命令被提供给CPU 0与CPU 1,CPU 0访问去分配表0以对逻辑地址区域710与714执行去分配,而CPU 1访问去分配表1以对逻辑地址区域712执行去分配。
图8展示了根据本申请实施例的处理去分配命令的流程图。
分配器630(也参看图6)将接收的去分配命令大体上同时发送给CPU 0与CPU 1(810)。去分配命令指示了要去分配的逻辑地址。CPU 0根据去分配命令指示的逻辑地址,获取属于自己维护的去分配表0的一个或多个逻辑地址(820),并根据这些逻辑地址更新去分配表0,以在去分配表0中记录这些逻辑地址被去分配(830)。CPU 1根据同样的去分配命令指示的逻辑地址,获取属于自己维护的去分配表1的一个或多个逻辑地址(840),并根据这些逻辑地址更新去分配表1,以在去分配表1中记录这些逻辑地址被去分配(850)。
通过CPU 0与CPU 1协同处理同一去分配命令的不同逻辑地址,加快了去分配命令的处理过程。
可以理解地,若控制部件有更多CPU来处理去分配命令,将相同的去分配命令发送给这些多个CPU,每个CPU维护各自的去分配表,并根据属于各自去分配表的逻辑地址在去分配表中标记逻辑地址被去分配。
图9展示了根据本申请实施例的根据去分配表更新FTL表的流程图。
去分配表用于临时地记录逻辑地址被“去分配”,以加快去分配命令的处理速度。还需要将去分配表中记录的“去分配”标记搬移到FTL表。依然以CPU 0为例,判断分配表0中是否存在至少一项条目被标记为“去分配”,CPU 0适时对去分配表进行检查,找出被标记为“去分配”的表项,根据找到的表项在FTL表中记录对应的逻辑地址被“去分配”,并清除去分配表中该表项的“去分配”标记。
参看图9,例如CPU 0(也参看图6)遍历去分配表0,找到记录了“去分配”标记的(一个)表项,根据该表项的位置得到对应的逻辑地址,将该逻辑地址记为待清理逻辑地址(910)。可选地,CPU 0一次从去分配表0获取多个待清理的逻辑地址。
CPU 0还更新大块描述符表的一个或多个表项(920)。根据待清理的一个或多个逻辑地址,访问FTL表,获取对应于待清理的逻辑地址的物理地址,从而识别这些物理地址所属的大块。根据大块中被去分配的物理地址的数量,更新大块描述符中记录的有效数据量。例如,若待清理的10个逻辑地址中的5个逻辑地址对应的5个物理地址属于大块1,则大块1中的这些5个物理地址所记录的数据不再有效。
CPU 0还更新FTL表中对应待清理逻辑地址的FTL表的表项,在FTL表的表项中记录其被“去分配”(930)。以及还在去分配表中,在这些待清理的逻辑地址对应的去分配表的表项中清除“去分配”标记(940)。
例如CPU 0重复图9所示的流程,直到去分配表0中已不存在被标记为“去分配”的表项。以及还清除相应的检查标记0。可以理解地,CPU 1根据去分配表1而执行如图9所示的类似的过程。
若检查标记被清除,在处理读命令或写命令时,无须访问去分配表,以加快对读命令或写命令的处理。若检查标记被设置,在处理读命令或写命令时,可能需要访问去分配表,以检查被访问的逻辑地址是否被去分配。
控制部件还执行垃圾回收(GC,Garbage Collection)过程,以释放被无效数据占据的存储空间。作为举例,也参看图3A与图3B,在执行去分配命令后,对应逻辑地址0到逻辑地址3的物理地址1-4、物理地址3-6、物理地址1-9与物理地址1-10上存储的数据变为无效。可回收物理块1,将其上的物理地址1-4、物理地址1-9与物理地址1-10所记录的无效数据丢弃,将物理块1上的有效数据搬移到新物理块,从而释放物理块1的无效数据占据的存储空间。
根据本申请的实施例,根据大块描述符表选择一个或多个大块作为垃圾回收过程的被回收大块。例如,选择大块描述符表的表项中记录的具有最低有效数据量的大块作为被回收大块。为获取大块的有效数据量,在处理了去分配命令后,通过执行图9的实施例所展示的流程来更新大块描述符表的表项中记录的有效数据量是有利的。其使得大块描述符表的表项能够体现大块的真实的有效数据量。
图10展示了根据本申请实施例的垃圾回收过程的流程图。
为进行垃圾回收,根据大块描述符表选择待回收的大块(1010),例如,选择拥有最小有效数据量的大块。可以理解地,大块描述符表所记录的大块的有效数据量,可能不是真实的有效数据量,因为尚未通过例如图9的实施例的流程来更新大块描述符表。
根据待回收大块,获取待回收的数据的物理地址与逻辑地址(1020)。其中,获取待回收数据时已知晓其物理地址,而通过待回收大块记录的物理地址同逻辑地址的对应关系,得到待回收数据的逻辑地址。在可选的实施方式中(不同于图10),接下来直接通过逻辑地址查询FTL表,得到记录的物理地址,依据记录的物理地址与从待回收数据的物理地址是否一致来识别待回收数据是否有效,并且仅回收有效数据,而丢弃无效数据。
继续参看图10,根据检查标记(参看图6,例如检查标记0与检查标记1),识别去分配表是否待检查(1030)。若去分配表无须检查,接下来通过逻辑地址查询FTL表,得到记录的物理地址,依据记录的物理地址与从待回收数据的物理地址是否一致来识别待回收数据是否有效(1050)。对于有效的待回收数据,将有效的待回收数据写入新的大块(1060),以及还用新大块的物理地址更新FTL表(1070),以在FTL表中记录有效的待回收数据的新存储位置。
在步骤1030,若去分配表须检查,依据待回收数据的逻辑地址访问去分配表。若去分配表的对应表项记录了“去分配”(1040),其意味着该逻辑地址存储的不是有效数据,返回步骤1020从待回收大块中获取下一待回收数据的逻辑地址与物理地址。若去分配表的对应表项未记录“去分配”,则还根据待回收数据的逻辑地址查询FTL表,以识别待回收数据是否有效(1050)。
在步骤1050,若待回收数据无效,丢弃无效数据而不进行回收,以及返回步骤1020从待回收大块中获取下一待回收数据的逻辑地址与物理地址。若待回收数据有效,则将待回收数据的物理地址所记录的数据写入新大块(1060),并据此更新FTL表(1070)
图11A-图11E展示了根据本申请又一实施例的去分配表与检查标记。
在检查标记中,除了记录对应的去分配表中是否存在至少一项条目被标记为“去分配”,还记录当前检查去分配表的开始位置(S)、当前位置(C)与结尾位置(E),以及可选地还记录下次检查去分配表的开始位置(NS)与结尾位置(NE)。
参看图11A,展示了例如去分配表0。由于CPU 0处理了去分配命令(TR1),去分配表的阴影部分的表项被设置为“去分配”。以及要对去分配表0进行检查或清理,以将去分配表中的去分配标记搬移到FTL表。其中S指示当前要进行的检查的起始位置,E指示当前要进行的检查的结尾位置,C指示当前正在进行检查的位置。可以理解地,根据去分配命令(TR1)所指示的范围,得到起始位置S与结尾位置E。从起始位置S到结尾位置S通过例如图9所示的流程图逐个对去分配表的条目进行检查或清理,而C指示了当前正在检查的位置。
参看图11B,在对图11A展示的从起始位置S到结尾位置E进行检查期间,CPU 0又收到了去分配命令TR2。图11B中的与TR2对应的阴影部分指示了去分配命令TR2所指示的范围中属于去分配表0的部分。根据本申请的实施例,由于去分配命令TR2所指示的范围属于去分配表0的部分,完全在当前正在检查的范围(从起始位置S到结尾位置E)在逻辑地址空间上的后部,则仅将检查标记中记录的结尾位置从E更新为E1(TR2所指示的范围属于去分配表0的部分的结尾位置)。当前正在检查的位置为C1,根据图11B所示,对去分配表0的检查要继续从当前位置C1进行到结尾位置E1才结束。而开始位置S不更新。虽然在图11B中,在去分配命令TR1与TR2指示的阴影区分之间有部分未被标记为“去分配”的区域,出于简便的目的,对这些区域也要进行检查。在检查时发现这些区分未被标记为“去分配”,则直接略过而检查分配表0的下一表项。
参看图11C,在对图11B展示的从起始位置S到结尾位置E进行检查期间,CPU 0又收到了去分配命令TR3。图11C中的与TR3对应的横线阴影部分指示了去分配命令TR3所指示的范围属于去分配表0的部分。根据本申请的实施例,由于去分配命令TR3所指示的范围属于去分配表0的部分,同去分配命令TR1所指示的范围属于去分配表0的部分重叠,去分配命令TR3所指示的区域属于去分配表0的部分的起点在去分配命令TR1所指示的范围内,而去分配命令TR3所指示的区域属于去分配表0的部分的结尾在去分配命令TR1所指示的范围属于去分配表0的部分之后。当前正在检查的位置为C2,由于去分配命令TR3所指示的区域属于去分配表0的部分的起点与末尾均在当前位置C2与结尾位置E1之间,从而无须因收到TR3命令而更新起始位置S与结尾位置E1。
作为另一个例子,若去分配命令TR3’(未示出)所指示的范围属于去分配表0的部分的起点在开始位置S之后,该范围的末尾在结尾位置E1之前,且该范围覆盖了当前位置C2,这意味着在去分配命令TR3’所指示的范围属于去分配表0的部分的起点与当前位置C2之间的部分已被检查或清理的去分配表表项被再次更新。在此情况下,在检查标记中还记录下次扫描的开始位置NS为去分配命令TR3’所指示的范围属于去分配表0的部分的开始位置,而下次检查的结束位置NE为当前位置C2。
参看图11D,在对图11C展示的从起始位置S到结尾位置E1进行检查期间,CPU 0又收到了去分配命令TR4。图11D中的与TR4对应的阴影部分指示了去分配命令TR4所指示的范围属于去分配表0的部分。根据本申请的实施例,去分配命令TR4所指示的区域属于去分配表0的部分的起点在去分配命令TR1所指示的范围的起点之前,而去分配命令TR4所指示的区域属于去分配表0的部分的结尾在去分配命令TR1所指示的范围之前。当前正在检查的位置为C3,由于去分配命令TR4所指示的区域属于去分配表0的部分的起点与末尾均在当前位置C3之前。这意味着在去分配命令TR4所指示的范围的去分配表表项已被更新,因而需要被检查或清理。在此情况下,在检查标记中还记录下次扫描的开始位置为去分配命令TR4的开始位置NS1,而下次检查的结束位置为去分配命令TR4的结束位置NE1。
参看图11E,在对图11C展示的从起始位置S到结尾位置E进行检查期间,CPU 0又收到了去分配命令TR5。图11E中的与TR5对应的阴影部分指示了去分配命令TR5所指示的范围属于去分配表0的部分。根据本申请的实施例,去分配命令TR5所指示的区域属于去分配表0的部分的起点在去分配命令TR1所指示的范围的起点之前,而去分配命令TR5所指示的区域属于去分配表0的部分的结尾在去分配命令TR1所指示的范围之内。当前正在检查的位置为C3,由于去分配命令TR5所指示的区域的起点与末尾均在当前位置C3之前。这意味着在去分配命令TR5所指示的范围属于去分配表0的部分的去分配表表项已被更新,因而而需要被检查或清理。在此情况下,在检查标记中还记录下次扫描的开始位置为去分配命令TR5的开始位置NS2,而下次检查的结束位置为去分配命令TR5的结束位置NE2。
在根据图11D与图11E的例子中,由于下次检查的开始位置与结束位置被设置,对去分配表的从开始位置S到结束位置E1的检查或清理完成后,还要继续根据下次检查的开始位置NS1或NS2与结束位置NE1或NE2对去分配表进行检查或清理。
图12是根据本申请又一实施例的处理去分配命令的示意图(1220)。
分配器630(也参看图6)将接收的去分配命令大体上同时发送给CPU 0与CPU 1。可选地,响应于收到去分配命令,CPU 0与CPU 1终止自身正在进行的对去分配表的检查或清理工作(如果对去分配表的检查或清理在进行)(1220)。
根据本申请的实施例,CPU 0与CPU 1在空闲时,对各自负责维护的去分配表进行检查或清理。而当收到新的去分配命令时,暂停正在进行的对去分配表的检查或清理,而立即处理去分配命令,以加快对去分配命令的处理,降低去分配命令的处理延迟。
依然可选地,根据所接收的去分配命令,(如果需要)CPU 0与CPU 1还更新各自维护的检查标记(检查标记0与检查标记1)(1230)。根据图11A-图11E所示的方式来更新检查标记,从而在检查标记中记录当前对分配表的检查或清理的结束位置,以及可选地,下一轮检查或清理去配表的开始位置与结束位置。
接下来CPU 0根据去分配命令指示的逻辑地址,获取属于自己维护的去分配表0的一个或多个逻辑地址(1240),并根据这些逻辑地址更新去分配表0,以在去分配表0中记录这些逻辑地址被去分配(1250)。CPU1根据同样的去分配命令指示的逻辑地址,获取属于自己维护的去分配表1的一个或多个逻辑地址(1260),并根据这些逻辑地址更新去分配表1,以在去分配表1中记录这些逻辑地址被去分配(1270)。
图13展示了根据本申请又一实施例的根据去分配表更新FTL表的流程图。
依然以CPU 0为例,判去分配表0中是否存在至少一项条目被标记为“去分配”,CPU0适时对去分配表进行检查,找出被标记为“去分配”的表项(1310),根据找到的表项在FTL表中记录对应的逻辑地址被“去分配”(1320),并清除去分配表中该表项的“去分配”标记(1340)。CPU 0还更新大块描述符表(1330)。步骤1330与步骤1340的执行顺序不被限制。例如CPU 0遍历去分配表0,找到记录了“去分配”标记的(一个)表项,根据该表项的位置得到对应的逻辑地址,将该逻辑地址记为待清理逻辑地址。可选地,CPU 0一次从去分配表0获取多个待清理的逻辑地址。
在更新FTL表时,根据待清理的一个或多个逻辑地址,从FTL表获取对应于待清理的逻辑地址的物理地址,从而识别这些物理地址所属的大块。根据大块中被去分配的物理地址的数量,更新大块描述符中记录的有效数据量。CPU 0还更新FTL表中对应待清理逻辑地址的FTL表的表项,在FTL表的表项中记录其被“去分配”。以及还在去分配表中,在这些待清理的逻辑地址对应的去分配表的表项中清除“去分配”标记。
CPU 0识别对去分配表0的检查或清理是否完成(1350)。通过比较检查标记中记录的结尾位置与检查或清理去分配表的当前位置来是否对去分配表的检查或清理是否完成。若当前位置未达到结尾位置,意味着去分配表表中还有表项等待被检查或清理。若对分配表0的检查或清理未完成,返回步骤1310,对去分配表进行检查,找出被标记为“去分配”的表项。
若对区分配表的检查或清理已完成(当前位置达到结尾位置),还检查是否需要对去分配表进行再次检查或清理(1360)。通过识别检查标记中是否记录了下次扫描开始位置与下次扫描结尾位置来确定是否还要对去分配表进行扫描或清理。若检查标记中记录了下次扫描开始位置与下次扫描结尾位置,则转向步骤1310,从下次扫描开始位置开始新一轮的对去分配表的检查或清理。若检查标记中未记录下次扫描开始位置与下次扫描结尾位置,CPU对去分配表的检查或清理完成。
根据本申请的实施例,各个CPU对所负责维护的去分配表执行如图13所示的流程。各CPU并行处理根据去分配表对FTL表的更新,以加快处理过程。
图14是根据本申请再一实施例的控制部件的框图。图14中示出的控制部件104,其结构与图6所示的控制部件104类似。示意性的控制部件104包括多个CPU,分配器630将IO命令分配给多个CPU的每个。图14的控制部件包括四个CPU(CPU 0、CPU 1、CPU 2与CPU 3)。控制部件104对IO命令的处理过程同图6中控制部件104类似。将IO命令分配个多个CPU。
去分配表被分为四部分(去分配表0、去分配表1、去分配表2与去分配表3)。CPU 0维护去分配表0、CPU 1维护去分配表1、CPU 2维护去分配表2而CPU 3维护去分配表3。例如,将逻辑地址对4取模的结果,作为维护该逻辑地址的去分配表的索引。
继续参看图14,对于去分配命令,分配器630将去分配命令同时提供给CPU 0、CPU1、CPU 2与CPU 3。CPU 0对去分配命令中由去分配表0维护的部分进行处理,而CPU 1对去分配命令中由去分配表1维护的部分进行处理,CPU 2对去分配命令中由去分配表2维护的部分进行处理,而CPU 3对去分配命令中由去分配表3维护的部分进行处理。从而CPU 0、CPU1、CPU 2与CPU 3同时处理同一去分配命令,加快了去分配命令的处理过程。
对于IO命令,关联于FTL表的不同部分的IO命令,由不同CPU处理。由分配器630根据IO命令访问的逻辑地址将IO命令分配给CPU 0、CPU 1、CPU 2或CPU 3之一。CPU 0、CPU 1、CPU 2与CPU 3并行处理多个IO命令。
去分配表临时地记录逻辑地址处于“去分配”状态。CPU 0、CPU 1、CPU 2或CPU 3还对去分配表进行检查,根据记录了“去分配”状态的去分配表表项,更新FTL表的对应表项,在FTL表项中记录“去分配”状态。还记录用于指示去分配表待检查或检查尚未完成的检查标记。CPU 0维护的检查标记0指示去分配表0是否需要检查或者检查尚未完成,CPU 1维护的检查标记1指示去分配表1是否需要检查或检查尚未完成。CPU 2维护的检查标记2指示去分配表2是否需要检查或者检查尚未完成,CPU 3维护的检查标记3指示去分配表3是否需要检查或检查尚未完成。
检查标记0、检查标记1、检查标记2或检查标记3,至少指示了各自对应的去分配表中是否存在至少一项条目被标记为“去分配”。
在依然可选的实施方式中,CPU 0可更新去分配表0,不可更新去分配表1、分配表2与分配表3。CPU 1可更新去分配表1,不可更新去分配表0、分配表2与分配表3。CPU 2可更新去分配表2,不可更新去分配表0、分配表1与分配表3。CPU 3可更新去分配表3,不可更新去分配表0、分配表1与分配表2。CPU 0、CPU 1、CPU 2与CPU 3都可读取所有的去分配表。
依然作为举例,多个CPU的每个维护的检查标记,还指示该CPU维护的去分配表的当前检查的开始位置(S)、当前位置(C)与结尾位置(E),以及可选地还记录下次检查的开始位置(NS)与结尾位置(NE)。
以上所述,仅为本申请的具体实施方式,但本申请的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本申请揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本申请的保护范围之内。因此,本申请的保护范围应以所述权利要求的保护范围为准。

Claims (10)

1.一种处理去分配命令的系统,其特征在于,包括:控制部件与外部存储器;
控制部件包括分配器与多个CPU,
所述分配器,接收IO命令,并将IO命令分配给多个CPU中的每一个;
所述多个CPU,用于并行处理接收到的IO命令;
外部存储器,存储去分配表。
2.如权利要求1所述的处理去分配命令的系统,其特征在于,其中去分配表被分为多个部分,每个部分由多个CPU中的一个维护。
3.如权利要求2-3之一所述的处理去分配命令的系统,其特征在于,其中依据IO命令访问的地址,将IO命令分配给CPU。
4.一种处理去分配命令的方法,其特征在于,包括如下步骤:
将接收的去分配命令同时发送给多个CPU;
收到去分配命令的CPU根据去分配命令指示的地址范围,获取去分配命令指示的地址范围中属于自己的去分配表的一个或多个地址,并根据获取的所述一个或多个地址更新自己维护的去分配表,以在该去分配表中记录的所述一个或多个地址被去分配。
5.如权利要求4所述的处理去分配命令的方法,其特征在于,其中定时或周期性的对去分配表进行检查,找出被标记为去分配的第一表项,根据第一表项在FTL表中记录对应的逻辑地址被去分配,并清除去分配表中第一表项的去分配标记。
6.如权利要求4-5之一所述的处理去分配命令的方法,其特征在于,其中还包括根据去分配命令指示的地址范围更新大块描述符中记录的有效数据量。
7.一种存储设备垃圾回收方法,其特征在于,包括如下步骤:
根据大块描述符表选择待回收的大块;
根据待回收大块,获取待回收的数据的地址;
若去分配表须检查,依据待回收数据的地址访问去分配表,若去分配表的对应表项记录了去分配,从待回收大块中获取下一待回收数据的地址。
8.一种处理去分配命令的方法,其特征在于,包括如下步骤:
将接收的去分配命令发送给多个CPU;
各个CPU从去分配命令指示的地址范围中获取属于自己维护的去分配表的一个或多个地址,并根据所述一个或多个地址更新自己维护的去分配表,以在该去分配表中记录所述一个或多个地址被去分配。
9.如权利要求8所述的处理去分配命令的方法,其特征在于,还包括:
响应于要进行垃圾回收,选择待回收的大块;
根据待回收大块,获取待回收的数据的地址;
若去分配表须检查,依据待回收数据的地址访问去分配表,若去分配表的对应表项记录了去分配,从待回收大块中获取下一待回收数据。
10.一种包含程序代码的程序,当被载入CPU并在CPU中执行时,程序使CPU执行根据权利要求4-9之一所述的方法。
CN201810594487.9A 2017-11-29 2018-06-11 去分配命令处理方法及其存储设备 Pending CN110580228A (zh)

Priority Applications (4)

Application Number Priority Date Filing Date Title
CN201810594487.9A CN110580228A (zh) 2018-06-11 2018-06-11 去分配命令处理方法及其存储设备
US17/044,457 US11397672B2 (en) 2017-11-29 2018-06-28 Deallocating command processing method and storage device having multiple CPUs thereof
PCT/CN2018/093483 WO2019105029A1 (zh) 2017-11-29 2018-06-28 去分配命令处理方法及其存储设备
US17/846,524 US20220327049A1 (en) 2017-11-29 2022-06-22 Method and storage device for parallelly processing the deallocation command

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810594487.9A CN110580228A (zh) 2018-06-11 2018-06-11 去分配命令处理方法及其存储设备

Publications (1)

Publication Number Publication Date
CN110580228A true CN110580228A (zh) 2019-12-17

Family

ID=68809992

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810594487.9A Pending CN110580228A (zh) 2017-11-29 2018-06-11 去分配命令处理方法及其存储设备

Country Status (1)

Country Link
CN (1) CN110580228A (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI792534B (zh) * 2021-04-25 2023-02-11 慧榮科技股份有限公司 以局部清理操作來進行垃圾回收的方法與相關控制器和儲存系統

Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5524230A (en) * 1991-07-12 1996-06-04 International Business Machines Incorporated External information storage system with a semiconductor memory
CN101630303A (zh) * 2009-08-24 2010-01-20 成都市华为赛门铁克科技有限公司 请求信息的处理方法、装置以及多处理器存储系统
CN102968393A (zh) * 2011-08-31 2013-03-13 辉达公司 存储器控制器和动态随机存取存储器接口
CN107479938A (zh) * 2017-09-27 2017-12-15 北京忆芯科技有限公司 电子设备及其启动方法
CN107562648A (zh) * 2016-07-01 2018-01-09 北京忆恒创源科技有限公司 无锁ftl访问方法与装置
CN107797938A (zh) * 2016-09-05 2018-03-13 北京忆恒创源科技有限公司 加快去分配命令处理的方法与存储设备
CN107797934A (zh) * 2016-09-05 2018-03-13 北京忆恒创源科技有限公司 处理去分配命令的方法与存储设备

Patent Citations (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5524230A (en) * 1991-07-12 1996-06-04 International Business Machines Incorporated External information storage system with a semiconductor memory
CN101630303A (zh) * 2009-08-24 2010-01-20 成都市华为赛门铁克科技有限公司 请求信息的处理方法、装置以及多处理器存储系统
CN102968393A (zh) * 2011-08-31 2013-03-13 辉达公司 存储器控制器和动态随机存取存储器接口
CN107562648A (zh) * 2016-07-01 2018-01-09 北京忆恒创源科技有限公司 无锁ftl访问方法与装置
CN107797938A (zh) * 2016-09-05 2018-03-13 北京忆恒创源科技有限公司 加快去分配命令处理的方法与存储设备
CN107797934A (zh) * 2016-09-05 2018-03-13 北京忆恒创源科技有限公司 处理去分配命令的方法与存储设备
CN107479938A (zh) * 2017-09-27 2017-12-15 北京忆芯科技有限公司 电子设备及其启动方法

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
TWI792534B (zh) * 2021-04-25 2023-02-11 慧榮科技股份有限公司 以局部清理操作來進行垃圾回收的方法與相關控制器和儲存系統
US11580018B2 (en) 2021-04-25 2023-02-14 Silicon Motion, Inc. Method and apparatus for page validity management and related storage system

Similar Documents

Publication Publication Date Title
CN109240938B (zh) 存储系统以及控制非易失性存储器的控制方法
CN109086219B (zh) 去分配命令处理方法及其存储设备
US10761731B2 (en) Array controller, solid state disk, and method for controlling solid state disk to write data
US20220327049A1 (en) Method and storage device for parallelly processing the deallocation command
TWI533152B (zh) 資料儲存裝置及方法
CN107797934B (zh) 处理去分配命令的方法与存储设备
US10621085B2 (en) Storage system and system garbage collection method
US20130166828A1 (en) Data update apparatus and method for flash memory file system
WO2020007030A1 (zh) 一种系统控制器和系统垃圾回收方法
CN107797938B (zh) 加快去分配命令处理的方法与存储设备
CN109558334B (zh) 垃圾数据回收方法及固态存储设备
CN109840048B (zh) 存储命令处理方法及其存储设备
CN110688323B (zh) 一种系统控制器和系统垃圾回收方法
CN109426436B (zh) 基于可变长大块的垃圾回收方法与装置
CN110554833A (zh) 存储设备中并行处理io命令
CN110865945B (zh) 存储设备的扩展地址空间
CN110580228A (zh) 去分配命令处理方法及其存储设备
WO2018041258A1 (zh) 去分配命令处理的方法与存储设备
CN109840219B (zh) 大容量固态存储设备的地址转换系统与方法
TWI713032B (zh) 資料儲存裝置以及非揮發式記憶體控制方法
CN110688056A (zh) Nvm组的存储介质替换
CN110928482A (zh) 部分页条带与使用部分页条带的存储设备及其方法
CN112148645A (zh) 去分配命令处理方法及其存储设备
KR101791855B1 (ko) 스토리지 장치 및 이의 공간 재수거 방법
CN112764671A (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

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.

CB02 Change of applicant information