CN110968525A - Ftl提供的缓存、其优化方法与存储设备 - Google Patents

Ftl提供的缓存、其优化方法与存储设备 Download PDF

Info

Publication number
CN110968525A
CN110968525A CN201811154294.8A CN201811154294A CN110968525A CN 110968525 A CN110968525 A CN 110968525A CN 201811154294 A CN201811154294 A CN 201811154294A CN 110968525 A CN110968525 A CN 110968525A
Authority
CN
China
Prior art keywords
cache
ftl
logical address
data
address
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Granted
Application number
CN201811154294.8A
Other languages
English (en)
Other versions
CN110968525B (zh
Inventor
孙清涛
路向峰
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
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 CN201811154294.8A priority Critical patent/CN110968525B/zh
Publication of CN110968525A publication Critical patent/CN110968525A/zh
Application granted granted Critical
Publication of CN110968525B publication Critical patent/CN110968525B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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/06Addressing a physical block of locations, e.g. base addressing, module addressing, memory dedication
    • G06F12/0646Configuration or reconfiguration

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请提供了FTL提供的缓存、其优化方法与存储设备。所提供的用于存储设备的方法包括:获取用于访问存储设备的逻辑地址;查询FTL缓存条目,若FTL缓存条目记录有获得的逻辑地址,则用从FTL缓存条目获得的同逻辑地址对应的缓存容器索引访问对应缓存容器的缓存单元。本申请意在改进FTL,由FTL统一管理存储设备的地址映射与缓存,从而提升存储设备的性能。

Description

FTL提供的缓存、其优化方法与存储设备
技术领域
本申请涉及存储技术,涉及由FTL(Flash Translation Layer,闪存转换层)提供缓存。
背景技术
图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以及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字节。物理页也可以具有其他的尺寸。
在存储设备中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在相关技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。
存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是固态存储设备中的重要元数据。通常FTL表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。
一些存储设备的FTL由存储设备所耦合的主机提供,由主机的存储器存储FTL表,主机的CPU执行软件提供FTL。还有一些被设置在主机与存储设备之间的存储管理装置提供FTL。
为存储设备提供缓存,来提升存储设备的性能。例如,在中国专利申请201710219077.1、201710219096.4与201710219112.X中提供了用于固态存储设备的分布式缓存。缓存也可以由主机或存储管理装置提供。
发明内容
本申请意在改进FTL,由FTL统一管理存储设备的地址映射与缓存,从而提升存储设备的性能。
根据本申请的第一方面,提供了根据本申请第一方面的第一用于存储设备的方法,包括:获取用于访问存储设备的逻辑地址;查询FTL缓存条目,若FTL缓存条目记录有获得的逻辑地址,则用从FTL缓存条目获得的同逻辑地址对应的缓存容器索引访问对应缓存容器的缓存单元。
根据本申请的第一方面的第一用于存储设备的方法,其中,根据读命令从缓存单元读出其指示的数据。
根据本申请的第一方面的第一或第二用于存储设备的方法,其中,根据写命令向缓存单元写入其指示的数据。
根据本申请的第一方面的第三用于存储设备的方法,其中,响应于写入访问逻辑地址的写命令指示的数据,更新FTL条目中标识缓存单元中数据与NVM数据帧的数据不一致的有效性位图。
根据本申请的第一方面的第三或第四用于存储设备的方法,其中,将数据写入缓存单元后,向发出写命令的设备指示写命令处理完成。
根据本申请的第一方面的第一至第五用于存储设备的方法之一,其中,若FTL缓存条目未记录获得的逻辑地址,则查询FTL表获取同逻辑地址对应的NVM数据帧地址,并用NVM数据帧地址访问NVM数据帧。
根据本申请的第一方面的第六用于存储设备的方法,其中,若访问逻辑地址的是读命令,则从NVM数据帧地址读出读命令指示的数据。
根据本申请的第一方面的第二或第七用于存储设备的方法,其中,若FTL缓存条目记录有获得的部分逻辑地址,则查询FTL表获取同逻辑地址对应的NVM数据帧地址,并且根据FTL缓存条目记录的逻辑地址和FTL缓存条目未记录的逻辑地址获得缓存容器中存储的NVM数据帧地址,用查询FTL表获取的NVM数据帧地址和缓存容器中存储的NVM数据帧地址访问对应NVM芯片的NVM数据帧,读出读命令指示的数据。
根据本申请的第一方面的第六至第八用于存储设备的方法之一,其中,若访问逻辑地址的是写命令,为逻辑地址分配新的缓存容器,将写命令指示的数据写入新分配的缓存容器的缓存单元。
根据本申请的第一方面的第一至第五用于存储设备的方法之一,其中,若FTL缓存条目未记录获得的逻辑地址,为逻辑地址分配新的缓存容器,将写命令指示的数据写入新分配的缓存容器的缓存单元。
根据本申请的第一方面的第十用于存储设备的方法,其中,响应于将写命令指示的数据写入新分配的缓存容器的缓存单元,更新FTL条目中的有效性位图。
根据本申请的第一方面的第十或第十一用于存储设备的方法,其中,响应于将数据写入新分配的缓存容器的缓存单元后增加FTL缓存条目,并向增加的FTL缓存条目记录新分配的缓存容器的索引。
根据本申请的第一方面的第十至第十二用于存储设备的方法之一,其中,识别得到的同逻辑地址对应的物理地址指示NVM数据帧地址后,识别写命令要写入的数据是否占用完整的缓存单元。
根据本申请的第一方面的第十三用于存储设备的方法,其中,若识别写命令要写入的数据未占用完整的第一缓存单元,则从根据FTL提供的同写命令访问的逻辑地址的物理地址从NVM芯片读出小块中未被写命令要写入的数据占用的部分逻辑地址空间的数据,并填充到所述第一缓存单元。
根据本申请的第一方面的第十四用于存储设备的方法,其中,缓存容器中记录有缓存单元、有效性位图和NVM数据帧地址,缓存容器的NVM数据帧地址是被读出数据填充缓存单元的NVM数据帧地址。
根据本申请的第一方面的第一至第十五用于存储设备的方法之一,其中,将缓存单元存储的数据写入NVM芯片,并用NVM芯片的NVM数据帧地址替换FTL条目记录的缓存容器索引。
根据本申请的第一方面的第一至第十六用于存储设备的方法之一,其中,FTL缓存条目相关联地记录逻辑地址与缓存容器索引。
根据本申请的第一方面的第一至第十七用于存储设备的方法之一,其中,FTL缓存条目对应于FTL条目之一。
根据本申请的第一方面的第一至第十八用于存储设备的方法之一,其中,FTL缓存条目对应的FTL条目的值记录缓存容器索引。
根据本申请的第一方面的第一至第十九用于存储设备的方法之一,其中,FTL表的值为缓存容器索引的FTL条目,均有对应的缓存条目。
根据本申请的第一方面的第一至第二十用于存储设备的方法之一,其中,FTL缓存条目相关联地记录逻辑地址与NVM数据帧地址。
根据本申请的第二方面,提供了根据本申请第二方面的第一存储设备,其中,包括:控制部件,所述控制部件执行上述任一项所述的方法完成FTL管理。根据本申请的第二方面的第一存储设备,其中,所述控制部件FTL管理NVM芯片和DRAM或SRAM的部分。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1展示了固态存储设备的框图;
图2是根据本申请实施例的FTL管理的存储空间的示意图;
图3是本申请实施例的逻辑地址(LBA)空间的示意图;
图4展示了本申请实施例的FTL表;
图5展示了本申请实施例的FTL提供缓存的示意图;
图6A展示了根据本申请实施例向存储设备写入数据的流程图;
图6B展示了根据本申请又一实施例向存储设备写入数据的流程图;
图6C展示了根据本申请另一实施例从存储设备读出数据的流程图;
图7展示了根据本申请实施例的FTL条目缓存的示意图;
图8A展示了根据本申请图7的实施例的从存储设备读出数据的流程图;
图8B展示了根据本申请图7的实施例的向存储设备写入数据的流程图;
图9展示了根据本申请再一实施例的FTL表;
图10A展示了根据本申请图9的实施例向存储设备写入数据的流程图;
图10B展示了根据本申请图9的实施例向存储设备写入数据的又一流程图;
图10C展示了根据本申请图9的实施例向存储设备写入数据的再一流程图;
图11展示了根据本申请的该依然另一实施例向存储设备写入数据的流程图;
图12A展示了根据本申请的该依然另一实施例从存储设备读出数据的流程图;以及
图12B展示了根据本申请的该依然另一实施例从存储设备读出数据的又一流程图。
具体实施方式
下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
图2是根据本申请实施例的FTL管理的存储空间的示意图。
根据本申请的实施例,存储设备102的控制部件204提供FTL。存储设备向主机提供逻辑地址(称为LBA)空间。主机使用逻辑地址访问存储设备。FTL将主机提供的逻辑地址映射为物理地址。
根据本申请的实施例,FTL映射得到的物理地址,部分是访问NVM芯片105的物理地址,而部分是访问DRAM110的物理地址。因而,参看图2,NVM芯片105与DRAM110的部分,提供了由FTL管理的存储空间200。
可选地,除了DRAM 110,诸如SRAM的其他类型的存储器也用于提供由FTL管理的存储空间。
可以理解地,根据本申请又一实施例的FTL,由耦合到存储设备的主机,或者被设置在主机与存储设备之间的存储管理装置提供。
FTL由例如运行在控制部件204的CPU中的软件、固件和/或作为ASIC的部分的硬件实现。
图3是本申请实施例的逻辑地址(LBA)空间的示意图。作为举例,逻辑地址空间是连续的地址空间。FTL维护逻辑地址空间。
图3中从上向下的方向是逻辑地址空间递增的方向。逻辑地址空间包括多个具有相同大小的区域,每个区域被称为小块。FTL表的每个条目(称为FTL条目),记录了逻辑地址空间的小块到物理地址的映射。图3中示出了FTL表的多个条目,包括FTL条目0、FTL条目1……FTL条目5。例如,每个FTL条目对应的逻辑地址空间的大小可以是例如512字节、1KB或4KB。根据逻辑地址空间的地址,索引FTL条目。例如,用逻辑地址空间的地址除以FTL条目对应的逻辑地址空间的大小,所得的商为FTL条目的索引。
图4展示了本申请实施例的FTL表。
FTL表包括多个FTL条目,每个FTL条目对应于小块之一,FTL条目的值记录了为小块提供存储空间的NVM数据帧地址或缓存容器索引。可选地,根据FTL条目的值,识别该值指示NVM数据帧地址还是缓存容器索引。例如,将大于阈值的FTL条目值,映射为NVM数据帧地址,而将不大于阈值的FTL条目值,映射为缓存容器索引。作为又一个例子,在FTL条目中记录标志位,用于指示FTL条目的值指示NVM数据帧地址还是缓存容器索引。
FTL表被存储在例如DRAM 110(也参看图2)或SRAM中。FTL根据访问的逻辑地址,计算出对应的FTL条目的索引,并从FTL条目中得到为小块提供存储空间的NVM数据帧或缓存容器。
NVM数据帧地址,是例如访问NVM芯片的物理页的物理地址、访问NVM芯片的多个组合的物理页的物理地址(组合的物理页是例如,位于相同逻辑单元(LUN)的多个平面(Plane)上的具有相同物理页号的物理页)、访问NVM芯片的物理页内的部分数据单元的物理地址。缓存容器索引是例如DRAM中的缓存单元的地址或缓存单元的描述符的地址。缓存单元是例如DRAM或SRAM中的一段存储空间。缓存单元描述符用于描述缓存单元。缓存容器用于记录缓存单元描述符。
图5展示了本申请实施例的FTL提供缓存的示意图。作为举例,FTL将逻辑地址空间映射到一个或多个NVM芯片105的部分(记为NVM芯片510)与DRAM 110的部分(记为DRAM520)。
NVM芯片510的存储空间包括多个物理块。NVM芯片510的存储空间被组织为NVM数据帧(参看块512)。大块512包括多个NVM数据帧。NVM数据帧的大小同小块的大小相同,从而一个小块对应的逻辑地址空间所存储的数据可被记录在一个NVM数据帧中。
继续参看图5,DRAM 520的存储空间被组织为缓存单元。缓存单元是例如DRAM520的一段存储空间。缓存单元的大小同小块的大小相同,从而一个小块对应的逻辑地址空间所存储的数据可被记录在一个缓存单元中。
返回参看图4,FTL条目的值记录的缓存容器的索引指示了缓存容器。根据缓存容器可访问关联于缓存容器的缓存单元。
缓存容器描述了同其关联的一个或多个缓存单元。缓存单元可被分配给缓存容器,或者缓存单元同缓存容器具有被指定的关联关系。例如,缓存容器记录了关联于缓存容器的一个或多个缓存单元的缓存单元描述符,缓存单元描述符记录了缓存单元的地址与缓存单元的工作状态。
继续参看图5,FTL条目0、FTL条目2、FTL条目3的值与FTL条目4的值,指示了位于NVM芯片510的NVM数据帧地址,而FTL条目1与FTL条目5的值,指示了位于DRAM 520的缓存容器的索引。从而FTL根据逻辑地址得到FTL条目,并根据FTL条目的值,而提供为逻辑地址空间的小块提供存储空间的物理地址。
图6A展示了根据本申请实施例向存储设备写入数据的流程图。
存储设备获取主机提供的写命令,写命令指示了逻辑地址(610)。存储设备的控制部件根据逻辑地址查询FTL表(612),获取同逻辑地址对应的物理地址。
可选地,写命令指示了逻辑地址空间的多个小块,相应地,根据每个小块的逻辑地址查询FTL表以得到对应的物理地址。为了清楚的目的,在下面的一个或多个例子中,以写命令访问单一小块为例,描述根据本申请的实施例。
识别所得到的同逻辑地址对应的物理地址是否指示缓存容器索引(614)。若FTL提供的同写命令访问的逻辑地址的物理地址是缓存容器索引,则用该缓存容器索引访问对应缓存容器的缓存单元,以承载写命令要写入的数据(616)。可选地,将写命令要写入的数据写入缓存单元后,向发出写命令的主机指示写命令处理完成。
若FTL提供的同写命令访问的逻辑地址对应的物理地址不是缓存容器索引(614)(例如,是NVM数据帧地址,或其他内容),则为该逻辑地址分配新的缓存容器(618),将写命令要写入的数据写入新分配的缓存容器的缓存单元(620)。还在同逻辑地址对应的FTL条目中记录该新分配的缓存容器的索引(622)。
根据本申请的实施例,可选地,在需要时或周期性地,将一个或多个FTL条目所指示的缓存容器的缓存单元中存储的数据,写入NVM芯片。响应于缓存单元中存储的数据被写入NVM芯片,用NVM芯片的NVM数据帧地址,替换FTL条目中的缓存容器索引。从而,直到将FTL表条目中记录的缓存容器索引修改为指示NVM芯片的数据单元的物理地址之前,FTL表条目记录的始终是缓存容器索引,这意味着在这期间,若接收到访问这些FTL表条目的读命令或写命令,将命中统一缓存,并用缓存容器索引记录的缓存单元来响应读命令或写命令。
图6B展示了根据本申请又一实施例向存储设备写入数据的流程图。
存储设备获取主机提供的写命令,写命令指示了逻辑地址(630)。存储设备的控制部件根据逻辑地址查询FTL表(632),获取同逻辑地址对应的物理地址。
识别所得到的同逻辑地址对应的物理地址是否指示缓存容器索引(634)。若FTL提供的同写命令访问的逻辑地址的物理地址是缓存容器索引,则进一步识别该缓存容器索引对应缓存容器的缓存单元是否正在被使用(636)。缓存单元正在被使用,例如,根据其他写命令正向该缓存单元写入数据,正在从该缓存单元读出数据,或者控制部件正在将该缓存单元的数据写入NVM芯片。若该缓存单元当前未被使用,用该缓存单元承载写命令要写入的数据(638)。若该缓存单元当前正在被使用,则为该缓存容器分配新的缓存单元(640),并用该新的缓存单元承载写命令要写入的数据(642)。
若FTL提供的同写命令访问的逻辑地址的物理地址不是缓存容器索引(634)(例如,是NVM数据帧地址,或其他内容),则为该逻辑地址分配新的缓存容器(644),将写命令要写入的数据写入新分配的缓存容器的缓存单元(646)。还在同逻辑地址对应的FTL条目中记录该新分配的缓存容器的索引(648)。
图6C展示了根据本申请另一实施例从存储设备读出数据的流程图。
存储设备获取主机提供的读命令,读命令指示了逻辑地址(650)。存储设备的控制部件根据逻辑地址查询FTL表(652),获取同逻辑地址对应的物理地址。
识别所得到的同逻辑地址对应的物理地址指示缓存容器索引、NVM数据帧地址还是其他类型的物理地址(654)。若FTL提供的同读命令访问的逻辑地址的物理地址是缓存容器索引,则访问缓存容器的缓存单元,从缓存单元获取数据作为对读命令的响应(656)。若FTL提供的物理地址是NVM数据帧地址,则向NVM芯片发送读取命令来读出数据(658)。可选地,FTL条目中记录了其他类型的地址,例如指示所读取的逻辑地址尚未被写入数据,则向主机指示读命令处理出错,或者以指定的值(例如全0)作为对读命令的响应。
图7展示了根据本申请实施例的FTL条目缓存的示意图。
根据图7的实施例,FTL表包括多个FTL条目。FTL条目的数量较多,例如,1亿条,从而访问FTL条目需要花费的时间较多。提供FTL条目缓存来加快FTL表的查询。
FTL条目缓存包括多个条目(称为“缓存条目”),每个缓存条目相关联地记录了逻辑地址(LBA)与缓存容器索引。缓存条目对应于FTL条目之一。缓存条目对应的FTL条目的值,记录的是缓存容器索引。FTL表的每个值为缓存容器索引的FTL条目,都有对应的缓存条目。例如,参看图7,缓存条目710记录了FTL条目1的逻辑地址(LBA)与缓存容器索引,缓存条目712记录了FTL条目2的逻辑地址(LBA)与缓存容器索引,缓存条目714记录了FTL条目4的逻辑地址(LBA)与缓存容器索引。而FTL表的值为非缓存容器索引的FTL条目,没有对应的缓存条目。
响应于为FTL条目对应的小块分配了缓存容器,创建缓存条目,在创建的缓存条目中记录分配的缓存容器索引,也FTL条目中也记录分配的缓存容器索引。
可选地,由于缓存条目记录了缓存容器索引,在同缓存条目对应的FTL条目中记录NVM数据帧地址或其他类型值而不记录缓存容器索引。响应于为FTL条目对应的小块分配了缓存容器,创建缓存条目,在创建的缓存条目中记录分配的缓存容器索引,而不在FTL条目中记录分配的缓存容器索引。
图8A展示了根据本申请图7的实施例的从存储设备读出数据的流程图。
存储设备获取主机提供的读命令,读命令指示了逻辑地址(810)。存储设备的控制部件根据逻辑地址查询FTL条目缓存(815),以尝试尽快获取同逻辑地址对应的物理地址。
若FTL条目缓存的条目中记录了读命令指示的逻辑地址(或其部分)(815),读命令的逻辑地址命中FTL条目缓存。从FTL条目被命中的缓存条目中获取缓存容器索引。并访问缓存容器对应的缓存单元,从缓存单元中读出数据作为对读命令的响应(820)。
若FTL条目缓存的条目中未记录读命令指示的逻辑地址,意味着读命令的逻辑地址未命中FTL条目缓存(815)。在此情况下,进一步查询FTL表(825),以获取同读命令的逻辑地址对应的FTL条目中记录的指示NVM数据帧地址的物理地址,并根据物理地址从NVM数据帧读出数据来响应读命中(830)。
图8B展示了根据本申请图7的实施例的向存储设备写入数据的流程图。
存储设备获取主机提供的写命令,写命令指示了逻辑地址(840)。存储设备的控制部件根据逻辑地址查询FTL条目缓存(845),以识别写命令指示的逻辑地址是否命中FTL条目缓存。
若写命中指示的逻辑地址命中FTL条目缓存(845),从FTL条目被命中的缓存条目中获取缓存容器索引。并访问缓存容器对应的缓存单元,向缓存单元写入写命令所对应的数据(850)。可选地,响应于数据被写入缓存单元,向主机指示写命令处理完成。
若写命令的逻辑地址未命中FTL条目缓存(845)。在此情况下,为该逻辑地址分配新的缓存容器(855),将写命令要写入的数据写入新分配的缓存容器的缓存单元(860)。以及更新FTL条目缓存(865),在FTL条目缓存中增加条目,在增加的条目中记录写命令指示的逻辑地址与新分配的缓存容器的索引的关联关系。可选地,还在同逻辑地址对应的FTL条目中记录该新分配的缓存容器的索引(870)。
根据本申请的实施例,可选地,在需要时或周期性地,将一个或多个FTL条目所指示的缓存容器的缓存单元中存储的数据,写入NVM芯片。以及响应于缓存单元的数据被写入NVM芯片,用NVM芯片的NVM数据帧地址,替换FTL条目中的缓存容器索引,并删除FTL条目缓存中的对应条目。
图9展示了根据本申请再一实施例的FTL表。
FTL表包括多个FTL条目,每个FTL条目对应于小块之一,FTL条目记录了为小块提供存储空间的NVM数据帧地址或缓存容器索引。
其中,一些FTL条目还记录了有效性位图。
小块对应的逻辑地址空间被进一步分成多个区域。FTL条目的有效性位图的每个比特,指示小块的区域之一在缓存单元中存储的数据,同NVM芯片中记录的数据是否一致。例如,小块的逻辑地址空间大小是4KB,将逻辑地址空间分为8个区域,每个区域具有512字节大小。依然作为举例,响应于首次向某小块写入数据,缓存容器的缓存单元容纳了被写入的数据,这些数据尚未被写入NVM芯片,因而缓存单元对应的逻辑地址空间的一个或多个区域的数据同NVM芯片存储的数据不一致,在有效性位图中,标记缓存单元的一个或多个区域的这种不一致。作为又一个例子,从NVM芯片读出对应于小块的数据,并存储在缓存单元中,此时缓存单元对应的逻辑地址空间的一个或多个区域的数据同NVM芯片存储的数据一致,通过有效性位图的一个或多个比特,标记缓存单元的一个或多个区域的同NVM芯片存储的数据一致。
可选地,一些FTL条目的值记录了NVM数据帧地址,而非缓存容器索引,这些FTL条目不包括有效性位图。
根据图9的实施例,利用根据图6C或图8A展示的实施例相同或相似的流程,从存储设备读出数据。
图10A展示了根据本申请图9的实施例向存储设备写入数据的流程图。
存储设备获取主机提供的写命令,写命令指示了逻辑地址(1010)。存储设备的控制部件根据逻辑地址查询FTL表(1012),获取同逻辑地址对应的物理地址。
识别所得到的同逻辑地址对应的物理地址是否指示缓存容器索引(1014)。若FTL提供的同写命令访问的逻辑地址的物理地址是缓存容器索引(1014),访问该缓存容器索引对应的缓存单元,用该缓存单元承载写命令要写入的数据(1016)。
以及,由于写命令要写入的数据仅被写入了缓存单元而未写入NVM数据帧,因而缓存单元中的数据同NVM数据帧的数据不一致。根据写命令访问小块的一个或多个区域,更新FTL条目中的有效性位图(1018)。
若FTL提供的同写命令访问的逻辑地址对应的物理地址不是缓存容器索引(例如,是NVM数据帧地址,或其他内容)(1014),则为该逻辑地址分配新的缓存容器(1020),将写命令要写入的数据写入新分配的缓存容器的缓存单元(1022)。根据写命令访问小块的一个或多个区域,更新FTL条目中的有效性位图(1024)。
进一步地,响应于同写命令访问的逻辑地址对应的物理地址不是缓存容器索引,还识别写命令要写入的数据是否占用完整的缓存单元(或小块)(1026)。例如,小块对应的逻辑地址空间大小为4KB,而写命令向该逻辑地址空间写入4KB数据,则写命令要写入的数据占用完整的缓存单元;若写命令向逻辑地址空间写入例如2KB数据,则写命令要写入的数据未占用完整的缓存单元。
若写命令要写入的数据未占用完整的缓存单元(1026),还从根据FTL提供的同写命令访问的逻辑地址的物理地址(例如,NVM数据帧地址)从NVM芯片读出小块中未被写命令要写入的数据占用的部分逻辑地址空间的数据,并填充到写命令向其写入数据的缓存单元(1028),使得缓存单元中被填充了对应于小块的完整逻辑地址空间的数据(部分来自写命令,而部分来自NVM数据帧)。
此时缓存容器的缓存单元已容纳了对应于小块的完整逻辑地址空间的数据,利用该缓存单元能够响应对小块的访问,而无须再在FTL条目中保留刚才读出数据的NVM数据帧地址。因而还在同写命令的逻辑地址对应的FTL条目中记录该新分配的缓存容器的索引(1030)。
若写命令要写入的数据占用了完整的缓存单元(1026),转向步骤1024更新FTL条目中的有效性位图。
图10B展示了根据本申请图9的实施例向存储设备写入数据的又一流程图。
存储设备获取主机提供的写命令,写命令指示了逻辑地址(1040)。存储设备的控制部件根据逻辑地址查询FTL表(1042),获取同逻辑地址对应的物理地址。
识别所得到的同逻辑地址对应的物理地址是否指示缓存容器索引(1044)。若FTL提供的同写命令访问的逻辑地址的物理地址是缓存容器索引(1044),则进一步识别该缓存容器索引对应缓存容器的缓存单元是否正在被使用(1046)。若该缓存单元当前未被使用,用该缓存单元承载写命令要写入的数据(1048)。若该缓存单元当前正在被使用,则为该缓存容器分配新的缓存单元(1050),并用该新的缓存单元承载写命令要写入的数据(1052)。
以及根据写命令访问小块的一个或多个区域,更新FTL条目中的有效性位图(1054)。
若FTL提供的同写命令访问的逻辑地址的物理地址不是缓存容器索引(例如,是NVM数据帧地址,或其他内容)(1044),则为该逻辑地址分配新的缓存容器(1056),将写命令要写入的数据写入新分配的缓存容器的缓存单元(1058)。
进一步地,还识别写命令要写入的数据是否占用完整的缓存单元(或小块)(1060)。若写命令要写入的数据未占用完整的缓存单元(1060),还从根据FTL提供的同写命令访问的逻辑地址的物理地址(例如,NVM数据帧地址)从NVM芯片读出小块中未被写命令要写入的数据占用的部分逻辑地址空间的数据,并填充到写命令向其写入数据的缓存单元(1062),使得缓存单元中被填充了对应于小块的完整逻辑地址空间的数据(部分来自写命令,而部分来自NVM数据帧)。若写命令要写入的数据占用了完整的缓存单元(1060),直接转向步骤1064。
根据写命令访问小块的一个或多个区域,更新FTL条目中的有效性位图(1064)。还在同写命令的逻辑地址对应的FTL条目中记录该新分配的缓存容器的索引(1066)。
可选地,识别写命令要写入的数据是否占用完整的缓存单元(或小块)的步骤被更早地执行。例如,在识别出FTL提供的同写命令访问的逻辑地址的物理地址是NVM数据帧地址后,即执行识别写命令要写入的数据是否占用完整的缓存单元(或小块)的步骤,以及执行从NVM芯片读出小块中未被写命令要写入的数据占用的部分逻辑地址空间的数据,并填充到写命令向其写入数据的缓存单元的步骤。
根据图9展示的FTL表,可选地,也为其提供FTL条目缓存。
FTL条目缓存包括多个条目(称为“缓存条目”),每个缓存条目相关联地记录了逻辑地址(LBA)、缓存容器索引与有效性位图。缓存条目对应于FTL条目之一。FTL表的每个值为缓存容器索引的FTL条目,有对应的缓存条目。而FTL表的值为非缓存容器索引的FTL条目,没有对应的缓存条目。
图10C展示了根据本申请图9的实施例向存储设备写入数据的再一流程图。
存储设备获取主机提供的写命令,写命令指示了逻辑地址(1070)。存储设备的控制部件根据逻辑地址查询FTL条目缓存(1072),以识别写命令指示的逻辑地址是否命中FTL条目缓存。
若写命中指示的逻辑地址命中FTL条目缓存(1072),从FTL条目被命中的缓存条目中获取缓存容器索引。并访问缓存容器对应的缓存单元,向缓存单元写入写命令所对应的数据(1074)。以及根据写命令访问小块的一个或多个区域,更新FTL条目中的有效性位图(1076)。
若写命令的逻辑地址未命中FTL条目缓存(1072)。在此情况下,为该逻辑地址分配新的缓存容器(1078),将写命令要写入的数据写入新分配的缓存容器的缓存单元(1080)。
在识别出FTL提供的同写命令访问的逻辑地址的物理地址是NVM数据帧地址后,除了分配新的缓存容器,还识别写命令要写入的数据是否占用完整的缓存单元(或小块)(1082)。若写命令要写入的数据未占用完整的缓存单元(1082),还根据写命令的逻辑地址查询FTL表(1084),根据FTL提供的同写命令访问的逻辑地址的物理地址(例如,NVM数据帧地址)从NVM芯片读出小块中未被写命令要写入的数据占用的部分逻辑地址空间的数据,并填充到写命令向其写入数据的缓存单元(1086),使得缓存单元中被填充了对应于小块的完整逻辑地址空间的数据(部分来自写命令,而部分来自NVM数据帧)。若写命令要写入的数据占用了完整的缓存单元(1082),直接转向步骤1088。
以及根据写命令访问小块的一个或多个区域,更新FTL条目中的有效性位图(1088)。更新FTL条目缓存(1090),在FTL条目缓存中增加缓存条目,以记录写命令指示的逻辑地址与新分配的缓存容器的索引的关联关系。可选地,还在同写命令的逻辑地址对应的FTL条目中记录该新分配的缓存容器的索引(1092)。
根据本申请的依然另一实施例,缓存容器中除了记录其所拥有的缓存单元,还记录有效性位图与NVM数据帧地址。缓存容器的NVM数据帧地址是被读出数据以填充缓存单元的NVM数据帧的地址。由于在缓存容器中记录了NVM数据帧地址,从而在向缓存容器写入来自写命令的数据时,即使写命令要写入的数据未占用完整的缓存单元,也无须立即从NVM数据帧读出数据来填补缓存单元。
图11展示了根据本申请的该依然另一实施例向存储设备写入数据的流程图。
存储设备获取主机提供的写命令,写命令指示了逻辑地址(1110)。存储设备的控制部件根据逻辑地址查询FTL表(1120),获取同逻辑地址对应的物理地址。
识别所得到的同逻辑地址对应的物理地址是否指示缓存容器索引(1130)。若FTL提供的同写命令访问的逻辑地址对应的物理地址是缓存容器索引(1130),访问该缓存容器索引对应的缓存单元,用该缓存单元承载写命令要写入的数据(1140)。以及,根据写命令访问小块的一个或多个区域,更新FTL条目中的有效性位图(1150)。
若FTL提供的同写命令访问的逻辑地址对应的物理地址不是缓存容器索引(例如,是NVM数据帧地址,或其他内容)(1130),则为该逻辑地址分配新的缓存容器,将写命令要写入的数据写入新分配的缓存容器的缓存单元(1160)。以及在新分配的缓存容器中记录从FTL表得到的同逻辑地址对应的NVM数据帧地址(1170)。根据写命令访问小块的一个或多个区域,更新FTL条目中的有效性位图(1180)。还在同写命令的逻辑地址对应的FTL条目中记录该新分配的缓存容器的索引(1190)。
可选地,根据写命令访问小块的一个或多个区域更新FTL条目中的有效性位图的步骤,在获取了写命令指示的逻辑地址后即可实施,并且不依赖于写命令指示的逻辑地址对应的物理地址是否指示缓存容器索引。
图12A展示了根据本申请的该依然另一实施例从存储设备读出数据的流程图。
存储设备获取主机提供的读命令,读命令指示了逻辑地址(1210)。存储设备的控制部件根据逻辑地址查询FTL表(1215),获取同逻辑地址对应的物理地址。
识别所得到的同逻辑地址对应的物理地址指示缓存容器索引、NVM数据帧地址还是其他类型的物理地址(1220)。若FTL提供的同读命令访问的逻辑地址对应的物理地址是缓存容器索引(1220),还识别缓存容器能否提供读命令要读取的完整数据(1225)。例如,缓存容器被写入的数据对应的逻辑地址空间大小为4KB,而读命令从该逻辑地址空间读取4KB数据,则缓存容器能提供读命令要读出的完整数据;若读命令从逻辑地址空间读出例如2KB数据,而缓存容器被写入的数据对应的逻辑地址空间大小为1KB,则缓存容器无法提供读命令要读取的完整数据。
若缓存容器无法提供读命令要读取的完整数据(1225),还从根据缓存容器获得的同读命令访问的逻辑地址对应的NVM数据帧地址(1230),从NVM芯片读出缓存容器无法提供的部分数据,以响应读命令(1235)。以及可选地,对于缓存容器能提供的部分数据,从缓存容器获取数据来响应读命令。
若缓存容器能够提供读命令要读取的完整数据(1225),从缓存容器获取数据来响应读命令(1240)。
若FTL提供的同读命令访问的逻辑地址对应的物理地址是NVM数据帧地址(1220),则向NVM芯片发送读取命令来读出数据(1245)。
图12B展示了根据本申请的该依然另一实施例从存储设备读出数据的又一流程图。
存储设备获取主机提供的读命令,读命令指示了逻辑地址(1240)。存储设备的控制部件根据逻辑地址查询FTL条目缓存(1245),以尝试尽快获取同逻辑地址对应的物理地址。
若读命中指示的逻辑地址命中FTL条目缓存(1245),从FTL条目缓存被命中的缓存条目中获取缓存容器索引。还识别缓存容器能否提供读命令要读取的完整数据。若缓存容器能提供读命令要读取的完整数据(例如,通过缓存条目记录的有效性位图)(完全命中),访问缓存容器对应的缓存单元,从缓存单元中读出数据作为对读命令的响应(1250)。
若缓存容器无法提供读命令要读取的完整数据(未完全命中),还根据缓存条目记录的有效性位图,识别缓存容器能为读命令提供的逻辑地址空间(小块)的部分,与缓存容器不能为读命令提供的逻辑地址空间的部分(1255)。从缓存容器的缓存单元获取其能为读命令提供的逻辑地址空间的部分数据(1250)。以及查询FTL表(1265),获取同读命令的逻辑地址对应的指示NVM数据帧的物理地址,并根据物理地址从NVM数据帧读出获取缓存容器不能为读命令提供的逻辑地址空间的部分的数据(1270)。
可选地,对于缓存容器不能为读命令提供的逻辑地址空间的部分,不查询FTL表,而是从缓存容器获取同读命令的逻辑地址对应的指示NVM数据帧的物理地址(1260),并根据物理地址从NVM数据帧读出获取缓存容器不能为读命令提供的逻辑地址空间的部分的数据(1270)。
若FTL条目缓存不存在未记录了读命令指示的逻辑地址的缓存条目,意味着读命令的逻辑地址未命中FTL条目缓存(1245)。在此情况下,进一步查询FTL表,以获取同读命令的逻辑地址对应的FTL条目中记录的指示NVM数据帧地址的物理地址,并根据物理地址从NVM数据帧读出数据来响应读命中。
根据本申请的实施例还提供了一种存储设备,包括控制部件与非易失存储器芯片,其中,控制器执行本申请实施例提供的任意一种处理方法。
根据本申请的实施例还提供了一种存储在可读介质上的程序,当被存储设备的控制器运行时,使得存储设备执行根据本申请实施例提供的任意一种处理方法。
尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

Claims (10)

1.一种用于存储设备的方法,其特征在于,包括:
获取用于访问存储设备的逻辑地址;
查询FTL缓存条目,若FTL缓存条目记录有获得的逻辑地址,则用从FTL缓存条目获得的同逻辑地址对应的缓存容器索引访问对应缓存容器的缓存单元。
2.如权利要求1所述的用于存储设备的方法,其特征在于,响应于写入访问逻辑地址的写命令指示的数据,更新FTL条目中标识缓存单元中数据与NVM数据帧的数据不一致的有效性位图。
3.如权利要求1或2所述的用于存储设备的方法,其特征在于,若FTL缓存条目未记录获得的逻辑地址,则查询FTL表获取同逻辑地址对应的NVM数据帧地址,并用NVM数据帧地址访问NVM数据帧。
4.如权利要求3所述的用于存储设备的方法,其特征在于,若访问逻辑地址的是读命令,则从NVM数据帧地址读出读命令指示的数据。
5.如权利要求4所述的用于存储设备的方法,其特征在于,若FTL缓存条目记录有获得的部分逻辑地址,则查询FTL表获取同逻辑地址对应的NVM数据帧地址,并且根据FTL缓存条目记录的逻辑地址和FTL缓存条目未记录的逻辑地址获得缓存容器中存储的NVM数据帧地址,用查询FTL表获取的NVM数据帧地址和缓存容器中存储的NVM数据帧地址访问对应NVM芯片的NVM数据帧,读出读命令指示的数据。
6.如权利要求3所述的用于存储设备的方法,其特征在于,若访问逻辑地址的是写命令,为逻辑地址分配新的缓存容器,将写命令指示的数据写入新分配的缓存容器的缓存单元。
7.如权利要求1或2所述的用于存储设备的方法,其特征在于,若FTL缓存条目未记录获得的逻辑地址,为逻辑地址分配新的缓存容器,将写命令指示的数据写入新分配的缓存容器的缓存单元。
8.如权利要求7所述的用于存储设备的方法,其特征在于,响应于将数据写入新分配的缓存容器的缓存单元后增加FTL缓存条目,并向增加的FTL缓存条目记录新分配的缓存容器的索引。
9.如权利要求7所述的用于存储设备的方法,其特征在于,识别得到的同逻辑地址对应的物理地址指示NVM数据帧地址后,识别写命令要写入的数据是否占用完整的缓存单元。
10.一种存储设备,其特征在于,包括:控制部件,所述控制部件执行权利要求1-9任一项所述的方法完成FTL管理。
CN201811154294.8A 2018-09-30 2018-09-30 Ftl提供的缓存、其优化方法与存储设备 Active CN110968525B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201811154294.8A CN110968525B (zh) 2018-09-30 2018-09-30 Ftl提供的缓存、其优化方法与存储设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201811154294.8A CN110968525B (zh) 2018-09-30 2018-09-30 Ftl提供的缓存、其优化方法与存储设备

Publications (2)

Publication Number Publication Date
CN110968525A true CN110968525A (zh) 2020-04-07
CN110968525B CN110968525B (zh) 2024-10-01

Family

ID=70028631

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201811154294.8A Active CN110968525B (zh) 2018-09-30 2018-09-30 Ftl提供的缓存、其优化方法与存储设备

Country Status (1)

Country Link
CN (1) CN110968525B (zh)

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110072188A1 (en) * 2007-11-06 2011-03-24 Samsung Electronics Co., Ltd. Memory system including non-volatile storage media, computing system including memory system and method of operating memory system
US20170345512A1 (en) * 2016-05-26 2017-11-30 Advanced Micro Devices, Inc. Wear-limiting non-volatile memory
CN107562639A (zh) * 2016-07-01 2018-01-09 北京忆恒创源科技有限公司 擦除块读请求处理方法与装置
CN107870867A (zh) * 2016-09-28 2018-04-03 北京忆芯科技有限公司 32位cpu访问大于4gb内存空间的方法与装置
CN108595349A (zh) * 2017-12-28 2018-09-28 贵阳忆芯科技有限公司 大容量存储设备的地址转换方法与装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20110072188A1 (en) * 2007-11-06 2011-03-24 Samsung Electronics Co., Ltd. Memory system including non-volatile storage media, computing system including memory system and method of operating memory system
US20170345512A1 (en) * 2016-05-26 2017-11-30 Advanced Micro Devices, Inc. Wear-limiting non-volatile memory
CN107562639A (zh) * 2016-07-01 2018-01-09 北京忆恒创源科技有限公司 擦除块读请求处理方法与装置
CN107870867A (zh) * 2016-09-28 2018-04-03 北京忆芯科技有限公司 32位cpu访问大于4gb内存空间的方法与装置
CN108595349A (zh) * 2017-12-28 2018-09-28 贵阳忆芯科技有限公司 大容量存储设备的地址转换方法与装置

Also Published As

Publication number Publication date
CN110968525B (zh) 2024-10-01

Similar Documents

Publication Publication Date Title
CN106448737B (zh) 读取闪存数据的方法、装置以及固态驱动器
US9378131B2 (en) Non-volatile storage addressing using multiple tables
CN108595349B (zh) 大容量存储设备的地址转换方法与装置
CN107797759B (zh) 访问缓存信息的方法、装置与驱动器
CN107797760B (zh) 一种访问缓存信息的方法、装置与固态驱动器
CN108228470B (zh) 一种处理向nvm写入数据的写命令的方法和设备
CN108614668B (zh) 基于kv模型的数据访问方法与固态存储设备
CN114691020A (zh) 基于zns标准提供数据压缩存储设备及其方法
KR20210028729A (ko) 논리적 대 물리적 테이블 프래그먼트들
US20210124522A1 (en) Address translation method and system for kv storage device
CN110968527B (zh) Ftl提供的缓存
CN108614671B (zh) 基于命名空间的键-数据访问方法与固态存储设备
CN111352865B (zh) 存储控制器的写缓存
CN110096452B (zh) 非易失随机访问存储器及其提供方法
CN111290974B (zh) 用于存储设备的缓存淘汰方法与存储设备
CN111290975A (zh) 使用统一缓存处理读命令与预读命令的方法及其存储设备
CN112148626A (zh) 压缩数据的存储方法及其存储设备
CN110968520B (zh) 基于统一缓存架构的多流存储设备
WO2018041258A1 (zh) 去分配命令处理的方法与存储设备
CN110968525B (zh) Ftl提供的缓存、其优化方法与存储设备
CN109840219B (zh) 大容量固态存储设备的地址转换系统与方法
CN109960667B (zh) 大容量固态存储设备的地址转换方法与装置
CN110532199B (zh) 预读方法及其存储控制器
CN110297596B (zh) 具有宽工作温度范围的存储设备
CN108614669B (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