首页> 中国专利> 固态驱动器中的分区命名空间

固态驱动器中的分区命名空间

摘要

本公开整体涉及操作存储设备的方法。该存储设备包括控制器和介质单元。该介质单元的容量被分成多个分区。该控制器被配置为通过更新分区元数据在知情的情况下使用错误,以指示一个或多个第一逻辑块地址被跳过并且指示下一个有效逻辑块地址可用于存储数据。该控制器被进一步配置为更新分区元数据以向主机设备推荐重置一个或多个满的分区,以向主机设备推荐将一个或多个开放分区转变为满的状态,以提醒主机设备一个或多个开放分区已转变为满的状态,并且以向主机设备通知多个分区中的每个分区的可写入分区容量。

著录项

说明书

相关申请的交叉引用

技术领域

本专利申请要求2019年12月27日提交的美国专利申请号16/728917的优先权,该美国专利申请要求2019年9月25日提交的美国临时专利申请序列号62/905894的权益,这两个申请均以引用方式并入本文。

背景技术

技术领域

本公开的实施方案整体涉及存储设备,诸如固态驱动器(SSD)。

存储设备诸如SSD可用于需要相对低延迟和高容量存储的应用中的计算机中。例如,SSD可表现出比硬盘驱动器(HDD)更低的延迟,尤其是对于随机读取和写入而言。通常,SSD的控制器接收将数据从主机设备读取或写入到存储器设备的命令。存储器设备的数量被称为命名空间,并且控制器被配置为从存储器设备的一个或多个命名空间读取数据或将数据写入存储器设备的一个或多个命名空间。每个命名空间由与介质(诸如擦除块)的物理位置对应的多个逻辑块地址(LBA)或扇区构成。

当存储设备在向擦除块写入数据时经历错误(诸如I/O错误、电荷泄漏和/或读取/编程干扰)时,该存储设备通常对主机设备掩盖错误并管理后端上的错误。因此,主机设备未察觉到发生了错误,并且不再知道数据所存储的位置。此外,存储设备经历的一些错误可能导致一个或多个擦除块无法存储数据。在此类情况下,存储设备必须从已擦除的擦除块读取所有数据并将数据重新写入新的一组擦除块,同时仍然从主机设备接收命令,这可能费用高,减少向介质的写入总数并且降低存储设备的总体性能。

因此,需要一种操作存储设备的新方法。

发明内容

本发明题为“针对分区命名空间的分区形成”。本公开整体涉及操作存储设备的方法。所述存储设备包括控制器和介质单元。所述介质单元的容量被分成多个分区。所述控制器被配置为通过更新分区元数据在知情的情况下使用错误,以指示一个或多个第一逻辑块地址被跳过并且指示下一个有效逻辑块地址可用于存储数据。所述控制器被进一步配置为更新分区元数据以向主机设备推荐重置一个或多个满的分区,以向主机设备推荐将一个或多个开放分区转变为满的状态,以提醒主机设备一个或多个开放分区已转变为满的状态,并且以向主机设备通知多个分区中的每个分区的可写入分区容量。

在一个实施方案中,存储设备包括介质单元。所述介质单元的容量被分成多个分区。所述介质单元包括多个管芯,所述多个管芯中的每个管芯包括多个擦除块。所述存储设备还包括耦接到所述介质单元的控制器,所述控制器被配置为:更新分区元数据以向主机设备推荐重置所述多个分区中的一个或多个满的分区;更新所述分区元数据以向所述主机设备推荐将所述多个分区中的一个或多个开放分区转变为满的状态;将所述一个或多个开放分区转变为所述满的状态;以及更新所述分区元数据以提醒所述主机设备所述一个或多个开放分区已转变为所述满的状态。

在另一个实施方案中,存储设备包括介质单元。所述介质单元的容量被分成多个分区。所述介质单元包括多个管芯,所述多个管芯中的每个管芯包括多个擦除块。所述存储设备还包括耦接到所述介质单元的控制器,所述控制器被配置为确定所述多个分区中的每个分区的可写入分区容量,所述可写入分区容量等于或小于每个分区的总分区存储容量,其中每个分区的所述可写入容量与一个或多个擦除块的容量对准;以及更新分区元数据以向主机设备通知所述多个分区中的每个分区的所述可写入分区容量。

在一个实施方案中,存储设备包括介质单元。所述介质单元的容量被分成多个分区。所述介质单元包括多个管芯,所述多个管芯中的每个管芯包括多个擦除块。所述存储设备还包括耦接到所述介质单元的控制器,所述控制器被配置为:接收写入命令以将数据写入所述多个分区中的第一分区中的一个或多个第一逻辑块地址;在将所述数据写入所述第一分区中的所述一个或多个第一逻辑块地址的同时经历错误时,更新所述第一分区的写入指针以指向所述第一分区中的下一个有效逻辑块地址;以及更新分区元数据,以指示所述一个或多个第一逻辑块地址被跳过并且指示所述下一个有效逻辑块地址可用于将所述数据存储在所述第一分区中。

附图说明

因此,通过参考实施方案,可以获得详细理解本公开的上述特征的方式、本公开的更具体描述、上述简要概述,所述实施方案中的一些在附图中示出。然而,应当注意的是,附图仅示出了本公开的典型实施方案并且因此不应视为限制其范围,因为本公开可以允许其他同等有效的实施方案。

图1是示出根据一个实施方案的存储系统的示意框图。

图2是示出根据一个实施方案的操作存储设备以执行读取或写入命令的方法的框图。

图3A示出根据一个实施方案的在存储设备中使用的分区命名空间。

图3B示出根据一个实施方案的针对图3A的存储设备的分区命名空间的状态图。

为了有助于理解,在可能的情况下,使用相同的参考标号来表示附图中共有的相同元件。可以设想是,在一个实施方案中公开的元件可以有利地用于其他实施方案而无需具体叙述。

具体实施方式

在下文中,参考本公开的实施方案。然而,应当理解的是,本公开不限于具体描述的实施方案。相反,思考以下特征和元件的任何组合(无论是否与不同实施方案相关)以实现和实践本公开。此外,尽管本公开的实施方案可以实现优于其他可能解决方案和/或优于现有技术的优点,但是否通过给定实施方案来实现特定优点不是对本公开的限制。因此,以下方面、特征、实施方案和优点仅是说明性的,并且不被认为是所附权利要求书的要素或限制,除非在权利要求书中明确地叙述。同样地,对“本公开”的引用不应当被解释为本文公开的任何发明主题的概括,并且不应当被认为是所附权利要求书的要素或限制,除非在权利要求书中明确地叙述。

本发明题为“针对分区命名空间的分区形成”。本公开整体涉及操作存储设备的方法。所述存储设备包括控制器和介质单元。所述介质单元的容量被分成多个分区。控制器被配置为通过更新分区元数据在知情的情况下使用错误,以指示一个或多个第一逻辑块地址被跳过并且指示下一个有效逻辑块地址可用于存储数据。所述控制器被进一步配置为更新分区元数据以向主机设备推荐重置一个或多个满的分区,以向主机设备推荐将一个或多个开放分区转变为满的状态,以提醒主机设备一个或多个开放分区已转变为满的状态,并且以向主机设备通知多个分区中的每个分区的可写入分区容量。

图1是示出根据本公开的一种或多种技术的存储系统100的示意性框图,其中存储设备106可以用作主机设备104的存储设备。例如,主机设备104可以利用包括在存储设备106中的非易失性存储器设备110来存储和检索数据。主机设备104包括主机DRAM 138。在一些示例中,存储系统100可以包括可作为存储阵列操作的多个存储设备,诸如存储设备106。例如,存储系统100可以包括多个存储设备106,其被配置为共同用作主机设备104的大容量存储设备的廉价/独立磁盘(RAID)冗余阵列。

存储系统100包括主机设备104,该主机设备可以向一个或多个存储设备诸如存储设备106存储数据和/或从其检索数据。如图1所示,主机设备104可以经由接口114与存储设备106通信。主机设备104可以包括多种设备中的任何一种,包括计算机服务器、网络附接存储(NAS)单元、台式计算机、笔记本(即膝上型)计算机、平板计算机、机顶盒、电话手机诸如所谓的“智能”电话、所谓的“智能”平板电脑、电视、相机、显示设备、数字媒体播放器、视频游戏控制台、视频流设备等。

该存储设备106包括控制器108、非易失性存储器110(NVM 110)、电源111、易失性存储器112和接口114。控制器108包括分区管理120。在一些示例中,为了清楚起见,存储设备106可以包括图1中未示出的附加部件。例如,存储设备106可以包括印刷电路板(PCB),存储设备106的部件机械地附接到该印刷电路板,并且该印刷电路板包括电互连存储设备106的部件等的导电迹线。在一些示例中,存储设备106的物理尺寸和连接器配置可以符合一个或多个标准形状因数。一些示例性标准形状因子包括但不限于2.5”数据存储设备(例如,HDD或SSD)、2.5”数据存储设备、1.8”数据存储设备、外围部件互连(PCI)、PCI扩展(PCI-X)、PCI Express(PCIe)(例如,PCIe x1、x4、x8、x16、PCIe Mini卡、MiniPCI等)。在一些示例中,存储设备106可以直接耦接(例如,直接焊接)到主机设备104的母板。

存储设备106的接口114可以包括用于与主机设备104交换数据的数据总线和用于与主机设备104交换命令的控制总线中的一者或两者。接口114可以根据任何合适的协议操作。例如,接口114可以根据以下协议中的一个或多个协议来操作:高级技术附件(ATA)(例如,串行ATA(SATA)和并行ATA(PATA))、光纤信道协议(FCP)、小型计算机系统接口(SCSI)、串行附接SCSI(SAS)、非易失性存储器express(NVMe)、OpenCAPI、GenZ、高速缓存相干接口加速器(CCIX)、开放信道SSD(OCSSD)、相干加速器(CXL)等。接口114的电连接(例如,数据总线、控制总线或两者)电连接到控制器108,从而提供主机设备104与控制器108之间的电连接,允许在主机设备104与控制器108之间交换数据。在一些示例中,接口114的电连接还可以允许存储设备106从主机设备104接收电力。例如,如图1所示,电源111可以经由接口114从主机设备104接收电力。

存储设备106包括NVM 110,其可以包括多个存储器设备。NVM 110可以被配置成存储和/或检索数据。例如,NVM 110的存储器设备可以从控制器108接收数据和指示存储器设备存储数据的消息。类似地,NVM 110的存储器设备可以从控制器108接收指示存储器设备检索数据的消息。在一些示例中,存储器设备中的每个存储器设备可以被称为管芯。在一些示例中,单个物理芯片可以包括多个管芯(即,多个存储器设备)。在一些示例中,存储器设备中的每个存储器设备可被配置为存储相对大量的数据(例如,128MB、256MB、412MB、1GB、2GB、3GB、8GB、16GB、22GB、54GB、128GB、256GB、412GB、1TB等)。

在一些示例中,NVM 110的每个存储器设备可以包括任何类型的非易失性存储器设备,诸如闪存存储器设备、相变存储器(PCM)设备、电阻随机存取存储器(ReRAM)设备、磁阻随机存取存储器(MRAM)设备、铁电随机存取存储器(F-RAM)、全息存储器设备、硬盘驱动器(HDD)以及任何其他类型的非易失性存储器设备。

NVM 110可以包括多个闪存存储器设备。闪存存储器设备可以包括基于NAND或NOR的闪存存储器设备,并且可以基于包含在用于每个闪存存储器单元的晶体管的浮栅中的电荷来存储数据。在NAND闪存存储器设备中,闪存存储器设备可以被分成多个块,这些块可以被分成多个页面。特定存储器设备内的多个块中的每个块可以包括多个NAND单元。NAND单元的行可以使用字线来电连接以限定多个页面中的页面。多个页面中的每个页面中的相应单元可以电连接到相应位线。此外,NAND闪存存储器设备可以是2D或2D设备,并且可以是单级单元(SLC)、多级单元(MLC)、三级单元(TLC)或四级单元(QLC)。控制器108可能以页面等级向NAND闪存存储器设备写入数据以及从NAND闪存存储器设备读取数据,并且以块等级从NAND闪存存储器设备擦除数据。

NVM 110的一部分可被格式化为逻辑块,使得NVM 110的容量被划分为多个分区。分区中的每个分区包括NVM 110的多个物理块或擦除块,并且该擦除块中的每个擦除块与多个逻辑块相关联。该逻辑块中的每个逻辑块与唯一LBA或扇区相关联。分区中的每个分区可具有与NVM 110的一个或多个擦除块的容量对准的尺寸。当控制器108从诸如主机设备104接收命令时,控制器108可以从与NVM 110的多个擦除块相关联的多个逻辑块读取数据以及将数据写入该多个逻辑块。

存储设备106包括电源111,其可以向存储设备106的一个或多个部件提供电力。当以标准模式操作时,电源111可以使用由外部设备诸如主机设备104提供的电力向一个或多个部件供电。例如,电源111可以使用经由接口114从主机设备104接收的电力向一个或多个部件供电。在一些示例中,电源111可以包括一个或多个电力存储部件,其被配置成当以关闭模式操作时向一个或多个部件供电,诸如在停止从外部设备接收电力的情况下。以这种方式,电源111可以用作机载备用电源。一个或多个电力存储部件的一些示例包括但不限于电容器、超级电容器、电池等。在一些示例中,可由一个或多个电力存储部件存储的电量可以是一个或多个电力存储部件的成本和/或尺寸(例如,面积/体积)的函数。换句话说,随着由一个或多个电力存储部件存储的电量增加,一个或多个电力存储部件的成本和/或尺寸也增加。

存储设备106还包括易失性存储器112,该易失性存储器可由控制器108用来存储信息。易失性存储器112可以包括一个或多个易失性存储器设备。在一些示例中,控制器108可以使用易失性存储器112作为高速缓存。例如,控制器108可以将高速缓存的信息存储在易失性存储器112中,直到高速缓存的信息被写入NVM 110。如图1所示,易失性存储器112可以消耗从电源111接收的电力。易失性存储器112的示例包括但不限于随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态RAM(SRAM)和同步动态RAM(SDRAM(例如,DDR1、DDR2、DDR3、DDR3L、LPDDR3、DDR4、LPDDR4等))。

存储设备106包括控制器108,其可以管理存储设备106的一个或多个操作。例如,控制器108可以管理从NVM 110读取数据和/或将数据写入该NVM 110。控制器108可包括分区管理(ZM)120,以管理对分区的读取和写入,以及出于垃圾回收目的重定位有效数据往来于分区。分区元数据122可存储在分区管理器120或控制器108中。在一些实施方案中,当存储设备106从主机设备104接收写入命令时,控制器108可以发起数据存储命令以将数据存储到该NVM 110并且监测数据存储命令的进度。控制器108可以确定存储系统100的至少一个操作特性,并且将至少一个操作特性存储到该NVM 110。

分区元数据122存储关于多个分区中的每个分区的信息,诸如每个分区的状态。分区元数据122可由控制器108或ZM 120更新以向主机设备104提出关于一个或多个分区的建议,以通知主机设备104一个或多个分区已被更新或改变,或者通知主机设备104可能在一个或多个分区中发生的事件。分区元数据122包括控制器108或ZM 120可更新的多个属性或字段。例如,分区元数据122可包括可写入分区容量属性、推荐将分区转变为满的属性、控制器已转变满的分区的属性、重置满的分区被预期的属性以及关于分区内I/O误差、程序故障和任何跳过的LBA的数据,如下文参考图3A至图3B所述。

控制器108和/或ZM 120被配置为发出事件或通知以通知主机设备104分区元数据122已利用一个或多个选择属性(例如,可写入分区容量属性、推荐将分区转变为满的属性、控制器已转变满的分区的属性和重置满的分区被预期的属性)更新,并且主机设备104应读取或检索已发生在分区元数据122上的变化列表。分区元数据122使得主机设备104能够与存储设备106同步,以使得主机设备104完全了解存储设备106中的任何相关发生事件。例如,分区元数据122允许主机设备104了解在任何给定时间任何存储数据在存储设备106内的位置或在将数据从主机设备104写入存储设备106时发生的任何I/O错误。

图2是示出了根据一个实施方案的操作存储设备以执行读取或写入命令的方法200的框图。方法200可以与存储系统100一起使用,该存储系统具有主机设备104和包括控制器108的存储设备106。方法200可以与设备一起使用,该设备具有主机设备和包括命令处理器的存储设备。

方法200开始于操作250,其中主机设备将命令作为条目写入提交队列中。在操作250处,主机设备可以将一个或多个命令写入提交队列中。命令可以是读取命令或写入命令。主机设备可以包括一个或多个提交队列。主机设备可按任何顺序(即,提交顺序)将一个或多个命令写入提交队列,而不管一个或多个命令的顺序写入顺序(即,顺序处理顺序)如何。

在操作252中,主机设备写入一个或多个更新的提交队列尾指针并且敲响门铃或发送中断信号以向存储设备通知或发信号告知准备好执行的新命令。门铃信号可以是图2的门铃218。如果存在多于一个提交队列,则主机可以写入更新的提交队列尾指针并为提交队列中的每个提交队列发送门铃或中断信号。在操作254中,响应于接收到门铃或中断信号,存储设备的控制器从一个或多个提交队列获取命令,并且该控制器接收或DMA读取该命令。

在操作256中,控制器处理命令并将与该命令相关联的数据写入或传送到主机设备存储器。该控制器一次可以处理多于一个命令。该控制器可以按提交顺序或按顺序处理一个或多个命令。处理写入命令可以包括:识别用于将与命令相关联的数据写入的分区,将该数据写入该分区的一个或多个LBA,以及推进该分区的写入指针以识别该分区内的下一个可用LBA。

在操作258中,一旦该命令已被充分处理,控制器就将对应于执行的命令的完成条目写入主机设备的完成队列,并且移动或更新CQ头指针以指向新写入的完成条目。

在操作260中,控制器生成中断信号或门铃并将其发送到主机设备。中断信号指示该命令已被执行并且与该命令相关联的数据在该存储器设备中可用。中断信号进一步通知主机设备完成队列已准备好被读取或处理。

在操作262中,主机设备处理完成条目。在操作264中,主机设备将更新的CQ头指针写入存储设备并敲响门铃或向存储设备发送中断信号以释放完成条目。

图3A示出了根据一个实施方案的在存储设备300中使用的分区命名空间(ZNS)302视图。存储设备300可将ZNS 302视图呈现给主机设备。图3B示出了根据一个实施方案的存储设备300的ZNS 302的状态图350。存储设备300可以是图1的存储系统100的存储设备106。存储设备300可具有一个或多个ZNS 302,并且每个ZNS 302可具有不同的大小。除该一个或多个分区命名空间302之外,存储设备300还可包括一个或多个常规命名空间。此外,ZNS302可以是用于SAS的分区块命令(ZBC)和/或用于SATA的分区设备ATA命令集(ZAC)。

在存储设备300中,ZNS 302是可被格式化成逻辑块使得容量被分成多个分区306a-306n(统称为分区306)的NVM的数量。分区306中的每个分区包括介质单元或NVM 304的多个物理块或擦除块(未示出),并且该擦除块中的每个擦除块与多个逻辑块(未示出)相关联。分区306中的每个分区可具有与NVM或NAND器件的一个或多个擦除块的容量对准的尺寸。当控制器308从诸如主机设备(未示出)或主机设备的提交队列接收命令时,控制器308可以从与ZNS 302的多个擦除块相关联的多个逻辑块读取数据以及将数据写入该多个逻辑块。该逻辑块中的每个逻辑块与唯一LBA或扇区相关联。

在一个实施方案中,NVM 304为NAND器件。该NAND器件包括一个或多个管芯。该一个或多个管芯中的每个管芯包括一个或多个平面。该一个或多个平面中的每个平面包括一个或多个擦除块。该一个或多个擦除块中的每个擦除块包括一条或多条字线(例如,256条字线)。该一条或多条字线中的每条字线可以在一个或多个页面中寻址。例如,MLC NAND管芯可使用上页面和下页面来达到整个字线的每个单元中的两个位(例如,每页16kB)。此外,可以以等于或小于完整页面的粒度访问每个页面。控制器可以频繁地访问用户数据粒度LBA大小为512字节的NAND。因此,如在下文描述中所提及的,NAND位置等于512字节的粒度。因此,MLC NAND的两个页面的LBA大小为512字节并且页面大小为16kB,这将导致大约每个字线16个NAND位置。然而,NAND位置大小不旨在进行限制,并且仅用作示例。

当将数据写入擦除块时,在分区306内对应地更新一个或多个逻辑块,以跟踪数据在NVM 304内的位置。数据可一次写入一个分区306,直到分区306变满,或写入多个分区306,使得多个分区306可部分变满。类似地,当将数据写入特定分区306时,数据可按NAND位置的顺序或逐字线地一次一个块地写入多个擦除块,直到移动到相邻块(即,写入第一擦除块直到在移动到第二擦除块之前第一擦除块变满),或者可按NAND位置的顺序或逐字线地一次多个块地写入多个擦除块,来以更平行的方式部分填充每个块(即,在写入每个擦除块的第二NAND位置之前写入每个擦除块的第一NAND位置)。

当控制器308选择将存储每个分区的数据的擦除块时,控制器308将能够在分区开放时间选择擦除块,或者其可在达到填充该特定擦除块的第一NAND位置或字线的需要时选择擦除块。当利用上述在开始下一个擦除块之前完全填充一个擦除块的方法时,这可能更为不同。控制器308可以利用该时间差来在即时的基础上选择更优化的擦除块。哪个擦除块被分配和指派给每个区及其连续LBA的决定可以针对零个或多个并发分区一直出现在控制器308内。

分区306中的每个分区与分区起始逻辑块地址(ZSLBA)或分区起始扇区相关联。ZSLBA是分区306中的第一可用LBA。例如,第一分区306a与Z

当将数据写入分区306时,写入指针310被推进或更新以指向或指示分区306中的用于将数据写入的下一个可用块,以便跟踪下一个写入起始点(即,先前写入的完成点等于后续写入的起始点)。因此,写入指针310指示对分区306的后续写入将在何处开始。后续写入命令是“分区附加”命令,其中与该后续写入命令相关联的数据在写入指针310指示为下一个起始点的位置处被附加到分区306。分区306内的LBA的排序列表可被存储用于写入排序。每个分区306可以具有其自身的写入指针310。因此,当接收到写入命令时,分区由其ZSLBA标识,并且写入指针310确定在所识别的分区内数据的写入开始的位置。

图3B示出了针对图3A的ZNS 302的状态图350。在状态图350中,每个分区可处于不同状态,诸如空的、活动的、满的或脱机。当分区为空的时,该分区不含数据(即,分区中的任何擦除块当前均未存储数据),并且写入指针位于ZSLBA(即,WP=0)处。一旦向分区调度写入或由主机发出分区开放命令后,空分区将切换到开放和活动分区。分区管理(ZM)命令可用于在分区开放和分区关闭状态(都是活动状态)之间移动分区。如果分区是活动的,则该分区包括可写入的开放块,并且可向主机提供活动状态下的推荐时间的描述。控制器308包括ZM。分区元数据可存储在ZM和/或控制器308中。

术语“写入”包括当用户数据尚未填充所有NAND位置时,在擦除块中的0个或更多个NAND位置和/或擦除块中的部分填充NAND位置上编程用户数据。术语“写入”还可包括由于内部驱动器处理需要(因为误比特在开放的擦除块上更快地累积而导致的开放块数据保持问题)而将分区移至满的状态,存储设备300由于资源限制(像太多开放分区要跟踪或者已发现的缺陷状态等等)而关闭或填满分区,或者主机设备因为诸如没有更多数据要发送给驱动器、计算机关闭、主机上的错误处理、用于跟踪的有限主机资源等等问题而关闭分区。

活动分区可以是开放的或关闭的。开放分区是已准备好写入并具有当前已分配资源的空分区或部分填满分区。利用写入命令或分区附加命令从主机设备接收的数据可被编程到当前未填充先前数据的开放的擦除块。已关闭分区是当前未从主机持续不断地接收写入的空分区或部分填满分区。分区从开放状态移动到关闭状态允许控制器308将资源重新分配给其他任务。这些任务可包括但不限于其他开放的分区、其他常规的非分区区域、或其他控制器需要。

在开放分区和关闭分区中,写入指针指向分区中位于ZSLBA和分区的最后LBA的末端之间的某个位置(即,WP>0)。活动分区可根据由ZM进行的指定在开放和关闭状态之间切换,或者在将写入调度到分区时进行该切换。另外,ZM可重置活动分区以清除或擦除存储在分区中的数据,使得该分区切换回空分区。一旦活动分区已满,该分区就会切换到满的状态。满的分区是完全填充有数据的分区,并且没有用于写入数据的更多可用块(即,WP=分区容量(ZCAP))。在满的分区中,写入指针指向该分区的可写入容量的末端。仍可执行满的分区中存储的数据的读取命令。

分区可具有任何总的容量,诸如256MiB或512MiB。然而,每个分区的一小部分可能无法访问以将数据写入,但仍可被读取,诸如每个分区的存储XOR数据的部分和的一个或多个被排除的擦除块。例如,如果分区306的总容量为512Mib,那么ZCAP可能为470Mib,这是可用于将数据写入的容量,而42Mib不可用于写入数据。分区的可写入容量(ZCAP)等于或小于总分区存储容量。存储设备300可在分区重置时确定每个分区的ZCAP。例如,控制器308或ZM可确定每个分区的ZCAP。当分区被重置时,存储设备300可确定该分区的ZCAP。

将可写入ZCAP的属性添加至分区元数据,并且存储设备300可更新可写入ZCAP属性以向主机设备指示分区306的可写入容量。主机设备可以从分区元数据读取可写入ZCAP的属性以确定存储设备所选择的分区306的ZCAP,因此主机设备知道可在分区306中存储多少数据。存储设备300可更新应用于分区306中的每个分区的可写入ZCAP属性。在利用ZCAP属性更新分区元数据时,控制器308和/或ZM可发出事件以通知主机设备分区元数据已改变。

分区306的ZCAP可被选择以与物理介质边界的容量对准,诸如与一个或多个擦除块对准,这允许主机设备和存储设备300在写入数据时进行协作。存储在分区306中的所有数据将是有效或无效的,并且主机设备独立于存储设备跟踪数据的状态。因此,存储设备不必移动数据来释放用于新写入的擦除块,因为主机应用程序或主机设备现在管理该过程。因此,消除了设备侧写入放大系数。

ZM可重置满的分区,从而调度对存储在该分区中的数据的擦除,使得该分区切换回空分区。在重置满的分区时,尽管该分区可能标记为可供写入的空分区,但该分区的数据可能不被立即清除。但是,在切换到开放和活动分区之前,必须擦除重置的分区。可在ZM重置和ZM开放之间的任何时间擦除分区。在重置分区时,存储设备300可确定重置该分区的新ZCAP并更新分区元数据中的可写入ZCAP属性。脱机分区是无法将数据写入的分区。脱机分区可处于满的状态、空状态或处于部分满的状态而不处于活动状态。

由于重置分区会清除存储在分区中的数据或调度对存储在分区中的数据的擦除,因此消除了对各个擦除块进行垃圾回收的需要,从而改善了存储设备300的整体垃圾回收过程。存储设备300可标记一个或多个擦除块以用于擦除。当将要形成新分区并且存储设备300预计ZM开放时,则可擦除被标记用于擦除的一个或多个擦除块。存储设备300还可在擦除该擦除块时决定和创建该分区的物理支持。因此,一旦新分区被开放并且擦除块被选择以形成分区,该擦除块将被擦除。此外,每次重置分区时,可选择分区306的LBA和写入指针310的新顺序,从而使分区306能够容忍不按顺序接收命令。可任选地关闭写入指针310,使得命令可被写入为命令指示的任何起始LBA。

重新参见图3A,当控制器308从主机接收写入命令或直接存储器访问(DMA)读取写入数据时,控制器308可选择空擦除块以将与命令相关联的数据写入,并且空分区306切换到活动和开放分区306。该写入命令可以是用于写入新数据的命令,或者是将有效数据移动到另一个分区以用于垃圾回收目的的命令。控制器308被配置为从由主机设备填充的提交队列中DMA读取或拉入新命令。

在刚切换到活动分区306的空分区306中,将数据指派给始于ZSLBA的分区306和该分区306的一组相关联顺序LBA,因为写入指针310将与ZSLBA相关联的逻辑块指示为第一可用逻辑块。该数据可被写入一个或多个擦除块或针对分区306的物理位置已分配的NAND位置。在将与写入命令相关联的数据写入分区306之后,写入指针310被更新为指向可用于主机写入的下一个LBA(即,第一写入的完成点)。来自该主机写入命令的写入数据被顺序地编程到擦除块中被选择用于分区的物理支持的下一个可用NAND位置中。

在一些实施方案中,NAND位置可等于字线。在此类实施方案中,如果写入命令小于字线,则控制器可任选地在对由多个写入命令构成的完整字线进行编程之前,将若干写入命令聚集到另一个存储器位置诸如DRAM或SRAM中。长于字线的写入命令将能够编程完整的字线并用一些数据填充完整的字线,并且超出字线的多余数据将用于填充下一个字线。出于本说明书的目的,写入数据大小等于512字节的NAND位置;然而,这并非旨在进行限制。

例如,控制器308可接收对第三分区306c的第一写入命令,或第一分区附加命令。主机按顺序识别分区306的哪个逻辑块用来写入与第一命令相关联的数据。然后将与第一命令相关联的数据写入第三分区306c中的如由写入指针310所指示的第一或下一个或多个可用LBA,并且写入指针310被推进或更新以指向可用于主机写入的下一个可用LBA(即,WP>0)。如果控制器308接收到对第三分区306c的第二写入命令,或第二分区附加命令,则与第二写入命令相关联的数据被写入第三分区306c中的由写入指针310识别的下一个可用LBA。一旦将与第二命令相关联的数据写入第三分区306c,则写入指针310就再次推进或更新以指向可用于主机写入的下一个可用LBA。重置第三分区306c将写入指针310移回Z

将用户数据写入分区的擦除块或NAND位置(即,对单元编程)通过将电子脉冲到单元中直到该单元的电压在给定逻辑状态的范围内来完成。电压仅可增加,并且必须在单元可被再次编程之前清空(即,通过闪存块擦除)。编程是耗能过程,这可能导致电荷流向相邻单元,从而可能改变相邻单元的逻辑状态。

为了减少电荷泄漏到附近单元,可利用单元的两步编程。例如,在多级单元(MLC)的两步编程中,在第一单元的较低位上执行第一程序(即,高能量粗粒度程序),然后在第一单元的较高位上执行第二程序(即,低能量细粒度程序)。在对第一单元的较低位和较高位进行编程之间,对相邻第二单元的较低位进行编程。如果已存在单元间干扰,则第一单元的细粒度编程可感测相邻第二单元的电流电压,并且仅脉冲传输所需逻辑状态的必要能量。同时,尚未由细粒程序编程的单元是不可读的,这导致主机数据在细粒度程序完成之前是不可读的。

使用两步编程时的另一种权衡是,处于部分编程状态的单元更易于受到编程干扰和读取干扰,这影响读取细粒度编程步骤中单元的适当电压的能力,从而导致存储无效逻辑状态。诸如电荷泄漏和读取/编程干扰之类的错误导致单元的逻辑状态由于电子离开或进入单元而改变。

诸如上文在图3B中所述的开放分区易于因读取干扰、两步编程模型和/或介质的其他物理属性而出错,这可能导致存储设备300不得不搁置或填补一组擦除块以保持可靠性,以便补偿此类错误。遇到错误的开放分区可导致分区被控制器308过早地转变为满的状态,从而减少对介质的写入次数。在此类情况下,主机设备没有机会用用户数据填充分区306,从而导致写入容量浪费。

然而,利用ZNS 302的存储设备300可与主机设备协作,使得主机设备可意识到即将完成的分区或控制器完成的分区,从而允许及早通知主机设备并在必要时将数据放置在开放分区中。为了适应存储设备300与主机设备之间的协作,将两个新属性或字段添加到要在开放分区上执行的分区元数据:推荐将分区转变为满的属性以及控制器已转变满的分区的属性。控制器308可通知主机设备存储设备300打算将开放分区转变为满的状态,并且随后如果主机未响应,则可自主地将开放分区转变为满的状态。例如,如果主机设备未将开放分区转变为满的状态,则存储设备300的控制器308和/或ZM可在预先确定的时间量之后自主地转变开放分区。如果控制器308发起转变,则将更新控制器已转变满的分区的属性。

推荐将分区转变为满的属性和控制器已转变满的分区的属性可在分区处于开放状态的任何时间更新,因此,存储设备300通过NVM Express规范中的异步事件通知框架利用通知。每当推荐将分区转变为满和控制器已转变满的分区的值或属性被更新时,存储设备300可发出通知主机设备分区元数据已改变的事件。然后,主机设备应检索变化列表并执行主机设备认为必要的任何缓解措施。

类似地,诸如上文在图3B中所述,由于读取干扰和电荷泄漏,满的分区必须在某一时间点被重写。当必须对满的分区进行重写时,从存储设备300的角度来看,所有数据都是有效的。通常,存储设备300将必须从回退特定满的分区(例如,第一分区306a)的擦除块读取所有数据,并且将数据重写到不同分区(例如,第二分区306b)中的一组新擦除块,同时保持该分区(例如,第一分区306a)对主机设备的满的状态。鉴于对满的分区进行重写是费用很高的操作,因此可在必须重写满的分区并采取行动时通知主机设备。

将重置满的分区被预期的属性或字段添加到分区元数据以提醒主机设备应重置满的分区。控制器308可设置重置满的分区被预期的属性或位以通知主机设备建议主机设备重写数据,或者如果数据对主机设备不再有效,则自主重置满的分区。这样,存储设备300和主机设备可以就传统的垃圾回收过程协作,从而消除不必要的重写并改善存储设备300的总体性能。

如果主机设备未重置满的分区(即,由于不需要数据,或者如果数据已在其他地方重写),则存储设备300可在内部刷新或重置数据并更新重置满的分区被预期属性,以便通知主机设备不应再尝试刷新或重置数据。例如,如果主机设备未重写数据,则存储设备300的控制器308可在预先确定的时间量之后重置满的分区。由于重置或重写分区花费不到一秒的时间,因此存储设备和主机设备之间的同时重新定位来自分区的数据竞争状况是不太可能的。

此外,ZNS 302引入严格的写入顺序,这可能导致主机写入退化为每个分区306单个写入I/O。因此,写入分区306必须是顺序的,并且重写分区306需要首先重置分区306。发出任何不遵守严格写入顺序的I/O导致控制器出现I/O错误。

当利用ZNS 302的存储设备300向主机设备返回写入错误时,返回的错误位于单个分区内。因此,故障爆发半径是有限的,因此I/O错误不被认为是致命的。ZNS 302允许I/O错误在写入时返回,并且存储设备在知情的情况下使用I/O错误。可将发生的任何错误记录在分区元数据中。这样,错误向存储设备300提供附加信息,存储设备300可将该附加信息传送至主机设备。主机设备可以读取分区元数据以确定为什么发生错误以及错误的原因,并且精确地确定哪些擦除块或NAND位置受到错误的影响。然后,主机设备知道放弃在发生错误的位置处存储数据。

例如,如果存储设备300在写入分区306中的LBA时经历错误或编程故障,则写入指针可向前跳过一个或多个LBA以推进到可用于存储数据的下一个有效LBA。然后,主机设备可以读取分区元数据以确定跳过多少LBA以与存储设备300重新同步,并且开始在写入指针所指示的下一个有效LBA处写入数据。因此,存储设备300可提醒主机设备不将数据存储在经历错误或程序故障的一个或多个LBA中,而不是存储设备300对主机设备掩盖错误并管理后端上的错误。因此,主机设备将始终知道数据所存储的位置。

又如,如果存储设备300在写入分区中的LBA时经历错误或编程故障,则存储设备300可确定整个分区306不适合存储数据。如果开放分区306不再适于存储数据,则存储设备300可将不合适的分区306转变为满的状态并更新分区元数据中的控制器已转变满的分区的属性,以提醒主机设备分区306已转变为满的状态。主机设备继而知道转变后的分区306不可用于存储数据,并且可将数据写入主机设备的选择的新分区306。

通过知情地使用I/O错误或程序故障,主机设备和存储设备300就数据放置进行协作,并且主机设备能够将具有相同温度的数据对准以保持在一起,从而消除了存在于常规SSD中昂贵的垃圾回收例程并减小了设备写入放大系数。此外,存储设备300可提醒主机设备不将数据存储在经历错误或程序故障的一个或多个LBA中,或者开放分区已转变为满的状态并且不再可用于存储数据。因此,主机设备不断地知道正在存储数据的位置。

此外,通过利用分区元数据中的属性来向主机设备通知驱动器侧上发生的情况,设备侧写入放大系数和为改善垃圾回收而预留的驱动器的过度调配均可被消除,从而增加了主机设备使用的存储容量。另外,存储设备和主机设备可以就传统的垃圾回收过程协作,从而消除不必要的重写并改善存储设备的总体性能。

在一个实施方案中,一种存储设备包括介质单元。所述介质单元的容量被分成多个分区。所述介质单元包括多个管芯,所述多个管芯中的每个管芯包括多个擦除块。所述存储设备还包括耦接到所述介质单元的控制器,所述控制器被配置为:更新分区元数据以向主机设备推荐重置所述多个分区中的一个或多个满的分区;更新所述分区元数据以向所述主机设备推荐将所述多个分区中的一个或多个开放分区转变为满的状态;将所述一个或多个开放分区转变为所述满的状态;以及更新所述分区元数据以提醒所述主机设备所述一个或多个开放分区已转变为所述满的状态。

所述控制器被配置为在更新所述分区元数据中的重置满的分区被预期、推荐将分区转变为满,或控制器已转变满的分区的属性时,发出事件以通知所述主机设备所述分区元数据已改变。所述分区元数据利用重置满的分区被预期的属性来更新,以向所述主机设备推荐重置所述一个或多个满的分区。所述分区元数据利用推荐将分区转变为满的属性来更新,以向所述主机设备推荐将所述一个或多个开放分区转变为所述满的状态。所述分区元数据利用控制器已转变满的分区的属性来更新,以提醒所述主机设备所述一个或多个开放分区已转变为所述满的状态。所述控制器被进一步配置为当存储在所述一个或多个满的分区中的数据不再有效时,自主地重置所述一个或多个满的分区。所述控制器被进一步配置为当所述一个或多个满的分区受到读取干扰或电荷泄漏的影响时,更新所述分区元数据以向所述主机设备推荐重置所述一个或多个满的分区;以及在确定所述一个或多个分区不适于存储数据时,更新所述分区元数据以向所述主机设备推荐将所述一个或多个开放分区转变为所述满的状态。

在另一个实施方案中,存储设备包括介质单元。所述介质单元的容量被分成多个分区。所述介质单元包括多个管芯,所述多个管芯中的每个管芯包括多个擦除块。所述存储设备还包括耦接到所述介质单元的控制器,所述控制器被配置为确定所述多个分区中的每个分区的可写入分区容量,所述可写入分区容量等于或小于每个分区的总分区存储容量,其中每个分区的所述可写入容量与一个或多个擦除块的容量对准;以及更新分区元数据以向主机设备通知所述多个分区中的每个分区的所述可写入分区容量。

所述控制器更新所述分区元数据中的可写入ZCAP属性以向所述主机设备通知所述可写入分区容量。至少一个分区的所述可写入分区容量小于所述至少一个分区的所述总分区存储容量。具有小于所述总分区存储容量的可写入分区容量的所述至少一个分区包括不可访问以将数据写入的可读取部分。所述至少一个分区的所述可读取部分存储XOR数据。所述控制器被配置为在分区重置时确定每个分区的所述可写入分区容量。所述控制器被配置为在更新所述分区元数据中的可写入ZCAP属性时,发出事件以通知所述主机设备所述分区元数据已改变。

在一个实施方案中,存储设备包括介质单元。所述介质单元的容量被分成多个分区。所述介质单元包括多个管芯,所述多个管芯中的每个管芯包括多个擦除块。所述存储设备还包括耦接到所述介质单元的控制器,所述控制器被配置为:接收写入命令以将数据写入所述多个分区中的第一分区中的一个或多个第一逻辑块地址;在将所述数据写入所述第一分区中的所述一个或多个第一逻辑块地址的同时经历错误时,更新所述第一分区的写入指针以指向所述第一分区中的下一个有效逻辑块地址;以及更新分区元数据,以指示所述一个或多个第一逻辑块地址被跳过并且指示所述下一个有效逻辑块地址可用于将所述数据存储在所述第一分区中。

所述介质单元是非易失性存储器设备。更新所述分区元数据以指示所述一个或多个第一逻辑块地址被跳过,提醒主机设备所述一个或多个第一逻辑块地址无法存储数据。在将数据写入第二分区中的一个或多个第二逻辑块地址的同时经历错误时,所述控制器被配置为确定所述第二分区不适合存储所述数据。所述控制器被进一步配置为将所述第二分区转变为满的状态,以及更新所述分区元数据以提醒主机设备所述第二分区已转变为所述满的状态。所述分区元数据利用控制器已转变满的分区的属性来更新,以提醒所述主机设备所述第二分区已转变为所述满的状态。所述控制器被进一步配置为在利用控制器已转变满的分区的属性更新所述分区元数据时,发出事件以通知所述主机设备所述分区元数据已改变。

虽然前述内容针对本公开的实施方案,但是可以在不脱离本公开的基本范围的情况下设想本公开的其他和另外的实施方案,并且本公开的范围由所附权利要求书确定。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号