顺序流检测方法与装置

文档序号:1215262 发布日期:2020-09-04 浏览:11次 >En<

阅读说明:本技术 顺序流检测方法与装置 (Sequential flow detection method and device ) 是由 曹定尊 路向峰 孙清涛 于 2016-03-23 设计创作,主要内容包括:提供检测顺序流的方法与装置。提供的顺序流检测方法,其中缓存多个IO地址;与所缓存的多个IO地址的每个相关联地记录命中计数;所述方法包括:响应于收到第一IO命令,如果第一IO命令命中所缓存的多个IO地址之一,以所述第一IO命令的第一地址替换所命中的多个IO地址之一,递增与所述第一地址相关联的第一命中计数;若第一命中计数满足阈值,将第一IO命令标记为属于第一顺序流;若第一IO命令是写命令,将第一IO命令的数据写入同构成第一顺序流的多个写命令的数据临近的存储位置。(Methods and apparatus for detecting sequential streams are provided. The provided sequential flow detection method, wherein a plurality of IO addresses are cached; recording a hit count in association with each of the cached plurality of IO addresses; the method comprises the following steps: in response to receiving a first IO command, if the first IO command hits one of the plurality of cached IO addresses, replacing the hit one of the plurality of IO addresses with a first address of the first IO command, incrementing a first hit count associated with the first address; if the first hit count satisfies a threshold, marking the first IO command as belonging to a first sequential flow; if the first IO command is a write command, writing data of the first IO command into a storage location adjacent to data of the plurality of write commands constituting the first sequential stream.)

顺序流检测方法与装置

技术领域

本申请涉及存储系统,更具体地,涉及检测访问连续地址空间的IO命令。

背景技术

存储系统用于处理IO命令。IO命令可以被发送给存储设备(例如,磁盘、固态硬盘、U盘、光盘等)、存储服务器或存储系统(诸如云存储)。多条IO命令构成一个或多个数据流。若多条IO命令所访问的地址是连续的,则将这些IO命令构成的数据流称为顺序流。

每条IO命令携带或指示要访问的数据的地址(逻辑地址或物理地址)。每条IO命令要访问的数据的长度可以是固定长度,也可以变化。主机访问存储设备时,诸如应用程序的数据访问方可能将大块数据访问拆分成多条IO命令,并发送给存储设备。主机中还会存在多个访问存储设备的应用和/或多个操作系统(诸如,虚拟机),这导致来个多个访问方的IO命令被交织,进而使得原本对连续地址的访问变得不连续。

参看图1,在主机中有多个应用,顺序流A由应用A产生,包括访问连续地址的A1,A2,A3,…An的多条IO命令。作为举例,顺序流A可以来自对大尺寸视频文件的复制。顺序流B由应用B产生,包括访问连续地址的B1,B2,B3,…Bn的多条IO命令。主机中的应用还产生了访问不连续地址空间的多条IO命令(由S,E,D,C所指示)。在操作系统、驱动程序、设备接口和/或总线上,多个IO命令被组织为与原来不同的顺序,并被存储设备所接收。

诸如固态硬盘的存储设备中,提供地址转换层,将IO命令的逻辑地址转换为物理地址,并按照物理地址将访问存储介质。参看图2,存储设备以A1、B1、C、B2的顺序接收到IO命令,并将这些IO命令顺序

存储设备按照接收IO命令的顺序,将IO命令(以写命令为例)访问的数据写入到存储介质中。诸如闪存的存储介质以页为单元写入数据。在存储设备中还可采用预定尺寸的数据块作为写入数据的单元(例如,由多个页组成的集合)。写入数据的单元一般具有较大的尺寸,能够容纳多条IO命令所写入的数据。在图2的例子中,IO命令A1、B1、C、B2对应的数据被写入到同一个数据块中,并且该数据块中的数据来自连续的多个IO命令。而原本在顺序流中发出的多个IO命令(诸如IO命令A1,A2,A3,…An,B1,B2,B3,…Bn)所对应的数据将被分散在不同的数据块上。

发明内容

然在一些情况下,属于同一个顺序流的数据具有相同或相似的生命周期,即这些数据会同时被更新或作废。参看图2,若数据流A已经作废或被更新,而数据流B、C还保持有效时,数据块中对应A1的部分无效,而数据块的其他部分还有效,那么在因各种原因需要回收该数据块时,需要对除对应于A1的数据之外的数据进行搬移,这会引入写放大。写放大导致增加的读写操作,增加了系统开销,也消耗了存储介质的使用寿命。

在本申请中,对数据流进行顺序性检查,将连续的数据流(顺序流)提取出来,并写入到存储设备的连续的物理空间。

根据本申请的第一方面,提供了根据本申请第一方面的第一顺序流检测方法,其中缓存多个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地址之一,并将所述第二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命令未命中缓存的多个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地址相关联的命中计数值。

根据本申请第七方面的第四顺序流检测方法,提供了根据本申请第七方面的第五顺序流检测方法,5,根据权利要求4所述的顺序流检测方法,其中如果所述第一IO未命中缓存的多个IO地址的任何一个,以所述第一地址替换所述多个IO地址中命中计数最低的IO地址;或者以所述第一地址替换所述多个IO地址中最近最少使用的IO地址,并初始化所述第一地址的命中计数。

根据本申请第七方面的第一至第五顺序流检测方法之一,提供了根据本申请第七方面的第六顺序流检测方法,其中第一地址命中缓存的多个地址之一,包括:所述第一地址在数值上紧邻所述多个IO地址之一;所述第一地址可由所述多个IO地址之一递增得到;所述第一地址同所述多个IO地址之一相同;所述第一地址同所述多个IO地址之一交叠;或者所述第一地址同所述多个地址之一的距离小于阈值。

根据本申请第七方面的第一至第六顺序流检测方法之一,提供了根据本申请第七方面的第五顺序流检测方法,所述方法还包括:响应于收到第二IO命令,如果第二IO命令命中缓存的所述第一IO地址,且所述第一命中计数满足阈值,则以所述第二IO命令的第二地址替换所命中的多个IO地址之一,并将所述第二IO命令标记为属于第一顺序流。

根据本申请第七方面的第一至第七顺序流检测方法之一,提供了根据本申请第七方面的第八顺序流检测方法,所述方法还包括:响应于收到第三IO命令,如果第三IO命令的第三地址命中缓存的除所述第一地址或所述第二地址之外的多个IO地址之一,以所述第三地址替换所命中的多个IO地址之一,递增与所述第三地址相关联的第三命中计数;若第三命中计数满足阈值,将第三IO命令标记为属于第二顺序流。

根据本申请第七方面的第一顺序流检测方法,提供了根据本申请第七方面的第九顺序流检测方法,其中,若第一IO命令是写命令,将第一IO命令的数据写入同构成第一顺序流的多个写命令的数据临近的存储位置。

根据本申请的第八方面,提供了根据本申请第八方面的计算机可读存储介质,其上存储有程序,其特征在于,该程序被处理器执行时实现根据本申请第七方面的顺序流检测方法之一。

根据本申请的第九方面,提供了根据本申请第九方面的信息处理设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的程序,其特征在于,所述处理器执行所述程序时实现根据本申请第七方面的顺序流检测方法之一。

附图说明

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

当连同附图阅读时,通过参考后面对示出性的实施例的详细描述,将最佳地理解本申请以及优选的使用模式和其进一步的目的和优点,其中附图包括:

图1A示出了现有技术中主机与设备间的IO命令流的示意图;

图1B示出了现有技术中在存储介质上存储IO命令流的示意图;

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

图3示出了根据本申请实施例的顺序流检测的示意图;

图4示出了根据本申请实施例的用于顺序流检测的缓冲区结构的示意图;

图5展示了根据本申请实施例的顺序流检测过程中的缓冲区变化;

图6展示了根据本申请又一实施例的顺序流检测过程中的缓冲区变化;

图7是根据本申请实施例的顺序流检测方法的流程图;

图8是根据本申请又一实施例的顺序流检测方法的流程图;以及

图9是根据本申请实施例的顺序流检测系统的框图。

具体实施方式

参看图2,以固态存储设备(Solid Storage Device,SSD)作为存储设备的举例,图2展示了存储设备的框图。存储设备201可以耦合到主机,用于为主机提供存储能力。主机同存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA、IDE、USB、PCIE、NVMe(NVM Express)、SCSI、以太网、光纤通道、无线通信网络等连接主机与存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM(非易失存储器,Non-Volatile Memory)存储芯片105以及固件存储器110。接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SCSI、以太网、光纤通道等方式与主机交换数据。控制部件104用于控制在接口103、NVM存储芯片105以及固件存储器110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。可通过软件、硬件、固件或其组合的多种方式实现控制部件104。控制部件104可以是FPGA(Field-programmable gate array,现场可编程门阵列)、ASIC(Application Specific Integrated Circuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器。控制部件104在运行时从固件存储器110加载固件。固件存储器110可以是NOR闪存、ROM、EEPROM等。固件用于提供电子设备底层功能,诸如BIOS、操作系统加载等。

在根据本申请的实施例中,存储设备201从主机接收IO命令,并对所接收的IO命令执行顺序流检测,以从所接收的多条IO命令中检测并提取出顺序流。在一个例子中,控制部件204通过加载固件210,并执行根据本申请实施例的顺序流检测。在另一个例子中,在同存储设备201耦合的主机中执行顺序流检测,并且在发送给存储设备的IO命令中标记指示该IO命令是否属于顺序流的标签。

图3是根据本申请实施例的顺序流检测示意图。作为举例,在诸如固态硬盘的存储设备中对接收到的IO命令实施顺序流检测。从访问存储设备的多个IO命令中,检测出访问连续地址的顺序流A、顺序流B以及访问的地址不具有顺序性的多个IO命令(由C、D、E、…S指示)(也称为随机流)。并且,将顺序流A写入到数据块1中,将顺序流B写入到数据块2中,将随机流写入到数据块3。当顺序流A对应的数据生命周期完成而被更新或无效时(例如,当顺序流A对应大尺寸视频文件时,该视频文件被删除),数据块1中的数据都变为无效,并使得在回收数据块1时,无需将数据块中的有效数据进行搬移(因为数据块1中不存在有效数据,或有效数据较少),从而降低了写放大。此外,顺序流中的数据也可能被连续读取。例如,当顺序流A对应大尺寸视频文件时,数据块1中对应于A1、A2、A3与A4的数据很可能被连续读取。因而对于存储顺序流的数据块1,在响应读操作时,可以在接收到后续的IO命令前,预读后续的数据,从而降低对后续读IO命令的响应时间。

为检测顺序流,参看图4,展示了根据本申请实施例的用于顺序流检测的缓冲区结构。在存储器中缓存多个IO命令要访问的地址。在图4的例子中,IO命令携带逻辑块地址(LBA)。在其他例子中,IO命令可以携带其他形式的地址(例如,虚拟地址),只要IO命令的地址空间的元素之间具有顺序性。

参看图4,缓冲区中包括多个(6个)条目,每个条目包括逻辑块地址(LBA)与计数值,逻辑块地址与计数值相对应地存储。在图4的例子中,缓冲区条目的逻辑块地址来自IO命令访问的一个或多个LBA地址的最后一个。在其他例子中,缓冲区条目的地址可以记录IO命令的地址范围,或者IO命令的首地址与长度。缓冲区条目的计数值指示该缓冲区条目的地址被命中的次数。

参看图4,还提供了顺序流标记(SS1、SS2)。顺序流标记可以有多个,每个顺序流标记指示了一个顺序流。在图4中,顺序流标记SS1指示了访问LBA3的IO命令属于顺序流,而顺序流标记SS2指示了访问LBA5的IO命令属于另一个顺序流。

图5展示了根据本申请实施例的顺序流检测过程中的缓冲区变化。输入流550包括多个IO命令,按时间先后顺序分别访问逻辑块地址为1、52、2、21、100、3、70以及4的存储位置。在收到逻辑块地址为1与52的两个IO命令后,缓冲区A展示了缓冲区的内容。响应于收到访问逻辑块地址1的IO命令,将缓冲区条目512中填充逻辑块地址1,以及这是该缓冲区条目512的首次填充,相应将对应的计数值初始化为0。类似地,响应于接下来收到访问逻辑块地址52的IO命令,将缓冲区条目514中填充逻辑块地址52,并将对应的计数值初始化为0。

缓冲区B展示了收到逻辑块地址为2与21的IO命令后的缓冲区内容。响应于收到逻辑块地址为2的IO命令,检查该IO命令是否命中了缓冲区条目。由于缓冲区条目512的地址字段为1,而逻辑块地址”2”与缓冲区512的地址字段的内容的下一地址,因而该IO命令命中了缓冲区条目512。作为响应,将该IO命令的逻辑块地址”2“填充缓冲区条目512,并将缓冲区条目512的计数值递增(得到1)。响应于收到逻辑块地址为21的IO命令,由于该IO命令没有命中任何一个缓冲区条目,将该IO命令填入缓冲区的空条目516。

缓冲区C展示了收到逻辑块地址为100与3的IO命令后的缓冲区内容。响应于收到逻辑块地址为100的IO命令,检查该IO命令是否命中了缓冲区条目。由于逻辑块地址为100的IO命令未命中任何一个缓冲区条目,为该IO命令在缓冲区中分配新的条目。在图5的例子中,缓冲区中存在空条目518,将逻辑块地址为100的IO命令填入缓冲区的空条目518。接下来收到逻辑块地址为3的IO命令。逻辑块地址为3的IO命令命中了缓冲区512,将该IO命令的逻辑块地址”3“填充条目512的地址字段,并使条目512的计数值递增。在图5的例子中,条目512的计数值满足了顺序流检测的指定条件(例如,计数值不小于2),则将逻辑块地址为3的IO命令识别为属于顺序流,并使顺序流标记SS1指向缓冲区条目512。

缓冲区D展示了收到逻辑块地址为70与4的IO命令后的缓冲区内容。响应于收到逻辑块地址为70的IO命令,检查该IO命令是否命中了缓冲区条目。由于逻辑块地址为70的IO命令未命中任何一个缓冲区条目,为该IO命令在缓冲区中分配新的条目。在图5的例子中,缓冲区中存在空条目519,将逻辑块地址为70的IO命令填入缓冲区的空条目51。所属领域技术人员将意识到,可以采用其他方式将未命中缓冲区条目的IO命令的信息填入缓冲区条目。例如,选择多个缓冲区条目(512、514、516与518)中计数值最小的条目,或者上次更新时间距当前时间最为久远的缓冲区条目。在另一个例子中,由于缓冲区条目512被识别为指示了顺序流,在为未命中任何条目的IO命令选择待替换的IO条目时,不考虑指示了顺序流的缓冲区512,而从多个缓冲区条目(514、516、518、519与520)中根据选择策略选出条目。例如,从上次更新时间距当前时间最久的多个缓冲区条目中选择计数值最小的条目;或者从计数值最小的多个缓冲区条目中选择上次更新时间距当前时间最久的条目。

接下来收到逻辑块地址为4的IO命令。逻辑块地址为4的IO命令命中了缓冲区512,将该IO命令的逻辑块地址”3“填充条目512的地址字段,并使条目512的计数值递增。顺序流标记SS1依然指向条目512,并将逻辑块地址为4的IO命令标记为属于顺序流。

在图5的例子中,输入流550中的IO命令均为写命令。并将识别为属于顺序流的多个写命令的待写入数据写入到存储介质上物理地址临近的存储位置,例如,写入到相同的存储块,或物理地址连续的存储页或存储块。

在另一个例子中,对输入流中的读命令与写命令分别进行顺序流检测。将构成顺序流的写命令写入到临近的存储位置,而针对构成顺序流的读命令,生成预读命令来从与当前读命令访问的地址相邻的位置读取数据。预读命令读取的数据可存储在存储介质的缓存中(例如,NAND闪存的缓冲寄存器)、存储设备的缓存或者主机的内存中。

图6展示了根据本申请又一实施例的顺序流检测过程中的缓冲区变化。输入流650是在输入流550之后的多个IO命令,按时间先后顺序分别访问逻辑块地址为5、47、6-10、53、19、67、54以及13的存储位置,作为举例,这些IO命令均为写命令,其中一个命令向逻辑块地址为6-10的存储位置写入数据,从而IO命令所写入或读出的数据具有不同的长度。

在收到逻辑块地址为5与47的两个IO命令后,缓冲区E展示了缓冲区的内容。访问逻辑块地址5的IO命令命中了缓冲区条目512(逻辑块地址5在缓冲区条目512的地址字段”3”(参看图5的缓冲区D)之后),将缓冲区条目512中更新为逻辑块地址5,并使相对应的计数值递增。响应于接下来收到访问逻辑块地址47的IO命令,在缓冲区的空闲条目520中记录逻辑块地址47,并使对应的计数值初始化。

缓冲区F展示了收到逻辑块地址为6-10与53-54的IO命令后的缓冲区内容。响应于收到逻辑块地址为6-10的IO命令,该IO命令命中了缓冲区条目512(逻辑块地址6-10的首地址”6“在缓冲区条目512的地址”5“之后),将该IO命令的最后逻辑块地址”10“填充到条目512,以及由于该IO命令占用了5个逻辑块地址,使条目512的计数值递增5。响应于收到逻辑块地址为53-54的IO命令,由于该IO命令命中了缓冲区条目514,将逻辑块地址”54“填入条目514,并使条目514的计数值递增到2。条目514的计数值满足了顺序流检测的指定条件(例如,计数值不小于2),则将逻辑块地址为54的IO命令识别为属于顺序流,并使顺序流标记SS2指向缓冲区条目514。

在另一个例子中,同一时刻仅标记一个顺序流。因而即使条目514的计数值满足了标记为顺序流的条件(例如,不小于2),由于已经存在了顺序流SS1,因而不将命中条目514的IO命令标记为顺序流。若条目514被后续多条IO命令命中,使得条目514的计数值超过了条目512的计数值(例如,成为多个条目中计数值最大的条目),可将命中条目514的IO命令标记为属于顺序流。

缓冲区G展示了收到逻辑块地址为19与67的IO命令后的缓冲区内容。响应于收到逻辑块地址为19的IO命令,该IO命令未命中任何缓冲区条目。选择缓冲区条目之一用于容纳逻辑块地址为19的IO命令。由于条目512与条目514被指示为属于顺序流,尽量不用条目512与条目514来容纳未命中任何条目的IO命令。在条目516-520中,优选地从计数值较小的条目516-520中选择一个来容纳新IO命令。例如,选择更新时间较早的条目516来容纳逻辑块地址为19的IO命令,并初始化计数值。响应于收到逻辑块地址为67的IO命令,该IO命令未命中任何缓冲区条目。选择计数值较小(在图6的缓冲区G中为0),且更新时间较早的条目518来容纳逻辑块地址为67的IO命令,并初始化计数值。

缓冲区H展示了收到逻辑块地址为54与13的IO命令后的缓冲区内容。响应于收到逻辑块地址为54的IO命令,该IO命令命中条目514(将接收的IO命令的逻辑块地址与条目中的地址相同,也视作命中),并使条目514的计数值递增。作为另一个例子,在条目中记录起始地址与结束地址(或起始地址与长度),若接收到的IO命令的逻辑块地址与条目中记录的地址存在交叠,也视为命中。

而响应于收到逻辑块地址为13的IO命令,该IO命令未命中任何一个条目,选择条目519来容纳逻辑块地址为13的IO命令。

在进一步的例子中,还计数缓冲区条目未命中的次数。例如在收到逻辑块地址为13的IO命令后,缓冲区条目累计已经有9次未命中,达到了阈值,则将缓冲区中所有条目的计数值递减。如图6中的缓冲区H所示,条目512的计数值被递减为8,而条目514的计数值被递减为2,其他条目的计数值已经为最小值,保持不变。

在进一步的例子中,将未被标识为属于顺序流的IO命令标识为随机流,从而可将所有标识为随机流的IO命令以相同或不同方式处理。

图7是根据本申请实施例的顺序流检测方法的流程图。根据本申请的实施例,在存储设备中实施顺序流检测。存储设备从主机或其他存储设备接收IO命令(710)。IO命令中包括逻辑块地址,指示了要访问的数据的存储位置。IO命令可以是读命令、写命令或其他类型的命令。IO命令要访问的数据可具有不同的长度,相应地,IO命令的逻辑地址可以是一个范围。下面以写命令为例,描述顺序流检测的方法。

参看图4,在诸如存储器的缓冲区中缓存了多个条目,每个条目包括逻辑块地址与相应的计数值。响应于接收到IO命令,检查IO命令的逻辑块地址是否命中了被缓冲的条目(720)。作为举例,参看图5,当前缓冲区的内容由缓冲区B所示。接收到逻辑块地址为3的IO命令。缓冲区B中,条目512的地址为“2”,逻辑块地址为3的IO命令命中了条目512,则将IO命令的逻辑块地址“3”替换被命中的条目512的地址字段,并使相应的计数值递增(730)。接下来,判断计数值是否满足阈值(740)。作为举例,将计数值的阈值定义为“3”,条目512的当前计数值满足(例如,不小于)阈值,则将该逻辑块地址为3的IO命令标记为属于顺序流(750)。

在进一步的例子中,接收到访问逻辑块地址为70的IO命令(710)。逻辑块地址为70的IO命令没有命中任何条目中的被缓存的地址,那么,选择条目之一用于容纳该IO命令。参看图5的缓冲区D,选择条目519容纳该逻辑块地址为70的IO命令,并将条目519的计数值初始化。

在一个例子中,在任意时刻,最多存在一个顺序流。即使有多个条目的计数值满足阈值,也只将一个条目标记为属于顺序流,例如将计数值最大的条目对应的IO命令标记为属于顺序流。在又一个例子中,同时可以存在m个顺序流(m>1),将计数值满足阈值的m个条目对应的IO命令标记为属于顺序流。为顺序流提供标记以区分顺序流,例如顺序流SS1与顺序流SS2。顺序流有生命周期,在生命周期内,一般为命中同一个条目的IO命令分配相同的顺序流标记。

可将多种地址之间的关系视为命中,例如,IO命令的地址在数值上紧邻条目中的地址,IO命令的地址可由条目中的地址递增得到,IO命令的地址与条目中的地址相同或者IO命令的地址与条目中的地址的距离低于阈值。再者,IO命令中指示地址范围,而IO命令的地址范围的起始地址在数值上紧邻条目中的地址,可由条目中的地址递增得到,或者包含了条目中的地址。在依然另一个例子中,条目中记录地址范围,而IO命令的地址范围紧邻条目中的地址范围的下界,或者IO命令的地址范围与条目中的地址范围相交叠。

在根据本申请的另一个实施例中,存储设备从主机接收的IO命令中包括标签。作为举例,标签指示了发出该IO命令的主机、虚拟机、应用或者明示了该IO命令属于顺序流SS1。从而存储设备中根据IO命令中的标签识别顺序流。响应于接收到IO命令,若IO命令中存在指示顺序流SS1的标签,用与顺序流SS1相关联的条目512(参见图5的缓冲区C)容纳该IO命令,包括以该IO命令的地址替换条目512中的地址,并使条目512的计数值递增。若IO命令中存在标签T3(未明示该IO命令属于顺序流),而在缓冲区中不存在与标签T3相关联的条目(参见图5的缓冲区D),选择一个条目(例如,条目514-520中的条目520)来容纳该IO命令,并与条目520相关联地记录标签T3。并且,当再次收到携带标签T3的IO命令时,即使该IO命令未命中条目520,也以条目520容纳该IO命令,从而与携带其他标签的IO命令相区分。在又一个例子中,若存储设备收到的IO命令中不存在标签,则不对其进行顺序流检测。在又一个例子中,主机与存储设备使用相同的顺序流标签,或者主机与存储设备可获知彼此所使用的顺序流标签。

图8是根据本申请又一实施例的顺序流检测方法的流程图。存储设备从主机或其他存储设备接收IO命令(810)。返回参看图6,当前缓冲区的内容由缓冲区E所示。接收到逻辑块地址为6-10的IO命令。缓冲区E中,条目512中记录的地址为“5”,该IO命令的地址命中条目512中记录的地址,且条目512已被标记为属于顺序流(820),因而将逻辑块地址为6-10的IO命令标记为属于顺序流(830)。可选地,更新条目512中记录的地址为“10”(图6的缓冲区F),以及更新条目512的计数值。在另一个例子中,接收到逻辑块地址为53-54的IO命令(810)(图6的缓冲区E)。该IO命令未命中被标记为属于顺序流的条目512(820),而条目514中记录的地址为“52”,该条目被命中(840)。以逻辑块地址为53-54的IO命令的地址替换被命中的条目514的地址,并将条目514的计数值递增(850)。接下来,判断被更新的条目514是否满足预设条件。作为举例,条目514的计数值为2,满足预设条件,将逻辑块地址为53-54的IO命令标记为属于顺序流(870)。在一个例子中,已经存在由SS1标识的顺序流(对应命中条目512的IO命令),分配新的顺序流标识SS2,将逻辑块地址为53-54的IO命令标记为属于顺序流SS2。

在依然另一个例子中,接收到逻辑块地址为19的IO命令(810)(图6的缓冲区F)。该IO命令未命中被标记为属于顺序流的条目512、514(820),也未命中缓冲区中的其他条目(840),从而将未命中计数值递增(880)。未命中计数值用于监视顺序流的生命周期,使得长期未出现新的IO命令的顺序流能被新的顺序流所取代。判断未命中计数值是否超过阈值(890)。作为举例,当前未命中计数值为7,不大于阈值(890),从而未命中计数值保持不变,而以该IO命令的逻辑块地址19替换缓存的条目之一(897),作为举例,由最近最少使用的条目519容纳该IO命令。

若未命令计数值超过阈值(890),作为举例,将缓冲区中的所有条目的计数值递减(895)(参看图6的缓冲区H),并重置未命中计数值。从而当顺序流的生命周期结束,接收到的IO命令不再属于任何顺序流时,缓冲区会频繁发生未命中,并使各条目的计数值递减到不满足条件,并使得条目512、514不再被标记为属于顺序流。

上面以写命令为例,描述了根据本申请实施例的顺序流检测方法。可采用类似的方法检测接收到的读命令中存在的顺序流。响应于出现顺序的读命令,可基于当前读命令的地址,预读后续地址的数据。预读的数据可被缓存,并低延迟地响应给后续的读命令。

进一步地,对接收到的IO命令,区分是IO命令的类型(读命令还是写命令),并针对不同类型的IO命令分别进行顺序流检测。以及为不同类型的命令,分别提供专用的缓冲区、顺序流标识符、未命中计数器等资源。

图9是根据本申请实施例的顺序流检测系统的框图。为实施顺序流检测,在多个条目中缓存近期所收到的IO命令的地址,以及在每个条目中还与IO命令的地址相关联地记录命中计数。根据本申请实施例的顺序流检测系统包括命中检测模块910与顺序流标记模块920。命中检测模块910用于响应于收到IO命令,若IO命令的地址命中了缓存的多个IO地址中被标记为属于顺序流的IO地址,以所缓存的被命中的地址替换IO命令的地址。顺序流标记模块920用于将IO命令标记为属于顺序流。

本申请实施例还提供一种包含程序代码的程序,当被载入CPU并在CPU中执行时,程序使CPU执行上面提供的根据本申请实施例的方法之一。

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

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

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

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

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

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

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

18页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种串行总线及通信装置

网友询问留言

已有0条留言

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

精彩留言,会给你点赞!