CN113655955A - 缓存管理方法、固态硬盘控制器及固态硬盘 - Google Patents

缓存管理方法、固态硬盘控制器及固态硬盘 Download PDF

Info

Publication number
CN113655955A
CN113655955A CN202110808238.7A CN202110808238A CN113655955A CN 113655955 A CN113655955 A CN 113655955A CN 202110808238 A CN202110808238 A CN 202110808238A CN 113655955 A CN113655955 A CN 113655955A
Authority
CN
China
Prior art keywords
data block
data
dirty data
dirty
conflict
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.)
Granted
Application number
CN202110808238.7A
Other languages
English (en)
Other versions
CN113655955B (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.)
Shenzhen Dapu Microelectronics Co Ltd
Original Assignee
Shenzhen Dapu Microelectronics 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 Shenzhen Dapu Microelectronics Co Ltd filed Critical Shenzhen Dapu Microelectronics Co Ltd
Priority to CN202110808238.7A priority Critical patent/CN113655955B/zh
Publication of CN113655955A publication Critical patent/CN113655955A/zh
Priority to PCT/CN2022/091221 priority patent/WO2023284379A1/zh
Application granted granted Critical
Publication of CN113655955B publication Critical patent/CN113655955B/zh
Priority to US18/413,162 priority patent/US20240152454A1/en
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • 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/0646Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
    • G06F3/0652Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
    • 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/0655Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
    • G06F3/0659Command handling arrangements, e.g. command buffers, queues, command scheduling
    • 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
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/60Details of cache memory
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/72Details relating to flash memory management
    • 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)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请实施例涉及固态硬盘应用领域,公开了一种缓存管理方法、固态硬盘控制器及固态硬盘,固态硬盘包括缓存空间,缓存空间包括一脏数据块链表,该方法包括:获取写命令,生成第一脏数据块,用于记录写命令数据信息;若第一脏数据块与脏数据块链表中的第二脏数据块存在地址范围冲突,将第二脏数据块中的冲突区域的数据标记为无效,并将第一脏数据块插入脏数据块链表。通过在第一脏数据块与脏数据块链表中的第二脏数据块存在地址范围冲突的时候,将第二脏数据块中的冲突区域的数据标记为无效,并将第一脏数据块插入脏数据块链表,本申请能够将缓存插入和数据更新分离,实现缓存快速插入,减小了写冲突场景下的命令时延,提高固态硬盘的系统性能。

Description

缓存管理方法、固态硬盘控制器及固态硬盘
技术领域
本申请涉及固态硬盘应用领域,特别是涉及一种缓存管理方法、固态硬盘控制器及固态硬盘。
背景技术
固态硬盘(Solid State Drives,SSD),是采用固态电子存储芯片阵列而制成的硬盘,固态硬盘包括控制单元和存储单元(FLASH存储芯片或DRAM存储芯片)。目前固态硬盘系统中有相当部分是存在动态随机存取存储器(Dynamic Random Access Memory,DRAM)的,所以SSD有较大的数据缓存空间用来缓存数据。
目前在企业级SSD(Solid State Drive,固态硬盘)中大多使用回写模式(Write-Back模式),以减少时延来提高性能。盘内把一部分DRAM空间作为缓存空间缓存数据,缓存管理记录着这部分数据的地址范围和状态。一般来说主机下发写命令后,当盘片接收完主机写的数据后,将其插入到缓存中,然后上报主机完成。由于缓存空间有大小限制和掉电易失性的特点,缓存数据在满足一定条件后需要由后台下刷到NAND中进行持久化。数据下刷完成后缓存才能被释放。
当写数据的地址范围有重叠时,就产生写冲突,新缓存会部分或完全替换旧缓存。当新缓存进行部分替换时,一般需要把更新的数据拷贝到旧缓存空间里。当完全替换时,新缓存可以旧缓存删除后插入。但是旧缓存数据正处于下刷过程中时,就无法立刻更新,否则有数据不一致的风险。在下刷完成后新缓存才能插入。写命令在解决冲突过程中的数据拷贝或下刷等待会增大命令的处理时延,降低了主机业务处理能力。
发明内容
本申请实施例提供一种缓存管理方法、固态硬盘控制器及固态硬盘,其解决了现有固态硬盘存在的写冲突场景下的业务处理时间长的技术问题,实现减少写冲突场景下的命令时延,提高固态硬盘的系统性能。
为解决上述技术问题,本申请实施例提供以下技术方案:
第一方面,本申请实施例提供一种缓存管理方法,应用于固态硬盘,所述固态硬盘包括缓存空间,所述缓存空间包括一脏数据块链表,所述方法包括:
获取写命令,生成第一脏数据块,用于记录写命令数据信息;
若所述第一脏数据块与所述脏数据块链表中的第二脏数据块存在地址范围冲突,将所述第二脏数据块中的冲突区域的数据标记为无效,并将所述第一脏数据块插入所述脏数据块链表。
在一些实施例中,所述方法还包括:
若所述第一脏数据块与所述脏数据块链表中的第二脏数据块存在地址范围冲突,进一步判断第二脏数据块的冲突区域的数据是否处于下刷状态;
若是,则将所述第一脏数据块插入所述脏数据块链表,并在第二脏数据块的冲突区域的数据下刷完成之后,更新所述第一脏数据块和所述第二脏数据块的数据状态;
若否,则将所述第二脏数据块中的冲突区域的数据标记为无效,并将所述第一脏数据块插入所述脏数据块链表。
在一些实施例中,所述方法还包括:
若第二脏数据块的冲突区域的数据处于下刷状态,进一步判断冲突区域的数据是否与所述脏数据块链表中的第三脏数据块的冲突区域的数据相同;
若是,则将所述第三脏数据块中的冲突区域的数据标记为无效;
若否,则更新所述第一脏数据块和所述第三脏数据块的数据状态,并将所述第一脏数据块插入所述脏数据块链表。
在一些实施例中,所述方法还包括:
为每一脏数据块生成一个位图集合,其中,每一位图集合包括:
可下刷数据位图,用于标识该脏数据块可下刷到闪存的数据;
有效数据位图,用于标识该脏数据块中的有效数据;
等待下刷数据位图,用于标识该脏数据块中的等待下刷到闪存的数据;
下发下刷数据位图,用于标识该脏数据块中的已下发下刷到闪存的数据;
下刷完成数据位图,用于标识该脏数据块中下刷完成的数据。
在一些实施例中,所述方法还包括:
在将所述第一脏数据块插入所述脏数据块链表之前,将所述第一脏数据块对应的等待下刷数据位图中与冲突区域的数据对应的数据位进行置一;
所述在第二脏数据块的冲突区域的数据下刷完成之后,更新所述第一脏数据块和所述第二脏数据块的数据状态,包括:
将第二脏数据块对应的下刷完成数据位图中与冲突区域的数据对应的数据位进行置一;
将第一脏数据块对应的等待下刷数据位图中与冲突区域的数据对应的数据位进行置零;
将第一脏数据块对应的可下刷数据位图中与冲突区域的数据对应的数据位进行置一。
在一些实施例中,所述将所述第二脏数据块中的冲突区域的数据标记为无效,包括:
将所述第二脏数据块对应的有效数据位图中与冲突区域的数据对应的数据位进行置零。
在一些实施例中,所述更新所述第一脏数据块和所述第三脏数据块的数据状态,包括:
将第三脏数据块对应的等待下刷数据位图中与冲突区域的数据对应的数据位进行置零,同时将第三脏数据块对应的有效数据位图中与冲突区域的数据对应的数据位进行置零;
将第一脏数据块对应的等待下刷数据位图中与冲突区域的数据对应的数据位进行置一。
在一些实施例中,所述方法还包括:
为每一脏数据块生成一个第一冲突标记和一个第二冲突标记,其中,第一冲突标记用于标记该脏数据块是否与一个旧的脏数据块存在地址范围冲突,第二冲突标记用于标记该脏数据块是否与一个新的脏数据块存在地址范围冲突;
若第一脏数据块存在与所述脏数据块链表中的第二脏数据块存在地址范围冲突,则将第一脏数据块对应的第一冲突标记进行置一,并将第二脏数据块对应的第二冲突标记进行置一。
第二方面,本申请实施例提供一种固态硬盘控制器,应用于固态硬盘,所述固态硬盘包括至少一个闪存介质,其特征在于,所述固态硬盘控制器用于执行如第一方面所述的缓存管理方法。
第三方面,本申请实施例提供一种固态硬盘,包括:
如第二方面所述的固态硬盘控制器;
至少一个闪存介质,与所述固态硬盘控制器通信连接。
第四方面,本申请实施例还提供了一种非易失性计算机可读存储介质,所述计算机可读存储介质存储有计算机可执行指令,所述计算机可执行指令用于使固态硬盘能够执行如上所述的缓存管理方法。
本申请实施例的有益效果是:区别于现有技术的情况下,本申请实施例提供的缓存管理方法应用于固态硬盘,固态硬盘包括缓存空间,缓存空间包括一脏数据块链表,该方法包括:获取写命令,生成第一脏数据块,用于记录写命令数据信息;若第一脏数据块与脏数据块链表中的第二脏数据块存在地址范围冲突,将第二脏数据块中的冲突区域的数据标记为无效,并将第一脏数据块插入脏数据块链表。通过在第一脏数据块与脏数据块链表中的第二脏数据块存在地址范围冲突的时候,将第二脏数据块中的冲突区域的数据标记为无效,并将第一脏数据块插入脏数据块链表,本申请能够将缓存插入和数据更新分离,实现缓存快速插入,减小了写冲突场景下的命令时延,提高固态硬盘的系统性能。
附图说明
一个或多个实施例通过与之对应的附图中的图片进行示例性说明,这些示例性说明并不构成对实施例的限定,附图中具有相同参考数字标号的元件表示为类似的元件,除非有特别申明,附图中的图不构成比例限制。
图1是本申请实施例提供的一种固态硬盘的结构示意图;
图2是本申请实施例提供的固态硬盘控制器的示意图;
图3是本申请实施例提供的一种固态硬盘的缓存管理框架的示意图;
图4是本申请实施例提供的一种缓存管理方法的流程示意图;
图5是本申请实施例提供的一种数据拷贝解决冲突场景的示意图;
图6是本申请实施例提供的一种下刷等待解决冲突场景的示意图;
图7是本申请实施例提供的一种缓存管理方法的整体流程示意图;
图8是本申请实施例提供的一种第一脏数据块插入脏数据块链表的流程示意图;
图9是本申请实施例提供的一种第一脏数据块缓存数据的更新流程示意图。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
此外,下面所描述的本申请各个实施方式中所涉及到的技术特征只要彼此之间未构成冲突就可以相互组合。
典型的固态硬盘(Solid State Drives,SSD)通常包括固态硬盘控制器(主控制器)、闪存阵列、缓存单元以及其他外围单元。
其中,固态硬盘控制器用于作为控制运算单元,管理SSD内部系统;闪存阵列(NANDFlash),作为存储单元,用于存储数据,包括用户数据和系统数据,闪存阵列一般呈现多个通道(Channel,简写CH),一个通道独立连接一组NAND Flash,例如CH0/CH1……CHx。其中闪存(NAND Flash),其特性是写入之前,必须进行擦除,且每个闪存擦除次数有限;缓存单元,用于缓存映射表,所述缓存单元一般为动态随机存取存储器(Dynamic Random AccessMemory,DRAM)。其他外围单元可以包括传感器、寄存器等部件。
请参阅图1,图1是本申请实施例提供的一种固态硬盘的结构示意图。
如图1所示,所述固态硬盘100包括闪存介质110以及与所述闪存介质110连接的固态硬盘控制器120。其中,所述固态硬盘100通过有线或无线的方式与所述主机200通信连接,用以实现数据交互。
闪存介质110,作为所述固态硬盘100的存储介质,也称作闪存、Flash、Flash存储器或Flash颗粒,属于存储器件的一种,是一种非易失性存储器,在没有电流供应的条件下也能够长久地保存数据,其存储特性相当于硬盘,使得闪存介质110得以成为各类便携型数字设备的存储介质的基础。
其中,闪存介质110可以为Nand FLASH,Nand FLASH以单晶体管作为二进制信号的存储单元,其结构与普通的半导体晶体管非常相似,区别在于Nand FLASH的单晶体管加入了浮动栅和控制栅,浮动栅用于贮存电子,表面被一层硅氧化物绝缘体所包覆,并通过电容与控制栅相耦合,当负电子在控制栅的作用下被注入到浮动栅中,Nand FLASH的单晶体的存储状态就由“1”变成了“0”,而当负电子从浮动栅中移走后,存储状态就由“0”变成了“1”,包覆在浮动栅表面的绝缘体用于将浮动栅中的负电子困住,实现数据存储。即Nand FLASH的存储单元为浮动栅晶体管,使用浮动栅晶体管以电荷的形式存储数据。存储电荷的多少与浮动栅晶体管所被施加的电压的大小有关。
一个Nand FLASH包括至少一个Chip芯片,每一个Chip芯片由若干个Block物理块组成,每一个Block物理块包括若干个Page页。其中,Block物理块是Nand FLASH执行擦除操作的最小单位,Page页为Nand FLASH执行读写操作的最小单位,一个Nand FLASH的容量等于其Block物理块的数量*一个Block物理块包含的Page页的数量*一个Page页的容量。具体的,闪存介质10按照存储单元的电压的不同层次,可分为SLC、MLC、TLC以及QLC。
固态硬盘控制器120,包括数据转换器121、处理器122、缓存器123、闪存控制器124以及接口125。
数据转换器121,分别与处理器122和闪存控制器124连接,所述数据转换器121用于将二进制数据转换为十六进制数据,以及将十六进制数据转换为二进制数据。具体地,当所述闪存控制器124向所述闪存介质110写入数据时,通过所述数据转换器121将待写入的二进制数据转换为十六进制数据,然后再写入闪存介质110。当所述闪存控制器124从所述闪存介质110读取数据时,通过所述数据转换器121将闪存介质110中存储的十六进制数据转换为二进制数据,然后从二进制数据页寄存器中读取转换后的数据。其中,所述数据转换器121可以包括二进制数据寄存器和十六进制数据寄存器。所述二进制数据寄存器可以用于保存由十六进制转换为二进制后的数据,所述十六进制数据寄存器可以用于保存由二进制转换为十六进制后的数据。
处理器122,分别与数据转换器121、缓存器123、闪存控制器124以及接口125连接,其中,处理器122与数据转换器121、缓存器123、闪存控制器124以及接口125可以通过总线或者其他方式连接,所述处理器用于运行存储在缓存器123中的非易失性软件程序、指令以及模块,从而实现本申请任一方法实施例。
缓存器123,主要用于缓存主机200发送的读/写指令以及根据主机200发送的读/写指令从闪存介质110获取的读数据或者写数据。缓存器123作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。缓存器123可以包括存储程序区,存储程序区可存储操作系统、至少一个功能所需要的应用程序。此外,缓存器123可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,缓存器123可选包括相对于处理器124远程设置的存储器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。所述缓存器123可以为静态随机存取存储器(StaticRandom Access Memory,SRAM)或者耦合内存(Tightly Coupled Memory,TCM)或者双倍速率同步动态随机存储器(Double DataRate Synchronous Dynamic Random AccessMemory,DDR SRAM)。
闪存控制器124,与闪存介质110、数据转换器121、处理器122以及缓存器123连接,用于访问后端的闪存介质110,管理闪存介质110的各种参数和数据I/O;或者,用于提供访问的接口和协议,实现对应的SAS/SATA target协议端或者NVMe协议端,获取主机200发出的I/O指令并解码和生成内部私有数据结果等待执行;或者,用于负责FTL(Flashtranslation layer,闪存转换层)的核心处理。
接口125,连接主机200以及数据转换器121、处理器122以及缓存器123,用于接收主机200发送的数据,或者,接收所述处理器122发送的数据,实现主机200与处理器122之间的数据传输,所述接口125可以为SATA-2接口、SATA-3接口、SAS接口、MSATA接口、PCI-E接口、NGFF接口、CFast接口、SFF-8639接口和M.2NVME/SATA协议。
请再参阅图2,图2是本申请实施例提供的一种固态硬盘控制器的结构示意图;其中,该固态硬盘控制器属于上述的固态硬盘。
如图2所示,该固态硬盘控制器,包括:PCIe接口控制器126、DDR控制器127、NVMe接口控制器128、处理器122、外设模块129、数据通路模块1210以及闪存控制器124。
具体的,所述PCIe接口控制器126,用于PCIe通信协议的控制,所述DDR控制器127,用于动态随机存储器的控制,所述NVMe接口控制器128用于NVMe通信协议的控制,所述外设模块129用于其他相关通信协议的控制,所述数据通路模块1210用于数据通路的控制,例如:写缓存的管理,所述闪存控制器124用于闪存的数据处理。
其中,该固态硬盘控制器120,还包括数据转换器121、缓存器123、接口125等。
具体的,所述数据转换器121,分别与处理器和闪存控制器连接,所述数据转换器用于将二进制数据转换为十六进制数据,以及将十六进制数据转换为二进制数据。具体地,当所述闪存控制器向所述闪存介质写入数据时,通过所述数据转换器将待写入的二进制数据转换为十六进制数据,然后再写入闪存介质。当所述闪存控制器从所述闪存介质读取数据时,通过所述数据转换器将闪存介质中存储的十六进制数据转换为二进制数据,然后从二进制数据页寄存器中读取转换后的数据。其中,所述数据转换器可以包括二进制数据寄存器和十六进制数据寄存器。所述二进制数据寄存器可以用于保存由十六进制转换为二进制后的数据,所述十六进制数据寄存器可以用于保存由二进制转换为十六进制后的数据。
具体的,所述处理器122,分别与数据转换器121、缓存器123、闪存控制器124以及接口125连接,其中,处理器与数据转换器、缓存器、闪存控制器以及接口可以通过总线或者其他方式连接,所述处理器用于运行存储在缓存器中的非易失性软件程序、指令以及模块,从而实现本申请任一方法实施例。
具体的,所述缓存器,主要用于缓存主机发送的读/写指令以及根据主机发送的读/写指令从闪存介质获取的读数据或者写数据。缓存器作为一种非易失性计算机可读存储介质,可用于存储非易失性软件程序、非易失性计算机可执行程序以及模块。缓存器可以包括存储程序区,存储程序区可存储操作系统、至少一个功能所需要的应用程序。此外,缓存器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他非易失性固态存储器件。在一些实施例中,缓存器可选包括相对于处理器远程设置的存储器。上述网络的实例包括但不限于互联网、企业内部网、局域网、移动通信网及其组合。所述缓存器可以为静态随机存取存储器(Static Random AccessMemory,SRAM)或者耦合内存(Tightly Coupled Memory,TCM)或者双倍速率同步动态随机存储器(Double DataRate Synchronous Dynamic Random Access Memory,DDR SRAM)。
具体的,所述闪存控制器,与闪存介质、数据转换器、处理器以及缓存器连接,用于访问后端的闪存介质,管理闪存介质的各种参数和数据I/O;或者,用于提供访问的接口和协议,实现对应的SAS/SATA target协议端或者NVMe协议端,获取主机发出的I/O指令并解码和生成内部私有数据结果等待执行;或者,用于负责FTL(Flash translation layer,闪存转换层)的核心处理。
具体的,所述接口,连接主机以及数据转换器、处理器以及缓存器,用于接收主机发送的数据,或者,接收所述处理器发送的数据,实现主机与处理器之间的数据传输,所述接口可以为SATA-2接口、SATA-3接口、SAS接口、MSATA接口、PCI-E接口、NGFF接口、CFast接口、SFF-8639接口和M.2NVME/SATA协议。
目前,在企业级SSD(Solid State Drive,固态硬盘)中大多使用回写模式(Write-Back模式),以减少时延来提高性能。盘内把一部分DRAM空间作为缓存空间缓存数据,缓存管理记录着这部分数据的地址范围和状态。一般来说主机下发写命令后,当盘片接收完主机写的数据后,将其插入到缓存中,然后上报主机完成。由于缓存空间有大小限制和掉电易失性的特点,缓存数据在满足一定条件后需要由后台下刷到NAND中进行持久化。数据下刷完成后缓存才能被释放。
请参阅图3,图3是本申请实施例提供的一种固态硬盘的缓存管理框架的示意图;
在Write-Back模式下,在数据更新时只写入缓存Cache。只在数据被替换出缓存时,被修改的缓存数据才会被写到后端存储。此模式的优点是数据写入速度快,因为不需要写存储;缺点是一旦更新后的数据未被写入存储时出现系统掉电的情况,数据将无法找回。
如图3所示,SSD的数据缓存空间一般由固件的缓存管理模块(CacheManager模块)统一进行管理,其中,CacheManager模块主要负责缓存的分配,插入,查找,下刷和释放。在缓存内部数据是以脏数据块(DirtyNode)链表的形式进行组织的。一般来说,一个脏数据块(DirtyNode)记录了一个写数据的信息,包括逻辑介质地址(Logical Media Address,LMA),数据长度,数据地址和当前下刷位置等信息。在写命令开始传输数据之前,CacheManager为命令分配好缓存空间,在传输完成后将脏数据块(DirtyNode)插入脏数据块链表。每一个DirtyNode会生成对应的下刷项(FlushEntry)加入下刷队列中,当缓存数据达到一定阈值时,CacheManager就从下刷队列中选择一定量的FlushEntry下刷到NAND上。在数据下刷完成后,脏数据块及对应的缓存空间就可以被释放。
现有的缓存管理技术是以脏数据块为单位,缓存的更新实际是脏数据块插入脏数据块链表的过程,如果一个新脏数据块与脏数据块链表中的某一脏数据块存在地址范围冲突,新的脏数据块直接插入到脏数据块链表后就无法区分冲突部分的新旧数据了,因此缓存中只能保存最新的数据。因此,缓存内部新旧脏数据块在链表上无法共存,新的脏数据块插入依赖旧的脏数据块的整体状态,冲突处理耗时间,在大量写冲突的场景下,命令平均时延大,业务处理速度慢。
基于此,本申请实施例提供一种缓存管理方法,以减小写冲突场景下的命令时延,提高固态硬盘的系统性能,下面结合说明书附图具体地阐述本申请的技术方案。
请参阅图4,图4是本申请实施例提供的一种缓存管理方法的流程示意图;
如图4所示,该缓存管理方法,包括:
步骤S401:获取写命令,生成第一脏数据块,用于记录写命令数据信息;
具体的,固态硬盘获取写命令,由缓存管理模块根据所述写命令,生成第一脏数据块,用于记录写命令数据信息,其中,第一脏数据块包括逻辑介质地址(Logical MediaAddress,LMA),数据长度,数据地址和当前下刷位置等写命令数据信息。
步骤S402:若所述第一脏数据块与所述脏数据块链表中的第二脏数据块存在地址范围冲突,将所述第二脏数据块中的冲突区域的数据标记为无效,并将所述第一脏数据块插入所述脏数据块链表。
可以理解的是,通常缓存空间中的脏数据块之间是相互独立的,也就是说,各个脏数据块之间没有地址范围的重叠,以避免各个脏数据块之间的冲突。显然,若第一脏数据块与所述脏数据块链表中的任意一个脏数据块不存在地址范围冲突,则直接将所述第一脏数据块插入所述脏数据块链表,并生成一个下刷项(Flush Entry)加入下刷队列中,以准备数据下刷,完成缓存更新。
具体的,缓存空间中通过脏数据块链表的形式进行脏数据块的组织和管理,脏数据块链表中的各个脏数据块之间没有地址范围的重叠,此时,若所述第一脏数据块中的逻辑地址与所述脏数据块链表中的第二脏数据块存在地址范围冲突,此时需要对冲突区域的数据进行处理,以解决两者的冲突问题。
在本申请实施例中,固态硬盘对数据的管理粒度是4KB,为了便于说明,以[SLBA,ELBA]标识每一脏数据块的数据区域,其中,SLBA表示Start LBA,即开始位置的逻辑地址,ELBA表示End LBA,即结束位置的逻辑地址,因此,数据长度为(ELBA-SLBA)。
请参阅图5,图5是本申请实施例提供的一种数据拷贝解决冲突场景的示意图;
如图5所示,第一脏数据块(DirtyNode1)的数据区域为[0,4],第二脏数据块DirtyNode2的数据区域为[1,3],假设主机下发一个写IO[1]产生第一脏数据块DirtyNode1[0,4]先插入到缓存中,然后主机再下发写IO[2]产生第二脏数据块DirtyNode2[1,3]后,检查到与第一脏数据块(DirtyNode1)产生冲突,此时,需要把第二脏数据块(DirtyNode2)的数据拷贝到第一脏数据块(DirtyNode1)的地址空间中以解决冲突,因此,在写冲突时,缓存更新可能有数据拷贝的过程,数据拷贝占用CPU时间长,使命令调度阻塞,命令不能及时处理。
请再参阅图6,图6是本申请实施例提供的一种下刷等待解决冲突场景的示意图;
如图6所示,假设主机先下发的第一脏数据块(DirtyNode1)正在被下刷到NAND中,此时,产生的第二脏数据块(DirtyNode2)无法立刻插入到缓存空间中,只能等待下刷完成才能插入缓存空间,因此,写冲突时如果旧缓存正在下刷,新缓存需要等待下刷完成后才能完成更新处理,这个过程增大了命令处理流程。
基于上述,本申请通过判断第一脏数据块与所述脏数据块链表中的第二脏数据块是否存在地址范围冲突,若所述第一脏数据块与所述脏数据块链表中的第二脏数据块存在地址范围冲突,将所述第二脏数据块中的冲突区域的数据标记为无效,使得脏数据块的插入与数据的更新相分离,有利于实现脏数据块的快速插入缓存,即有利于快速将所述第一脏数据块插入所述脏数据块链表。
可以理解的是,之后无论这部分旧数据,即第二脏数据块对应的旧数据的状态是怎样,旧数据可以直接丢弃或者被新数据覆盖。新脏数据块,即第一脏数据块中其它没有冲突的部分可以正常地更新。虽然在缓存空间中存在同一个地址范围的新旧两份数据,但旧数据被“无效化”,当需要读取这个地址范围的数据时,缓存管理模块总能查找到最新的数据,这样就保证了数据的一致性。
在本申请实施例中,在将所述第二脏数据块中的冲突区域的数据标记为无效之后,将所述第一脏数据块插入所述脏数据块链表,此时,由于第二脏数据块中的冲突区域的数据已经被无效化,因此,可以将所述第一脏数据块插入所述脏数据块链表,而不会产生冲突情况,并且,当需要读取冲突区域的地址范围的数据时,缓存管理模块能够获取到最新的数据,从而有利于保证数据的一致性。
进一步地,若冲突区域的数据处于下刷状态,此时需要进一步处理下刷造成的缓存数据更新。
具体的,请参阅图7,图7是本申请实施例提供的一种缓存管理方法的整体流程示意图;
如图7所示,该缓存管理方法的整体流程,包括:
步骤S701:获取写命令,生成第一脏数据块;
步骤S702:是否有冲突的第二脏数据块;
具体的,判断所述第一脏数据块与所述脏数据块链表中的第二脏数据块存在地址范围冲突,其中,所述第二脏数据块为脏数据块链表中的任意一个脏数据块;若有冲突的第二脏数据块,则进入步骤S703:冲突区域的数据是否处于下刷状态;若无冲突的第二脏数据块,则进入步骤S709:第一脏数据块插入脏数据块链表;
步骤S703:冲突区域的数据是否处于下刷状态;
具体的,判断第一脏数据块和第二脏数据块的冲突区域的数据是否处于下刷状态,若是,则将所述第一脏数据块插入所述脏数据块链表,并在第二脏数据块的冲突区域的数据下刷完成之后,更新所述第一脏数据块和所述第二脏数据块的数据状态;
进一步地,若第一脏数据块和第二脏数据块的冲突区域的数据处于下刷状态,则进入步骤S704:冲突区域是否已经是第三脏数据块的冲突区域;若否,则进入步骤S708:第二脏数据块的冲突区域的数据标记为无效,第一脏数据块直接插入脏数据块链表,数据无需拷贝;
步骤S704:冲突区域是否已经是第三脏数据块的冲突区域;
具体的,判断第一脏数据块与第二脏数据块的冲突区域是否已经是脏数据块链表中的另一个脏数据块的冲突区域,假设该另一个脏数据块为第三脏数据块,若是,则进入步骤S707:将第三脏数据块的冲突区域的数据标记为无效;若否,则进入步骤S708:
步骤S705:标记第一脏数据块的冲突区域的数据延迟更新后即可插入缓存;
可以理解的是,由于冲突区域的数据正在下刷,新脏数据块,即第一脏数据块中的这部分数据不能立刻更新,因此需要标记部分延迟更新,标记后第一脏数据块就可以插入到缓存中了,即第一脏数据块插入脏数据块链表。此时,缓存中存在着冲突数据新旧两份,需要等旧数据下刷完成淘汰后新数据才能完成更新,即第二脏数据块的数据下刷完成之后,第一脏数据块的数据才能完成更新。
具体的,在判断冲突区域不是第三脏数据块的冲突区域之后,更新所述第一脏数据块和所述第三脏数据块的数据状态,所述更新所述第一脏数据块和所述第三脏数据块的数据状态,包括:
将第三脏数据块对应的等待下刷数据位图中与冲突区域的数据对应的数据位进行置零,同时将第三脏数据块对应的有效数据位图中与冲突区域的数据对应的数据位进行置零;
将第一脏数据块对应的等待下刷数据位图中与冲突区域的数据对应的数据位进行置一。
步骤S706:第二脏数据块的冲突区域的数据下刷完成后,标记第一脏数据块相应部分可更新;
具体的,将所述第一脏数据块插入所述脏数据块链表,并在第二脏数据块的冲突区域的数据下刷完成之后,更新所述第一脏数据块和所述第二脏数据块的数据状态;
其中,若存在下刷冲突时,新的脏数据块,即第一脏数据块也能直接插入脏数据块链表,而不需要下刷完成后才插入脏数据块链表。由于这种情况无法将旧的冲突数据直接淘汰,因此,缓存中同时存在新数据和旧数据,在新的脏数据块,即第一脏数据块中会标记这部分的冲突数据是最新。
具体的,所述方法还包括:为每一脏数据块生成一个位图集合(Bitmap集合),即对每一个脏数据块(DirtyNode)的数据用一组位图(Bitmap)管理数据的状态。Bitmap的每1bit代表相应位置的单位数据,一个Bitmap代表单位数据的集合。为方便描述原理,假设固态硬盘支持的最大IO大小为128KB,Bitmap根据脏数据块的地址范围在128KB中的相对位置来生成,比如可下刷数据位图(DirtyBitmap)为BIT_MASK(LEN)<<(SLBA%32)。
具体的,对LEN有BIT_MASK操作,其中,BIT_MASK(LEN)用于生成长度为LEN的全1bit,例如:BIT_MASK(6)就是0b111111。每1bit代表一个4KB数据,BIT_MASK(LEN)代表了长度为LEN的数据。
可以理解的是,若单位数据粒度为4KB,最大IO为128KB时,需要用32bit表示这个IO的数据状态。为了让位图能够表示其数据在一个128K数据中的相对位置,就要对其进行左移位,(SLBA%32)代表向左移位。
在本申请实施例中,在缓存中查找某个脏数据块时,先找到脏数据块属于哪一个128K的数据,再查询该128K的数据中的位图。
在本申请实施例中,Bitmap集合中包括多个位图(Bitmap),即,每一位图集合包括:
可下刷数据位图(DirtyBitmap),用于标识该脏数据块可下刷到闪存的数据;具体的,标识DirtyNode中可下刷到NAND的数据,bit的值为1代表可下刷状态。Bitmap中可能有不连续的bit段,因此DirtyNode的数据可能要下刷多次。数据下刷后将相应bit段清0。DirtyBitmap为0时并不一定代表DirtyNode的全部数据已经下刷了,需要考虑等待下刷数据位图(PendingBitmap)。本申请实施例中,等待下刷数据位图(PendingBitmap)的初始值为LEN<<(SLBA%32)。
有效数据位图(ValidBitmap),用于标识该脏数据块中的有效数据;具体的,用于标识DirtyNode中有效的数据。当数据被“无效化”时需要将相应bit清0。当读命中缓存时需要对该Bitmap进行检查。其初始值与DirtyBitmap相同。例如:脏数据块DirtyNodeA的地址范围是[0,4],它的初始有效数据位图(ValidBitmap)就是0b1111,假设后面有新的脏数据块DirtyNodeB[2,4],DirtyNodeB的初始有效数据位图(ValidBitmap)是0b1100,由于DirtyNodeA和DirtyNodeB有冲突区域[2,4]并且DirtyNodeB比DirtyNodeA新,因此DirtyNodeA的有效数据就减少了,DirtyNodeA的有效数据位图(ValidBitmap)更新为0b11。
等待下刷数据位图(PendingBitmap),用于标识该脏数据块中的等待下刷到闪存的数据;具体的,用于标识DirtyNode中等待下刷的数据。一般是在写冲突时旧数据正在下刷,冲突范围的新DirtyNode脏数据块的数据需要延迟更新到缓存中。在旧数据下刷完成后,PendingBitmap根据下刷的数据对相应的bit段清0,并对DirtyBitmap进行更新。
下发下刷数据位图(SentBitmap),用于标识该脏数据块中的已下发下刷到闪存的数据;具体的,用于标识DirtyNode中已下发下刷的数据。这个位图代表了正在下刷到NAND的数据和已经下刷完成的数据,用于辅助更新可下刷数据位图(DirtyBitmap)。
下刷完成数据位图(DoneBitmap),用于标识该脏数据块中下刷完成的数据。具体的,用于标识DirtyNode中已下刷完成的数据,一般与下发下刷数据位图(SentBitmap)一起计算当前正在下刷的数据,即当前正在下刷的数据=下发下刷数据位图-下刷完成数据位图。
在本申请实施例中,所述方法还包括:
在将所述第一脏数据块插入所述脏数据块链表之前,将所述第一脏数据块对应的等待下刷数据位图中与冲突区域的数据对应的数据位进行置一;
所述在第二脏数据块的冲突区域的数据下刷完成之后,更新所述第一脏数据块和所述第二脏数据块的数据状态,包括:
将第二脏数据块对应的下刷完成数据位图中与冲突区域的数据对应的数据位进行置一;
将第一脏数据块对应的等待下刷数据位图中与冲突区域的数据对应的数据位进行置零;
将第一脏数据块对应的可下刷数据位图中与冲突区域的数据对应的数据位进行置一。
在本申请实施例中,有效数据位图用于用于标识脏数据块中的有效数据,因此,将某一脏数据块的冲突区域的数据标记为无效,意味着将该脏数据块对应的有效数据位图中与冲突区域的数据对应的数据位进行置零,即,将相应bit清0,以标记数据无效,例如:将所述第二脏数据块中的冲突区域的数据标记为无效,包括:将所述第二脏数据块对应的有效数据位图中与冲突区域的数据对应的数据位进行置零;或者,将第三脏数据块的冲突区域的数据标记为无效,包括:将第三脏数据块对应的有效数据位图中与冲突区域的数据对应的数据位进行置零。
在本申请实施例中,由于设置了位图集合,因此,固态硬盘可以通过对位图(Bitmap)的快速运算,例如:二进制的与或运算,来对DirtyNode的数据的状态进行更新。可以理解的是,位图集合仅在写冲突时使用,有利于减少IO路径的计算,提高系统性能。
步骤S707:将第三脏数据块的冲突区域的数据标记为无效;
具体的,将第三脏数据块对应的有效数据位图中与冲突区域的数据对应的数据位进行置零。
步骤S708:第二脏数据块的冲突区域的数据标记为无效,第一脏数据块直接插入脏数据块链表,数据无需拷贝;
具体的,将所述第二脏数据块对应的有效数据位图中与冲突区域的数据对应的数据位进行置零,并且,由于冲突区域的数据不处于下刷状态,因此,将第一脏数据块直接插入脏数据块链表,数据无需拷贝。
步骤S709:第一脏数据块插入脏数据块链表;
具体的,若脏数据块链表中不存在地址范围冲突的第二脏数据块,则将第一脏数据块直接插入脏数据块链表;
步骤S710:缓存数据完成更新;
在本申请实施例中,为了判断是否存在冲突,所述方法还包括:
为每一脏数据块生成一个第一冲突标记和一个第二冲突标记,其中,第一冲突标记用于标记该脏数据块是否与一个旧的脏数据块存在地址范围冲突,第二冲突标记用于标记该脏数据块是否与一个新的脏数据块存在地址范围冲突;
若第一脏数据块存在与所述脏数据块链表中的第二脏数据块存在地址范围冲突,则将第一脏数据块对应的第一冲突标记进行置一,并将第二脏数据块对应的第二冲突标记进行置一。
例如:通过第一冲突标记(hasOldOverlap)和第二冲突标记(hasNewOverlap)标记一个DirtyNode中的冲突情况,其中,第一冲突标记用于标记该脏数据块是否与一个旧的脏数据块存在地址范围冲突,第二冲突标记用于标记该脏数据块是否与一个新的脏数据块存在地址范围冲突。比如:在发生冲突时,新的脏数据块DirtyNode的hasOldOverlap标记置1,旧的脏数据块DirtyNode的hasNewOverlap标记置1。如果一个脏数据块DirtyNode的hasOldOverlap/hasNewOverlap标记都为0,则代表该脏数据块DirtyNode未与其他脏数据块DirtyNode发生过冲突。
请再参阅图8,图8是本申请实施例提供的一种第一脏数据块插入脏数据块链表的流程示意图;
如图8所示,该第一脏数据块插入脏数据块链表的流程,包括:
步骤S801:准备插入新的脏数据块nodeA;
具体的,当固态硬盘接收完一个新的写命令数据后生成nodeA,记录数据地址范围等信息;
步骤S802:是否存在nodeB与nodeA冲突;
具体的,nodeA在插入脏数据块链表时,根据地址范围查询是否与脏数据块上的其它node有写冲突,如果没有冲突就可以直接插入到链表上,并生成一个下刷项准备数据下刷,缓存就更新完成;
步骤S803:对nodeA和nodeB的Bitmap进行初始化,更新nodeB的有效数据;
具体的,如果在脏数据块链表中存在nodeB与nodeA冲突,就根据nodeB和nodeA记录的地址信息,分别为它们初始化各自的Bitmap集合,并对nodeA的hasOldOverlap标记置1,表示与一个旧的node有冲突;对nodeB的hasNewOverlap标记置1标识,表示与一个新的node有冲突。nodeA冲突部分的数据更新,所以需要置nodeB的这部分数据无效,更新nodeB的ValidBitmap,将相应位置清0;
步骤S804:冲突部分是否处于下刷状态;
具体的,根据nodeB的下刷项信息可以判断冲突部分的数据是否处于下刷状态,其中,所述下刷项信息是由Bitmap生成的。Bitmap中标识了哪些数据是可下刷的,哪些数据已经下刷了,哪些数据要延迟下刷的,可以在nodeB对应的Bitmap集合中找到这些信息,即所述nodeB对应的Bitmap集合中的可下刷数据位图(DirtyBitmap)、有效数据位图(ValidBitmap)、等待下刷数据位图(PendingBitmap)、下发下刷数据位图(SentBitmap)以及下刷完成数据位图(DoneBitmap)。
步骤S805:冲突部分是否是nodeC的冲突部分;
具体的,如果冲突部分的数据正在下刷,再检查是否存在nodeC与这部分数据存在冲突,如果nodeC中存在一部分数据延迟下刷,由于nodeA的数据是最新的,因此nodeC的这部分数据就无效了,将nodeC的PendingBitmap,将相应位置清0,对nodeA的PendingBitmap相应位置1;
步骤S806:更新nodeC的缓存数据状态;
步骤S807:根据冲突信息更新nodeA和nodeB的缓存数据状态;
具体的,由于nodeB中冲突数据正在下刷,nodeA的这部分数据就需要延迟更新,对nodeA的PendingBitmap进行更新,将相应位置1,对nodeB的DirtyBitmap进行更新,将冲突的位置清0,nodeB根据DirtyBitmap更新其下刷项;
步骤S808:插入nodeA到链表上;
具体的,在冲突部分的数据下刷完成之后,nodeA和nodeB的数据状态更新后,nodeA可以插入到脏数据块链表上;如果冲突部分的数据未下刷,冲突处理完成,nodeA可以插入到脏数据块链表上,缓存数据也完成更新。
请再参阅图9,图9是本申请实施例提供的一种第一脏数据块缓存数据的更新流程示意图;
如图9所示,该第一脏数据块缓存数据的更新流程,包括:
步骤S901:nodeB上冲突数据下刷完成;
步骤S902:更新nodeB的下刷数据状态;
具体的,当nodeB数据下刷完成后,根据下刷完成的数据更新数据完成状态,将DoneBitmap相应位置1;
步骤S903:在脏数据块链表上查找与之冲突的nodeA;
具体的,由于nodeB的hasNewOverlap标记置1,则根据nodeB的数据范围在脏数据块链表上可以查找到与之冲突的nodeA;
步骤S904:更新nodeA的缓存数据状态;
具体的,根据nodeB的数据完成状态DoneBitmap,和nodeA的等待下刷数据状态PendingBitmap,可以计算出nodeA中不再需要等待下刷的数据,将其转化为可下刷的数据,更新nodeA的PendingBitmap/DirtyBitmap;
步骤S905:nodeA在缓存更新完成;
具体的,当nodeA中没有等待下刷数据时,即PendingBitmap为0,nodeA在缓存中没有任何冲突,完成nodeA在缓存中的更新。
在本申请实施例中,通过提供一种缓存管理方法应用于固态硬盘,固态硬盘包括缓存空间,缓存空间包括一脏数据块链表,该方法包括:获取写命令,生成第一脏数据块,用于记录写命令数据信息;若第一脏数据块与脏数据块链表中的第二脏数据块存在地址范围冲突,将第二脏数据块中的冲突区域的数据标记为无效,并将第一脏数据块插入脏数据块链表。通过在第一脏数据块与脏数据块链表中的第二脏数据块存在地址范围冲突的时候,将第二脏数据块中的冲突区域的数据标记为无效,并将第一脏数据块插入脏数据块链表,本申请能够将缓存插入和数据更新分离,实现缓存快速插入,减小了写冲突场景下的命令时延,提高固态硬盘的系统性能。
本申请实施例还提供了一种非易失性计算机存储介质,所述计算机存储介质存储有计算机可执行指令,该计算机可执行指令被一个或多个处理器执行,例如上述一个或多个处理器可执行上述任意方法实施例中的缓存管理方法,例如,执行上述任意方法实施例中的缓存管理方法,例如,执行以上描述的各个步骤。
以上所描述的装置或设备实施例仅仅是示意性的,其中所述作为分离部件说明的单元模块可以是或者也可以不是物理上分开的,作为模块单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络模块单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
通过以上的实施方式的描述,本领域的技术人员可以清楚地了解到各实施方式可借助软件加通用硬件平台的方式来实现,当然也可以通过硬件。基于这样的理解,上述技术方案本质上或者说对相关技术做出贡献的部分可以以软件产品的形式体现出来,该计算机软件产品可以存储在计算机可读存储介质中,如ROM/RAM、磁碟、光盘等,包括若干指令用直至得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行各个实施例或者实施例的某些部分所述的方法。
最后应说明的是:以上实施例仅用以说明本申请的技术方案,而非对其限制;在本申请的思路下,以上实施例或者不同实施例中的技术特征之间也可以进行组合,步骤可以以任意顺序实现,并存在如上所述的本申请的不同方面的许多其它变化,为了简明,它们没有在细节中提供;尽管参照前述实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (10)

1.一种缓存管理方法,其特征在于,应用于固态硬盘,所述固态硬盘包括缓存空间,所述缓存空间包括一脏数据块链表,所述方法包括:
获取写命令,生成第一脏数据块,用于记录写命令数据信息;
若所述第一脏数据块与所述脏数据块链表中的第二脏数据块存在地址范围冲突,将所述第二脏数据块中的冲突区域的数据标记为无效,并将所述第一脏数据块插入所述脏数据块链表。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
若所述第一脏数据块与所述脏数据块链表中的第二脏数据块存在地址范围冲突,进一步判断第二脏数据块的冲突区域的数据是否处于下刷状态;
若是,则将所述第一脏数据块插入所述脏数据块链表,并在第二脏数据块的冲突区域的数据下刷完成之后,更新所述第一脏数据块和所述第二脏数据块的数据状态;
若否,则将所述第二脏数据块中的冲突区域的数据标记为无效,并将所述第一脏数据块插入所述脏数据块链表。
3.根据权利要求2所述的方法,其特征在于,所述方法还包括:
若第二脏数据块的冲突区域的数据处于下刷状态,进一步判断冲突区域的数据是否与所述脏数据块链表中的第三脏数据块的冲突区域的数据相同;
若是,则将所述第三脏数据块中的冲突区域的数据标记为无效;
若否,则更新所述第一脏数据块和所述第三脏数据块的数据状态,并将所述第一脏数据块插入所述脏数据块链表。
4.根据权利要求3所述的方法,其特征在于,所述方法还包括:
为每一脏数据块生成一个位图集合,其中,每一位图集合包括:
可下刷数据位图,用于标识该脏数据块可下刷到闪存的数据;
有效数据位图,用于标识该脏数据块中的有效数据;
等待下刷数据位图,用于标识该脏数据块中的等待下刷到闪存的数据;
下发下刷数据位图,用于标识该脏数据块中的已下发下刷到闪存的数据;
下刷完成数据位图,用于标识该脏数据块中下刷完成的数据。
5.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在将所述第一脏数据块插入所述脏数据块链表之前,将所述第一脏数据块对应的等待下刷数据位图中与冲突区域的数据对应的数据位进行置一;
所述在第二脏数据块的冲突区域的数据下刷完成之后,更新所述第一脏数据块和所述第二脏数据块的数据状态,包括:
将第二脏数据块对应的下刷完成数据位图中与冲突区域的数据对应的数据位进行置一;
将第一脏数据块对应的等待下刷数据位图中与冲突区域的数据对应的数据位进行置零;
将第一脏数据块对应的可下刷数据位图中与冲突区域的数据对应的数据位进行置一。
6.根据权利要求4所述的方法,其特征在于,所述将所述第二脏数据块中的冲突区域的数据标记为无效,包括:
将所述第二脏数据块对应的有效数据位图中与冲突区域的数据对应的数据位进行置零。
7.根据权利要求4所述的方法,其特征在于,所述更新所述第一脏数据块和所述第三脏数据块的数据状态,包括:
将第三脏数据块对应的等待下刷数据位图中与冲突区域的数据对应的数据位进行置零,同时将第三脏数据块对应的有效数据位图中与冲突区域的数据对应的数据位进行置零;
将第一脏数据块对应的等待下刷数据位图中与冲突区域的数据对应的数据位进行置一。
8.根据权利要求1所述的方法,其特征在于,所述方法还包括:
为每一脏数据块生成一个第一冲突标记和一个第二冲突标记,其中,第一冲突标记用于标记该脏数据块是否与一个旧的脏数据块存在地址范围冲突,第二冲突标记用于标记该脏数据块是否与一个新的脏数据块存在地址范围冲突;
若第一脏数据块存在与所述脏数据块链表中的第二脏数据块存在地址范围冲突,则将第一脏数据块对应的第一冲突标记进行置一,并将第二脏数据块对应的第二冲突标记进行置一。
9.一种固态硬盘控制器,应用于固态硬盘,所述固态硬盘包括至少一个闪存介质,其特征在于,所述固态硬盘控制器用于执行如权利要求1-8任一项所述的缓存管理方法。
10.一种固态硬盘,其特征在于,包括:
如权利要求9所述的固态硬盘控制器;
至少一个闪存介质,与所述固态硬盘控制器通信连接。
CN202110808238.7A 2021-07-16 2021-07-16 缓存管理方法、固态硬盘控制器及固态硬盘 Active CN113655955B (zh)

Priority Applications (3)

Application Number Priority Date Filing Date Title
CN202110808238.7A CN113655955B (zh) 2021-07-16 2021-07-16 缓存管理方法、固态硬盘控制器及固态硬盘
PCT/CN2022/091221 WO2023284379A1 (zh) 2021-07-16 2022-05-06 缓存管理方法、固态硬盘控制器及固态硬盘
US18/413,162 US20240152454A1 (en) 2021-07-16 2024-01-16 Cache management method, solid state drive controller and solid state drive

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202110808238.7A CN113655955B (zh) 2021-07-16 2021-07-16 缓存管理方法、固态硬盘控制器及固态硬盘

Publications (2)

Publication Number Publication Date
CN113655955A true CN113655955A (zh) 2021-11-16
CN113655955B CN113655955B (zh) 2023-05-16

Family

ID=78477439

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202110808238.7A Active CN113655955B (zh) 2021-07-16 2021-07-16 缓存管理方法、固态硬盘控制器及固态硬盘

Country Status (3)

Country Link
US (1) US20240152454A1 (zh)
CN (1) CN113655955B (zh)
WO (1) WO2023284379A1 (zh)

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023284379A1 (zh) * 2021-07-16 2023-01-19 深圳大普微电子科技有限公司 缓存管理方法、固态硬盘控制器及固态硬盘
CN117055820A (zh) * 2023-10-09 2023-11-14 苏州元脑智能科技有限公司 一种固态硬盘的命令处理方法、固态硬盘和存储介质

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117406933B (zh) * 2023-12-12 2024-03-29 深圳大普微电子股份有限公司 固态硬盘数据处理方法、装置、电子设备及存储介质

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103136121A (zh) * 2013-03-25 2013-06-05 中国人民解放军国防科学技术大学 一种固态盘的缓存管理方法
CN103377152A (zh) * 2012-04-26 2013-10-30 深圳市朗科科技股份有限公司 固态硬盘的写操作控制方法及写操作装置
WO2016095761A1 (zh) * 2014-12-16 2016-06-23 华为技术有限公司 缓存的处理方法和装置
US20170177233A1 (en) * 2015-12-21 2017-06-22 Ocz Storage Solutions, Inc. Dual buffer solid state drive
CN106897231A (zh) * 2017-02-28 2017-06-27 郑州云海信息技术有限公司 一种基于高性能存储介质的数据缓存方法及系统
CN111563053A (zh) * 2020-07-10 2020-08-21 阿里云计算有限公司 处理Bitmap数据的方法以及装置

Family Cites Families (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113626346B (zh) * 2021-06-30 2023-07-14 苏州浪潮智能科技有限公司 一种固态硬盘的数据保护方法、装置、设备及介质
CN113655955B (zh) * 2021-07-16 2023-05-16 深圳大普微电子科技有限公司 缓存管理方法、固态硬盘控制器及固态硬盘

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN103377152A (zh) * 2012-04-26 2013-10-30 深圳市朗科科技股份有限公司 固态硬盘的写操作控制方法及写操作装置
CN103136121A (zh) * 2013-03-25 2013-06-05 中国人民解放军国防科学技术大学 一种固态盘的缓存管理方法
WO2016095761A1 (zh) * 2014-12-16 2016-06-23 华为技术有限公司 缓存的处理方法和装置
US20170177233A1 (en) * 2015-12-21 2017-06-22 Ocz Storage Solutions, Inc. Dual buffer solid state drive
CN106897231A (zh) * 2017-02-28 2017-06-27 郑州云海信息技术有限公司 一种基于高性能存储介质的数据缓存方法及系统
CN111563053A (zh) * 2020-07-10 2020-08-21 阿里云计算有限公司 处理Bitmap数据的方法以及装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2023284379A1 (zh) * 2021-07-16 2023-01-19 深圳大普微电子科技有限公司 缓存管理方法、固态硬盘控制器及固态硬盘
CN117055820A (zh) * 2023-10-09 2023-11-14 苏州元脑智能科技有限公司 一种固态硬盘的命令处理方法、固态硬盘和存储介质
CN117055820B (zh) * 2023-10-09 2024-02-09 苏州元脑智能科技有限公司 一种固态硬盘的命令处理方法、固态硬盘和存储介质

Also Published As

Publication number Publication date
US20240152454A1 (en) 2024-05-09
CN113655955B (zh) 2023-05-16
WO2023284379A1 (zh) 2023-01-19

Similar Documents

Publication Publication Date Title
CN113655955B (zh) 缓存管理方法、固态硬盘控制器及固态硬盘
US20180121351A1 (en) Storage system, storage management apparatus, storage device, hybrid storage apparatus, and storage management method
US9384123B2 (en) Memory system
US9003099B2 (en) Disc device provided with primary and secondary caches
US20080177937A1 (en) Storage apparatus, computer system, and method for managing storage apparatus
US8825946B2 (en) Memory system and data writing method
US9122586B2 (en) Physical-to-logical address map to speed up a recycle operation in a solid state drive
US10740013B2 (en) Non-volatile data-storage device with spare block pools using a block clearing method
CN112506438B (zh) 一种映射表管理方法及固态硬盘
US11397669B2 (en) Data storage device and non-volatile memory control method
JP2002366423A (ja) フラッシュメモリの管理方法
KR20090117939A (ko) 메모리 시스템
US11645006B2 (en) Read performance of memory devices
US9176866B2 (en) Active recycling for solid state drive
US10635356B2 (en) Data management method and storage controller using the same
JP6167646B2 (ja) 情報処理装置、制御回路、制御プログラム、および制御方法
US11307979B2 (en) Data storage device and non-volatile memory control method
US9378130B2 (en) Data writing method, and memory controller and memory storage apparatus using the same
CN110568918A (zh) 停电时减少功耗的数据存储方法及数据存储设备
WO2017176860A1 (en) 3d stackable hybrid phase change memory with improved endurance and non-volatility
CN113467713A (zh) 数据分离方法及固态硬盘
CN116540950B (zh) 一种存储器件及其写入数据的控制方法
JP2005115562A (ja) フラッシュrom制御装置
CN108255437B (zh) 数据贮存装置及方法
US11748023B2 (en) Data storage device and non-volatile memory control method

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