CN117032595B - 顺序流检测方法及存储设备 - Google Patents

顺序流检测方法及存储设备 Download PDF

Info

Publication number
CN117032595B
CN117032595B CN202311298343.6A CN202311298343A CN117032595B CN 117032595 B CN117032595 B CN 117032595B CN 202311298343 A CN202311298343 A CN 202311298343A CN 117032595 B CN117032595 B CN 117032595B
Authority
CN
China
Prior art keywords
command
sequential
flow
address
sequence
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.)
Active
Application number
CN202311298343.6A
Other languages
English (en)
Other versions
CN117032595A (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 CN202311298343.6A priority Critical patent/CN117032595B/zh
Publication of CN117032595A publication Critical patent/CN117032595A/zh
Application granted granted Critical
Publication of CN117032595B publication Critical patent/CN117032595B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0602Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
    • G06F3/061Improving I/O performance
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/901Indexing; Data structures therefor; Storage structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0628Interfaces specially adapted for storage systems making use of a particular technique
    • G06F3/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0656Data buffering arrangements
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F3/00Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
    • G06F3/06Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
    • G06F3/0601Interfaces specially adapted for storage systems
    • G06F3/0668Interfaces specially adapted for storage systems adopting a particular infrastructure
    • G06F3/0671In-line storage system
    • G06F3/0673Single storage device
    • G06F3/0679Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
    • G06F9/5022Mechanisms to release resources
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Human Computer Interaction (AREA)
  • Software Systems (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本公开涉及顺序流检测方法及存储设备。本公开实施例中,通过IO命令访问的地址确定IO命令所属的顺序流;进而基于IO命令访问的地址和IO命令所属的顺序流中相对于IO命令的上一命令的访问地址,可以确定IO命令是否打乱顺序流的顺序,并确定IO命令访问的地址与上一命令的访问地址之间的地址偏移量;从而当IO命令打乱顺序流的顺序,且地址偏移量小于或等于乱序场景预设的地址偏移量阈值,则确定IO命令命中顺序流,后续仍然对顺序流实施预读。不会因为IO命令打乱顺序流的顺序,而放弃对顺序流实施预读,降低乱序场景下由于放弃预读而导致的读延迟问题,增强顺序流预读操作的抗乱序干扰的能力,提升顺序读性能。

Description

顺序流检测方法及存储设备
技术领域
本公开实施例涉及存储技术领域,具体涉及一种顺序流检测方法、装置、存储设备及介质。
背景技术
随着硬盘技术的发展,固态硬盘(Solid State Disk,SSD)逐渐替代机械硬盘(Hard Disk Drive,HDD),以提升数据存储稳定性和数据读取效率。
主机(Host)访问SSD时,读IO(Input Output,输入输出)需要先将数据从NAND闪存读到缓存,再从缓存读到主机。如果是串行处理,会有较长的延迟。如果读IO满足顺序性,例如,多条IO命令所访问的地址是连续的或近似连续的,这些IO命令属于相同的顺序流,满足顺序性,则可以通过预测方式提前将IO命令所访问的数据从NAND闪存读到缓存,达到并行处理效果。
但是主机中可能存在访问存储设备的多个应用和/或操作系统(诸如,虚拟机),导致多个访问方的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命令在顺序场景下命中顺序流,则将顺序流的命中次数加1。
在一些实施例中,顺序流检测方法还包括:
若IO命令在乱序场景下未命中顺序流,则按照预设流程处理IO命令;
若IO命令在顺序场景下未命中顺序流,则确定IO命令是否命中顺序流对应的备选顺序流。
在一些实施例中,确定IO命令是否命中顺序流对应的备选顺序流之前,顺序流检测方法还包括:
动态划分多个顺序流分组,每个顺序流分组中包括一个首选顺序流和至少一个备选顺序流;IO命令所属的顺序流为顺序流分组中的首选顺序流。
在一些实施例中,动态划分多个顺序流分组,包括:
对来自主机的多个提交队列的标识分别进行哈希,得到多个哈希值;
针对每个哈希值,划分对应的顺序流分组,并将哈希值作为对应顺序流分组的索引;
或者,
将具有同一命名空间的标识或者同一提交队列的标识的顺序流划分到同一个顺序流分组中。
在一些实施例中,顺序流检测方法还包括:
响应于接收到IO命令,确定IO命令命中顺序流之后,对IO命令命中的顺序流进行预读;
将预读数据存储到预先分配的读缓存中。
在一些实施例中,读缓存中还存储有闪存通道控制器从NAND闪存中读取的数据。
在一些实施例中,顺序流检测方法还包括:
维护读缓存中每个缓存单元的索引与每个缓存单元缓存数据的逻辑地址之间的映射关系。
在一些实施例中,任一顺序流预先分配有对应的读缓存,不同顺序流对应的读缓存不同;
将预读数据存储到预先分配的读缓存中,包括:
将预读数据存储到IO命令命中的顺序流对应的读缓存中。
第二方面,本年公开实施例还提出一种顺序流检测装置,该装置包括:
第一确定单元,用于响应于接收到IO命令,基于IO命令访问的地址确定IO命令所属的顺序流;
第二确定单元,用于基于IO命令访问的地址以及IO命令所属的顺序流中相对于IO命令的上一命令的访问地址,确定IO命令是否打乱顺序流的顺序,并确定IO命令访问的地址与上一命令的访问地址之间的地址偏移量;
第三确定单元,用于第二确定单元确定IO命令打乱顺序流的顺序,且地址偏移量小于或等于乱序场景预设的地址偏移量阈值之后,确定IO命令命中顺序流。
第三方面,本公开实施例还提出一种电子设备,其中,包括存储器、处理器以及存储在所述存储器上的计算机程序,其中,所述处理器执行所述计算机程序以实现如第一方面任一实施例提供的顺序流检测方法的步骤。
第四方面,本公开实施例还提出一种存储设备,其中,控制部件与NVM芯片,所述控制部件执行如第一方面任一实施例提供的顺序流检测方法的步骤。
第五方面,本公开实施例还提出一种计算机可读存储介质,其中,所述计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行如第一方面任一实施例提供的顺序流检测方法的步骤。
第六方面,本公开实施例还提供一种计算机程序产品,其中,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中,计算机的至少一个处理器从所述计算机可读存储介质中读取并执行该计算机程序,使得所述计算机执行如第一方面任一实施例提供的顺序流检测方法的步骤。
可见,本公开的至少一个实施例中,通过IO命令访问的地址和多个顺序流各自对应的地址范围,可以确定IO命令所属的顺序流;进而基于IO命令访问的地址和IO命令所属的顺序流中相对于IO命令的上一命令的访问地址,可以确定IO命令是否打乱顺序流的顺序,并确定IO命令访问的地址与上一命令的访问地址之间的地址偏移量;从而当IO命令打乱顺序流的顺序,且地址偏移量小于或等于乱序场景预设的地址偏移量阈值,则确定IO命令命中顺序流。不会因为IO命令打乱顺序流的顺序,而放弃对顺序流实施预读,只要地址偏移量小于或等于乱序场景预设的地址偏移量阈值,则确定IO命令命中顺序流,后续仍然对顺序流实施预读,降低乱序场景下由于放弃预读而导致的读延迟问题,增强了顺序流预读操作的抗乱序干扰的能力,提升了顺序读性能。
附图说明
为了更清楚地说明本公开实施例的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为来自多个应用的IO命令被提供给存储设备的示意图;
图2为本公开实施例提供的一种存储设备的框图;
图3为本公开实施例提供的一种顺序流检测方法的流程示意图;
图4为本公开实施例提供的一种顺序流示意图;
图5为图4基础上的地址偏移量示意图;
图6为本公开实施例提供的一种确定顺序流分组的流程示意图;
图7为本公开实施例提供的一种资源分组的示意图
图8为本公开实施例提供的一种命令处理方法的流程示意图;
图9为本公开实施例提供的一种顺序流检测装置的示意图;
图10为本公开实施例提供的一种命令处理装置的示意图;
图11为本公开实施例提供的一种电子设备的示例性框图。
具体实施方式
下面结合本公开实施例中的附图,对本公开实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本公开一部分实施例,而不是全部的实施例。基于本公开中的实施例,本领域技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本公开保护的范围。
提供下面的具体实施方式以帮助读者获得对在此描述的方法、设备和/或系统的全面理解。然而,在理解本公开的公开之后,在此描述的方法、设备和/或系统的各种改变、修改和等同物将是清楚的。例如,在此描述的操作的顺序仅是示例,并且不受限于在此阐述的那些顺序,而是除了必须以特定的顺序发生的操作之外,可如在理解本公开的公开之后将是清楚地那样被改变。此外,为了增加的清楚和简明,可省略在理解本公开的公开之后已知的特征的描述。
在此描述的特征可以以不同的形式来实现,而不应被解释为受限于在此描述的示例。相反,已提供在此描述的示例,以仅示出在理解本公开的公开之后将是清楚的实现在此描述的方法、设备和/或系统的许多可行方式中的一些可行方式。
在此使用的术语仅用于描述各种示例,并将不用于限制公开。除非上下文另外清楚地指示,否则单数形式也意在包括复数形式。术语“包含”、“包括”和“具有”说明存在陈述的特征、数量、操作、构件、元件和/或它们的组合,但不排除存在或添加一个或多个其它特征、数量、操作、构件、元件和/或它们的组合。
除非另有定义,否则在此使用的所有术语(包括技术术语和科学术语)具有与基于本公开的理解和本公开所属领域的普通技术人员通常理解的含义相同的含义。除非在此明确地如此定义,否则术语(诸如在通用词典中定义的术语)应被解释为具有与它们在相关领域的上下文和本公开的公开中的含义一致的含义,并且不应被理想化或过于形式化地解释。在此关于示例或实施例的术语“可”的使用(例如,关于示例或实施例可包括或实现什么)表示存在包括或实现这样的特征的至少一个示例或实施例,而所有示例不限于此。
为了便于理解,对本文涉及的术语进行如下解释:
顺序流
访问连续或近似连续的地址空间的多条IO命令形成顺序流。顺序流有时也称为“流”。多流存储设备中,写入数据被分为多组(将每组称为“流”)。多个存储块或大块同时承载写数据,其中,大块由多个存储块构成。将各个流的数据分别写入不同的存储块或大块。在典型应用中,主机在IO命令上附加流标识符。流标识符是用于识别或区分流的数据结构。多流存储设备利用流标识符,将IO命令写入的数据放置在流标识符对应的存储块或大块。
流所关联的数据,在被产生时,可能已被标识了与流相关的信息。例如,标识产生数据的进程、主机、虚拟机、用户等信息,这些信息明示或暗示对应数据之间的关系。例如日志进程产生的日志数据,大概率是地址连续的。一些数据在被产生时,没有被标识与流相关的信息,而在处理与存储数据的过程中,主机、存储设备或中间件可能为数据附加与流相关的信息。
流包括与其相关联的计数器,用于记录流的命中次数和/或不命中次数,由相同或不同的计数器的值表达。
逻辑地址、闪存转换层与NVM芯片的物理地址
对于例如NVMe(Non-Volatile Memory express,非易失性存储器规范)协议的存储设备,存储设备提供逻辑地址(Logical Block Address,LBA)空间,主机使用逻辑地址访问存储设备提供的逻辑地址空间。通过提供诸如闪存转换层(Flash Translation Layer,FTL)的地址转换机制将逻辑地址映射为用于访问诸如闪存的NVM(Non-Volatile Memory,非易失性存储器)芯片的物理地址。也即,FTL维护逻辑地址(Logical Block Address,LBA)与物理地址(Physical Block Address,PBA)之间的地址映射关系。存储了逻辑地址与物理地址之间的地址映射关系的表结构称为FTL表。
命名空间
NVMe协议中还定义了命名空间(NameSpace,NS)。其他存储接口协议也提供了类似的概念。大小为n的命名空间是具有从0到n-1的逻辑地址的逻辑块集合。通过命名空间ID(NameSpace ID,NSID)能够唯一标识命名空间。命名空间可以在主机/NVMe控制器之间共享。主机通过单一NVMe控制器能够访问不同命名空间。不同主机也可通过多个NVMe控制器访问相同的命名空间。
平面(Plane)
目前的NVM芯片接口协议包括“Toggle”、“ONFI”等。诸如NAND闪存的NVM芯片的封装内可包括一个或多个管芯(Die)。典型地,逻辑单元(LUN,Logic UNit)对应于单一的管芯。逻辑单元可包括多个平面(Plane)。逻辑单元内的多个平面可以并行存取,而NAND闪存内的多个逻辑单元可以彼此独立地执行命令和报告状态。
IO命令与存储介质访问命令
主机发送给存储设备的命令称为IO命令,如读IO、主机端命令,都属于IO命令。存储设备的控制部件发送给NVM芯片的命令称为存储介质访问命令。存储介质访问命令遵循NVM芯片的接口协议(例如ONFI等)。多平面读(MultiPlane Read)属于存储介质访问命令。多平面读通过单条存储介质访问命令来同时读取LUN内的多个Plane的物理页上存储的数据。
缓存单元
在本公开中,在预读(Prefetched Read)数据时,分配或管理所使用的预读缓存的最小单位称为缓存单元。缓存单元被整体地分配与释放。
缓存单元的大小是例如单个Multiplane Read命令能从NVM芯片中读出的数据大小。但通过访问单一物理页的存储介质访问命令读出的数据也可用来填充缓存单元。
对缓存单元的填充也不限于基于识别的顺序流而产生的预读数据。基于其他策略而从NVM芯片得到的预读数据和/或读数据也可被用来填充缓存单元。
缓存单元的状态用来标记缓存单元的数据填充操作是否完成。缓存单元的状态包括例如“就绪”、“待填充”、“空闲”等。“就绪”代表数据填充操作已完成,“空闲”代表缓存单元尚未被分配来承载预读数据,“待填充”代表缓存单元已被分配来承载预读数据,但数据填充操作尚未完成。
缓存单元的逻辑地址属性代表了缓存单元承载的预读数据所关联的逻辑地址或逻辑地址范围。处于“就绪”与“待填充”状态的缓存单元都具有逻辑地址属性。可以依据逻辑地址属性来识别缓存单元是否被命中。
资源
本公开中,用于顺序流检测与预读的资源包括顺序流上下文与分配给顺序流的缓存单元。顺序流上下文是记录顺序流的各属性的描述符(数据结构)。出于性能的考虑,存储设备内的资源总量是有限的,例如,最多维护4个顺序流。顺序流被所有组共享。
顺序流交织
图1示出了来自多个应用的IO命令被提供给存储设备的示意图。在主机中有多个应用,应用A产生访问连续地址的多条IO命令(例如,IO命令A1,A2,A3,……,An),这些IO命令形成顺序流A。作为举例,应用A的这些IO命令来自对大尺寸视频文件的复制。应用B产生访问连续地址的多条IO命令(例如,IO命令B1,B2,B3,……,Bn),这些IO命令形成顺序流B。主机中的应用还产生了访问其他地址空间的多条IO命令(例如图1中的IO命令C,D,E,……,S,这些IO命令属于随机流C)。在操作系统、驱动程序、设备接口和/或总线上,多个IO命令被组织为与原来不同的顺序,并被存储设备所接收。作为举例,参看图1,存储设备以A1、B1、C与B2的顺序接收到IO命令,也即,顺序流A和顺序流B被交织。存储设备还提供预读机制,例如,将A1访问的地址简称为A1地址,将A2访问的地址简称为A2地址,响应于A1,存储设备预测主机随后将很可能继续访问与A1地址连续或近似连续的A2地址,从而存储设备先于接收主机访问A2地址的读命令而从A2地址中读取数据,并缓存从A2地址读出的数据,以响应主机随后可能发出的访问A2地址的读命令。
图2为本公开实施例提供的一种存储设备的框图。存储设备包括:控制部件、NVM芯片(由多个NVM存储器构成)和DRAM(Dynamic Random Access Memory,动态随机访问存储器)。其中,控制部件耦合到DRAM,DRAM的部分空间(假设包括缓存单元0,缓存单元1,……,缓存单元7)被用作缓存预读数据。缓存单元具有指定的大小,例如,缓存单元指定大小为512字节、1KB、2KB、4KB等。控制部件中包括但不限于:主机接口、顺序流检测模块、缓存管理模块、数据传输模块、控制模块和介质接口。
主机接口用于同主机交换命令与数据。例如,主机与存储设备通过NVMe/PCIe协议通信,主机接口处理PCIe协议数据包,提取出NVMe协议命令,并向主机返回NVMe协议命令的处理结果。主机接口耦合到顺序流检测模块。
顺序流检测模块,用于通过主机接口接收主机发送给存储设备的IO命令,或者可选地接收IO命令访问的逻辑地址/物理地址(简称为IO命令访问的地址);对IO命令(例如读命令)实施顺序流检测,预测下一个可能被访问的地址。在一些实施例中,顺序流检测模块依据接收的IO命令访问的地址识别出一个或多个顺序流,并向缓存管理模块指示所识别出的顺序流。顺序流检测模块耦合到缓存管理模块。
缓存管理模块,用于顺序流检测模块检测到IO命令属于顺序流后,对顺序流检测模块识别出的顺序流实施预读,也即,对顺序流上随后可能出现的读命令要读取的数据提前实施预读,并将预读数据存储到缓存单元中。缓存管理模块,还用于为预读数据分配缓存单元。在一些实施例中,缓存管理模块,还用于维护缓存描述符表(或缓存描述符池),在缓存描述符表中记录被预读的逻辑地址/物理地址以及存储了预读数据的缓存单元的索引。其中,缓存描述符表记录了多个缓存描述符,每个缓存描述符对应一个缓存单元,缓存描述符的一个或多个记录了对应的缓存单元在DRAM中的地址、缓存单元的状态和/或缓存单元中有效数据的位置。在一些实施例中,可以由不同于缓存管理模块的其他缓存管理模块或者顺序流检测模块管理对预读数据的缓存。在一些实施例中,缓存管理模块,用于管理缓存的大小、判断IO命令是否命中缓存(也即,IO命令访问的地址命中缓存描述符中记录的被预读的逻辑地址/物理地址)、缓存替换策略、存储块的读取和写入、缓存释放、清空等操作。在一些实施例中,缓存管理模块,用于利用一个或多个缓存单元来服务所接收的IO命令,以提升IO命令被存储设备处理的性能的确定性。在一些实施例中,缓存管理模块耦合到控制模块,用于将接收的IO命令的部分(例如,未命中缓存单元的读命令)转交给控制模块处理,而不使用缓存单元来服务这些IO命令。在一些实施例中,缓存管理模块包括FTL单元,用于将IO命令的逻辑地址转换为物理地址。可选地,存储设备向主机暴露物理地址空间,诸如遵循开放通道(Open Channel,OC)SSD协议的物理地址空间。从而在IO命令中指示要访问的物理地址。从而缓存管理模块无须使用FTL单元进行从逻辑地址到物理地址的转换。
数据传输模块,用于将缓存管理模块预读的数据从缓存单元传输到主机。在一些实施例中,数据传输单元根据主机传输的数据大小,采用不同传输策略,如传输较小的数据大小,可以先聚合传输数据再传输,也可以采用非对齐的传输方式。对于读命令,缓存管理模块识别读命令是否命中缓存单元,若命中,则缓存管理模块指示数据传输模块从缓存单元获取数据发送给主机。若未命中,则数据传输模块从NVM芯片获取读命令访问的数据发送给主机。
控制模块,用于处理顺序流检测模块,缓存管理模块,数据传输模块三者的调度策略,减少IO命令的处理延迟。
本公开实施例提供了一种顺序流检测方法、命令处理方法、装置、存储设备或介质,通过IO命令访问的地址和多个顺序流各自对应的地址范围,可以确定IO命令所属的顺序流;进而基于IO命令访问的地址和IO命令所属的顺序流中相对于IO命令的上一命令的访问地址,可以确定IO命令是否打乱顺序流的顺序,并确定IO命令访问的地址与上一命令的访问地址之间的地址偏移量;从而当IO命令打乱顺序流的顺序,且地址偏移量小于或等于乱序场景预设的地址偏移量阈值,则确定IO命令命中顺序流。不会因为IO命令打乱顺序流的顺序,而放弃对顺序流实施预读,只要地址偏移量小于或等于乱序场景预设的地址偏移量阈值,则确定IO命令命中顺序流,后续仍然对顺序流实施预读,降低乱序场景下由于放弃预读而导致的读延迟问题,增强了顺序流预读操作的抗乱序干扰的能力,提升了顺序读性能。
图3为本公开实施例提供的一种顺序流检测方法的流程示意图,该顺序流检测方法的执行主体为电子设备,电子设备包括但不限于存储设备(例如固态硬盘、闪存设备等)、智能手机、掌上电脑、平板电脑、带显示屏的可穿戴设备、台式机、笔记本电脑、一体机、智能家居设备、服务器等,其中,服务器可以是独立的服务器,也可以是多个服务器的集群,可以包括搭建在本地的服务器和架设在云端的服务器。
如图3所示,该顺序流检测方法可以包括但不限于步骤301至步骤303:
在步骤301中,响应于接收到IO命令,基于IO命令访问的地址确定IO命令所属的顺序流。
本实施例中,顺序流可以理解为访问连续或近似连续的地址空间的多条IO命令所形成的流。顺序流的最大数量由存储设备内的资源总量决定,例如,存储设备最多维护4个顺序流。每个顺序流各自对应有连续或近似连续的地址范围(也即地址空间),例如,顺序流用于读取视频文件,那么顺序流对应的地址范围为存储视频文件所占用的地址范围。
本实施例中,当接收到IO命令,需要先判断IO命令是否属于某个顺序流。需要说明的是,判断IO命令属于某个顺序流,只是表明IO命令访问的地址属于某个顺序流对应的地址范围,不代表IO命令一定命中这个顺序流,命中顺序流可以理解为IO命令与这个顺序流相匹配,可以对顺序流实施预读。IO命令是否命中这个顺序流,需要通过步骤302和步骤303来确定。
在一些实施例中,步骤301中“基于IO命令访问的地址确定IO命令所属的顺序流”的一种实施方式为:确定IO命令访问的地址所属的地址范围;将地址范围对应的顺序流确定为IO命令所属的顺序流。本实施例中,通过地址匹配的方式,可以确定IO命令所属的顺序流。
在步骤302中,基于IO命令访问的地址以及IO命令所属的顺序流中相对于IO命令的上一命令的访问地址,确定IO命令是否打乱顺序流的顺序,并确定IO命令访问的地址与上一命令的访问地址之间的地址偏移量。
本实施例中,由于顺序流是由访问连续或近似连续的地址空间的多条IO命令所形成,因此随着时间推移,连续地址空间中的地址会被依次访问,所以IO命令所属的顺序流中相对于IO命令的上一命令的访问地址可以理解为顺序流中已访问的连续地址空间中的最新访问地址,也可以理解为构成顺序流的多条命令中,与IO命令访问的地址最接近的命令访问的地址。
考虑到主机中可能存在访问存储设备的多个应用和/或操作系统(诸如,虚拟机),导致多个访问方的IO命令被交织,进而使得原本对连续地址的访问变得不连续,也即,顺序流中出现了乱序,会影响数据预读准确性,读延迟也会增加。因此,为了增强顺序流预读操作的抗乱序干扰的能力,本实施例中,确定IO命令所属的顺序流后,基于IO命令访问的地址以及IO命令所属的顺序流中相对于IO命令的上一命令的访问地址,确定IO命令是否打乱顺序流的顺序。例如,若顺序流访问的连续地址范围为L1、L2、L3和L4,顺序流中相对于IO命令的上一命令的访问地址为L3,下一访问地址应当为L4,但是IO命令访问的地址是L2,那么可以确定IO命令打乱顺序流的顺序。
本实施例中,除了确定IO命令是否打乱顺序流的顺序,还可以确定IO命令访问的地址与相对于IO命令的上一命令的访问地址之间的地址偏移量,这两个确定步骤可以并行执行,不区分先后顺序。确定的地址偏移量作为步骤303中确定IO命令是否命中顺序流的依据。
在步骤303中,若IO命令打乱顺序流的顺序,且地址偏移量小于或等于乱序场景预设的地址偏移量阈值,则确定IO命令命中顺序流。
本实施例中,考虑到IO命令打乱顺序流的场景下,也即乱序场景下,如果地址偏移量较小,则后续的IO命令有较大概率命中顺序流,可以对顺序流实施预读,由于对顺序流实施预读的前提是IO命令命中了顺序流,因此,虽然IO命令打乱顺序流的顺序,但是在地址偏移量小于或等于乱序场景预设的地址偏移量阈值时,仍然确定IO命令命中了顺序流,可以对顺序流实施预读。
可见,本实施例中,不会因为IO命令打乱顺序流的顺序,而放弃对顺序流实施预读,只要地址偏移量小于或等于乱序场景预设的地址偏移量阈值,则确定IO命令命中顺序流,后续仍然对顺序流实施预读,降低乱序场景下由于放弃预读而导致的读延迟问题,增强了顺序流预读操作的抗乱序干扰的能力,提升了顺序读性能。
在一些实施例中,步骤302中“基于IO命令访问的地址以及IO命令所属的顺序流中相对于IO命令的上一命令的访问地址,确定IO命令是否打乱顺序流的顺序”的一种实施方式为:
若由上一命令的访问地址指向IO命令访问的地址的方向与顺序流的方向相反,则确定IO命令打乱顺序流的顺序;其中顺序流的方向为顺序流所包含的命令地址递增或递减的方向。
若由上一命令的访问地址指向IO命令访问的地址的方向与顺序流的方向相同,则确定IO命令未打乱顺序流的顺序。
例如,图4为本公开实施例提供的一种顺序流示意图,在图4中,箭头方向表示顺序流的方向。依据接收命令的顺序,将多个命令记为:IO命令1、IO命令2、IO命令3和IO命令4。图4中,命令沿顺序流的方向的长度可以理解为命令访问的连续地址范围。若IO命令1、IO命令2和IO命令3为命中顺序流的命令,则IO命令3访问的连续地址范围是已访问的最新地址范围。响应于接收到IO命令4,由于IO命令4访问的连续地址范围的起始位置在IO命令3访问的连续地址范围的起始位置之前,因此,IO命令3访问的连续地址范围的起始位置指向IO命令4访问的连续地址范围的起始位置的方向如图4所示,与顺序流的方向相反,所以确定IO命令4打乱顺序流的顺序。
在一些实施例中,若步骤302中确定IO命令未打乱顺序流的顺序,且IO命令访问的地址与上一命令的访问地址之间的地址偏移量小于或等于顺序场景预设的地址偏移量阈值,则确定IO命令命中顺序流。
例如,图5为图4基础上的地址偏移量示意图,在图5中,若接收的命令为IO命令2,则IO命令1访问的地址范围的结束位置为顺序流中上一命令的访问地址,IO命令2访问的地址范围的起始位置在上一命令的访问地址之后,因此,上一命令的访问地址指向IO命令2访问的起始位置的方向与顺序流的方向相同,则确定IO命令2未打乱顺序流的顺序。若IO命令2与IO命令1之间的地址偏移量(记为h1)小于或等于顺序场景预设的地址偏移量阈值H,则确定IO命令2命中顺序流。同理,IO命令3也未打乱顺序流的顺序,且IO命令3与IO命令2之间的地址偏移量(记为h2)小于或等于顺序场景预设的地址偏移量阈值H,则确定IO命令3命中顺序流。其中,顺序场景预设的地址偏移量阈值H例如为256KiB,本领域技术人员可根据实际情况设置H的值,本实施例不限定H的具体取值。
另外,在图5中,若接收的命令为IO命令4,由于IO命令4打乱顺序流的顺序,且IO命令4与IO命令3之间的地址偏移量(记为r)小于或等于乱序场景预设的地址偏移量阈值R,因此确定IO命令4命中顺序流。其中,乱序场景预设的地址偏移量阈值R例如为64KiB,本领域技术人员可根据实际情况设置R的值,本实施例不限定R的具体取值。在一些实施例中,H>R。
在一些实施例中,若IO命令在乱序场景下命中顺序流,则维持顺序流的命中次数不变;若IO命令在顺序场景下命中顺序流,则将顺序流的命中次数加1。
本实施例中,顺序流的命中次数为顺序流的一种属性,记录在顺序流上下文中,表明顺序流在其生命周期内,沿着顺序流的方向命中该顺序流的IO命令的个数。可见,对于IO命令在乱序场景下命中顺序流,由于IO命令打乱顺序流的顺序,因此顺序流的命中次数不会增加,而确定IO命令在乱序场景下命中顺序流,仅表明后续可以对顺序流实施预读,不因IO命令乱序而放弃预读,增强了预读操作的抗乱序干扰的能力,提升了顺序读性能。
在一些实施例中,若IO命令在乱序场景下未命中顺序流,则按照预设流程处理IO命令;若IO命令在顺序场景下未命中顺序流,则确定IO命令是否命中顺序流对应的备选顺序流。
其中,预设流程例如为:基于IO命令访问的逻辑地址查询FTL表,得到逻辑地址映射的物理地址,若IO命令为读命令,则通过FCC(Flash Channel Controller,闪存通道控制器)从NAND闪存中读取该物理地址对应的数据,并将读取的数据反馈给主机;若IO命令为写命令,则将写命令指示的待写入数据写入该物理地址。
本实施例中,将不同顺序流分组,处于同一分组的多个顺序流中只有一个首选顺序流,其余顺序流则为备选顺序流。每当接收到IO命令,首先确定IO命令是否命中首选顺序流,若IO命令在顺序场景下未命中顺序流,再确定IO命令是否命中备选顺序流。这样,避免遗漏应当命中的备选顺序流,进而避免因为遗漏备选顺序流而放弃预读导致的读延迟问题,增强了顺序读性能。
在一些实施例中,动态划分多个顺序流分组,每个顺序流分组中包括一个首选顺序流和至少一个备选顺序流。步骤301中提及的“IO命令所属的顺序流”为顺序流分组中的首选顺序流。本实施例中,只需要对组内的备选顺序流进行匹配(即确定IO命令是否命中备选顺序流),提升匹配效率,缩短匹配时间。
在一些实施例中,为了区分多个顺序流分组,可以通过不同方式为不同顺序流分组分配或确定不同的分组标识,例如以下方式一和方式二:
方式一:对来自主机的多个提交队列的标识分别进行哈希,得到多个哈希值;针对每个所述哈希值,划分对应的顺序流分组,并将哈希值作为对应顺序流分组的索引。
其中,提交队列(Submission Queue,SQ)是用于主机向SSD提交IO命令的数据结构,每个提交队列项包含一个IO命令的相关信息,相关信息包括但不限于:逻辑地址(Logical Block Address,LBA)、读写类型、数据长度等。主机的顺序流一般是发送给同一个提交队列。
为了避免分组过多,本实施例对主机的多个提交队列的标识(SQID)分别进行哈希,得到多个哈希值;进行将哈希值作为顺序流分组的索引。
例如,图6为本公开实施例提供的一种确定顺序流分组的流程示意图。在图6中,共有x组顺序流分组,每组顺序流分组中包括两个备选顺序流。当接收到新的IO命令,基于前述各实施例提供的顺序流检测方法确定IO命令是否命中顺序流,若IO命令在顺序场景下未命中顺序流,则对IO命令所属的提交队列的标识(SQID)进行哈希,得到哈希值,例如,SQID的哈希值的生成方式为:选择一个哈希函数,例如SHA-256(Secure Hash Algorithm 256位);使用选择的哈希函数对SQID进行哈希运算,生成一个哈希值。若哈希值等于a组顺序流分组对应的哈希值,则查询a组,以确定IO命令是否命中备选顺序流a.1或者备选顺序流a.2,确定是否命中的方式采用前述实施例中提及的方式,不再赘述;同理,若哈希值等于b组备选顺序流对应的哈希值,则查询b组,以确定IO命令是否命中备选顺序流b.1或者备选顺序流b.2;若哈希值等于c组备选顺序流对应的哈希值,则查询c组,以确定IO命令是否命中备选顺序流c.1或者备选顺序流c.2。可见,通过计算哈希值,可以将每个IO命令映射到特定的顺序流分组。
方式二:将具有同一命名空间的标识(NSID)或者同一提交队列的标识(SQID)的顺序流划分到同一个顺序流分组中。
需要说明的是,由于存储设备内的资源总量是有限的,出于性能的考虑,维护的顺序流数量存在上限,如果顺序流数量达到上限,但备选顺序流的命中次数大于现有顺序流的最小命中次数,则交换备选顺序流和现有顺序流(即备选顺序流升级成首选顺序流,现有顺序流降级成备选顺序流),清除对应的旧缓存,启动新缓存预读。如果顺序流数量没有达到上限,但备选顺序流的命中次数大于最小命中次数(如64,可调),则该备选顺序流升级成首选顺序流,启动新缓存预读。需要说明的是,本公开中的备选顺序流越多,确定IO命令命中的顺序流的效果越好,但同时对存储设备的性能影响也会越大,因此本领域技术人员可以根据实际需要配置顺序流数量的上限值,该上限值小于或等于存储设备允许的顺序流数量的最大值。
在一些实施例中,图7为本公开实施例提供的一种资源分组的示意图,根据传输大小和线程数量,需要预先分配比较大的读缓存。分配和释放读缓存的时机和位置:确定分配读缓存的时间长度和位置(SRAM/DRAM)。
资源分组的目的是对使用的资源分组,从而可以对每个资源分组相对于其他资源分组独立的释放资源,实现性能隔离。不同的资源分组对应不同的用户/命名空间(NameSpace,NS)/SQID等。
如图7所示,资源包括顺序流上下文与分配给某个顺序流的缓存单元。顺序流上下文是记录顺序流的各属性的描述符(数据结构)。出于性能的考虑,SSD内的资源总量是有限的,例如,最多维护4个顺序流。分组后可以顺序流可以动态使用,所有组共享4个顺序流。
在每个资源分组内,识别资源释放的条件。一个组内释放资源时,不导致其他组的资源被同时释放。例如,在一个组内释放读缓存,不会导致其他组的读缓存释放。没有触发资源释放的组内顺序流可以进行后续的处理而不被影响。
如图7所示,通过资源分组还可以更好的筛选顺序流。组内的备选顺序流形成后,和当前顺序流竞争,如果能竞争过当前顺序流,备选顺序流成为顺序流可以参与共享。
在以上各实施例的基础上,图8为本公开实施例提供的一种命令处理方法的流程示意图,该命令处理方法的执行主体为电子设备,电子设备包括但不限于存储设备(例如固态硬盘、闪存设备等)、智能手机、掌上电脑、平板电脑、带显示屏的可穿戴设备、台式机、笔记本电脑、一体机、智能家居设备、服务器等,其中,服务器可以是独立的服务器,也可以是多个服务器的集群,可以包括搭建在本地的服务器和架设在云端的服务器。
如图8所示,该命令处理方法可以包括但不限于步骤801和步骤802:
在步骤801中,响应于接收到IO命令,确定IO命令命中顺序流之后,对IO命令命中的顺序流进行预读。
本实施例中,采用前述公开的顺序流检测方法的各实施例来确定IO命令是否命令顺序流,不再赘述。
在步骤802中,将预读数据存储到预先分配的读缓存中。
本实施例中,任一顺序流预先分配有对应的读缓存,不同顺序流对应的读缓存不同。因此,将预读数据存储到IO命令命中的顺序流对应的读缓存中。
本实施例中,由于前述公开的顺序流检测方法的各实施例能够在乱序场景下确定IO命令命中的顺序流,因此不会因为IO命令打乱顺序流的顺序,而放弃对顺序流实施预读,降低乱序场景下由于放弃预读而导致的读延迟问题,增强了预读操作的抗乱序干扰的能力,提升了顺序读性能。
在一些实施例中,读缓存中还存储有闪存通道控制器(Flash ChannelController,FCC)从NAND闪存中读取的数据。
本实施例中,顺序流检测与预读可以分开,并且使得预读缓存更可以一般化为读缓存。读缓存被填充的数据有2种来源,其一为顺序流检测后发起的预读得到的数据,也即步骤802;其二为来自FCC从NAND闪存中读取的数据。需要说明的是,SSD中的固件(例如控制部件)发送给FCC的读请求(不是主机的读命令)可能是4K大小,而FCC可以为了处理4K读请求而向NAND闪存发出多平面读(MultiPlane Read)命令来读出96KB数据,那么多读出来的数据可以临时放在读缓存里。(这里因为FCC读NAND闪存,4K和96K的时间差不多,所以可以用单个MultiPlane Read把96K都读出来,然后设法加以利用)。响应于FCC读出了数据,将读出数据填充读缓存。这里并不是FCC读出的所有数据都进入读缓存,而是提供填充读缓存的机制。在一些实施例中,针对读缓存,维护读缓存中每个缓存单元的索引与每个缓存单元缓存数据的逻辑地址(LBA)之间的映射关系,简称缓存单元索引与LBA之间的映射关系。
在一些实施例中,图3所示的顺序流检测方法中,步骤301所述“基于IO命令访问的地址以及多个顺序流各自对应的地址范围,确定IO命令所属的顺序流”之前,命令处理方法还包括如下步骤(1)至(3):
(1)响应于接收到IO命令,基于IO命令访问的地址,查找映射关系。
其中,映射关系为缓存单元索引与逻辑地址(LBA)之间的映射关系。本实施例中,接收到IO命令后,可以确定IO命令访问的地址(例如逻辑地址LBA),进而在缓存单元索引与LBA之间的映射关系中查找IO命令访问的地址,以便确认映射关系中是否记录有IO命令访问的地址。
(2)若查找到IO命令访问的地址,则确定IO命令访问的地址映射的缓存单元的索引。
本实施例中,若在缓存单元索引与LBA之间的映射关系中查找到IO命令访问的地址,则基于映射关系可以确定IO命令访问的地址映射的缓存单元索引,也即,可以确定IO命令要访问的数据存储在缓存单元索引对应的缓存单元中,说明IO命令要访问的数据记录在读缓存中,也即,IO命令命中读缓存。若未查找到IO命令访问的地址,则说明IO命令要访问的数据并未记录在读缓存中,也即,IO命令未命中读缓存。
(3)基于缓存单元的索引,从读缓存中获取数据返回给主机,并执行基于IO命令访问的地址以及多个顺序流各自对应的地址范围,确定IO命令所属的顺序流。
本实施例中,若IO命令命中读缓存,则基于IO命令访问的地址映射的缓存单元索引,从读缓存中获取缓存单元索引对应的缓存单元中存储的数据作为IO命令的响应返回给主机。将数据返回给主机后再执行图3中的步骤301及其后续步骤,以完成顺序流检测。
可见,本实施例中,先确定IO命令是否命中读缓存,再确定IO命令是否命中顺序流,能够优先处理IO命令,例如,若IO命令为读命令,则能够优先将IO命令要读取的数据返回给主机,降低读延迟。
在一些实施例中,若从映射关系中未查找到IO命令访问的地址,则从NAND闪存中获取IO命令访问的地址存储的数据返回给主机,并执行图3中的步骤301及其后续步骤,以完成顺序流检测。
IO命令的处理流程的实施方式一为:
获取主机发送的IO命令,例如读命令,则先确定是否命中读缓存,若IO命令访问的地址(例如逻辑地址LBA)匹配读缓存中缓存单元索引与缓存数据的逻辑地址(LBA)之间的映射关系,则确定读命令命中读缓存,否则确定读命令未命中读缓存。若IO命令命中读缓存,则从读缓存获取数据,也即,获取IO命令访问的地址映射的缓存单元中缓存的数据。在获取数据后,将获取的数据作为IO命令的响应返回给主机,并执行顺序流检测流程,顺序流检测流程的具体细节参考如图3所示的实施例及其相关实施例,不再赘述。
本实施例中,若IO命令未命中读缓存,则从NAND闪存中获取IO命令访问的地址存储的数据作为IO命令的响应返回给主机,并执行顺序流检测流程,顺序流检测流程的具体细节参考如图3所示的实施例及其相关实施例,不再赘述。
在一些实施例中,图3所示的顺序流检测方法中,步骤303所述“确定IO命令命中顺序流”之后,命令处理方法还包括如下步骤(1)至(3):
(1)基于IO命令访问的地址,查找映射关系。
其中,映射关系为缓存单元索引与逻辑地址(LBA)之间的映射关系。本实施例中,确定IO命令命中顺序流后,可以在缓存单元索引与LBA之间的映射关系中查找IO命令访问的地址,以便确认映射关系中是否记录有IO命令访问的地址。
(2)若查找到IO命令访问的地址,则确定IO命令访问的地址映射的缓存单元的索引。
本实施例中,若在缓存单元索引与LBA之间的映射关系中查找到IO命令访问的地址,则基于映射关系可以确定IO命令访问的地址映射的缓存单元索引,也即,可以确定IO命令要访问的数据存储在缓存单元索引对应的缓存单元中,说明IO命令要访问的数据记录在读缓存中,也即,IO命令命中读缓存。若未查找到IO命令访问的地址,则说明IO命令要访问的数据并未记录在读缓存中,也即,IO命令未命中读缓存。
(3)基于缓存单元的索引,从读缓存中获取数据返回给主机。
本实施例中,若IO命令命中读缓存,则基于IO命令访问的地址映射的缓存单元索引,从读缓存中获取缓存单元索引对应的缓存单元中存储的数据作为IO命令的响应返回给主机。
在一些实施例中,若IO命令命中顺序流,且从映射关系中未查找到IO命令访问的地址(也即IO命令未命中读缓存),由于读缓存中存储顺序流的预读数据,因此,说明IO命令要读取的数据还未存储到读缓存中,则等待填充读缓存(也即等待顺序流的预读数据存储到读缓存中),并更新映射关系;从更新后的映射关系中查找IO命令访问的地址映射的缓存单元的索引;基于查找到的缓存单元的索引,从读缓存中获取数据返回给主机。
IO命令的处理流程的实施方式二为:
获取主机发送的IO命令,例如读命令,则先进行顺序流检测,确定IO命令是否命中顺序流,其中,顺序流检测流程的具体细节参考如图3所示的实施例及其相关实施例,不再赘述。若IO命令命中顺序流,则确定IO命令是否命中读缓存,若IO命令访问的地址(例如逻辑地址LBA)匹配读缓存中缓存单元索引与缓存数据的逻辑地址(LBA)之间的映射关系,则确定读命令命中读缓存,否则确定IO命令未命中读缓存。若IO命令命中读缓存,则从读缓存获取数据,也即,获取IO命令访问的地址映射的缓存单元中缓存的数据。在获取数据后,将获取的数据作为IO命令的响应返回给主机。若IO命令未命中读缓存,说明IO命令要读取的数据还未存储到读缓存中,则等待填充读缓存(也即等待顺序流的预读数据存储到读缓存中),更新映射关系,从更新后的映射关系中查找IO命令访问的地址映射的缓存单元的索引;基于查找到的缓存单元的索引,从读缓存中获取数据返回给主机。
本实施例中,若IO命令未命中顺序流,则从NAND闪存中获取IO命令访问的地址存储的数据作为IO命令的响应返回给主机。
可见,本实施例中,先确定IO命令是否命中顺序流,再确定IO命令是否命中读缓存,相比图8所示的流程,能够简化IO命令处理流程,业务逻辑更简单,进而提升IO命令的处理效率。
需要说明的是,对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员能够理解,本公开实施例并不受所描述的动作顺序的限制,因为依据本公开实施例,某些步骤可以采用其他顺序或者同时进行。另外,本领域技术人员能够理解,说明书中所描述的实施例均属于可选实施例。
图9为本公开实施例提供的一种顺序流检测装置的示意图,本公开实施例提供的顺序流检测装置可以执行顺序流检测方法各实施例提供的处理流程,如图9所示,顺序流检测装置包括处理器,其中,所述处理器用于执行存储在存储器中的以下程序模块包括但不限于:第一确定单元901、第二确定单元902和第三确定单元903。各单元功能说明如下:
第一确定单元901,用于响应于接收到IO命令,基于IO命令访问的地址确定IO命令所属的顺序流;
第二确定单元902,用于基于IO命令访问的地址以及IO命令所属的顺序流中相对于IO命令的上一命令的访问地址,确定IO命令是否打乱顺序流的顺序,并确定IO命令访问的地址与上一命令的访问地址之间的地址偏移量;
第三确定单元903,用于第二确定单元902确定IO命令打乱顺序流的顺序,且地址偏移量小于或等于乱序场景预设的地址偏移量阈值之后,确定IO命令命中顺序流。
在一些实施例中,第一确定单元901,用于确定IO命令访问的地址所属的地址范围;将地址范围对应的顺序流确定为IO命令所属的顺序流。
在一些实施例中,第二确定单元902基于IO命令访问的地址以及IO命令所属的顺序流中相对于IO命令的上一命令的访问地址,确定IO命令是否打乱顺序流的顺序,包括:
若由上一命令的访问地址指向IO命令访问的地址的方向与顺序流的方向相反,则确定IO命令打乱顺序流的顺序。
在一些实施例中,第三确定单元903,还用于第二确定单元902确定IO命令未打乱顺序流的顺序,且地址偏移量小于或等于顺序场景预设的地址偏移量阈值之后,确定IO命令命中顺序流。
在一些实施例中,顺序流检测装置还包括管理单元,用于:
若IO命令在乱序场景下命中顺序流,则维持顺序流的命中次数不变;
若IO命令在顺序场景下命中顺序流,则将顺序流的命中次数加1。
在一些实施例中,顺序流检测装置还包括处理单元,用于:
若IO命令在乱序场景下未命中顺序流,则按照预设流程处理IO命令;
若IO命令在顺序场景下未命中顺序流,则确定IO命令是否命中顺序流对应的备选顺序流。
在一些实施例中,顺序流检测装置还包括分组单元,用于处理单元确定IO命令是否命中顺序流对应的备选顺序流之前,动态划分多个顺序流分组,每个顺序流分组中包括一个首选顺序流和至少一个备选顺序流;IO命令所属的顺序流为顺序流分组中的首选顺序流。
在一些实施例中,分组单元动态划分多个顺序流分组,包括:
对来自主机的多个提交队列的标识分别进行哈希,得到多个哈希值;针对每个哈希值,划分对应的顺序流分组,并将哈希值作为对应顺序流分组的索引;
或者,
将具有同一命名空间的标识或者同一提交队列的标识的顺序流划分到同一个顺序流分组中。
以上顺序流检测装置各实施例的细节参见顺序流检测方法各实施例,不再赘述。
图10为本公开实施例提供的一种命令处理装置的示意图,本公开实施例提供的命令处理装置可以执行命令处理方法各实施例提供的处理流程。在一些实施例中,命令处理装置可以实现为图9所示的顺序流检测装置中的一部分。如图10所示,命令处理装置包括处理器,其中,所述处理器用于执行存储在存储器中的以下程序模块包括但不限于:预读单元1001和存储单元1002。各单元功能说明如下:
预读单元1001,用于响应于接收到IO命令,在图9所示的第三确定单元903确定IO命令命中顺序流之后,对IO命令命中的顺序流进行预读;
存储单元1002,用于将预读数据存储到预先分配的读缓存中。
在一些实施例中,读缓存中还存储有闪存通道控制器从NAND闪存中读取的数据。
在一些实施例中,命令处理装置还包括维护单元,用于:
维护读缓存中每个缓存单元的索引与每个缓存单元缓存数据的逻辑地址之间的映射关系。
在一些实施例中,命令处理装置还包括第一处理单元,用于:
响应于接收到IO命令,基于IO命令访问的地址,查找映射关系;
若查找到IO命令访问的地址,则确定IO命令访问的地址映射的缓存单元的索引;
基于缓存单元的索引,从读缓存中获取数据返回给主机,并执行基于IO命令访问的地址以及多个顺序流各自对应的地址范围,确定IO命令所属的顺序流。
在一些实施例中,第一处理单元,还用于:
若从映射关系中未查找到IO命令访问的地址,则从NAND闪存中获取IO命令访问的地址存储的数据返回给主机,并执行基于IO命令访问的地址以及多个顺序流各自对应的地址范围,确定IO命令所属的顺序流。
在一些实施例中,命令处理装置还包括第二处理单元,用于预读单元1001确定IO命令命中顺序流之后,基于IO命令访问的地址,查找映射关系;若查找到IO命令访问的地址,则确定IO命令访问的地址映射的缓存单元的索引;基于缓存单元的索引,从读缓存中获取数据返回给主机。
在一些实施例中,第二处理单元,还用于若从映射关系中未查找到IO命令访问的地址,则等待填充读缓存,并更新映射关系;从更新后的映射关系中查找IO命令访问的地址映射的缓存单元的索引;基于查找到的缓存单元的索引,从读缓存中获取数据返回给主机。
在一些实施例中,第二处理单元,还用于预读单元1001确定IO命令未命中任一顺序流之后,从NAND闪存中获取IO命令访问的地址存储的数据返回给主机。
在一些实施例中,任一顺序流预先分配有对应的读缓存,不同顺序流对应的读缓存不同;存储单元1002,用于将预读数据存储到IO命令命中的顺序流对应的读缓存中。
以上命令处理装置各实施例的细节参见命令处理方法各实施例,不再赘述。
在本公开实施例中,还提供一种存储设备(或固态存储设备等),包括:控制部件与NVM(Non-Volatile Memory,非易失性存储器)芯片,控制部件执行顺序流检测方法或者命令处理方法。
图11是本公开实施例提供的一种电子设备的示例性框图。如图11所示,该电子设备包括:存储器1101、处理器1102以及存储在所述存储器1101上的计算机程序。可以理解,本实施例中的存储器1101可以是易失性存储器或非易失性存储器,或可包括易失性和非易失性存储器两者。
在一些实施方式中,存储器1101存储了如下的元素,可执行模块或者数据结构,或者他们的子集,或者他们的扩展集:操作系统和应用程序。
其中,操作系统,包含各种系统程序,例如框架层、核心库层、驱动层等,用于实现各种基础任务以及处理基于硬件的任务。应用程序,包含各种应用程序,例如媒体播放器(Media Player)、浏览器(Browser)等,用于实现各种应用任务。实现本公开实施例提供的顺序流检测方法或者命令处理方法的程序可以包含在应用程序中。
在本公开实施例中,至少一个处理器1102通过调用至少一个存储器1101存储的程序或指令,具体的,可以是应用程序中存储的程序或指令,至少一个处理器1102用于执行本公开实施例提供的顺序流检测方法或者命令处理方法各实施例的步骤。
本公开实施例提供的顺序流检测方法或者命令处理方法可以应用于处理器1102中,或者由处理器1102实现。处理器1102可以是一种集成电路芯片,具有信号的处理能力。在实现过程中,上述方法的各步骤可以通过处理器1102中的硬件的集成逻辑电路或者软件形式的指令完成。上述的处理器1102可以是通用处理器、数字信号处理器(Digital SignalProcessor,DSP)、专用集成电路(Application Specific Integrated Circuit,ASIC)、现场可编程门阵列(Field Programmable Gate Array,FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。通用处理器可以是微处理器或者该处理器也可以是任何常规的处理器等。
本公开实施例提供的顺序流检测方法或者命令处理方法的步骤可以直接体现为硬件译码处理器执行完成,或者用译码处理器中的硬件及软件模块组合执行完成。软件模块可以位于随机存储器,闪存、只读存储器,可编程只读存储器或者电可擦写可编程存储器、寄存器等本领域成熟的存储介质中。该存储介质位于存储器1101,处理器1102读取存储器1101中的信息,结合其硬件完成方法的步骤。
本公开实施例还提出一种计算机可读存储介质,所述计算机可读存储介质存储程序或指令,所述程序或指令使计算机执行如顺序流检测方法或者命令处理方法各实施例的步骤,为避免重复描述,在此不再赘述。其中,计算机可读存储介质可以为非暂态计算机可读存储介质。
本公开实施例还提出一种计算机程序产品,该计算机程序产品包括计算机程序,该计算机程序存储在计算机可读存储介质中,计算机可读存储介质可以为非暂态计算机可读存储介质。计算机的至少一个处理器从计算机可读存储介质中读取并执行该计算机程序,使得计算机执行如顺序流检测方法或者命令处理方法各实施例的步骤,为避免重复描述,在此不再赘述。
以上所描述的装置或设备实施例仅仅是示意性的,其中作为分离部件说明的单元模块可以是或者也可以不是物理上分开的,作为模块单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络模块单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用直至得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分的方法。
最后应说明的是:以上实施例仅用以说明本公开的技术方案,而非对其限制;在本公开的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上的本公开的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本公开进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本公开各实施例技术方案的范围。

Claims (9)

1.一种顺序流检测方法,所述方法包括:
响应于接收到IO命令,基于所述IO命令访问的地址确定所述IO命令所属的顺序流;
基于所述IO命令访问的地址以及所述IO命令所属的顺序流中相对于所述IO命令的上一命令的访问地址,确定所述IO命令是否打乱所述顺序流的顺序,并确定所述IO命令访问的地址与所述上一命令的访问地址之间的地址偏移量;
若所述IO命令打乱所述顺序流的顺序,且所述地址偏移量小于或等于乱序场景预设的地址偏移量阈值,则确定所述IO命令命中所述顺序流;
若所述IO命令未打乱所述顺序流的顺序,且所述地址偏移量小于或等于顺序场景预设的地址偏移量阈值,则确定所述IO命令命中所述顺序流;
若所述IO命令在乱序场景下命中所述顺序流,则维持所述顺序流的命中次数不变;
若所述IO命令在顺序场景下命中所述顺序流,则将所述顺序流的命中次数加1;
若所述IO命令在乱序场景下未命中所述顺序流,则按照预设流程处理所述IO命令;
若所述IO命令在顺序场景下未命中所述顺序流,则确定所述IO命令是否命中所述顺序流对应的备选顺序流。
2.根据权利要求1所述的方法,其中,所述基于所述IO命令访问的地址确定所述IO命令所属的顺序流,包括:
确定所述IO命令访问的地址所属的地址范围;
将所述地址范围对应的顺序流确定为所述IO命令所属的顺序流。
3.根据权利要求1所述的方法,其中,所述基于所述IO命令访问的地址以及所述IO命令所属的顺序流中相对于所述IO命令的上一命令的访问地址,确定所述IO命令是否打乱所述顺序流的顺序,包括:
若由所述上一命令的访问地址指向所述IO命令访问的地址的方向与所述顺序流的方向相反,则确定所述IO命令打乱所述顺序流的顺序,其中,所述顺序流的方向为顺序流所包含的命令地址递增或递减的方向。
4.根据权利要求1所述的方法,其中,所述确定所述IO命令是否命中所述顺序流对应的备选顺序流之前,所述方法还包括:
动态划分多个顺序流分组,每个所述顺序流分组中包括一个首选顺序流和至少一个备选顺序流;所述IO命令所属的顺序流为所述顺序流分组中的首选顺序流。
5.根据权利要求4所述的方法,其中,所述动态划分多个顺序流分组,包括:
对来自主机的多个提交队列的标识分别进行哈希,得到多个哈希值;
针对每个所述哈希值,划分对应的顺序流分组,并将所述哈希值作为对应顺序流分组的索引;
或者,
将具有同一命名空间的标识或者同一提交队列的标识的顺序流划分到同一个顺序流分组中。
6.根据权利要求1所述的方法,其中,所述方法还包括:
响应于接收到IO命令,确定所述IO命令命中顺序流之后,对所述IO命令命中的顺序流进行预读;
将预读数据存储到预先分配的读缓存中;其中所述读缓存中还存储有闪存通道控制器从NAND闪存中读取的数据。
7.根据权利要求6所述的方法,其中,所述方法还包括:
维护所述读缓存中每个缓存单元的索引与每个缓存单元缓存数据的逻辑地址之间的映射关系。
8.根据权利要求6所述的方法,其中,任一所述顺序流预先分配有对应的读缓存,不同顺序流对应的读缓存不同;
所述将预读数据存储到预先分配的读缓存中,包括:
将预读数据存储到所述IO命令命中的顺序流对应的读缓存中。
9.一种存储设备,其特征在于,包括:控制部件与NVM芯片,所述控制部件执行根据权利要求1至8中任一项所述顺序流检测方法的步骤。
CN202311298343.6A 2023-10-09 2023-10-09 顺序流检测方法及存储设备 Active CN117032595B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311298343.6A CN117032595B (zh) 2023-10-09 2023-10-09 顺序流检测方法及存储设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311298343.6A CN117032595B (zh) 2023-10-09 2023-10-09 顺序流检测方法及存储设备

Publications (2)

Publication Number Publication Date
CN117032595A CN117032595A (zh) 2023-11-10
CN117032595B true CN117032595B (zh) 2024-01-23

Family

ID=88634090

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311298343.6A Active CN117032595B (zh) 2023-10-09 2023-10-09 顺序流检测方法及存储设备

Country Status (1)

Country Link
CN (1) CN117032595B (zh)

Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104425039A (zh) * 2013-09-10 2015-03-18 Lsi公司 用于改进的固态介质顺序读的动态映射预取
CN106339326A (zh) * 2016-08-26 2017-01-18 记忆科技(深圳)有限公司 一种提升固态硬盘顺序读性能的方法
CN107291631A (zh) * 2017-05-24 2017-10-24 记忆科技(深圳)有限公司 一种提高固态硬盘中多流读出时性能的方法
WO2017223004A1 (en) * 2016-06-23 2017-12-28 Microsoft Technology Licensing, Llc Load-store queue for block-based processor
CN108027765A (zh) * 2016-03-17 2018-05-11 华为技术有限公司 一种内存访问方法以及计算机系统
CN108628759A (zh) * 2017-12-29 2018-10-09 贵阳忆芯科技有限公司 乱序执行nvm命令的方法与装置
CN110389709A (zh) * 2018-04-19 2019-10-29 北京忆恒创源科技有限公司 顺序流检测与数据预读
CN111625482A (zh) * 2016-03-23 2020-09-04 北京忆恒创源科技有限公司 顺序流检测方法与装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7721023B2 (en) * 2005-11-15 2010-05-18 International Business Machines Corporation I/O address translation method for specifying a relaxed ordering for I/O accesses

Patent Citations (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104425039A (zh) * 2013-09-10 2015-03-18 Lsi公司 用于改进的固态介质顺序读的动态映射预取
CN108027765A (zh) * 2016-03-17 2018-05-11 华为技术有限公司 一种内存访问方法以及计算机系统
CN111625482A (zh) * 2016-03-23 2020-09-04 北京忆恒创源科技有限公司 顺序流检测方法与装置
WO2017223004A1 (en) * 2016-06-23 2017-12-28 Microsoft Technology Licensing, Llc Load-store queue for block-based processor
CN106339326A (zh) * 2016-08-26 2017-01-18 记忆科技(深圳)有限公司 一种提升固态硬盘顺序读性能的方法
CN107291631A (zh) * 2017-05-24 2017-10-24 记忆科技(深圳)有限公司 一种提高固态硬盘中多流读出时性能的方法
CN108628759A (zh) * 2017-12-29 2018-10-09 贵阳忆芯科技有限公司 乱序执行nvm命令的方法与装置
CN110389709A (zh) * 2018-04-19 2019-10-29 北京忆恒创源科技有限公司 顺序流检测与数据预读

Also Published As

Publication number Publication date
CN117032595A (zh) 2023-11-10

Similar Documents

Publication Publication Date Title
US8255593B2 (en) Direct memory access with striding across memory
US10761775B2 (en) System and method for NVMe inter command association in SSD storage using a bridge device
US11487675B1 (en) Collecting statistics for persistent memory
CN107066397B (zh) 用于管理数据迁移的方法、系统和存储介质
US9785545B2 (en) Method and apparatus for providing dual memory access to non-volatile memory
US9858197B2 (en) Cache management apparatus of hybrid cache-based memory system and the hybrid cache-based memory system
CN107797759B (zh) 访问缓存信息的方法、装置与驱动器
CN107797760B (zh) 一种访问缓存信息的方法、装置与固态驱动器
KR20150028610A (ko) 데이터 저장 장치 및 그것의 데이터 처리 방법
WO2021218038A1 (zh) 一种存储系统、内存管理方法和管理节点
US8656119B2 (en) Storage system, control program and storage system control method
Lee et al. OSSD: A case for object-based solid state drives
US11188256B2 (en) Enhanced read-ahead capability for storage devices
WO2021062982A1 (zh) 管理hmb内存的方法、装置、计算机设备及存储介质
US7702875B1 (en) System and method for memory compression
US20240020014A1 (en) Method for Writing Data to Solid-State Drive
CN117032595B (zh) 顺序流检测方法及存储设备
US20230120184A1 (en) Systems, methods, and devices for ordered access of data in block modified memory
CN111290975A (zh) 使用统一缓存处理读命令与预读命令的方法及其存储设备
CN111290974A (zh) 用于存储设备的缓存淘汰方法与存储设备
WO2017031637A1 (zh) 一种内存访问方法、装置和系统
JP7170093B2 (ja) 記憶デバイスのための改良された先読み能力
US11449428B2 (en) Enhanced read-ahead capability for storage devices
CN114610654A (zh) 一种固态存储设备以及向其写入数据的方法
CN113254363A (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
GR01 Patent grant
GR01 Patent grant