买专利卖专利找龙图腾,真高效! 查专利查商标用IPTOP,全免费!专利年费监控用IP管家,真方便!
申请/专利权人:北京忆恒创源科技股份有限公司
摘要:本申请提供了顺序流检测与预读的方法与存储设备。所提供的顺序流检测方法,包括:响应于第一读命令访问的地址命中了多个顺序流描述符中的第一顺序流描述符,用第一读命令访问的地址更新第一顺序流描述符记录的地址;指示对第一顺序流描述符对应的第一顺序流实施预读。
主权项:1.顺序流检测方法,其特征在于,包括:响应于第一读命令访问的地址命中了多个顺序流描述符中的第一顺序流描述符,用第一读命令访问的地址更新第一顺序流描述符记录的地址;指示对第一顺序流描述符对应的第一顺序流实施预读;响应于第一读命令访问的地址未命中多个顺序流描述符中的任何一个,识别第一读命令中访问的地址是否命中多个候选顺序流描述符中的任何一个;响应于第一读命令访问的地址命中了多个候选顺序流描述符中的第一候选顺序流描述符,用第一读命令访问的地址更新第一候选顺序流描述符记录的地址,并递增第一候选顺序流描述符记录的命中次数;根据命中的第一候选顺序流描述符中的新升级顺序流描述符实施预读;其中,顺序流描述符记录的内容包括地址和命中次数,候选顺序流描述符记录同顺序流描述符相同或相似的内容。
全文数据:顺序流检测与数据预读技术领域本申请涉及存储系统,更具体地,涉及检测访问连续地址空间的多个读命令所形成的顺序流,以及根据对顺序流的检测执行数据预读。背景技术图1展示了固态存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATASerialAdvancedTechnologyAttachment,串行高级技术附件、SCSISmallComputerSystemInterface,小型计算机系统接口、SASSerialAttachedSCSI,串行连接SCSI、IDEIntegratedDriveElectronics,集成驱动器电子、USBUniversalSerialBus,通用串行总线、PCIEPeripheralComponentInterconnectExpress,PCIe,高速外围组件互联、NVMeNVMExpress,高速非易失存储、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM芯片105以及DRAMDynamicRandomAccessMemory,动态随机访问存储器110。NAND闪存、相变存储器、FeRAMFerroelectricRAM,铁电存储器、MRAMMagneticRandomAccessMemory,磁阻存储器、RRAMResistiveRandomAccessMemory,阻变存储器等是常见的NVM。接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SAS、以太网、光纤通道等方式与主机交换数据。控制部件104用于控制在接口103、NVM芯片105以及DRAM110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。控制部件104可通过软件、硬件、固件或其组合的多种方式实现,例如,控制部件104可以是FPGAField-programmablegatearray,现场可编程门阵列、ASICApplicationSpecificIntegratedCircuit,应用专用集成电路或者其组合的形式。控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理IOInputOutput命令。控制部件104还可以耦合到DRAM110,并可访问DRAM110的数据。在DRAM可存储FTL表和或缓存的IO命令的数据。控制部件104包括闪存接口控制器或称为介质接口控制器、闪存通道控制器,闪存接口控制器耦合到NVM芯片105,并以遵循NVM芯片105的接口协议的方式向NVM芯片105发出命令,以操作NVM芯片105,并接收从NVM芯片105输出的命令执行结果。已知的NVM芯片接口协议包括“Toggle”、“ONFI”等。在固态存储设备中,利用FTLFlashTranslationLayer,闪存转换层来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在相关技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是固态存储设备中的重要元数据。通常FTL表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。存储设备用于处理IO命令。IO命令可以被发送给存储设备例如,磁盘、固态硬盘、U盘、光盘等、存储服务器或存储系统诸如云存储。若多条IO命令所访问的地址是连续的或近似连续的,则称这些IO命令属于相同的顺序流。每条IO命令携带或指示要访问的数据的地址逻辑地址或物理地址。每条IO命令要访问的数据的长度可以是固定长度,也可以变化。主机访问存储设备时,诸如应用程序的数据访问方可能将大块数据访问拆分成多条IO命令,并发送给存储设备。主机中还会存在多个访问存储设备的应用和或多个操作系统诸如,虚拟机,这导致来个多个访问方的IO命令被交织,进而使得原本对连续地址的访问变得不连续。图2A示出了来自多个应用的IO命令被提供给存储设备的示意图。在主机中有多个应用,应用A产生访问连续地址的多条IO命令例如,IO命令A1与A2,这些IO命令属于顺序流A。作为举例,应用A的这些IO命令来自对大尺寸视频文件的复制。应用B产生访问连续地址的多条IO命令例如,IO命令B1与B2,这些IO命令属于顺序流B。主机中的应用还产生了访问其他地址空间的多条IO命令例如图2A中的IO命令S,E,D,C,这些IO命令属于顺序流C。在操作系统、驱动程序、设备接口和或总线上,多个IO命令被组织为与原来不同的顺序,并被存储设备所接收。作为举例,存储设备以A1、B1、C与B2的顺序接收到IO命令。图2B展示了来自多个应用的数据的在存储设备上的数据放置的示意图。存储设备以A1、B1、C与B2的顺序接收到IO命令,并将这些IO命令按照接收IO命令的顺序,将IO命令以写命令为例访问的数据写入到存储介质中。在图2B的例子中,IO命令A1、B1、C、B2被分配给连续的物理地址,导致原本在访问连续逻辑地址的多条IO命令诸如IO命令A1与A2,或IO命令B1与B2所对应的数据在存储介质中被分散而非连续地存储。存储设备还提供预读机制。例如,响应于主机访问地址A1,存储设备预测主机随后将很可能继续访问同地址A1连续或临近的地址A2,从而存储设备先于接收主机的读命令而从地址A2读取数据,并缓存从地址A2读出的数据,以响应主机随后可能发出的读命令。发明内容需要在存储设备中提供改进的顺序流检测与预读能力,以提供更低的访问延迟与更好的服务质量。根据本申请的第一方面,提供了根据本申请第一方面的第一顺序流检测方法,包括:响应于第一读命令访问的地址命中了多个顺序流描述符中的第一顺序流描述符,用第一读命令访问的地址更新第一顺序流描述符记录的地址;指示对第一顺序流描述符对应的第一顺序流实施预读。根据本申请第一方面的第一顺序流检测方法,提供了根据本申请第一方面的第二顺序流检测方法,还包括:响应于第一读命令访问的地址未命中多个顺序流描述符中的任何一个,识别第一读命令中访问的地址是否命中多个候选顺序流描述符中的任何一个。根据本申请第一方面的第二顺序流检测方法,提供了根据本申请第一方面的第三顺序流检测方法,还包括:响应于第一读命令访问的地址命中了多个候选顺序流描述符中的第一候选顺序流描述符,用第一的命令访问的地址更新第一候选顺序流描述符记录的地址并递增第一候选顺序流描述符记录的命中次数。根据本申请第一方面的第三顺序流检测方法,提供了根据本申请第一方面的第四顺序流检测方法,还包括:用第一候选顺序流描述符记录的地址与命中次数,更新多个顺序流描述符中的第二顺序流描述符。根据本申请第一方面的第四顺序流检测方法,提供了根据本申请第一方面的第五顺序流检测方法,其中第二顺序流描述符是多个顺序流描述符中命中次数最小的顺序流描述符。根据本申请第一方面的第一至第五顺序流检测方法之一,提供了根据本申请第一方面的第六顺序流检测方法,其中响应于第一读命令访问的地址命中了多个顺序流描述符中的第一顺序流描述符,还递增第一顺序流描述符记录的命中次数。根据本申请第一方面的第六顺序流检测方法,提供了根据本申请第一方面的第七顺序流检测方法,其中响应于第一读命令访问的地址未命中多个顺序流描述符中的任何一个,也未命中多个候选顺序流描述符中的任何一个,递减多个顺序流描述符的每个的命中次数,与多个候选顺序流描述符的每个的命中次数。根据本申请第一方面的第一至第七顺序流检测方法之一,提供了根据本申请第一方面的第八顺序流检测方法,其中若读命令访问的地址同第一顺序流描述符记录的地址相同、相重叠和或相邻近,则识别出读命令访问的地址命中了第一顺序流描述符。根据本申请第一方面的第二至第五顺序流检测方法之一,提供了根据本申请第一方面的第九顺序流检测方法,其中若读命令访问的地址同第一候选顺序流描述符记录的地址相同、相重叠和或相邻近,则识别出读命令访问的地址命中了第一候选顺序流描述符。根据本申请第一方面的第二至第五或第九顺序流检测方法之一,提供了根据本申请第一方面的第十顺序流检测方法,还包括:响应于获取第一读命令,根据第一读命令访问的地址更新近期IO命令地址集合。根据本申请第一方面的第十顺序流检测方法,提供了根据本申请第一方面的第十一顺序流检测方法,其中根据第一读命令访问的地址生成第一元素,将第一元素添加到近期IO命令地址集合,其中第一元素记录了第一读命令访问的地址与初始化的命中次数。根据本申请第一方面的第十顺序流检测方法,提供了根据本申请第一方面的第十二顺序流检测方法,其中若第一读命令访问的地址命中了近期IO命令地址集合的第二元素,递增第二元素的命中次数。根据本申请第一方面的第十一顺序流检测方法,提供了根据本申请第一方面的第十三顺序流检测方法,还包括:从近期IO命令地址集合删除第二元素,以容纳第一元素。根据本申请第一方面的第十至第十三顺序流检测方法之一,提供了根据本申请第一方面的第十四顺序流检测方法,还包括:用近期IO命令地址集合的元素记录的地址与命中次数,更新多个候选顺序流描述符中的第二候选顺序流描述符。根据本申请第一方面的第十四顺序流检测方法,提供了根据本申请第一方面的第十五顺序流检测方法,还包括:第二候选顺序流描述符是多个候选顺序流描述符中命中次数最小的顺序流描述符。根据本申请的第二方面,提供了根据本申请第二方面的第一预读方法,包括:响应于收到对第一顺序流描述符对应的第一顺序流实施预读的指示,对根据本次预读起始地址与本地预读大小参数实施预读。根据本申请第二方面的第一预读方法,提供了根据本申请第二方面的第二预读方法,其中根据本申请第一方面提供的顺序流检测方法之一,得到对第一顺序流描述符对应的第一顺序流实施预读的指示。根据本申请第二方面的第一或第二预读方法,提供了根据本申请第二方面的第三预读方法,还包括:将预读得到的数据存储在一个或多个缓存单元。根据本申请第二方面的第三预读方法,提供了根据本申请第二方面的第四预读方法,其中若读命令命中了缓存单元,根据强化的策略确定本次预读起始地址与本地预读大小参数,若读命令未命中缓存单元,根据谨慎的策略确定本次预读起始地址与本地预读大小参数。根据本申请第二方面的第三预读方法,提供了根据本申请第二方面的第五预读方法,其中若读命令访问的地址非临近于对第一顺序流上次预读的地址范围,根据谨慎的策略确定本次预读起始地址与本地预读大小参数;若读命令访问的地址临近于对第一顺序流上次预读的地址范围,且读命令访问的数据大小近似于上次预读的数据大小,根据强化的策略确定本次预读起始地址与本地预读大小参数。根据本申请第二方面的第五预读方法,提供了根据本申请第二方面的第六预读方法,其中若读命令访问的地址临近于对第一顺序流上次预读的地址范围,且读命令访问的数据大小非近似于上次预读的数据大小,根据谨慎的策略确定本次预读起始地址与本地预读大小参数。根据本申请第二方面的第三预读方法,提供了根据本申请第二方面的第七预读方法,其中若读命令访问的地址非临近于对第一顺序流上次预读的地址范围,且读命令命中了缓存单元,根据第一谨慎的策略确定本次预读起始地址与本地预读大小参数;若读命令访问的地址非临近于对第一顺序流上次预读的地址范围,且读命令未命中缓存单元,根据第二谨慎的策略确定本次预读起始地址与本地预读大小参数;其中第二谨慎的策略比第一谨慎的策略更加谨慎。根据本申请第二方面的第三预读方法,提供了根据本申请第二方面的第八预读方法,其中若读命令访问的地址临近于对第一顺序流上次预读的地址范围,根据强化的策略确定本次预读起始地址与本地预读大小参数,若读命令访问的地址非临近于对第一顺序流上次预读的地址范围,根据谨慎的策略确定本次预读起始地址与本地预读大小参数。根据本申请第二方面的第五到第八预读方法之一,提供了根据本申请第二方面的第九预读方法,其中根据强化的策略确定本次预读起始地址与本地预读大小参数包括,相对于上次预读数据的大小,在本地预读中增加预读的数据大小,和或相对于上次预读的起始地址更远的地址实施预读。根据本申请第二方面的第五到第九预读方法之一,提供了根据本申请第二方面的第十预读方法,其中根据谨慎的策略确定本次预读起始地址与本地预读大小参数包括,相对于上次预读数据的大小,在本地预读中减少预读的数据大小,和或将读命令访问的地址范围的末尾作为本次预读的起始地址。根据本申请的第三方面,提供了根据本申请一种存储设备,其特征在于,包括控制部件与非易失性存储器,所述控制部件实施根据本申请第一方面的顺序流检测方法之一或根据本申请第二方面的预读方法之一。根据本申请的第四方面,提供了根据本申请第四方面的一种存储设备,其特征在于,包括控制部件与非易失性存储器,所述控制部件实施根据本申请第一方面的顺序流检测方法之一或根据本申请第二方面的预读方法之一。附图说明为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。图1为本申请提供的现有技术中固态存储设备的示意图;图2A示出了来自多个应用的IO命令被提供给存储设备的示意图;图2B展示了来自多个应用的数据的在存储设备上的数据放置的示意图;图3是对写命令实施顺序流检测示意图;图4展示了根据本申请实施例的存储设备的框图;图5展示了根据本申请实施例的顺序流描述符与候选顺序流描述符;图6展示了根据本申请实施例检测顺序流的流程图;图7展示了根据本申请又一实施例的顺序流描述符、候选顺序流描述符与近期IO命令地址集合;图8展示了根据本申请又一实施例检测顺序流的流程图;图9A展示了根据本申请实施例的实施预读的流程图;图9B展示了根据本申请又一实施例的实施预读的流程图;以及图10展示了根据本申请又一实施例的顺序流检测与预读的流程图。具体实施方式下面结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。图3是对写命令实施顺序流检测示意图。作为举例,在存储设备中对接收到的写命令实施顺序流检测。从访问存储设备的多个写命令中,检测出访问连续地址的写命令所形成的顺序流A、顺序流B以及访问的地址不具有顺序性的多个写命令由C、D、E、…S指示也称为随机流。并且,为顺序流A分配存储介质上的连续物理地址例如,数据块1,为顺序流B分配存储介质上的连续物理地址例如,数据块2,将随机流写入到数据块3。当顺序流A对应的数据生命周期完成而被更新或无效时例如,当顺序流A对应大尺寸视频文件时,该视频文件被删除,数据块1中的数据都变为无效,并使得在回收数据块1时,无需将数据块中的有效数据进行搬移因为数据块1中不存在有效数据,或有效数据较少,从而降低了写放大。此外,顺序流中的数据也可能被连续读取。例如,当顺序流A对应大尺寸视频文件时,数据块1中对应于A1、A2、A3与A4的数据很可能被连续读取。因而对于存储顺序流的数据块1,在响应读命令时,可以在接收到后续的读命令前,预读后续的数据,从而降低对后续读读命令的响应时间。在申请号为201610169011.1、发明名称为顺序流检测方法与装置的中国专利申请中,提供了实施顺序流检测的多种实施例。将其全文通过引用并入本申请。图4展示了根据本申请实施例的存储设备的框图。根据本申请实施例的存储设备对读命令实施顺序流检测,并依据检测结果进行预读。参看图4,存储设备的控制部件204包括主机接口210、用于访问NVM芯片105的介质接口220、缓存管理单元260、后端处理单元270、顺序流检测单元250与预读单元255。主机接口210用于同主机交换命令与数据。例如,主机与存储设备通过NVMePCIe协议通信,主机接口210处理PCIe协议数据包,提取出NVMe协议命令,并向主机返回NVMe协议命令的处理结果。缓存管理单元260耦合到主机接口210,用于接收主机发送给存储设备的IO命令,并尽力利用一个或多个缓存单元来服务所接收的IO命令,以提升IO命令被存储设备处理的性能的确定性。缓存管理单元260还将缓存单元中的数据通过后端处理单元270写入NVM芯片105,和或从NVM芯片105读出数据填充缓存单元。可选地,缓存单元260将接收的IO命令的部分例如,未命中缓存单元的读命令转交给后端处理单元270处理,而不使用缓存单元来服务这些IO命令。后端处理单元270接收IO命令IO命令形态因缓存管理单元260的处理而发生变化,这里为了表达简洁而统称为IO命令,并访问一个或多个NVM芯片。可选地,后端处理单元270利用现有技术处理IO命令,或者利用将来产生的技术处理IO命令。可选地,缓存管理单元260维护缓存描述符表或缓存描述符池。缓存描述符表260记录了多个缓存描述符。缓存描述符的一个或多个记录了对应的缓存单元在DRAM110中的地址、缓存单元的状态和或缓存单元中有效数据的位置。在例如申请号为201810264435.5、发明名称为“具有增强IO性能确定性的缓存的存储设备”、申请日为2018年3月28日的中国专利申请中描述了利用缓存管理单元260来提供缓存。在申请号为201610819411.2、201610819400.4、201710219096.4与201710219077.1中也提供了用于存储设备的缓存。控制部件还耦合到外部存储器例如,DRAM110。继续参看图4,外部存储器110的部分空间缓存单元0、缓存单元1……缓存单元7被用作缓存。缓存单元具有指定的大小。例如,缓存单元指定大小为512字节、1KB、2KB、4KB等。缓存管理单元260管理缓存单元的分配和使用。示例性地,对于写命令,在缓存管理单元260的指示下,将要写入的数据通过主机接口210从主机传输到外部存储器110中的缓存单元,以及还将缓存单元中的数据通过介质接口220传输到NVM芯片105。例如,缓存管理单元260将缓存单元中的数据经由后端处理单元270,通过介质接口220传输到NVM芯片105。对于读命令,缓存管理单元260识别缓存单元是否命中。若缓存单元命中,在缓存管理单元260的指示下,从缓存单元获取数据发送给主机。若缓存单元未命中,从NVM芯片105获取数据发送给主机。后端处理单元270包括FTL模块,用于将IO命令的逻辑地址转换为物理地址。后端处理单元270还对NVM芯片及其上的数据实施管理,提供磨损均衡、垃圾回收等服务。可选地,存储设备向主机暴露物理地址空间,诸如遵循开放通道SSD,OpenChannelSSD,OCSSD协议的物理地址空间。从而在IO命令中指示要访问的物理地址。从而后端处理单元270无须使用FTL模块进行从逻辑地址到物理地址的转换。继续参看图4,主机接口210还耦合到顺序流检测单元250。顺序流检测单元250也接收主机发送给存储设备的IO命令,或者可选地接收IO命令访问的逻辑地址物理地址简称为IO命令访问的地址。顺序流检测单元依据接收的IO命令的地址识别出一个或多个顺序流,并向预读单元255指示所识别出的顺序流。预读单元255对所识别出的顺序流实施预读,对顺序流上随后可能出现的读命令要读取的数据提前实施预读,并将读出的数据存储在缓存单元中。可选地,预读单元255读出的数据也由缓存管理单元260管理。缓存管理单元260为预读的数据分配缓存单元,并在缓存描述符表中记录被预读的逻辑地址物理地址以及存储了预读数据的缓存单元的索引。可选地,由不同于缓存管理单元260的其他缓存管理单元或顺序流检测单元250管理对预读数据的缓存。响应于从主机接口接收了读命令,缓存管理单元260、其他缓存管理单元或顺序流检测单元250还检查读命令要读取的数据是否命中了预读数据的缓存。图5展示了根据本申请实施例的顺序流描述符与候选顺序流描述符。顺序流检测单元250维护顺序流描述符与候选顺序流描述符。顺序流描述符指示了被顺序流检测单元250识别出的顺序流,而候选顺序流描述符指示候选的顺序流。作为举例,顺序流描述符有一个或多个。图5中展示了2个顺序流描述符510与512。候选顺序流描述符有一个或多个。图5中展示了4个候选顺序流描述符540、542、544与546。可以理解地,顺序流检测单元250可维护其他数量的顺序流描述符与候选顺序流描述符。顺序流描述符用于描述被识别出的顺序流。作为举例,顺序流描述符通过地址读命令访问的地址与命中次数来描述顺序流。进一步地,顺序流描述符还通过预读起始地址与预读数据大小来进一步描述顺序流。依然可选地,顺序流描述符还记录IO命令读取数据的大小。顺序流描述符记录的命中次数,是该顺序流描述符所描述的顺序流在其生命周期内,命中该顺序流的读命令的个数。读命令命中顺序流的情形包括,例如,读命令访问的地址同顺序流描述符记录的地址相同、相重叠和或相邻近两个地址的差小于指定阈值。顺序流描述符记录的预读起始地址,是根据该顺序流描述符所做的上一次预读操作所读取数据的起始地址逻辑地址或物理地址。顺序流描述符记录的预读数据大小,是根据该顺序流描述符所做的上一次预读操作所读取数据的大小。候选顺序流描述符记录同顺序流描述符相同或相似的内容。图6展示了根据本申请实施例检测顺序流的流程图。顺序流检测单元250也参看图4从主机接口210获取读命令可选地,读命令访问的地址610,判断读命令访问的地址是否命中顺序流620。通过比较读命令访问的地址与顺序流描述符所记录的地址来判断读命令访问的地址是否命中顺序流。例如,读命令访问的地址为A1,而顺序流描述符510记录的地址为A2,若A1与A2相同、相重叠对应于地址为范围的情况和或相临近A1与A2的差的绝对值小于阈值,则确定读命令访问的地址A1命中顺序流510。可选地,将读命令访问的地址同顺序流检测单元250所维护的顺序流描述符的每个510与512所记录的地址作比较,以识别读命令访问的地址是否命中顺序流描述符所代表的顺序流的任何一个。对于读命令访问的地址命中的顺序流描述符例如,顺序流描述符510,更新该被命中的顺序流描述符630,例如将顺序流描述符510记录的地址替换为读命令访问的地址A1,以及将顺序流描述符所记录的命中次数递增。若读命令访问的地址A1未命中所维护的顺序流描述符的任何一个,判断读命令访问的地址是否命中候选顺序流650。通过比较读命令访问的地址与候选顺序流描述符所记录的地址来判断读命令访问的地址是否命中候选顺序流。若读命令访问的地址命中了候选顺序流描述符例如,候选顺序流描述符540,更新该被命中的候选顺序流描述符660,例如将候选顺序流描述符540记录的地址替换为读命令访问的地址A1,以及将候选顺序流描述符所记录的命中次数递增。进一步地,对于更新后的被命中候选顺序流描述符,还识别该候选顺序流描述符是否满足升级为顺序流描述符的条件670。例如,若候选顺序流描述符所记录的命中次数超过阈值例如,5、10或100,候选顺序流描述符所记录的命中次数大于其他所有候选顺序流描述符所记录的命中次数,或者候选顺序流描述符所记录的命中次数大于一个或多个顺序流描述符所记录的命中次数,对候选顺序流描述符所对应的候选的顺序流进行升级。根据待被升级的候选顺序流描述符更新顺序流描述符之一680。例如选择所记录的命中次数最低的顺序流描述符510,或者尚未被使用的顺序流描述符,用待被升级的候选顺序流描述符540所记录的地址与命中次数,替换被选择的顺序流描述符510的地址与命中次数,以将候选顺序流升级为是顺序流。可选地或进一步地,为升级候选顺序流描述符,还降级被选择的顺序流描述符例如顺序流描述符510。用被降级的顺序流描述符510的地址与命中次数,更新被升级的候选顺序流描述符540。通过在将顺序流描述符降级为候选顺序流描述符,为该候选顺序流描述符提供了再次被升级为顺序流描述符的机会。需要说明地,在对根据图6的实施例的描述中,没有仔细地区分顺序流与顺序流描述符,也没有仔细地区分候选顺序流与候选顺序流描述符。这是为了说明简便、清楚的目的,所属领域技术人员将能够理解其含义。顺序流描述符可以是例如存储器中的一段存储空间所容纳的用于描述顺序流的数据,这段存储空间可被修改从而使顺序流描述符被更新。顺序流描述符通过其记录的数据指示了顺序流例如,地址与命中次数。从而读命令的地址命中了顺序流描述符,也被理解为命中了顺序流描述符所指示的顺序流;将候选顺序流描述符升级为顺序流描述符,也被理解为将候选顺序流描述符所指示的候选顺序流升级为顺序流;将顺序流描述符降级为候选流描述符,也被理解为将顺序流描述符所指示的顺序流降级为候选顺序流。在一种可选的实施方式中,若读命令访问的地址未命中任何候选顺序流描述符,选择候选顺序流描述符之一来容纳由读命令访问的地址所指示的候选顺序流。例如,选择候选顺序流描述符中命中次数最小的候选顺序流描述符,或者选择距上次被更新最久的候选顺序流描述符。在选出的候选顺序流描述符中记录读命令访问地址,并初始化命中次数。在又一种可选的实施方式中,若读命令访问的地址未命中任何候选顺序流描述符,不在任何候选顺序流描述符中记录读命令的地址。图7展示了根据本申请又一实施例的顺序流描述符、候选顺序流描述符与近期IO命令地址集合。顺序流检测单元250维护顺序流描述符、候选顺序流描述符与近期IO命令地址集合。顺序流描述符指示了被顺序流检测单元250识别出的顺序流,而候选顺序流描述符指示候选的顺序流,近期IO命令的地址集合以集合的存储空间为限在集合的每个元素中容纳近期所接收的读命令的地址及其被命中的次数。可选地,近期IO命令的地址集合是排序的,按IO命令的地址被接收的顺序排序。从而当集合满时,将指示最早接收的IO命令的集合元素从集合中删除以获得存储空间容纳新的元素。作为举例,近期IO命令的地址集合的每个元素记录了IO命令读命令的地址以及可选地该地址被命中的次数也称为该元素被命中的次数。近期IO命令的地址集合容纳指定数量的元素。对于接收的IO命令,若近期IO命令的地址集合有空闲空间,根据IO命令访问的地址生成元素添加到近期IO命令的地址集合。若近期IO命令的地址集合没有空闲空间,按近期IO命令的地址集合的元素排序,将最早被添加到近期IO命令的地址集合的元素删除以获得空间空间。可选地或进一步地,从近期IO命令的地址集合删除元素时,还考虑元素的被命中次数。可选地,为将生成的元素添加到近期IO命令的地址集合,遍历近期IO命令的地址集合的各元素,以查找在近期IO命令的地址集合中是否存在将被该IO命令访问的地址命中的元素。若近期IO命令的地址集合中存在被IO命令访问的地址命中的元素,将该元素的被命中次数递增。若近期IO命令的地址集合中不存在被IO命令访问的地址命中的元素,则根据该IO命令访问的地址生成元素,并添加到近期IO命令的地址集合中。在指定条件满足或指定情况发生时,近期IO命令的地址集合中的元素被升级为候选顺序流并得到候选顺序流描述符。指定条件包括例如近期IO命令的地址集合中的元素的被命中次数大于指定阈值,近期IO命令的地址集合的元素的被命中次数大于候选顺序流描述符的被命中次数等。图8展示了根据本申请又一实施例检测顺序流的流程图。顺序流检测单元250也参看图4从主机接口210获取读命令可选地,读命令访问的地址810,判断读命令访问的地址是否命中顺序流820。对于读命令访问的地址命中的顺序流描述符例如,顺序流描述符510,更新该被命中的顺序流描述符830。若读命令访问的地址A1未命中所维护的顺序流描述符的任何一个,判断读命令访问的地址是否命中候选顺序流850。若读命令访问的地址命中了候选顺序流描述符例如,候选顺序流描述符540,更新该被命中的候选顺序流描述符860。进一步地,对于更新后的被命中候选顺序流描述符,还识别该候选顺序流描述符是否满足升级为顺序流描述符的条件870。根据待被升级的候选顺序流描述符更新顺序流描述符之一880。在一种可选的实施方式中,若读命令访问的地址未命中任何候选顺序流描述符,根据读命令访问的地址更新近期IO命令的地址集合852。例如,根据读命令访问的地址生成近期IO命令的地址集合的元素,在生成的近期IO命令的地址集合元素中记录了读命令的地址,以及初始化该地址被命中的次数例如,为1。可选地,为将生成的元素添加到近期IO命令的地址集合,还遍历近期IO命令的地址集合的各元素,以查找在近期IO命令的地址集合中是否存在将被该读命令的地址命中的元素。若近期IO命令的地址集合中存在被读命令的地址命中的元素,将该元素的被命中次数递增。进一步地,对于更新后的近期IO命令的地址集合,还识别近期IO命令的地址集合中被更新的元素是否满足升级为候选顺序流描述符的条件854。根据待被升级的元素更新候选顺序流描述符之一856。例如,根据待被升级的元素的地址与被命中次数,更新被选择的候选顺序流描述符。以及可选地或进一步地,对于被选择的顺序流描述符,根据其中记录的地址与被命中次数生成近期IO命令的地址集合的元素,并将生成的元素添加到近期IO命令的地址集合。可选地或进一步地,响应于近期IO命令的地址集合的元素被升级为候选顺序流,还转向步骤870,对于更新后的被命中候选顺序流描述符,还识别该候选顺序流描述符是否满足升级为顺序流描述符的条件。图9A展示了根据本申请实施例的实施预读的流程图。根据本申请的实施例,在顺序流检测单元250维护了有效的顺序流描述符时,预读单元255执行预读操作。存在有效的顺序流描述符,意味着当前存在被识别出且有效的顺序流。顺序流描述符是动态的,相应地,顺序流也是动态的。在任何时刻,可能存在0个、1个或多个顺序流。预读单元255对存在的顺序流实施预读。作为举例,响应于从主机接口获取的读命令910命中了顺序流或者响应于识别出新的顺序流有候选顺序流被升级为顺序流,而实施预读。顺序流检测单元250,依据从主机接口获取的读命令命中了顺序流,或者识别出新的顺序流有候选顺序流被升级为顺序流,向预读单元255提供预读指示。可选地,顺序流检测单元250还从被命中的顺序流描述符或新升级的顺序流描述符中获取预读起始地址与预读数据大小。顺序流描述符中记录的预读起始地址与预读大小是在该顺序流描述符所指示的顺序流上所执行的上次预读操作的起始地址与预读大小。若读命令命中了顺序流,顺序流检测单元250或缓存管理单元260还识别读命令是否命中了被之前的预读操作填充的缓存单元920。若读命令命中了被之前的预读操作填充的缓存单元,从被命中的缓存单元获取数据作为对读命令的响应,以及还强化对该顺序流上所实施的预读930。强化对该顺序流上所实施的预读,意味着增加预读的数据大小,和或在顺序流相对当前地址更远的地址开始实施预读。例如预读单元255根据读命令访问的地址的结尾地址与上次预读的结尾地址的较大者作为本次预读的起始地址,以及将上次预读的大小或者上次预读的大小的倍数作为本次预读的大小。以及可选地,本地预读大小不应超过指定的最大值。若读命令命中了顺序流,但读命令未命中被之前的预读操作填充的缓存单元,则以谨慎地实施对该顺序流上的预读925。谨慎地实施对该顺序流上的预读,意味限制预读数据大小,和或在顺序流相对当前地址较近的地址开始实施预读。例如,预读单元255根据读命令访问的地址的结尾地址作为本次预读的起始地址,而将指定大小作为本次预读的大小。可选地,响应于识别出新的顺序流,也谨慎地实施对该顺序流上的预读。在可选的实施方式中,若读命令命中了顺序流,顺序流检测单元250或缓存管理单元260还识别读命令访问的地址是否临近于上次预读的地址范围。读命令访问的地址临近于上次预读的地址范围,意味着读命令访问的地址处于上次预读的地址范围内,或距离上次预读的地址范围的边界小于指定阈值,也意味着上次预读操作发生了积极的作用,所预读的顺序很可能被真实的读命令所访问。若读命令命访问的地址临近于上次预读的地址范围,强化对该顺序流上所实施的预读。若读命令访问的地址并非临近于上次预读的地址范围,谨慎地实施对该顺序流上的预读。依然可选地,对存在的顺序流实施预读,而不以存在读命令命中顺序流为前提。对于存在的顺序流,即使没有读命令命中顺序流,也谨慎地实施对该顺序流上的预读。以及预读单元255根据本次预读的起始地址与本次预读的大小,实施预读操作940。通过例如向后端处理单元270发出预读命令来实施预读操作。根据预读操作从NVM芯片105读出的数据被存储在缓存单元中。以及顺序流检测单元250还根据本次预读的起始地址与本次预读的大小更新顺序流描述符中的预读起始地址与预读大小。图9B展示了根据本申请又一实施例的实施预读的流程图。根据图9B的实施例,预读单元255对顺序流描述符指示的顺序流实施预读。作为举例,响应于从主机接口获取的读命令950命中了顺序流,且读命令访问的地址临近于上次预读的地址范围960,则强化对该顺序流上所实施的预读。若读命令命访问的地址并非临近于上次预读的地址范围,谨慎地实施对该顺序流上的预读965。在可选的实施方式中,响应于在步骤960识别出读命令访问的地址远离于上次预读的地址范围,进一步识别读命令是否命中了被之前的预读操作填充的缓存单元。若读命令未命中了被之前的预读操作填充的缓存单元,转向步骤965,以谨慎地实施对该顺序流上的预读。若读命令命中了被之前的预读操作填充的缓存单元,意味着之前的预读操作是有效的,只是预读的地址范围过远而偏离了后续可能的读命令,因而转向步骤975,根据谨慎的预读策略确定本次预读的大小。在依然可选的实施方式中,响应于在步骤960识别出读命令访问的地址临近于上次预读的地址范围,还判断读命令访问的数据大小与上次预读的数据大小的关系970。例如,若读命令访问的数据大小与上次预读的数据大小接近,也意味着上次预读发挥了积极作用,且因预读引起的读带宽浪费较少,因而强化对该顺序流上所实施的预读,特别是根据强化的策略确定本次预读的大小972。例如,将本次预读的大小设置为同上次预读的大小相同或比上次预读的大小更大。可选地,若读命令访问的数据大小显著大于上次预读的数据大小,也采用强化的策略确定本次预读的大小。回到步骤970,若读命令访问的数据大小显著小于上次预读的数据大小,意味着上次预读发挥了消极作用,预读的数据未得到充分利用,导致因预读引起的读带宽浪费较多,因而根据谨慎的预读策略确定本次预读的大小975。例如,将本次预读的大小设置为比上次预读的大小更小。以及在步骤980,由于读命令访问的地址临近于上次预读的地址范围,因而采取强化的策略确定本次预读的起始地址。例如预读单元255根据读命令访问的地址的结尾地址与上次预读的结尾地址的较大者作为本次预读的起始地址。以及预读单元255根据本次预读的起始地址与本次预读的大小,实施预读操作990。图10展示了根据本申请又一实施例的顺序流检测与预读的流程图。顺序流检测单元250也参看图4从主机接口210获取读命令可选地,读命令访问的地址1010,根据读命令访问的地址更新近期IO命令的地址集合1020。例如,根据读命令访问的地址生成近期IO命令的地址集合的元素,在生成的近期IO命令的地址集合元素中记录了读命令的地址,以及初始化该地址被命中的次数例如,为1,并将生成的元素添加到近期IO命令的地址集合。可选地,为将生成的元素添加到近期IO命令的地址集合,还遍历近期IO命令的地址集合的各元素,以查找在近期IO命令的地址集合中是否存在将被该读命令的地址命中的元素。若近期IO命令的地址集合中存在被读命令的地址命中的元素,将该元素的被命中次数递增。判断读命令访问的地址是否命中顺序流1030。若读命令访问的地址命中的顺序流描述符例如,顺序流描述符510,更新该被命中的顺序流描述符1040。以及接下来根据被命中的顺序流描述符实施预读1045。例如,顺序流检测单元250向预读单元255指示被命中的顺序流描述符。可选地,还向预读单元255提供步骤1010获取的IO命令是否命中了缓存单元或者命中的缓存单元的数量、上次预读的起始地址与上次预读的大小。预读单元255根据顺序流检测单元250提供的信息实施预读。例如,根据如图9A或图9B展示的实施例的流程处理预读。可以理解地,图9A与图9B为了清楚的目的展示了获取IO命令的步骤910与950,预读单元255实施预读而无须再次获取IO命令。继续参看图10,若读命令访问的地址未命中所维护的顺序流描述符的任何一个1030,判断读命令访问的地址是否命中候选顺序流1050。若读命令访问的地址命中了候选顺序流描述符1050,更新该被命中的候选顺序流描述符1060。进一步地,对于更新后的被命中候选顺序流描述符,还识别该候选顺序流描述符是否满足升级为顺序流描述符的条件1070。若满足升级条件,根据待被升级的候选顺序流描述符更新顺序流描述符之一1080。对于因升级而新生成的顺序流描述符,根据新升级顺序流描述符实施预读1045。若读命令访问的地址未命中候选顺序流描述符1050,在此情况下,读命令访问的地址未命中顺序流描述符与候选顺序流描述符的任何一个。统计读命令访问的地址未命中顺序流描述符与候选顺序流描述符的任何一个的次数。若该次数大于指定阈值1090,意味着当前识别的顺序流与候选顺序流与实际情况偏差较大,更新所有顺序流描述符与候选顺序流描述符的命中次数1095。例如将命中次数减半,将命中次数减去指定值,或将命中次数按比例减少。本申请实施例还提供一种包括程序代码的程序,当被载入主机并在主机上执行时,所述程序使主机的处理器执行上面提供的根据本申请实施例的方法之一。应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以分别由包括计算机程序指令的各种装置来实施。这些计算机程序指令可以加载到通用计算机、专用计算机或其他可编程数据控制设备上以产生机器,从而在计算机或其他可编程数据控制设备上执行的指令创建了用于实现一个或多个流程图框中指定的功能的装置。这些计算机程序指令还可以存储在可以引导计算机或其他可编程数据控制设备的计算机可读存储器中从而以特定方式起作用,从而能够利用存储在计算机可读存储器中的指令来制造包括用于实现一个或多个流程图框中所指定功能的计算机可读指令的制品。计算机程序指令还可以加载到计算机或其他可编程数据控制设备上以使得在计算机或其他可编程数据控制设备上执行一系列的操作操作,从而产生计算机实现的过程,进而在计算机或其他可编程数据控制设备上执行的指令提供了用于实现一个或多个流程图框中所指定功能的操作。因而,框图和流程图的框支持用于执行指定功能的装置的组合、用于执行指定功能的操作的组合和用于执行指定功能的程序指令装置的组合。还应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以由执行指定功能或操作的、基于硬件的专用计算机系统实现,或由专用硬件和计算机指令的组合实现。虽然当前发明参考的示例被描述,其只是为了解释的目的而不是对本申请的限制,对实施方式的改变,增加和或删除可以被做出而不脱离本申请的范围。这些实施方式所涉及的、从上面描述和相关联的附图中呈现的教导获益的领域中的技术人员将认识到这里记载的本申请的很多修改和其他实施方式。因此,应该理解,本申请不限于公开的具体实施方式,旨在将修改和其他实施方式包括在所附权利要求书的范围内。尽管在这里采用了特定的术语,但是仅在一般意义和描述意义上使用它们并且不是为了限制的目的而使用。
权利要求:1.顺序流检测方法,包括:响应于第一读命令访问的地址命中了多个顺序流描述符中的第一顺序流描述符,用第一读命令访问的地址更新第一顺序流描述符记录的地址;指示对第一顺序流描述符对应的第一顺序流实施预读。2.根据权利要求1所述的方法,还包括:响应于第一读命令访问的地址未命中多个顺序流描述符中的任何一个,识别第一读命令中访问的地址是否命中多个候选顺序流描述符中的任何一个。3.根据权利2所述的方法,还包括:响应于第一读命令访问的地址命中了多个候选顺序流描述符中的第一候选顺序流描述符,用第一的命令访问的地址更新第一候选顺序流描述符记录的地址并递增第一候选顺序流描述符记录的命中次数。4.根据权利要求1-3之一所述的方法,其中响应于第一读命令访问的地址命中了多个顺序流描述符中的第一顺序流描述符,还递增第一顺序流描述符记录的命中次数。5.根据权利要求4所述的方法,其中响应于第一读命令访问的地址未命中多个顺序流描述符中的任何一个,也未命中多个候选顺序流描述符中的任何一个,递减多个顺序流描述符的每个的命中次数,与多个候选顺序流描述符的每个的命中次数。6.一种预读方法,包括:响应于收到对第一顺序流描述符对应的第一顺序流实施预读的指示,对根据本次预读起始地址与本地预读大小参数实施预读。7.根据权利要求6所述的方法,还包括:将预读得到的数据存储在一个或多个缓存单元。8.根据权利要求7所述的方法,其中若读命令命中了缓存单元,根据强化的策略确定本次预读起始地址与本地预读大小参数,若读命令未命中缓存单元,根据谨慎的策略确定本次预读起始地址与本地预读大小参数。9.根据权利要求7所述的方法,其中若读命令访问的地址非临近于对第一顺序流上次预读的地址范围,根据谨慎的策略确定本次预读起始地址与本地预读大小参数;若读命令访问的地址临近于对第一顺序流上次预读的地址范围,且读命令访问的数据大小近似于上次预读的数据大小,根据强化的策略确定本次预读起始地址与本地预读大小参数。10.一种存储设备,其特征在于,包括控制部件与非易失性存储器,所述控制部件实施根据权利要求1-9之一所述的方法。
百度查询: 北京忆恒创源科技股份有限公司 顺序流检测与数据预读
免责声明
1、本报告根据公开、合法渠道获得相关数据和信息,力求客观、公正,但并不保证数据的最终完整性和准确性。
2、报告中的分析和结论仅反映本公司于发布本报告当日的职业理解,仅供参考使用,不能作为本公司承担任何法律责任的依据或者凭证。