CN107797760B - 一种访问缓存信息的方法、装置与固态驱动器 - Google Patents

一种访问缓存信息的方法、装置与固态驱动器 Download PDF

Info

Publication number
CN107797760B
CN107797760B CN201610819411.2A CN201610819411A CN107797760B CN 107797760 B CN107797760 B CN 107797760B CN 201610819411 A CN201610819411 A CN 201610819411A CN 107797760 B CN107797760 B CN 107797760B
Authority
CN
China
Prior art keywords
command
write command
write
read
commands
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
CN201610819411.2A
Other languages
English (en)
Other versions
CN107797760A (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
Publication of CN107797760A publication Critical patent/CN107797760A/zh
Application granted granted Critical
Publication of CN107797760B publication Critical patent/CN107797760B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • G06F3/0611Improving I/O performance in relation to response time
    • 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/0638Organizing or formatting or addressing of data
    • 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/068Hybrid storage device
    • 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

Landscapes

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

Abstract

基于缓存优化写命令处理的方法、装置与驱动器。所公开的方法,包括:获取第一写命令;根据所述第一写命令的逻辑地址来判断所述第一写命令是否关联于第一IO命令集合中的第二写命令,其中所述第一IO命令集合对应于所述缓存的第一缓存行;合并所述第一写命令与所述第二写命令的关联关系。本发明公开的技术方案有利于降低IO命令处理延迟,从而提升IO命令处理的速度和效率。

Description

一种访问缓存信息的方法、装置与固态驱动器
技术领域
本发明涉及存储领域,更具体地,涉及在固态硬盘中使用前端缓存降低IO 命令处理延迟的技术。
背景技术
图1为存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA(Serial Advanced Technology Attachment,串行高级技术附件)、SCSI(SmallComputer System Interface,小型计算机系统接口)、SAS(Serial Attached SCSI,串行连接SCSI)、IDE(Integrated Drive Electronics,集成驱动器电子)、USB(Universal SerialBus,通用串行总线)、 PCIE(Peripheral Component Interconnect Express,PCIe,高速外围组件互联)、NVMe(NVM Express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102包括接口103、控制部件104、一个或多个NVM(非易失存储器,Non-Volatile Memory)芯片 105以及DRAM(Dynamic Random Access Memory,动态随机访问存储器)110。 NAND闪存、相变存储器、FeRAM、MRAM等是常见的NVM。接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SAS、以太网、光纤通道等方式与主机交换数据。控制部件104用于控制在接口103、NVM芯片105以及DRAM 110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。可通过软件、硬件、固件或其组合的多种方式实现控制部件104。控制部件104可以是FPGA(Field-programmable gate array,现场可编程门阵列)、ASIC(Application Specific Integrated Circuit,应用专用集成电路) 或者其组合的形式。
控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理IO命令。控制部件104还耦合到DRAM 110,并可访问DRAM 110的数据。在DRAM可存储FTL表和/或缓存的IO命令的数据。控制部件104包括闪存接口控制器(或称为闪存通道控制器)。闪存接口控制器耦合到NVM芯片105,并以遵循NVM芯片105的接口协议的方式向NVM芯片105 发出命令,以操作NVM芯片105,并接收从NVM芯片105输出的命令执行结果。 NVM芯片105的接口协议包括“Toggle”、“ONFI”等公知的接口协议或标准。
存储器目标(Target)是NAND闪存封装内的共享芯片使能(CE,Chip Ena ble)信号的一个或多个逻辑单元(Logic Unit)。每个逻辑单元具有逻辑单元号(LUN,Logic UnitNumber)。NAND闪存封装内可包括一个或多个管芯(Die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(Plane)。逻辑单元内的多个平面可以并行存取,而NAND闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。在可从http://www.micron.com/~/media/Docu ments/Products/Other%20Documents/ONFI3_0Gold.ashx获得的“Open NAND F lash Interface Specification(Revision 3.0)”中,提供了关于目标(tar get)、逻辑单元、LUN、平面(Plane)的含义,其为现有技术的一部分。
存储介质上通常按页来存储和读取数据。而按块来擦除数据。块包含多个页。存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节。物理页也可以具有其他的尺寸。
在固态存储设备中,利用FTL(Flash Translation Layer,闪存转换层) 来维护从逻辑地址到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在现有技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。
存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是固态存储设备中的重要元数据。通常FTL表的数据项记录了固态存储设备中以数据页为单位的地址映射关系。
FTL表包括多个FTL表条目(或称表项)。在一个实施例中,每个FTL表条目中记录了一个逻辑页地址与一个物理页的对应关系。在另一个例子中,每个 FTL表条目中记录了连续的多个逻辑页地址与连续的多个物理页的对应关系。在又一个实施例中,每个FTL表条目中记录了逻辑块地址与物理块地址的对应关系。在依然又一个实施例中,FTL表中记录逻辑块地址与物理块地址的映射关系,和/或逻辑页地址与物理页地址的映射关系。
在NVMe标准中定义了易失性写高速缓存(Volatile Write Cache)。
然而,NVMe标准中未定义易失性写高速缓存的实现方式。在固态存储设备中,也有进一步降低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命令集合中存在与所述第三写命令具有关联关系的第四写命令,从所述第一缓存行获取数据作为对所述第四写命令的响应;以及在所述第四写命令处理完成后,将第三写命令与第四写命令从第一IO命令集合中移除。
根据本发明的第五方面,提供一种访问缓存信息的装置,包括:IO命令获取模块,用于获取第一写命令;缓存关联检测模块,用于根据所述第一写命令的逻辑地址来判断所述第一写命令是否关联于第一IO命令集合中的第二写命令,其中所述第一IO命令集合对应于所述缓存的第一缓存行;合并模块,用于合并所述第一写命令与所述第二写命令。
根据本发明第六方面,提供一种固态驱动器,包括:一个或者多个处理器;存储器;存储在所述存储器中的程序,当被所述一个或者多个处理器执行时,所述程序使所述固态驱动器执行如上面所述的方法。
根据本发明第七方面,提供一种计算机可读存储介质,所述计算机可读存储介质存储有程序,当所述程序被一个设备执行时,使得所述设备进行上面所述的方法。
附图说明
图1示出了现有技术的存储设备的框图;
图2展示了根据本发明实施例的存储设备的控制部件的框图;
图3示出了根据本发明实施例的前端缓存的组成的示意图;
图4示出了根据本发明实施例的访问缓存信息的方法的流程图;
图5示出了根据本发明又一实施例的前端缓存的组成的示意图;
图6示出了根据本发明实施例的IO命令集合的示意图;
图7示出了根据本发明实施例的IO命令集合与缓存行之间的对应关系;
图8A是根据本发明实施例向IO命令集合添加命令的流程图;
图8B是根据本发明实施例从IO命令集合取出命令进行处理的流程图;
图9示出了根据本发明一个实施例方式的IO命令之间的关联关系的示意图;
图10是根据本发明又一实施例向IO命令集合添加命令的流程图;
图11示出了根据本发明又一实施例的IO命令之间的关联关系的示意图;以及
图12是根据本发明另一实施例向IO命令集合添加命令的流程图。
具体实施方式
下面结合附图对本发明的具体实施方式进行详细描述。需要理解的是,本公开中“第一”、“第二”仅用于指示对象,而并不用于限制数量和/或顺序。
图2展示了根据本发明实施例的存储设备的控制部件的框图。控制部件104 包括主机接口210、前端处理模块220、闪存管理模块230与后端处理模块240。
主机接口210用于同主机交换命令与数据。在一个例子中,主机与存储设备通过NVMe/PCIe协议通信,主机接口210处理PCIe协议数据包,提取出NVMe 协议命令,并向主机返回NVMe协议命令的处理结果。FTL模块230将闪存访问命令的逻辑地址转换为物理地址,并对闪存实施管理,提供磨损均衡、垃圾回收等服务。后端处理模块240依据物理地址访问一个或多个NVM芯片。将在访问FTL之前的处理称为前端处理,而将在访问FTL之后的处理称为后端处理。前端控制部件104还耦合到外部存储器(例如,RAM)260。存储器260的部分空间被用作前端缓存(前端缓存265),前端处理模块220可访问存储器260来使用前端缓存。可选地,在控制部件104内提供前端缓存模块225用作前端缓存。
图3示出了根据本发明实施例的前端缓存的组成的示意图。如图3所示,前端缓存300包括多个缓存行(参看图3,缓存行310、缓存行320、缓存行330 与缓存行340)。每个缓存行包括元数据与数据。缓存行的元数据,记录了缓存行对应的逻辑地址。前端处理模块220通过比较IO命令的逻辑地址与元数据中记录的逻辑地址,确定前端缓存是否命中。缓存行的元数据还可记录缓存行的状态等信息。缓存行的数据部分存储IO命令所对应的数据,对于读命令,缓存行的数据部分记录从NVM芯片中取得的数据,而对于写命令,缓存行的数据部分记录主机发来的要写入NVM芯片的数据。因而,根据本发明实施例的前端缓存300不仅可用于支持NVMe协议中定义的加速写命令处理的易失性写高速缓存,还用作加速读操作的高速缓存。
图4示出了根据本发明实施例的访问缓存信息的方法的流程图。在根据本发明的实施例中,获取IO命令(410)。IO命令中携带了IO命令要访问的逻辑地址。根据获取的IO命令的逻辑地址判断IO命令是否命中了缓存(420)。例如,比较IO命令的逻辑地址与缓存的各个缓存行的元数据中记录的逻辑地址来判断是否命令。以及,若IO命令的逻辑地址命中了缓存,则从所命中的缓存行获取数据以响应该IO命令(430)。
需要理解的是,上文所述的术语“访问”,包括了对信息的读取、写入等基本操作以及其他任何与缓存中的信息发生作用的操作。这里所述的术语“信息”可以包括缓存行中存储的任何内容,包括元数据以及与该元数据对应的数据。显然,这里的信息也包括了逻辑地址,缓存行的状态等等。
本发明实施例中,“获取IO命令”,可以通过多种方式实施。例如,从主机中接收IO命令,例如接收读命令和/或写命令,也可以是接收控制部件104(参见图2)生成预取命令等。
在根据本发明的实施例中,“命中”表示包括在IO命令中的逻辑地址与缓存行中存储的逻辑地址相匹配,从而可以确定该IO命令命中该缓存行。
实施例A
作为举例,前端处理模块220(参看图2)将NVMe命令拆分成具有固定大小数据(例如,512字节、2KB或4KB)的IO命令,缓存行的数据部分可容纳1 条IO命令的数据。IO命令还指示逻辑地址。例如,1条NVMe命令指示向逻辑地址LBA 100-LBA 103的每个地址写入4KB数据。NVMe命令被拆成3条IO命令,其中1条IO命令指示向逻辑地址(LBA 100)写入4KB数据(4KB)。前端处理模块220从前端缓存300(参看图3)中分配缓存行320,向缓存行320的元数据部分填入逻辑地址(参看图3,LBA 100)或其部分,而将主机提供的要写入逻辑地址LBA100的4KB数据(参看图3,数据1)填入缓存行320的数据部分。可选地,在缓存行320的元数据部分,还标记缓存行320的状态,以指示缓存行320已被写入数据。类似地,前端处理模块220还从前端缓存300中分配缓存行330,用于记录向逻辑地址LBA 101写入4KB数据(参看图3,填入缓存行330的数据2),以及分配缓存行340,用于记录向逻辑地址LBA 102写入 4KB数据(图3,填入缓存行340的数据3)。
可选地,基于NVMe命令所对应的3条IO命令都被写入前端缓存300,还向主机发送消息指示该NVMe命令处理完成。前端缓存300的访问速度远高于NVM 芯片105,因而将NVMe命令拆分为IO命令并填入前端缓存的缓存行后即向主机发送消息指示该NVMe命令处理完成,将极大降低NVMe命令的处理延迟。
接下来,前端处理模块收到NVMe读命令,指示从逻辑地址LBA 98-LBA 101 读取数据。NVMe命令被拆成4条读IO命令,包括从逻辑地址LBA 98读取4KB 数据,从逻辑地址LBA99读取4KB数据,从逻辑地址LBA 100读取4KB数据,以及从逻辑地址LBA 101读取4KB数据。前端处理模块处理读IO命令时,检查读IO命令是否命中前端缓存。通过比较读IO命令要读取的LBA地址与前端缓存300中记录的逻辑地址来判断是否命中。例如,对于访问逻辑地址为LBA 98 与LBA 99的IO命令,前端缓存300中未记录这两条逻辑地址,因而这两条IO 命令未命中前端缓存。前端处理模块220将其这两条IO命令发送给FTL模块230 以获得物理地址并访问NVM芯片来获得要读取的数据。对于逻辑地址为LBA 100 与LBA 101的IO命令,前端缓存300的缓存行320与缓存行330的元数据部分记录了对应的LBA 100与LBA 101,因而这两条IO命令命中了前端缓存300。作为响应,前端处理模块220访问被命中的缓存行320与缓存行330,从缓存行 320与缓存行330获取被缓存的数据1与数据2,并用数据1与数据2作为对访问逻辑地址LBA 100与LBA 101的IO命令的响应。由于前端缓存300的访问速度远高于NVM芯片105,因而从命中的缓存行中获取数据作为对读IO命令的响应将极大降低IO命令的处理延迟。
进一步可选地,对于访问逻辑地址为LBA 98与LBA 99的IO命令,虽然在前端缓存300中未命令,而从NVM芯片105中读取数据,但是将从NVM芯片105 中读出的数据与逻辑地址为LBA 98与LBA 99相关联地填入前端缓存300,以便在下次读取逻辑地址为LBA 98与LBA99时,可从前端缓存300中读取数据。
实施例B
在实施例B中,前端处理模块220基于写IO命令与预取命令填充前端缓存。例如,响应于收到NVMe写命令,前端处理模块220将NVMe写命令拆成一个或多个写IO命令,并从前端缓存300中分配缓存行,在缓存行中记录写IO命令的逻辑地址与数据。可选地,若从前端缓存300中分配缓存行失败,则将写IO 命令发送给FTL模块230而不在前端缓存300中记录。
前端处理模块220还生成预取命令,根据预取命令从NVM芯片105中读取数据,并将读取的数据与对应的逻辑地址填充到前端缓存300中。前端处理模块220基于多种策略生成预取命令。例如,根据固态存储设备的工作状态生成预取命令,当固态存储设备上电时,生成对主机的操作系统镜像的预取命令
在另一个例子中,预测NVMe读命令的顺序性,例如响应于收到对逻辑地址 LBA98-LBA 101的NVMe读命令,而生成对逻辑地址LBA 102-LBA 105的预取命令。
图5示出了根据本发明实施例B的前端缓存的组成的示意图。参看图5,响应于收到向LBA 50写入数据0的NVMe写命令,前端缓存500的缓存行510被填充。响应于收到对逻辑地址LBA 98-LBA 101的NVMe读命令,前端处理模块220将NVMe读命令拆分成多个读IO命令。在读IO命令命中前端缓存500时,从前端缓存中获取读IO命令所需的数据,而在读IO命令未命中前端缓存500 时,将读IO命令发送给FTL模块530。无论读IO命令是否命中前端缓存500,均不填充前端缓存500。然而,前端处理模块220生成预取命令,从逻辑地址 LBA 102-LBA105预取数据,并将逻辑地址LBA 102到LBA 105与预取得到的对应数据(数据3、数据4、数据5与数据6)填入前端缓存500的缓存行520、缓存行530、缓存行540与缓存行550。在图5中示出了当前的前端缓存500。接下来,若收到访问逻辑地址LBA 50或LBA 102-105的读IO命令,前端缓存 500会命中,并从具有对应的逻辑地址的缓存行中获取数据作为对读IO命令的响应。
图6示出了根据本发明实施例的IO命令集合的示意图。命令集合包括多条 IO命令680。在图6所示的命令集合中包括对逻辑地址100进行读取的命令,即读LBA100。该命令集合还包括写LBA 104的IO命令(670)、写LBA 102的 IO命令(660)、读LBA 104-1的IO命令(650)、读LBA 104-2的IO命令(640)、预取LBA 104的IO命令(630)、读LBA 100-1的IO命令(620)、以及写LBA 100-2的IO命令(610)。写LBA 104表示对逻辑地址104进行写入。而读LBA104-1和读LBA 104-2分别表示对逻辑地址104的第一部分数据和第二部分数据进行读取。预取LBA 104表示对逻辑地址104执行预取操作。而写LBA 100-2 表示对逻辑地址100的第二部分进行写入。
每当接收到IO命令时,将该所接收到的IO命令添加到该IO命令集合中。 IO命令集合有多种组织方式。在图6的例子中,按先进先出的方式将所接收的 IO命令在IO命令集合中组织为队列。新收到的IO命令添加到IO命令集合的尾部(参看图6,写LBA 100-2的IO命令(610)位于IO命令集合的尾部),而从IO命令集合的头部(参看图6,读LBA 100的IO命令(680)位于IO命令集合的头部)取出命令进行处理。
IO命令集合同缓存的一个缓存行相关联。
实施例C
图7示出了根据本发明实施例C的IO命令集合与缓存行之间的关联关系。
如图7所示,前端缓存700包括多个缓存行:缓存行710、缓存行720、缓存行730与缓存行740。缓存行与逻辑地址采用直接相联的映射方式。每个缓存行对应预定多个逻辑地址,而一个逻辑地址的数据仅由与该逻辑地址对应的缓存行缓存。可选地,在另一个例子中缓存行与逻辑地址采用多路组相联的映射方式。
继续参看图7,为每个缓存行提供对应的IO命令集合。IO命令集合760对应缓存行710,IO命令集合762对应缓存行720,IO命令集合764对应缓存行 730以及IO命令集合766对应缓存行740。当收到IO命令时,依据依据IO命令的逻辑地址确定对应的缓存行,以及将IO命令填入与缓存行对应的IO命令集合。
例如,前端处理模块220(参看图2)生成多个IO命令,包括更新逻辑地址LBA 100的写命令、读LBA 100的读命令和读LBA 104的读命令,预取LBA 101 的预取命令、读LBA 101的第1部分(LBA 101-1)的读命令、读LBA 101的第2 部分(LBA 101-2)的读命令以及写LBA105的写命令。由于逻辑地址LBA 100与 LBA 104被映射到缓存行710,而逻辑地址LBA 101与LBA 105被映射到缓存行 720,因而访问逻辑地址LBA 100与LBA 104的IO命令被填入IO命令集合760,而访问逻辑地址LBA 101与LBA 105的IO命令被填入IO命令集合762。
前端处理模块220还负责对IO命令集合的处理。例如,响应于从IO命令集合760中取出更新逻辑地址LBA 100的写命令,在对应的缓存行710中填入逻辑地址LBA 100以及要写入的数据。可选地,还将写命令发送给FTL模块230 以及向主机发送指示写命令处理完成的消息。接下来,响应于从IO命令集合760 中取出读逻辑地址LBA 100的读命令,识别出缓存行510中存储了读命令的逻辑地址(LBA 100),即读命令命中了缓存行510,从缓存行510中取出数据作为对读命令的响应。接下来,响应于从IO命令集合560中取出读逻辑地址LBA104 的读命令,识别出缓存行510中未存储读命令的逻辑地址(LBA 104),即读命令未命中缓存行510。在此情况下,将读命令发送给FTL模块230以从访问NVM 芯片获取要读取的数据。
作为另一个例子,响应于从IO命令集合562中取出预取逻辑地址LBA 101 的预取命令,将预取命令发送给FTL模块,并将读取NVM芯片105的结果与逻辑地址LBA 101填入缓存行720。接下来,响应于从IO命令集合762中取出读逻辑地址LBA 101的第1部分(LBA 101-1)读命令,识别出缓存行720中存储了读命令的逻辑地址(LBA 101),即读命令命中了缓存行720,从缓存行720中取出数据作为对访问LBA 101-1的读命令的响应。接下来,响应于从IO命令集合762中取出读逻辑地址LBA 101的第2部分(LBA 101-2)读命令,识别出缓存行720中存储了读命令的逻辑地址(LBA 101),即读命令命中了缓存行720,从缓存行720中取出数据作为对访问LBA 101-2的读命令的响应。接下来,响应于从IO命令集合762中取出更新逻辑地址LBA 105的写命令,以该写命令更新缓存行720。以及可选地,还将写命令发送给FTL模块230以及向主机发送指示写命令处理完成的消息。
作为另一个例子,响应于从IO命令集合764中取出读逻辑地址LBA 102的读命令,将读命令发送给FTL模块230以从访问NVM芯片获取要读取的数据。接下来,响应于从IO命令集合764中取出更新逻辑地址LBA 102的第1部分(LBA 102-1)的写命令,还检查IO命令集合764中的下一待处理命令。由于该下一待处理命令为更新逻辑地址LBA 102的第2部分(LBA102-2)的写命令,将这两个写命令合并,在缓存行730中填入逻辑地址LBA 102,将IO命令集合764 中的这两个写命令的数据写入缓存行730,以及将这两个写命令合并为1条新的写命令,并转发给FTL模块,以向NVM芯片105写入数据。
图8A是根据本发明实施例向IO命令集合添加命令的流程图。在图8A的实施例中,获取要处理的第一IO命令(810),以及第一IO命令的逻辑地址,确定对应于第一IO命令的缓存行与IO命令集合。在根据本发明的实施例中,为每个缓存行提供一个IO命令集合。遍历IO命令集合,确定第一IO命令是否关联于IO命令集合的第二IO命令(820)。若IO命令集合中存在与第一IO命令具有关联关系的第二IO命令,在IO命令集合中标记第一IO命令与第二IO命令的关联关系(830)。若IO命令集合中不存在与第一IO命令具有关联关系的第二IO命令,则将第一IO命令添加到IO命令集合中(840),例如添加到IO命令集合的尾部。
图8B是根据本发明实施例从IO命令集合取出命令进行处理的流程图。在图8B的实施例中,为处理IO命令集合中的IO命令,从IO命令集合中获取第一IO命令并处理(850)。第一IO命令可以是从IO命令集合头部获取的最早被填入IO命令集合的IO命令。响应于第一IO命令被处理,检查IO命令集合中是否存在关联于第一IO命令的第二IO命令(860)。若IO命令集合中存在关联于第一IO命令的第二IO命令,则以同IO命令集合对应的缓存行的数据来响应第二IO命令(870)。被处理完的第二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 命令预取或更新从LBA 100开始的4KB空间,而在后的IO命令读取从LBA 100 开始的4KB空间中的任意1KB空间。在此情况下,这前后两个IO命令之间也具有关联关系。
图9示出了根据本发明实施例的IO命令之间的关联关系。参看图9,前端缓存900包括多个缓存行:缓存行910、缓存行920、缓存行930与缓存行940。缓存行中可以包括数据。
继续参看图9,将对应每个缓存行的IO命令添加到IO命令集合960。图9 中,IO命令集合960对应于缓存行910。一般而言,将新收到的对应缓存行910 的IO命令添加到IO命令集合960的尾部,而从IO命令集合960的头部取出IO 命令执行。集合960中,头部为预取逻辑地址LBA 100的预取命令,而尾部为读逻辑地址LBA 104的读命令,以及预取逻辑地址LBA100的预取命令的下一命令是读逻辑地址LBA 104的读命令。
如图9所示,响应于接收到新的读LBA 100的第1部分(读LBA 100-1)的读命令。依据该读命令的逻辑地址LBA100,确定该读命令对应于缓存行910,相应地遍历IO命令集合960,寻找该读命令(读LBA100-1)所依赖的IO命令。在IO命令集合960中,预取LBA 100的命令的执行将得到读LBA 100-1的读命令所需要的数据,因而该读命令依赖于预取LBA 100的预取命令,或者说该读命令(读LBA100-1)与预取LBA100命令存在关联关系。在集合960-2中,将读 LBA 100-1的读命令关联于预取LBA 100的预取命令,以标记读LBA 100-1的读命令依赖于或关联于预取LBA 100的预取命令,并且预取逻辑地址LBA 100的预取命令的下一命令依然是读逻辑地址LBA 104的读命令。接下来,收到新的读LBA 100的第2部分(LBA100-2)的读命令。通过遍历IO命令集合960,发现读LBA 100的第2部分(LBA 100-2)的读命令依赖于LBA 100的预取命令。在IO命令集合960-2中,标记读LBA 100-2的读命令也依赖于或关联于预取LBA 100的预取命令。此时,对应于缓存行910的IO命令集合的结构由IO命令集合 960-2展示。以及可选地,在将LBA100-2的读命令添加到IO命令集合960-2时,由于存在关联于预取LBA 100的预取命令的读LBA 100-1的读命令,在IO命令集合960-2中,记录读LBA 100-2的读命令关联于读LBA 100-1的读命令,以指示读LBA 100-2的读命令晚于读LBA100-1的读命令被添加到集合IO命令集合960-2中。
如果接收到的IO命令的逻辑地址与IO命令集合中的任何IO命令的逻辑地址均无对应关系,则认为该接收到的IO命令与IO命令集合中的任何IO命令均不关联,此时将该新接收到的IO命令添加到IO命令集合的尾部,从而在当前形成的IO命令集合中,该新的IO命令被最后执行。
例如,接下来,收到新的更新LBA 108的写命令。由于IO命令集合960-2 中不存在同更新LBA 108的写命令具有关联关系的IO命令,因而将更新LBA 108 的写命令插入IO命令集合960-2的尾部,得到IO命令集合960-4。
在根据本发明的实施例中,从与缓存行相对应的IO命令集合中取出IO命令并处理的过程可与向IO命令集合中加入新IO命令的过程同时进行。从IO命令集合的头部取出数据。以IO命令集合960-4为例,集合头部为预取LBA 100 的预取命令。处理预取命令,将预取的数据填入与IO命令集合960-4对应的缓存行910。接下来,由于存在依赖于预取LBA 100的预取命令的读LBA 100-1的读命令以及读LBA 100-2的读命令,以缓存行910中缓存的数据来响应读LBA 100-1的读命令以及读LBA 100-2的读命令,从而读LBA 100-1的读命令以及读 LBA 100-2的读命令在预取LBA 100的预取命令之后被优先的执行。
处理完依赖于预取LBA 100的预取命令的所有其他IO命令后,将预取LBA 100的预取命令以及依赖于该预取命令的其他IO命令从IO命令集合960-4中移除。接下来,读LBA104的读命令成为IO命令集合头部。处理IO命令集合头部的该读命令。由于读LBA 104的读命令未被任何IO命令所依赖,该读命令处理完成后,将其从集合960-4的头部移除,以便处理集合960-4的其他IO命令。接下来,写LBA 108的写命令成为IO命令集合960-4的头部。在处理该写命令的过程中,若收到新的读LBA 108的读命令,在集合660-4中标记新的读LBA108 的读命令关联于写LBA 108的写命令,并在该写命令处理完成后,从缓存行910 中获取数据来响应该新的读LBA 108的读命令。
在根据本发明的实施例中,每个IO命令集合均与特定的缓存行相对应,换言之,IO命令集合中的每个IO命令都关联于同该IO命令集合相对应的缓存行。
在根据本发明的进一步的实施例中,为进一步降低IO命令处理的延迟,处理IO命令集合中的写命令时,则响应于将写命令的数据写入缓存行,向主机指示写命令执行完成。尽管此时只是将数据写入到了缓存行中,而尚未将数据写入到NVM芯片中,但提前向主机发送写命令执行完成的消息,而不必等到数据被写入到NVM芯片中之后才向主机发送通知。这将有利于降低写命令执行的延迟。
在上面的实施例中,新接收的IO命令为读命令时,才可能与IO命令集合中的写命令或预取命令具有关联关系。因而若所接收的IO命令不是读命令,可选地,将所接收的IO命令直接添加到IO命令集合的尾部。而根据另一个实施例,新接收的IO命令为写命令时,也能与IO命令集合中的IO命令具有关联关系。
图10是根据本发明又一实施例向IO命令集合添加命令的流程图。在图10 的实施例中,访问缓存信息的方法,包括:获取第一写命令(1010);根据所述第一写命令的逻辑地址来判断所述第一写命令是否关联于第一IO命令集合中的第二写命令,其中第一IO命令集合对应于缓存的一个缓存行(1020);以及,合并第一写命令与IO命令集合中的第二写命令(1030)。
下面结合图11来描述两个写命令具有关联关系的情形。
参看图11,前端缓存1100包括多个缓存行:缓存行1110、缓存行1120、缓存行1130与缓存行1140。缓存行中包括数据。将对应每个缓存行的IO命令组织为IO命令集合。图11中,IO命令集合1162(1162-0,1162-1,1162-2和 1162-3)为对应于缓存行1120的IO命令组成的IO命令集合。一般而言,将新收到的对应缓存行1120的IO命令添加到IO命令集合1162的尾部,而从IO命令集合1162的头部取出IO命令来执行。作为举例,访问逻辑地址LBA 101、LBA 105、LBA 109的IO命令对应缓存行1120。
图11中,附图标记1162-0、1162-1、1162-3、1162-4、1162-5与1162-6 指示不同时间点集合1162的状态。IO命令集合1162-0中,头部为读逻辑地址 LBA 105的读命令,而尾部为更新逻辑地址LBA 109的写命令(1170),以及读逻辑地址LBA 105的读命令的下一命令是更新逻辑地址LBA 109的写命令 (1170)。当前收到的新IO命令是另一个更新逻辑地址LBA109的写命令(1172)。集合1162-0中,读逻辑地址LBA 109的读命令关联于或依赖于更新逻辑地址LBA 109的写命令(1170)。
响应于收到更新逻辑地址LBA 109的写命令(1172),遍历IO命令集合 1162-0,在IO命令集合1162-0中找到更新逻辑地址LBA 109的写命令(1170)。由于写命令(1172)与写命令(1170)访问相同的逻辑地址,将写命令(1172) 与写命令(1170)合并,由写LBA 109’指示合并后的写命令(1174)(IO命令集合1162-1)。有不同的方式对写命令进行合并。如果写命令(1170)与写命令 (1172)更新相同的逻辑地址,则为合并写命令(1170)与写命令(1172),用在后的写命令(1172)的数据作为合并后写命令(1174)的待写入数据,而用写命令(1170)或写命令(1172)的任何一个的逻辑地址作为写命令(1174)的逻辑地址。如果写命令(1170)与写命令(1172)分别更新逻辑地址LBA 109的不同部分,以写命令(1170)与写命令(1172)对逻辑地址LBA 109连续更新后的结果作为合并后写命令(1174)的待写入数据,而写命令(1174)所写入的逻辑地址是写命令(1170)与写命令(1172)所更新的逻辑地址的并集。合并写命令减少了待处理的写命令的数量,提高了固态存储设备的处理效率。
需要指出的是,参看图11,IO命令集合1162-0中,读LBA 109的读命令关联于更新LBA109的写命令(1170),而在IO命令集合1160-1中,读LBA109 的读命令关联于更新LBA109的写命令(1174)。从而在处理完写命令(1174) 而用缓存行1120的数据响应读LBA109的读命令时,将读到不同的结果。在一些情况下,这样的处理结果符合存储协议,或者是用户所期待的。
有合并更新相同逻辑地址的写命令的多种方式。参看图11,结合IO命令集合1162-3、1162-4、1162-5与1162-6指示了另一实施方式的合并写命令的方式。
IO命令集合1162-3中,头部为读逻辑地址LBA 105的读命令,而尾部为更新逻辑地址LBA 109的写命令(1182),以及读逻辑地址LBA 105的读命令的下一命令是更新逻辑地址LBA 109的写命令(1180)。更新逻辑地址LBA 109的写命令(1180)的下一命令是是另一个更新逻辑地址LBA 109的写命令(1182)。集合1162-3中,读逻辑地址LBA 109的读命令关联于或依赖于更新逻辑地址LBA 109的写命令(1180)。
接下来,接收到预取逻辑地址LBA 101预取IO命令。由于该预取IO命令的逻辑地址LBA 101对应于缓存行1120,因而遍历集合1162,寻找该预取IO 命令所依赖的IO命令。在IO命令集合1162-3中,不存在该预取IO命令所依赖的IO命令,因而将该预取IO命令添加到集合1162-3的尾部(也参见IO命令集合1162-4),成为更新逻辑地址LBA 109的写命令的下一个IO命令。接下来,接收到更新逻辑地址LBA 105的写命令。该写命令不依赖于或关联于任何 IO命令,因而将更新逻辑地址LBA 105的写命令添加到集合1162-4的尾部。接下来,接收到读逻辑地址LBA 101的第1部分(LBA 101-1)的读命令,遍历集合1162,发现读逻辑地址LBA 101的第1部分(LBA 101-1)的读命令依赖于或关联于预取逻辑地址LBA 101预取IO命令,从而在集合1162-4中,将读LBA 101-1 的读命令关联于预取LBA 101的预取IO命令。接下来,收到读逻辑地址LBA 101 的第2部分(LBA 101-2)的读命令,遍历集合1162-4,发现读逻辑地址LBA 101 的第2部分(LBA 101-2)的读命令依赖于预取逻辑地址LBA 101预取IO命令,从而在集合1162-4中,将读LBA 101-2的读命令关联于预取LBA 101的预取IO 命令。图11中,附图标记1162-4指示了此时IO命令集合的状态。
需要指出的是,从与缓存行相对应的IO命令集合中取出IO命令并处理的过程可与向IO命令集合中加入新IO命令的过程同时进行。
进一步地如图11所示,以集合1162-4为例,IO命令集合头部为读逻辑地址LBA 105的读命令。处理该读命令,更新逻辑地址LBA 109的写命令(1180) 成为集合1162的头部(1162-5)。接下来处理更新逻辑地址LBA 109的写命令 (1180),将要写入的数据填充到缓存行1120中。识别出有读逻辑地址LBA 109 的读命令依赖于或关联于写命令(1180),用缓存条目1120中的数据响应读逻辑地址LBA 109的读命令,并将读逻辑地址LBA 109的读命令从IO命令集合中移除。接下来,识别出写命令(1180)的下一条的IO命令为写命令(1182),写命令(1180)与写命令(1182)更新相同的逻辑地址LBA 109,从而将写命令 (1180)与写命令(1182)合并。基于合并后的写命令,更新缓存行1120,以及向NVM芯片写入数据。
在图11中,IO命令集合1162-5中示出的两个写命令(1180与1182)在时间上是相邻的,但本发明并不局限于此,而是,两个写命令也可以在时间上不相邻,即将两个不相邻的、具有相同逻辑地址的写命令进行合并,并以合并后的数据作为待写入数据。
继续参考图11,随着写命令(1180)与写命令(1182)被合并,以及写入 NVM芯片,将合并后的写命令从IO命令集合1162-5中取出,预取LBA 101的预取IO命令成为IO命令集合的头部(1162-6)。执行预取LBA 101的预取IO命令,将预取的数据填入缓存行1120。识别出读逻辑地址101的第1部分(LBA 101-1)的读命令,以及读逻辑地址101的第2部分(LBA 101-2)的读命令依赖于预取逻辑地址LBA 101的预取IO命令,用缓存条目1120中的数据响应读逻辑地址101的第1部分(LBA 101-1)的读命令以及读逻辑地址101的第2部分(LBA 101-2)的读命令。
图12是根据本发明另一实施例向IO命令集合添加命令的流程图。在上面的描述中已经看到,IO命令集合中的部分读命令未能命令缓存行。在图12的实施例中,周期地或在指定条件下(例如,IO命令集合大于指定尺寸,或者响应于用户的指示)为IO命令集合中未命中缓存行的读命令生成预取命令(1210)。优选地,识别IO命令集中存在访问相同逻辑地址的多个读命令,为这些读命令生成一条预取命令。以及将所生成的预取命令添加到IO命令集合中,并调整IO 命令集合的结构,将与所生成的预取命令相关联的这些读命令关联于所生成的预取命令(1220)。从而当执行预取命令后,能够识别出同预取命令相关联的读命令,并利用缓存行的数据作为对这些读命令的响应。以此方式,减少了读取 NVM芯片的次数,提升了固态存储设备的运行效率。
本发明的方法和装置可以以硬件、软件、固件以及上述中的任意组合来实现。硬件可以包括数字电路、模拟电路、数字信号处理器(DSP)、专用继承电路(ASIC)等等。软件可以包括计算机可读程序,这些计算机可读程序在被计算机执行时,实现本发明所述的方法。
例如,本发明可以实施为固态驱动器,该固态驱动器可以包括:一个或者多个处理器;存储器;存储在所述存储器中的程序,当被所述一个或者多个处理器执行时,所述程序使所述固态驱动器执行如上面所述的方法。
本发明的软件还可以存储在计算机可读存储介质,例如硬盘,光盘等等中,该计算机可读存储介质存储有程序,当所述程序被一个设备执行时,使得所述设备进行上面所述的方法。
上面的描述仅仅是对本发明示例性而非穷尽式的描述,本领域技术人员可以对上述方法、设备、装置、模块等进行添加,删减、修改、替换等等,而并不脱离本发明的实质和保护范围。

Claims (10)

1.一种访问缓存信息的方法,包括:
获取第一写命令;
根据所述第一写命令的逻辑地址确定对应于所述第一写命令的第一IO命令集合;根据所述第一写命令的逻辑地址来判断所述第一写命令是否关联于第一IO命令集合中的第二写命令,其中所述第二写命令位于所述第一IO命令集合中,所述第一IO命令集合对应于所述缓存的第一缓存行;
若第一写命令关联于第二写命令,即使所述第一IO命令集合中存在关联于第二写命令的读命令,也合并所述第一写命令与所述第二写命令,其中获取所述第一写命令前,所述第二写命令与所述读命令已存在于所述第一IO命令集合中。
2.根据权利要求1所述的方法,其中,
如果所述第一写命令针对的数据和第二写命令针对的数据具有相同逻辑地址,则所述第一写命令关联于所述第二写命令。
3.根据权利要求2所述的方法,其中,
若所述第一写命令和第二写命令访问相同逻辑地址范围的不同部分,则将所述第一写命令或所述第二写命令针对的数据合并,并且以合并后的数据作为待写入数据。
4.根据权利要求1-3中任意一项所述的方法,其中,
若所述第一写命令关联于所述第二写命令,则在所述第二写命令执行完成之后,优先地执行所述第一写命令。
5.根据权利要求1-3中任意一项所述的方法,其中,
在所述第二写命令以及与所述第二写命令相关联的所有IO命令执行完成之后,将所述第二写命令以及与所述第二写命令相关联的所有IO命令从所述第一IO命令集合中移除。
6.根据权利要求1所述的方法,其中,若所述第一写命令不关联于所述第一IO命令集合中的任何写命令,则将所述第一写命令添加到所述第一IO命令集合,使得在所述第一IO命令集合的IO命令中,所述第一写命令被最后执行。
7.根据权利要求1-3中任意一项所述的方法,进一步包括:
从第一IO命令集合中取出第三写命令;
响应于将所述第三写命令的数据写入第一缓存行,向主机指示所述第三写命令执行完成。
8.根据权利要求7所述的方法,进一步包括:
若第一IO命令集合中存在与所述第三写命令具有关联关系的第四读命令,从所述第一缓存行获取数据作为对所述第四读命令的响应;以及
在所述第四读命令处理完成后,将第三写命令与第四读命令从第一IO命令集合中移除。
9.一种固态驱动器,包括:
一个或者多个处理器;
存储器;
存储在所述存储器中的程序,当被所述一个或者多个处理器执行时,所述程序使所述固态驱动器执行如权利要求1-8中任意一项所述的方法。
10.一种访问缓存信息的装置,包括:
IO命令获取模块,用于获取第一写命令;
IO命令集合确定模块,用于根据所述第一写命令的逻辑地址确定对应于所述第一写命令的第一IO命令集合;
缓存关联检测模块,用于根据所述第一写命令的逻辑地址来判断所述第一写命令是否关联于第一IO命令集合中的第二写命令,其中所述第二写命令位于所述第一IO命令集合中,所述第一IO命令集合对应于所述缓存的第一缓存行;
合并模块,用于若第一写命令关联于第二写命令,即使所述第一IO命令集合中存在关联于第二写命令的读命令,也合并所述第一写命令与所述第二写命令,其中获取所述第一写命令前,所述第二写命令与所述读命令已存在于所述第一IO命令集合中。
CN201610819411.2A 2016-09-05 2016-09-12 一种访问缓存信息的方法、装置与固态驱动器 Active CN107797760B (zh)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CN201610805143 2016-09-05
CN2016108051439 2016-09-05

Publications (2)

Publication Number Publication Date
CN107797760A CN107797760A (zh) 2018-03-13
CN107797760B true CN107797760B (zh) 2021-06-11

Family

ID=61530080

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201610819411.2A Active CN107797760B (zh) 2016-09-05 2016-09-12 一种访问缓存信息的方法、装置与固态驱动器

Country Status (1)

Country Link
CN (1) CN107797760B (zh)

Families Citing this family (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN110321057A (zh) * 2018-03-28 2019-10-11 北京忆恒创源科技有限公司 具有增强io性能确定性的缓存的存储设备
CN110580227B (zh) * 2018-06-07 2024-04-12 北京忆恒创源科技股份有限公司 自适应nvm命令生成方法与装置
CN115576867A (zh) * 2018-08-28 2023-01-06 上海忆芯实业有限公司 存储设备的扩展地址空间
CN110968418A (zh) * 2018-09-30 2020-04-07 北京忆恒创源科技有限公司 基于信号-槽的大规模有约束并发任务的调度方法与装置
CN111143242B (zh) * 2018-11-02 2022-05-10 华为技术有限公司 一种缓存预取方法和装置
CN111352865B (zh) * 2018-12-24 2022-05-24 北京忆芯科技有限公司 存储控制器的写缓存
CN111694770B (zh) * 2019-03-15 2022-12-02 杭州宏杉科技股份有限公司 一种处理io请求的方法及装置
CN114995748A (zh) * 2022-05-09 2022-09-02 阿里巴巴(中国)有限公司 请求处理方法及装置

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102053914A (zh) * 2009-10-30 2011-05-11 慧荣科技股份有限公司 记忆装置以及存储器的数据存取方法
CN102566939A (zh) * 2011-12-19 2012-07-11 记忆科技(深圳)有限公司 一种固态硬盘及其读-修改-写操作的数据管理方法
CN102681952A (zh) * 2012-05-12 2012-09-19 北京忆恒创源科技有限公司 将数据写入存储设备的方法与存储设备
CN103218270A (zh) * 2013-03-11 2013-07-24 北京忆恒创源科技有限公司 具有多个固态盘的计算机

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP5296041B2 (ja) * 2010-12-15 2013-09-25 株式会社東芝 メモリシステムおよびメモリシステムの制御方法
CN105302501B (zh) * 2015-11-27 2018-09-14 浙江宇视科技有限公司 一种磁盘扇区的控制方法和装置

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102053914A (zh) * 2009-10-30 2011-05-11 慧荣科技股份有限公司 记忆装置以及存储器的数据存取方法
CN102566939A (zh) * 2011-12-19 2012-07-11 记忆科技(深圳)有限公司 一种固态硬盘及其读-修改-写操作的数据管理方法
CN102681952A (zh) * 2012-05-12 2012-09-19 北京忆恒创源科技有限公司 将数据写入存储设备的方法与存储设备
CN103218270A (zh) * 2013-03-11 2013-07-24 北京忆恒创源科技有限公司 具有多个固态盘的计算机

Also Published As

Publication number Publication date
CN107797760A (zh) 2018-03-13

Similar Documents

Publication Publication Date Title
CN107797759B (zh) 访问缓存信息的方法、装置与驱动器
CN107797760B (zh) 一种访问缓存信息的方法、装置与固态驱动器
CN106448737B (zh) 读取闪存数据的方法、装置以及固态驱动器
US20110231598A1 (en) Memory system and controller
CN111061655B (zh) 存储设备的地址转换方法与设备
CN109164976B (zh) 利用写缓存优化存储设备性能
TW201314452A (zh) 緩衝資料的系統及方法
KR102663304B1 (ko) 구역 네임스페이스 디바이스들에서의 판독 처리
CN103543955A (zh) 利用固态硬盘作为设备读缓存的方法、系统及固态硬盘
CN108228483B (zh) 处理原子写命令的方法和设备
JP7030942B2 (ja) メモリ装置及びその制御方法
CN111625482B (zh) 顺序流检测方法与装置
CN111352865B (zh) 存储控制器的写缓存
CN106502584B (zh) 一种提高固态硬盘写缓存的利用率的方法
CN110515861B (zh) 处理刷写命令的存储设备及其方法
CN110968527B (zh) Ftl提供的缓存
CN111290975A (zh) 使用统一缓存处理读命令与预读命令的方法及其存储设备
CN111290974A (zh) 用于存储设备的缓存淘汰方法与存储设备
CN115993930A (zh) 用于有序访问块修改存储器中的数据的系统、方法和装置
JP6378111B2 (ja) 情報処理装置及びプログラム
CN113254363A (zh) 具有部分逻辑到物理地址转换表的非易失性存储控制器
CN109960667B (zh) 大容量固态存储设备的地址转换方法与装置
CN110532199B (zh) 预读方法及其存储控制器
CN112947845A (zh) 热数据识别方法及其存储设备
CN109840219B (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
CP03 Change of name, title or address
CP03 Change of name, title or address

Address after: 100192 room A302 / 303 / 305 / 306 / 307, 3rd floor, building B-2, Dongsheng Science Park, Zhongguancun, 66 xixiaokou Road, Haidian District, Beijing

Patentee after: Beijing yihengchuangyuan Technology Co.,Ltd.

Address before: 100192 room A302 / 303 / 305 / 306 / 307, 3rd floor, B-2, Zhongguancun Dongsheng Science Park, 66 xixiaokou Road, Haidian District, Beijing

Patentee before: MEMBLAZE TECHNOLOGY (BEIJING) Co.,Ltd.