使用缓存反馈信息指导数据预读

文档序号:1719601 发布日期:2019-12-17 浏览:13次 >En<

阅读说明:本技术 使用缓存反馈信息指导数据预读 (Directing data pre-reads using cache feedback information ) 是由 侯俊伟 孙丛 于 2018-06-11 设计创作,主要内容包括:提供了使用缓存反馈信息指导数据预读的方法及其存储设备。所提供数据预读方法,包括:获取预读请求;根据预读数据的缓存统计数据,确定是否根据所述预读请求执行预读操作。(A method for guiding data pre-reading using cache feedback information and a storage device thereof are provided. The provided data pre-reading method comprises the following steps: obtaining a pre-reading request; and determining whether to execute the pre-reading operation according to the pre-reading request according to the cache statistical data of the pre-reading data.)

使用缓存反馈信息指导数据预读

技术领域

本申请涉及存储系统,更具体地,涉及检测访问连续地址空间的多个读命令所形成的顺序流,以及根据对顺序流的检测执行数据预读。

背景技术

图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”等。

在固态存储设备中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在相关技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。

存储了从逻辑地址到物理地址的映射信息的表结构被称为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命令E,D,C,这些IO命令属于随机流C)。在操作系统、驱动程序、设备接口和/或总线上,多个IO命令被组织为与原来不同的顺序,并被存储设备所接收。作为举例,参看图2A,存储设备以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命令地址集合的元素记录的地址与命中次数,更新多个顺序流描述符中的第二顺序流描述符。

根据本申请第一方面的第七数据预读方法,提供了根据本申请第一方面的第八数据预读方法,其中:第二顺序流描述符是多个顺序流描述符中命中次数最小的顺序流描述符。

根据本申请第一方面的第二或第三数据预读方法,提供了根据本申请第一方面的第九数据预读方法,其中所述精确度由A/B所指示,其中B代表预读出的数据,而A代表预读出的数据(B)中被读命令所命中的数据量。

根据本申请第一方面的第一至第九数据预读方法之一,提供了根据本申请第一方面的第十数据预读方法,还包括:根据产生的预读请求与读命令计算虚拟的统计数据。

根据本申请第一方面的第十数据预读方法,提供了根据本申请第一方面的第十一数据预读方法,还包括:在根据预读数据的缓存统计数据,确定拒绝根据所述预读请求执行预读操作的情况下,根据虚拟的统计数据确定是否执行预读操作。

根据本申请第一方面的第十数据预读方法,提供了根据本申请第一方面的第十二数据预读方法,还包括:根据虚拟的统计数据确定是否执行预读操作。

根据本申请第一方面的第十至第十二数据预读方法之一,提供了根据本申请第一方面的第十三数据预读方法,其中:虚拟的统计数据包括虚拟预读的精确度,虚拟预读的精确读由A’/B’所指示,其中B’代表根据预读请求理论上预读出的数据,而A’代表理论上预读出的数据B’中被读命令所命中的数据量。

根据本申请第一方面的第一至第十三数据预读方法之一,提供了根据本申请第一方面的第十四数据预读方法,还包括:根据缓存的预读数据的数据量,确定是否执行预读操作;若缓存的预读数据的数据量小于阈值,则执行预读操作。

根据本申请第一方面的第一至第十四数据预读方法之一,提供了根据本申请第一方面的第十五数据预读方法,其中:根据第一顺序流的预读数据的第一缓存统计数据,确定是否根据所述预读请求执行预读操作。

根据本申请第一方面的第十五数据预读方法,提供了根据本申请第一方面的第十六数据预读方法,其中若第一顺序流的预读数据的第一缓存统计数据大于阈值,则确定根据所述预读请求执行预读操作。

根据本申请第一方面的第十五或第十六数据预读方法,提供了根据本申请第一方面的第十七数据预读方法,其中若第一顺序流的预读数据的第一缓存统计数据不大于阈值,则确定拒绝根据所述预读请求执行预读操作。

根据本申请的第二方面,提供了根据本申请第二方面的第一存储设备,包括控制部件与非易失性存储器,所述控制部件执行根据本申请第一方面的第一至第十七数据预读方法之一。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1为本申请提供的现有技术中固态存储设备的示意图;

图2A示出了来自多个应用的IO命令被提供给存储设备的示意图;

图2B展示了来自多个应用的数据的在存储设备上的数据放置的示意图;

图3是对写命令实施顺序流检测示意图;

图4展示了根据本申请实施例的存储设备的框图;

图5展示了根据本申请实施例的顺序流描述符与候选顺序流描述符;

图6展示了根据本申请实施例检测顺序流的流程图;

图7展示了根据本申请实施例的实施预读的流程图;

图8展示了根据本申请实施例的实施预读的示意图;

图9展示了根据本申请又一实施例的实施预读的示意图;以及

图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,在响应读命令时,可以在接收到后续的读命令前,预读后续的数据,从而降低对后续读读命令的响应时间,或者响应读命令时,一次从数据块1中读出较大尺寸的数据,以减少访问数据块1的次数。在申请号为201610169011.1、发明名称为顺序流检测方法与装置的中国专利申请,以及申请号为2018103554271、发明名称为顺序流检测与数据预读的中国专利申请中,提供了实施顺序流检测的多种实施例。将其全文通过引用并入本申请。

图4展示了根据本申请实施例的存储设备的框图。根据本申请实施例的存储设备对读命令实施顺序流检测,并依据检测结果进行预读。

参看图4,存储设备的控制部件204包括主机接口210、用于访问NVM芯片105的介质接口220、缓存管理单元260、后端处理单元270、顺序流检测单元250与预读单元255。

主机接口210用于同主机交换命令与数据。例如,主机与存储设备通过NVMe/PCIe协议通信,主机接口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记录了多个缓存描述符。缓存描述符的一个或多个记录了对应的缓存单元在DRAM 110中的地址、缓存单元的状态和/或缓存单元中有效数据的位置。在例如申请号为201810264435.5、发明名称为“具有增强IO性能确定性的缓存的存储设备”、申请日为2018年3月28日的中国专利申请中描述了利用缓存管理单元260来提供缓存。在申请号为201610819411.2、201610819400.4、201710219096.4与201710219077.1中也提供了用于存储设备的缓存。

控制部件还耦合到外部存储器(例如,DRAM)110。

继续参看图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,OpenChannel SSD,OCSSD)协议的物理地址空间。从而在IO命令中指示要访问的物理地址。从而后端处理单元270无须使用FTL模块进行从逻辑地址到物理地址的转换。

继续参看图4,主机接口210还耦合到顺序流检测单元250。顺序流检测单元250也接收主机发送给存储设备的IO命令,或者可选地接收IO命令访问的逻辑地址/物理地址(简称为IO命令访问的地址)。顺序流检测单元依据接收的IO命令的地址识别出一个或多个顺序流,并向预读单元255指示所识别出的顺序流。

预读单元255对所识别出的顺序流实施预读,对顺序流上随后可能出现的读命令要读取的数据提前实施预读,并将读出的数据存储在缓存单元中。可选地,预读单元255读出的数据也由缓存管理单元260管理。缓存管理单元260为预读的数据分配缓存单元,并在缓存描述符表中记录被预读的逻辑地址/物理地址以及存储了预读数据的缓存单元的索引。

可选地,由不同于缓存管理单元260的其他缓存管理单元或顺序流检测单元250管理对预读数据的缓存。

响应于从主机接口接收了读命令,缓存管理单元260、其他缓存管理单元或顺序流检测单元250还检查读命令要读取的数据是否命中了缓存单元中的预读数据。作为举例,缓存管理单元260生成预读单元255预读的数据的统计数据,并将统计数据提供给预读单元255。例如,缓存管理单元260统计预读的精确度,其中精确度由A/B所指示,其中B代表预读出的数据,而A代表预读出的数据(B)中被真实的读命令所命中的数据量。可选地,缓存管理单元260提供的统计数据包括缓存单元的命中率,预读数据占用的缓存单元数量、和/或预读数据占用的缓存单元的比例等。预读单元255根据从缓存管理单元260收到的统计数据调整自身的预读策略。

图5展示了根据本申请实施例的实施顺序流检测的示意图。顺序流检测单元250维护顺序流描述符与近期IO命令地址集合。顺序流描述符指示了被顺序流检测单元250识别出的顺序流。

作为举例,顺序流描述符有一个或多个。图5中展示了2个顺序流描述符(510与512)。可以理解地,顺序流检测单元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命令的地址集合中。读命令命中近期IO命令的地址集合的元素的情形包括,例如,读命令访问的地址同近期IO命令的地址集合的元素记录的地址相同、相重叠和/或相邻近(两个地址的差小于指定阈值)。

在指定条件满足或指定情况发生时,近期IO命令的地址集合中的元素被升级为顺序流(并得到顺序流描述符)。指定条件包括例如近期IO命令的地址集合中的元素的被命中次数大于指定阈值,近期IO命令的地址集合的元素的被命中次数大于顺序流描述符的被命中次数等。

图6展示了根据本申请实施例检测顺序流的流程图。

顺序流检测单元250(也参看图4)从主机接口210获取读命令(可选地,读命令访问的地址)(610),判断读命令访问的地址是否命中顺序流(620)。通过比较读命令访问的地址与顺序流描述符所记录的地址来判断读命令访问的地址是否命中顺序流。例如,读命令访问的地址为A1,而顺序流描述符510记录的地址为A2,若A1与A2相同、相重叠和/或相临近(A1与A2的差的绝对值小于阈值),则确定读命令访问的地址A1命中顺序流510。可选地,将读命令访问的地址同顺序流检测单元250所维护的顺序流描述符的每个(510与512)所记录的地址作比较,以识别读命令访问的地址是否命中顺序流描述符所代表的顺序流的任何一个。

对于读命令访问的地址命中的顺序流描述符(例如,顺序流描述符510),更新该被命中的顺序流描述符(630),例如将顺序流描述符510记录的地址替换为读命令访问的地址(A1),以及将顺序流描述符所记录的命中次数递增。

若读命令访问的地址(A1)未命中所维护的顺序流描述符的任何一个,判断读命令访问的地址是否命中近期IO命令的地址集合(640)。通过比较读命令访问的地址与近期IO命令的地址集合的元素所记录的地址来判断读命令访问的地址是否命中近期IO命令的地址集合。若读命令访问的地址命中了近期IO命令的地址集合的元素,更新近期IO命令的地址集合的该被命中的元素,例如该元素记录的地址替换为读命令访问的地址(A1),以及将该元素所记录的命中次数递增。若读命令访问的地址未命中近期IO命令的地址集合的任何元素,还生成记录读命令访问的地址的新元素添加到近期IO命令的地址集合。

进一步地,对于更新后的近期IO命令的地址集合,还识别近期IO命令的地址集合的元素是否满足升级为顺序流描述符的条件(650)。例如,若近期IO命令的地址集合的元素之一所记录的命中次数超过阈值(例如,5、10或100),若近期IO命令的地址集合的元素之一所记录的命中次数大于近期IO命令的地址集合的其他所有元素所记录的命中次数,或者若近期IO命令的地址集合的元素之一所记录的命中次数大于一个或多个顺序流描述符所记录的命中次数,对近期IO命令的地址集合的该元素进行升级。根据待被升级的该元素更新顺序流描述符之一(650)。例如选择所有顺序流描述符中所记录的命中次数最低的顺序流描述符,或者选择距上次被更新时间最久的顺序流描述符,或者尚未被使用的顺序流描述符,用待被升级的该元素所记录的地址与命中次数,替换被选择的顺序流描述符的地址与命中次数,以将该元素升级为是顺序流描述符。

可选地或进一步地,为升级近期IO命令的地址集合的元素,还降级被选择的顺序流描述符(例如顺序流描述符510)。用被降级的顺序流描述符(510)的地址与命中次数,更新被升级的近期IO命令的地址集合的该元素。通过在将顺序流描述符降级为近期IO命令的地址集合的元素,为近期IO命令的地址集合的该元素提供了再次被升级为顺序流描述符的机会。

需要说明地,在对根据图6的实施例的描述中,没有仔细地区分顺序流与顺序流描述符。这是为了说明简便、清楚的目的,所属领域技术人员将能够理解其含义。顺序流描述符可以是例如存储器中的一段存储空间所容纳的用于描述顺序流的数据,这段存储空间可被修改从而使顺序流描述符被更新。顺序流描述符通过其记录的数据指示了顺序流(例如,地址与命中次数)。从而读命令的地址命中了顺序流描述符,也被理解为命中了顺序流描述符所指示的顺序流。

图7展示了根据本申请实施例的实施预读的流程图。

根据本申请的实施例,在顺序流检测单元250维护了有效的顺序流描述符时,预读单元255执行预读操作。存在有效的顺序流描述符,意味着当前存在被识别出且有效的顺序流。顺序流描述符是动态的,相应地,顺序流也是动态的。在任何时刻,可能存在0个、1个或多个顺序流。预读单元255对存在的顺序流实施预读。

作为举例,响应于从主机接口获取的读命令命中了顺序流或者响应于识别出新的顺序流(有近期IO命令的地址集合的元素被升级为顺序流),预读单元255产生预读请求(710)。顺序流检测单元250,依据从主机接口获取的读命令命中了顺序流,或者识别出新的顺序流,向预读单元255提供预读指示。可选地,顺序流检测单元250还从被命中的顺序流描述符或新升级的顺序流描述符中获取预读起始地址与预读数据大小,并提供给预读单元255。顺序流描述符中记录的预读起始地址与预读大小是在该顺序流描述符所指示的顺序流上所执行的上次预读操作的起始地址与预读大小。

预读单元255从缓存管理单元260获取统计数据,根据获取的统计数据确定是否要根据生成的预读请求而执行预读操作(720)。作为举例,缓存管理单元260提供的统计数据指示预读的精确度。预读单元255在获取的精确度大于指定阈值时,根据预读请求执行预读操作(730)。可选地,预读单元255而在获取的预读精确度不大于指定阈值时,拒绝根据预读请求执行预读操作(740)。缓存管理单元260提供的预读的精确度指示了之前所执行的预读操作是否有效,所预读的数据是否被充分利用。预读的精确地不高指示了执行预读操作可能是对存储设备的资源的浪费,而预读的精确度高指示了执行预读操作是有利的。

可选地,缓存管理单元260提供的统计数据指示缓存单元的命中率,预读数据占用的缓存单元数量、和/或预读数据占用的缓存单元的比例等。预读单元255在缓存单元的命中率高于指定阈值时根据预读请求执行预读操作,而在缓存单元的命中率不高时,拒绝根据预读请求执行预读操作。类似地,预读单元255在预读数据占用的缓存单元数量/比例高于指定阈值时根据预读请求执行预读操作,而在预读数据占用的缓存单元数量/比例不高时,拒绝根据预读请求执行预读操作。进一步地,预读单元260综合考虑多种统计数据来确定是否要执行预读操作。

可选地或进一步地,预读单元255根据预读请求拒绝执行预读操作(740)后,继续获取来自缓存管理单元260的统计数据。由于预读单元255拒绝执行预读操作(740),随着时间的流逝,缓存管理单元260提供的预读的精确度等统计数据逐步升高(因为后续的读命令可能命中率预读数据)。响应于新的统计数据大于指定阈值(可以是同步骤720中使用的阈值相同或不同的阈值),预读单元255再次根据预读请求执行预读操作。以及响应于新的统计数据不大于指定阈值(可以是同步骤720中使用的阈值相同或不同的阈值),预读单元255依然拒绝根据预读请求执行预读操作。

返回参看图7,预读单元255还维护虚拟的统计数据。虚拟的统计数据包括例如虚拟预读的精确度。虚拟预读的精确读由例如A’/B’所指示,其中B’代表根据预读请求理论上预读出的数据,而A’代表理论上预读出的数据(B’)中被真实的读命令所命中的数据量。可以理解地,由于预读请求可能被拒绝(740),使得B’小于预读出的数据B。

可选地,由缓存管理单元260提供虚拟的统计数据。为了计算虚拟的统计数据,预读单元255还向缓存管理单元260提供被拒绝的预读请求。缓存管理单元260根据被拒绝的预读请求,维护虚拟的预读数据,以知晓哪些虚拟的预读数据被读命令所命中。

继续参看图7,预读单元255根据预读请求拒绝执行预读操作(740)后,继续获取虚拟的统计数据。根据虚拟的统计数据确定是否要根据生成的预读请求而执行预读操作(750)。作为举例,虚拟的统计数据指示预读的精确度。预读单元255在获取的虚拟精确度大于指定阈值时,根据预读请求执行预读操作(760)。可选地,预读单元255在获取的虚拟预读精确度不大于指定阈值时,拒绝根据预读请求执行预读操作(770)。

通过利用虚拟的统计数据来指示是否要执行预读,解决了在步骤740拒绝执行预读操作后,如何及时恢复执行预读操作的问题。

图8展示了根据本申请实施例的实施预读的示意图。

预读单元255获取顺序流检测单元250提供的顺序流信息与缓存管理单元260提供的统计数据,确定是否要执行预读操作,以及执行怎样的预读操作,并生成预读命令提供给后端处理单元270来根据预读命令读取数据。

预读单元255根据顺序流检测单元250提供的顺序流信息,生成预读请求(810)。对于生成的预读请求,仅在缓存管理单元260当前提供的对预读的统计数据满足指定条件下,才根据生成的预读请求而执行对应于预读请求的预读操作(830)。例如,预读请求指示要预读地址A处的数据,而缓存管理单元260提供的预读的精确度数据指示当前预读的精确度已经过低,则预读单元260放弃当前的预读请求(810),而不执行对应的预读操作。

可选地,预读单元255响应于收到预读请求,而从缓存管理单元260获取指定的统计数据。为了混的预读的统计数据,缓存管理单元260对于缓存单元中被填入的数据区分其来自读命令还是预读命令。

预读单元255为执行预读操作,而生成预读命令,并提供给后端处理单元270来根据预读命令读取数据。

图9展示了根据本申请又一实施例的实施预读的示意图。

预读单元255获取顺序流检测单元250提供的顺序流信息与缓存管理单元260提供的统计数据,确定是否要执行预读操作,以及执行怎样的预读操作,并生成预读命令提供给后端处理单元270来根据预读命令读取数据。

预读单元255根据顺序流检测单元250提供的顺序流信息,生成预读请求(910)。顺序流检测单元250可以同时维护多个顺序流。作为举例,顺序流检测单元250维护了3个顺序流(顺序流1、顺序流2与顺序流3)。预读请求直接或间接指示了对哪个顺序流实施预读。例如,预读请求中指示了顺序流的地址,预读单元255根据该地址识别出该预读请求指示对哪个顺序流做预读。预读单元255还为每个顺序流维护预读的起始地址与预读的数据大小。

对于生成的预读请求,仅在缓存管理单元260当前提供的对预读的统计数据满足指定条件下,才根据生成的预读请求而执行对应于预读请求的预读操作(930)。例如,预读请求指示要对顺序流1做预读,预读单元255从缓存管理单元260获取对顺序流1已经做的预读的精确度。在对顺序流1已经做的预读的精确度满足指定条件时(例如,高于指定阈值)(920),才执行对顺序流1的预读操作(930),根据预读请求生成预读命令并提供给后端处理单元(270)。若对顺序流1已经做的预读的精确度不满足指定条件时(例如,低于指定阈值)(920),拒绝对顺序流1执行预读操作(940)。

在可选的实施方式中,存储设备启动后,由于没有预读数据,缓存管理单元260提供的预读的精确度为0。预读单元255还维护关于预读的虚拟统计数据(950)。例如,响应于获取预读请求指示要对顺序需流2实施预读操作,假设对顺序流2的预读操作被执行,获取了对顺序流2的预读数据,并记录后续的读命令对假设的顺序流2的预读数据的命中情况,以得到虚拟的预读精确度。作为举例,虚拟的预读精确度为读命令命中假设的顺序流2的预读数据的数据量除以假设的顺序流2的预读数据的数据量。从而虚拟的预读精确度不受操作920的影响。一段时间后,虚拟的预读精确度可能满足了指定条件(960)(此时,因未执行实际的预读操作,缓存管理单元260提供的预读精确度可能不满足指定条件(920)),从而预读单元255根据预读请求执行预读操作(935),生成预读命令,并提供给后端处理单元270。

作为又一个例子,在操作920因对例如顺序流3的预读的精确度不满足指定条件而拒绝执行预读操作(940)后,若预读单元255维护的关于顺序流3的预读的虚拟统计数据(950)满足了指定条件(960),也根据预读请求对顺序流3执行预读操作(935),生成预读命令,并提供给后端处理单元270。

以及可选地,避免在操作930与操作935中生成相同的预读命令。

图10展示了根据本申请再一实施例的实施预读的示意图。

预读单元255获取顺序流检测单元250提供的顺序流信息与缓存管理单元260提供的统计数据,确定是否要执行预读操作,以及执行怎样的预读操作,并生成预读命令提供给后端处理单元270来根据预读命令读取数据。

预读单元255根据顺序流检测单元250提供的顺序流信息,生成预读请求(1010)。作为举例,顺序流检测单元250维护了3个顺序流(顺序流1、顺序流2与顺序流3)。

对于生成的预读请求,仅在缓存管理单元260当前提供的对预读的统计数据满足指定条件下,才根据生成的预读请求而执行对应于预读请求的预读操作。例如,预读请求指示要对顺序流1做预读,预读单元255从缓存管理单元260获取对顺序流1已经做的预读的精确度。在对顺序流1已经做的预读的精确度满足指定条件时(例如,高于指定阈值)(1020),才执行对顺序流1的预读操作(1030),根据预读请求生成预读命令并提供给后端处理单元(270)。若对顺序流1已经做的预读的精确度不满足指定条件时(例如,低于指定阈值)(1020),拒绝对顺序流1执行预读操作(1040)。

根据图10展示的实施例,还根据预读的数据量确定是否要进行预读。可由预读单元255统计在指定时间段内执行的预读操作来获得预读的数据量。也可由缓存管理单元260提供当前所缓存的预读的数据。由于缓存管理单元260会根据需要对缓存单元实施替换,由缓存管理单元260提供的当前缓存的预读量可能消息预读单元266统计的当前预读的数据量。希望将缓存的预读数据量维持在一定的水平,以平衡对资源(缓存、带宽等)的占用与预读带来的读延迟降低。

根据一种实施方式,在操作1020,若对顺序流1已经做的预读的精确度不满足指定条件,进一步判断当前预读的数据量是否低于阈值(1025)。若当前预读的数据量低于阈值,则执行对顺序流1的预读操作(1030),以提高当前预读的数据量。若当前预读的数据量不低于阈值,则拒绝对顺序流1执行预读操作(1040)。可选地,为每个识别出的顺序流提供预读数据量阈值,以使得对每个顺序流确定预读操作是否被执行,从而每个数据流的当前预读的数据量能保持在一定水平。

根据图10的实施例,即使在没有预读数据的存储设备初始化阶段,虽然在操作1020,预读统计数据不满足条件,在操作1025,也能通过基于预读数据量的判断而执行预读操作。

本申请实施例还提供一种包括程序代码的程序,当被载入主机并在主机上执行时,所述程序使主机的处理器执行上面提供的根据本申请实施例的方法之一。

应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以分别由包括计算机程序指令的各种装置来实施。这些计算机程序指令可以加载到通用计算机、专用计算机或其他可编程数据控制设备上以产生机器,从而在计算机或其他可编程数据控制设备上执行的指令创建了用于实现一个或多个流程图框中指定的功能的装置。

这些计算机程序指令还可以存储在可以引导计算机或其他可编程数据控制设备的计算机可读存储器中从而以特定方式起作用,从而能够利用存储在计算机可读存储器中的指令来制造包括用于实现一个或多个流程图框中所指定功能的计算机可读指令的制品。计算机程序指令还可以加载到计算机或其他可编程数据控制设备上以使得在计算机或其他可编程数据控制设备上执行一系列的操作操作,从而产生计算机实现的过程,进而在计算机或其他可编程数据控制设备上执行的指令提供了用于实现一个或多个流程图框中所指定功能的操作。

因而,框图和流程图的框支持用于执行指定功能的装置的组合、用于执行指定功能的操作的组合和用于执行指定功能的程序指令装置的组合。还应该理解,框图和流程图的每个框以及框图和流程图的框的组合可以由执行指定功能或操作的、基于硬件的专用计算机系统实现,或由专用硬件和计算机指令的组合实现。

虽然当前发明参考的示例被描述,其只是为了解释的目的而不是对本申请的限制,对实施方式的改变,增加和/或删除可以被做出而不脱离本申请的范围。

这些实施方式所涉及的、从上面描述和相关联的附图中呈现的教导获益的领域中的技术人员将认识到这里记载的本申请的很多修改和其他实施方式。因此,应该理解,本申请不限于公开的具体实施方式,旨在将修改和其他实施方式包括在所附权利要求书的范围内。尽管在这里采用了特定的术语,但是仅在一般意义和描述意义上使用它们并且不是为了限制的目的而使用。

20页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:存储设备组及包括存储设备组的存储系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!

技术分类