CN116755635B - 一种硬盘控制器缓存系统、方法、硬盘设备及电子设备 - Google Patents

一种硬盘控制器缓存系统、方法、硬盘设备及电子设备 Download PDF

Info

Publication number
CN116755635B
CN116755635B CN202311024503.8A CN202311024503A CN116755635B CN 116755635 B CN116755635 B CN 116755635B CN 202311024503 A CN202311024503 A CN 202311024503A CN 116755635 B CN116755635 B CN 116755635B
Authority
CN
China
Prior art keywords
command
chain
buffer
index
queue
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
CN202311024503.8A
Other languages
English (en)
Other versions
CN116755635A (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.)
Suzhou Inspur Intelligent Technology Co Ltd
Original Assignee
Suzhou Inspur Intelligent 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 Suzhou Inspur Intelligent Technology Co Ltd filed Critical Suzhou Inspur Intelligent Technology Co Ltd
Priority to CN202311024503.8A priority Critical patent/CN116755635B/zh
Publication of CN116755635A publication Critical patent/CN116755635A/zh
Application granted granted Critical
Publication of CN116755635B publication Critical patent/CN116755635B/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/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/0658Controller construction 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/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/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]
    • 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)
  • Human Computer Interaction (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Memory System Of A Hierarchy Structure (AREA)

Abstract

本申请提供一种硬盘控制器缓存系统、方法、硬盘设备及电子设备,该系统包括:命令采集模块和链式缓存器;命令采集模块用于采集主机中任一命令队列下发的待缓存命令,并将待缓存命令缓存至链式缓存器;链式缓存器用于将得到的待缓存命令缓存至命令缓存链的空闲头指针指向的节点;其中,链式缓存器包括链信息缓存器及命令缓存链;链信息缓存器用于缓存空闲头指数、空闲尾指数及各命令队列对应的头指数和尾指数;命令缓存链用于缓存各命令队列下发的命令及各命令所在的节点对应的链连接指数。上述方案提供的系统,通过将待缓存命令缓存至命令缓存链,以在硬盘控制器实现命令链式缓存,节省了硬盘控制器的缓存资源。

Description

一种硬盘控制器缓存系统、方法、硬盘设备及电子设备
技术领域
本申请涉及计算机技术领域,尤其涉及一种硬盘控制器缓存系统、方法、硬盘设备及电子设备。
背景技术
目前,硬盘控制器是硬盘设备的重要部件,用于接收和缓存主机下发的命令,并按序执行已缓存的命令。
在现有技术中,主机通常是使用多个命令队列向硬盘控制器下发命令,硬盘控制器一般设有多个与命令队列一一对应的命令缓存队列,用于独立缓存各命令队列下发的命令。
但是,由于与硬盘控制器进行实际交互的命令队列的数量由主机决定,因此常常出现硬盘控制器的部分命令缓存队列被闲置,浪费了硬盘控制器的缓存资源。
发明内容
本申请提供一种硬盘控制器缓存系统、方法、硬盘设备及电子设备,以解决现有技术浪费了硬盘控制器的缓存资源等缺陷。
本申请第一个方面提供一种硬盘控制器缓存系统,包括:命令采集模块和链式缓存器;
所述命令采集模块用于采集主机中任一命令队列下发的待缓存命令,并将所述待缓存命令缓存至所述链式缓存器;
所述链式缓存器用于将得到的待缓存命令缓存至命令缓存链的空闲头指针指向的节点;其中,所述链式缓存器包括链信息缓存器及命令缓存链;
所述链信息缓存器用于缓存空闲头指数、空闲尾指数及各所述命令队列对应的头指数和尾指数;
所述命令缓存链用于缓存各所述命令队列下发的命令及各命令所在的节点对应的链连接指数。
在一些可选的实施方式中,所述链式缓存器,具体用于:
确定所述待缓存命令对应的目标命令队列;
在将待缓存命令缓存至命令缓存链的空闲头指针指向的节点后,若所述目标命令队列的头指数有效,则将所述空闲头指针指向的节点的标记值,作为所述目标命令队列的当前尾指针指向的节点的链连接指数;
将所述目标命令队列的尾指数更新为所述空闲头指针指向的节点的标记值;
将所述空闲头指针指向的节点的链连接指数,作为新的空闲头指数。
在一些可选的实施方式中,所述链式缓存器,还用于:
若所述目标命令队列的头指数无效,则将所述空闲头指针指向的节点的标记值,作为所述目标命令队列的头指数。
在一些可选的实施方式中,该系统还包括:命令执行模块;
所述命令执行模块用于在所述链式缓存器中读取待执行命令,并根据所述待执行命令对应的目标执行命令队列,确定目标逻辑通道;
其中,所述命令执行模块包括若干个与所述命令队列一一对应的逻辑通道。
在一些可选的实施方式中,所述命令执行模块,具体用于:
向所述链式缓存器发送命令读取需求,以使所述链式缓存器按照所述命令读取需求向所述命令执行模块传输所述待执行命令。
在一些可选的实施方式中,所述链式缓存器,具体用于:
根据所述命令读取需求,确定目标执行命令队列及命令待读取数;
将所述链信息缓存器中缓存的所述目标执行命令队列的头指数,作为当前指数;
从所述命令缓存链中读取所述当前指数所指向的节点缓存的待执行命令;
将所述待执行命令传输至所述命令执行模块,更新所述命令待读取数减1;
判断更新后的命令待读取数是否为0;
若更新后的命令待读取数不为0,则将所述头指数所对应的节点的链连接指数,作为当前指数;
返回至所述从所述命令缓存链中读取所述当前指数所指向的节点缓存的待执行命令的步骤。
在一些可选的实施方式中,所述链式缓存器,还用于:
若更新后的命令待读取数为0,则将所述空闲尾指数所对应的节点的链连接指数更新为所述目标执行命令队列的头指数。
在一些可选的实施方式中,所述链式缓存器,还用于:
若所述当前指数等于所述目标执行命令队列的尾指数,则将所述目标执行命令队列的头指数标记为无效。
在一些可选的实施方式中,所述链式缓存器,还用于:
若所述当前指数不等于所述目标执行命令队列的尾指数,则将所述目标执行命令队列的头指数更新为所述当前指数所对应的节点的链连接指数。
在一些可选的实施方式中,所述链式缓存器,还用于:
将空闲尾指数更新为所述当前指数。
在一些可选的实施方式中,所述命令采集模块包括:命令队尾门铃寄存器和DMA引擎;
所述主机在任一所述命令队列的队列尾指针发生变化时,将最新队列尾指针数写入所述命令队尾门铃寄存器;
所述DMA引擎用于在所述命令队尾门铃寄存器的被写入次数达到预设阈值时,向主机发起DMA操作,以采集所述主机中任一命令队列下发的命令。
在一些可选的实施方式中,所述DMA引擎,具体用于:
当采集任一所述命令队列下发的命令时,根据所述命令队列的标识信息,确定DMA任务信息;其中,所述DMA任务信息包括源地址、目标地址和命令长度;
按照所述DMA任务信息,向主机发起DMA操作。
在一些可选的实施方式中,所述DMA引擎,还用于:
为各所述命令队列分配虚拟地址,以将所述虚拟地址作为所述命令队列的目标地址。
在一些可选的实施方式中,该系统还包括:缓存空间管理器;
所述缓存空间管理器用于监测所述链式缓存器的剩余缓存空间;
所述DMA引擎,具体用于:
当所述剩余缓存空间满足预设标准时,按照所述DMA任务信息,向主机发起DMA操作。
在一些可选的实施方式中,所述DMA引擎,具体用于:
判断所述剩余缓存空间是否大于当前DMA任务大小;
若所述剩余缓存空间大于当前DMA任务大小,则确定所述剩余缓存空间满足预设标准;
若所述剩余缓存空间不大于当前DMA任务大小,则拆分执行当前DMA任务。
在一些可选的实施方式中,所述缓存空间管理器,具体用于:
根据所述链式缓存器的总缓存空间和当前缓存空间占用量,确定所述链式缓存器的剩余缓存空间。
在一些可选的实施方式中,所述链式缓存器的总缓存空间根据所述命令队列的命令处理目标速率、命令大小及DMA任务延时确定。
本申请第二个方面提供一种硬盘控制器缓存方法,包括:
采集主机中任一命令队列下发的待缓存命令;
将所述待缓存命令,缓存至命令缓存链的空闲头指针指向的节点;其中,链式缓存器包括链信息缓存器及命令缓存链;
所述链信息缓存器用于缓存空闲头指数、空闲尾指数及各所述命令队列对应的头指数和尾指数;
所述命令缓存链用于缓存各所述命令队列下发的命令及各命令所在的节点对应的链连接指数。
在一些可选的实施方式中,所述基于所述命令缓存链缓存各所述命令队列下发的命令及各命令所在的节点对应的链连接指数,包括:
确定所述待缓存命令对应的目标命令队列;
在将待缓存命令缓存至命令缓存链的空闲头指针指向的节点后,若所述目标命令队列的头指数有效,则将所述空闲头指针指向的节点的标记值,作为所述目标命令队列的当前尾指针指向的节点的链连接指数;
将所述目标命令队列的尾指数更新为所述空闲头指针指向的节点的标记值;
将所述空闲头指针指向的节点的链连接指数,作为新的空闲头指数。
在一些可选的实施方式中,所述方法,还包括:
若所述目标命令队列的头指数无效,则将所述空闲头指针指向的节点的标记值,作为所述目标命令队列的头指数。
在一些可选的实施方式中,所述方法,还包括:
在所述链式缓存器中读取待执行命令,并根据所述待执行命令对应的目标执行命令队列,确定目标逻辑通道;所述链式缓存器包括命令缓存链;
其中,所述命令执行模块包括若干个与所述命令队列一一对应的逻辑通道。
在一些可选的实施方式中,所述在所述链式缓存器中读取待执行命令,包括:
向链式缓存器发送命令读取需求,以使所述链式缓存器按照所述命令读取需求向所述命令执行模块传输所述待执行命令。
在一些可选的实施方式中,所述向链式缓存器发送命令读取需求,以使所述链式缓存器按照所述命令读取需求向所述命令执行模块传输所述待执行命令,包括:
根据所述命令读取需求,确定目标执行命令队列及命令待读取数;
将所述链信息缓存器中缓存的所述目标执行命令队列的头指数,作为当前指数;
从所述命令缓存链中读取所述当前指数所指向的节点缓存的待执行命令;
将所述待执行命令传输至所述命令执行模块,更新所述命令待读取数减1;
判断更新后的命令待读取数是否为0;
若更新后的命令待读取数不为0,则将所述头指数所对应的节点的链连接指数,作为当前指数;
返回至所述从所述命令缓存链中读取所述当前指数所指向的节点缓存的待执行命令的步骤。
在一些可选的实施方式中,所述方法,还包括:
若更新后的命令待读取数为0,则将所述空闲尾指数所对应的节点的链连接指数更新为所述目标执行命令队列的头指数。
在一些可选的实施方式中,所述方法,还包括:
若所述当前指数等于所述目标执行命令队列的尾指数,则将所述目标执行命令队列的头指数标记为无效。
在一些可选的实施方式中,所述方法,还包括:
若所述当前指数不等于所述目标执行命令队列的尾指数,则将所述目标执行命令队列的头指数更新为所述当前指数所对应的节点的链连接指数。
在一些可选的实施方式中,所述方法,还包括:
将空闲尾指数更新为所述当前指数。
在一些可选的实施方式中,所述采集主机中任一命令队列下发的待缓存命令,包括:
在所述命令队尾门铃寄存器的被写入次数达到预设阈值时,基于DMA引擎,向主机发起DMA操作,以采集所述主机中任一命令队列下发的命令;
其中,所述主机在任一所述命令队列的队列尾指针发生变化时,将最新队列尾指针数写入所述命令队尾门铃寄存器。
在一些可选的实施方式中,所述基于DMA引擎,向主机发起DMA操作,以采集所述主机中任一命令队列下发的命令,包括:
当采集任一所述命令队列下发的命令时,根据所述命令队列的标识信息,确定DMA任务信息;其中,所述DMA任务信息包括源地址、目标地址和命令长度;
按照所述DMA任务信息,向主机发起DMA操作。
在一些可选的实施方式中,所述方法,还包括:
为各所述命令队列分配虚拟地址,以将所述虚拟地址作为所述命令队列的目标地址。
在一些可选的实施方式中,所述方法,还包括:
监测所述链式缓存器的剩余缓存空间;
所述按照所述DMA任务信息,向主机发起DMA操作,包括:
当所述剩余缓存空间满足预设标准时,按照所述DMA任务信息,向主机发起DMA操作。
在一些可选的实施方式中,所述方法,还包括:
判断所述剩余缓存空间是否大于当前DMA任务大小;
若所述剩余缓存空间大于当前DMA任务大小,则确定所述剩余缓存空间满足预设标准;
若所述剩余缓存空间不大于当前DMA任务大小,则拆分执行当前DMA任务。
在一些可选的实施方式中,所述方法,还包括:
根据所述链式缓存器的总缓存空间和当前缓存空间占用量,确定所述链式缓存器的剩余缓存空间。
在一些可选的实施方式中,所述链式缓存器的总缓存空间根据所述命令队列的命令处理目标速率、命令大小及DMA任务延时确定。
本申请第三方面提供一种硬盘设备,包括:硬盘控制器主体及如上第一个方面以及第一个方面各种可能的设计所述的硬盘控制器缓存系统。
本申请第四个方面提供一种电子设备,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如上第二个方面以及第二个方面各种可能的设计所述的方法。
本申请第五个方面提供一种计算机可读存储介质,所述计算机可读存储介质中存储有计算机执行指令,当处理器执行所述计算机执行指令时,实现如上第二个方面以及第二个方面各种可能的设计所述的方法。
本申请技术方案,具有如下优点:
本申请提供一种硬盘控制器缓存系统、方法、硬盘设备及电子设备,该系统包括:命令采集模块和链式缓存器;命令采集模块用于采集主机中任一命令队列下发的待缓存命令,并将待缓存命令缓存至链式缓存器;链式缓存器用于将得到的待缓存命令缓存至命令缓存链的空闲头指针指向的节点;其中,链式缓存器包括链信息缓存器及命令缓存链;链信息缓存器用于缓存空闲头指数、空闲尾指数及各命令队列对应的头指数和尾指数;命令缓存链用于缓存各命令队列下发的命令及各命令所在的节点对应的链连接指数。上述方案提供的系统,通过将待缓存命令缓存至命令缓存链,以在硬盘控制器实现命令链式缓存,节省了硬盘控制器的缓存资源。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作一简单地介绍,显而易见地,下面描述中的附图是本申请的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。
图1为本申请实施提供的示例性的命令队列结构示意图;
图2为硬盘控制器传统缓存系统的结构示意图;
图3为本申请实施例提供的硬盘控制器缓存系统的结构示意图;
图4为本申请实施例提供的链信息缓存器的结构示意图;
图5为本申请实施例提供的命令缓存链的结构示意图;
图6为本申请实施例提供的链式缓存器的结构示意图;
图7为本申请实施例提供的链式缓存器的命令输出流程示意图;
图8为本申请实施例提供的硬盘控制器缓存系统的整体结构示意图;
图9为本申请实施例提供的DMA任务延时的数据流示意图;
图10为本申请实施例提供的硬盘控制器缓存方法的流程示意图;
图11为本申请实施例提供的硬盘设备的结构示意图;
图12为本申请实施例提供的电子设备的结构示意图。
通过上述附图,已示出本申请明确的实施例,后文中将有更详细的描述。这些附图和文字描述并不是为了通过任何方式限制本公开构思的范围,而是通过参考特定实施例为本领域技术人员说明本申请的概念。
具体实施方式
为使本申请实施例的目的、技术方案和优点更加清楚,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
此外,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。在以下各实施例的描述中,“多个”的含义是两个以上,除非另有明确具体的限定。
NVMe控制器(硬盘控制器)是一套数字逻辑电路,用在NVMe设备端,如NVMe硬盘。它根据NVMe协议的定义,实现与主机端进行数据交互所需要的接口和协议定义的功能,使设备对主机呈现为一个NVMe设备。其中,NVMe表示非易失性内存主机控制器接口规范。
主机通过命令队列的方式向NVMe设备下发命令以及接收命令的完成信息。命令队列位于主机的内存中,如图1所示,为本申请实施提供的示例性的命令队列结构示意图,每一个命令队列使用一段连续的内存空间。这段空间在逻辑上是一段收尾相接的环形空间,也就是说假设某一命令队列占用地址0~L-1的内存空间,则逻辑上认为地址L-1的下一个地址为0。队列通过头指针和尾指针来标识有效内容和无效内容 ,头尾指针的单位都是队列条目(后文将描述队列条目的概念)。从头指针(包括)到尾指针(不包括)之间的内容为有效内容,其余为无效内容。当头指针和尾指针相等时,队列为空队列,所有内容都为有效内容;当尾指针+1等于头指针时(环形运算),队列为满队列,除尾指针指向的位置外,其余都为有效内容。
从数据流方向上,可以将队列分为两大类,分别是命令队列和完成队列。命令队列用于主机向NVMe设备下发命令,完成队列用于NVMe设备向主机发送某个命令完成的信息。每一个命令被称为命令队列的一个条目,当主机准备好一个命令后,将它放在某个命令队列尾指针指向的条目中,然后将队列尾指针加1。主机也可以一次准备若干个命令,放在以命令队列尾指针指向位置为起始位置的若干个条目中,然后将尾指针加上放入的命令数。NVMe控制器读取命令队列头指针指向的条目,完成读取后将命令缓存至相应的缓存队列。主机一般会使用多个命令队列和完成队列与NVMe设备进行交互,以提高性能。例如,在典型的多核CPU场景中,一般为多个核分配多个不同的队列,这样可以让分属于不同的进程/线程独立使用一个队列资源,避免使用互斥机制引入的消耗。
其中,如图2所示,为硬盘控制器传统缓存系统的结构示意图, NVMe控制器一般在其硬件支持的队列数量范围内使用多个独立的队列缓存,即每个命令队列都对应一个缓存队列。主机和NVMe控制器交互使用的队列数是由主机决定,因此,很可能存在实际使用的队列数量小于NVMe控制器支持的数量,导致一部分队列缓存被闲置,浪费了硬盘控制器的缓存资源。此外,为了适配不同核数的主机系统,NVMe控制器需要保证即使在不适用全部队列时,也能有很好的性能,如主机为多核CPU主机,每一核都应一个命令队列,若该主机要保证某单内核高性能,则需要为该内核对应的缓存队列预留较大的缓存量,也就需要增加每个缓存队列的缓存量以保留冗余度。而缓存队列在NVMe控制器硬件中需要使用SRAM实现,成本比较昂贵。
针对上述问题,本申请实施例提供的硬盘控制器缓存系统,包括:命令采集模块和链式缓存器;命令采集模块用于采集主机中任一命令队列下发的待缓存命令,并将待缓存命令缓存至链式缓存器;链式缓存器用于将得到的待缓存命令缓存至命令缓存链的空闲头指针指向的节点;其中,链式缓存器包括链信息缓存器及命令缓存链;链信息缓存器用于缓存空闲头指数、空闲尾指数及各命令队列对应的头指数和尾指数;命令缓存链用于缓存各命令队列下发的命令及各命令所在的节点对应的链连接指数。上述方案提供的系统,通过将待缓存命令缓存至命令缓存链,以在硬盘控制器实现命令链式缓存,节省了硬盘控制器的缓存资源,也就降低了NVMe控制器的硬件成本。
下面这几个具体的实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例中不再赘述。下面将结合附图,对本发明实施例进行描述。
本申请实施例提供了一种硬盘控制器缓存系统,用于对硬盘控制器从主机的命令队列读取到的命令进行缓存。
如图3所示,为本申请实施例提供的硬盘控制器缓存系统的结构示意图,该硬盘控制器缓存系统包括:命令采集模块和链式缓存器。
其中,命令采集模块用于采集主机中任一命令队列下发的待缓存命令,并将待缓存命令缓存至链式缓存器;链式缓存器用于将得到的待缓存命令缓存至命令缓存链的空闲头指针指向的节点。
其中,链式缓存器包括链信息缓存器及命令缓存链;链信息缓存器用于缓存空闲头指数、空闲尾指数及各命令队列对应的头指数和尾指数;命令缓存链用于缓存各命令队列下发的命令及各命令所在的节点对应的链连接指数。
具体地,硬盘控制器在基于命令采集模块从命令队列的头指针指向的队列节点读取到待缓存命令后,将待缓存命令缓存至链式缓存器,具体可以将其写入命令缓存链的空闲头指针指向的节点。命令缓存链可以缓存各个命令队列下发的命令,即硬盘控制器对读取到的待缓存命令进行链式缓存,以使所有命令队列共享命令缓存链这一片连续的缓存空间,从而节省了硬盘控制器的缓存资源。
需要说明的是,由于命令缓存链被所有命令队列共享,为方便在命令缓存链中读取来自统一命令队列的命令条目,采用链信息缓存器缓存空闲头指数、空闲尾指数及各命令队列对应的头指数和尾指数,并在命令缓存链中记录各命令所在的节点对应的链连接指数,链连接指数用于表征下一个命令条目的节点位置。
其中,如图4所示,为本申请实施例提供的链信息缓存器的结构示意图,SQ表示命令队列,命令队列总数为N。如图5所示,为本申请实施例提供的命令缓存链的结构示意图,Idx表示命令缓存链的节点标识,SQE表示已缓存的命令条目,Nx指数表示链连接指数。
具体地,链信息缓存器有N+1个条目,前N个条目每一个对应一个命令队列,用来存放该命令队列的头指数和尾指数;最后一个用来存放空闲池的头指数和尾指数。头指数是一个指针,用来指向一个链表(一个命令队列对应的一段链表)的第一个条目,该指数还需要有一个有效标志,标识当前链表是否有效;然后第一个条目中的Nx指数字段用来指向第二个条目,并以此类推。尾指数则指向一个链表的最后一个条目。命令缓存链是链表实体所在的存储空间,该命令缓存链有N个条目,每个条目包含SQE和Nx指数两个字段。SQE区用来保存命令队列条目(命令队列下发的命令),Nx指数则用来保存该条目在链表中的下一个条目的位置。其中,空闲池是将空闲的链缓存节点位置组合形成空闲链表。
示例性的,如图6所示,为本申请实施例提供的链式缓存器的结构示意图,在该示例中,SQ20链有3个条目,它们分别位于缓存中的条目5(Idx = 5,下同)、条目6和条目10,条目即为缓存命令的链表节点。SQ20的头指数指向链表头,即条目5,因此值为5。条目5在链表中的下一个条目为条目6,因此,Nx指数字段的值为6,以此类推。SQ20链表的最后一个条目为条目10,因此尾指数的值为10。
在上述实施例的基础上,作为一种可实施的方式,在一实施例中,链式缓存器,具体可以确定待缓存命令对应的目标命令队列;在将待缓存命令缓存至命令缓存链的空闲头指针指向的节点后,若目标命令队列的头指数有效,则将空闲头指针指向的节点的标记值,作为目标命令队列的当前尾指针指向的节点的链连接指数;将目标命令队列的尾指数更新为空闲头指针指向的节点的标记值;将空闲头指针指向的节点的链连接指数,作为新的空闲头指数。
具体地,链式缓存器在对任一命令队列下发的待缓存命令进行缓存时,首先确定该待缓存命令是由哪个命令队列下发,即确定目标命令队列。然后在链信息缓存器中读取空闲头指数,以按照空闲头指数将待缓存命令缓存至命令缓存链的空闲头指针指向的节点,并进一步根据目标命令队列头指数携带的有效标识,判断目标命令队列的头指数是否有效,若目标命令队列的头指数有效,则表征其头指针指向的节点缓存有命令条目,不是空节点,因此可以将该待缓存命令缓存至链尾,并将空闲头指针指向的节点的标记值(Idx),作为目标命令队列的当前尾指针指向的节点的链连接指数, 将目标命令队列的尾指数更新为空闲头指针指向的节点的标记值。最后将空闲头指针先后移动,同时将空闲头指针指向的节点的链连接指数,作为新的空闲头指数。
相应地,在一实施例中,若目标命令队列的头指数无效,则链式缓存器可以将空闲头指针指向的节点的标记值,作为目标命令队列的头指数。
其中,若目标命令队列的头指数无效,则表征其头指针指向的节点为空节点,也就意味该目标命令队列对应链表属于空闲池,因此可以直接将空闲头指针指向的节点的标记值,作为目标命令队列的头指数。
在上述实施例的基础上,在多队列场景,一般需要先使用仲裁策略确定当前待输出队列的命令待读取数,然后从链式缓存中读取并输出至后级的逻辑通道。作为一种可实施的方式,在一实施例中,该系统还包括:命令执行模块。
其中,命令执行模块用于在链式缓存器中读取待执行命令,并根据待执行命令对应的目标执行命令队列,确定目标逻辑通道;其中,命令执行模块包括若干个与命令队列一一对应的逻辑通道。
具体地,在一实施例中,命令执行模块,具体可以向链式缓存器发送命令读取需求,以使链式缓存器按照命令读取需求向命令执行模块传输待执行命令。
其中,命令读取需求至少表征待输出命令队列及命令待读取数等。
具体地,在一实施例中,链式缓存器,具体可以根据命令读取需求,确定目标执行命令队列及命令待读取数;将链信息缓存器中缓存的目标执行命令队列的头指数,作为当前指数;从命令缓存链中读取当前指数所指向的节点缓存的待执行命令,将待执行命令传输至命令执行模块,更新命令待读取数减1;判断更新后的命令待读取数是否为0;若更新后的命令待读取数不为0,则将头指数所对应的节点的链连接指数,作为当前指数;返回至从命令缓存链中读取当前指数所指向的节点缓存的待执行命令的步骤。其中,目标执行命令队列即为待输出命令队列。
其中,若更新后的命令待读取数为0,则将空闲尾指数所对应的节点的链连接指数更新为目标执行命令队列的头指数。
具体地,如图7所示,为本申请实施例提供的链式缓存器的命令输出流程示意图,在确定目标执行命令队列及命令待读取数后,首先输出目标执行命令队列的头指数(SQx头指数)所指向的节点缓存的待执行命令至命令执行模块,并将头指数作为当前指数,即从命令缓存链中读取当前指数所指向的节点缓存的待执行命令,更新命令待读取数量-1。判断更新后的命令待读取数量是否为0,若不为0,则表征还有待执行命令需要输出,即需要读取头指数所对应的节点的链连接指数所对应的节点缓存的待执行命令,因此将链连接指数作为新的当前指数,返回至从命令缓存链中读取当前指数所指向的节点缓存的待执行命令的步骤。若更新后的命令待读取数量为0,则表征此次命令读取任务完成,将回收缓存节点,即将命令条目被输出的节点回收至空闲池,因此将空闲尾指数所对应的节点的链连接指数更新为目标执行命令队列的头指数。
具体地,在一实施例中,若当前指数等于目标执行命令队列的尾指数,则链式缓存器将目标执行命令队列的头指数标记为无效。
其中,若当前指数等于目标执行命令队列的尾指数,则表征该目标执行命令队列缓存的所有命令均被读取,此时目标执行命令队列对应的链表节点均为空,因此链式缓存器将目标执行命令队列的头指数标记为无效。
具体地,在一实施例中,若当前指数不等于目标执行命令队列的尾指数,则链式缓存器将目标执行命令队列的头指数更新为当前指数所对应的节点的链连接指数。
进一步地,在一实施例中,链式缓存器还可以将空闲尾指数更新为当前指数。
具体地,若当前指数不等于目标执行命令队列的尾指数,则表征该目标执行命令队列还有以缓存的命令未被读取,因此将目标执行命令队列的头指数更新为当前指数所对应的节点的链连接指数,即剩余的首个已缓存命令所在的节点(当前指数所对应的节点的链连接指数指向的节点)作为新的头节点。在回收当前指数所指向的缓存节点后,将空闲尾指数更新为当前指数,以将其回收至空闲池。在本申请实施例提供的链式缓存器中,链式缓存的读取和回收过程同时进行,提高了缓存资源的利用率,进一步节省了硬盘控制器的缓存资源。
在上述实施例的基础上,作为一种可实施的方式,如图8所示,为本申请实施例提供的硬盘控制器缓存系统的整体结构示意图,在一实施例中,命令采集模块包括命令队尾门铃寄存器和DMA引擎。
其中,主机在任一命令队列的队列尾指针发生变化时,将最新队列尾指针数写入命令队尾门铃寄存器;DMA引擎用于在命令队尾门铃寄存器的被写入次数达到预设阈值时,向主机发起DMA操作,以采集主机中任一命令队列下发的命令。其中,DMA操作为直接内存访问操作。
需要说明的是,每一个命令队列在硬盘控制器(NVMe控制器)中都有一个命令队尾门铃寄存器(SQT寄存器),主机通过写SQT,将最新更新的队列尾指针发送给硬盘控制器。硬盘控制器在收到SQT被写入的动作后,记录命令队列被更新事件以及当前的队列尾指针。硬盘控制器可以在合适的时候(命令队尾门铃寄存器的被写入次数达到预设阈值),例如每一次SQT被更新时,也可以在多次SQT被更新后,基于DMA引擎发起一次DMA操作,将主机命令搬移到本地。完成搬移后,硬盘控制器将更新队列头指针,然后硬盘控制器在向主机发送某个命令的完成信息时,获取该命令对应的命令队列的最新的头指针值,并放入完成信息以通知主机。完成队列与命令队列类似,但与命令队列相反,每个完成队列的尾指针由硬盘控制器更新并保存在硬盘设备内部,而完成队列头指针由主机更新,通过每个队列的头门铃寄存器(CQH)。完成队列与命令队列有一对多的关系,即一个或多个命令队列可以关联到一个完成队列上。
在上述实施例的基础上,由于DMA引擎需要根据DMA任务信息发起DMA操作,作为一种可实施的方式,在一实施例中,DMA引擎,具体可以当采集任一命令队列下发的命令时,根据命令队列的标识信息,确定DMA任务信息;其中,DMA任务信息包括源地址、目标地址和命令长度;按照DMA任务信息,向主机发起DMA操作。
其中,命令队列的标识信息即为SQx。
具体地,在一实施例中,由于当使用链式缓存后,对于任意一个命令队列,条目在缓存中的位置有可能是不连续的。因此,如果硬盘控制器中DMA引擎需要以{源地址、目标地址、命令长度} 来描述一个DMA任务时,需要使用一段连续的地址作为目标地址,该地址并不是链式缓存用于保存数据的真实地址,因此称为虚拟地址。DMA引擎可以为各命令队列分配虚拟地址,以将虚拟地址作为命令队列的目标地址。
具体地,可以为每一个命令队列分配一段独立的连续的虚拟地址空间,该地址仅用于接收数据,并不直接对应任何存储空间。当属于某一个命令队列的虚拟地址空间接收到数据时,硬盘控制器根据地址区间判断出数据属于哪一个命令队列,然后对其进行链式缓存。
在上述实施例的基础上,作为一种可实施的方式,在一实施例中,该系统还包括:缓存空间管理器。
其中,缓存空间管理器用于监测链式缓存器的剩余缓存空间。
相应地,为避免出现链式缓存器的剩余缓存空间不足以缓存DMA操作读取到的待缓存命令的情况,DMA引擎可以当剩余缓存空间满足预设标准时,按照DMA任务信息,向主机发起DMA操作。
具体地,在一实施例中,DMA引擎,具体用于,具体可以判断剩余缓存空间是否大于当前DMA任务大小;若剩余缓存空间大于当前DMA任务大小,则确定剩余缓存空间满足预设标准;若剩余缓存空间不大于当前DMA任务大小,则拆分执行当前DMA任务。
具体地,缓存空间管理器包括计数器,在初始状态下,该计数器的值等于链式缓存器的总缓存空间,计数器的值随链式缓存器中缓存命令条目的增加而减小。当发出DMA操作请求前,首先检查计数器的值是否大于等于当前DMA任务大小,如果不大于,则需要拆分执行当前DMA任务或者等待;如果大于等于,则将计数器的值减去DMA任务大小。当链式缓存回收某个缓存节点时,增加计数器计数。
具体地,在一实施例中,缓存空间管理器,具体可以根据链式缓存器的总缓存空间和当前缓存空间占用量,确定链式缓存器的剩余缓存空间。
其中,由于链式缓存在DMA任务发送前进行分配,在命令队列条目输出后进行回收,因此,链式缓存所需大小可以仅根据硬盘控制器支持的最大命令队列条目处理速率(命令队列的命令处理目标速率)和DMA任务延时确定,与主机使用的命令队列数量无关。因此链式缓存器的总缓存空间根据命令队列的命令处理目标速率、命令大小及DMA任务延时确定。
具体地,可以根据如下公式,确定链式缓存器的总缓存空间:
其中,命令队列的命令处理目标速率也称命令队列条目处理速率,是硬盘设备的理想值,命令大小是NVMe协议的固定参数,DMA任务延时具体可以根据硬盘设备的系统设计情况确定。其中,如图9所示,为本申请实施例提供的DMA任务延时的数据流示意图,DMA任务延时包括DMA引擎发出DMA操作请求到内存中命令队列的命令条目被保存至链式缓存器缓存的全部时间。
本申请实施例提供的硬盘控制器缓存系统,包括:命令采集模块和链式缓存器;命令采集模块用于采集主机中任一命令队列下发的待缓存命令,并将待缓存命令缓存至链式缓存器;链式缓存器用于将得到的待缓存命令缓存至命令缓存链的空闲头指针指向的节点;其中,链式缓存器包括链信息缓存器及命令缓存链;链信息缓存器用于缓存空闲头指数、空闲尾指数及各命令队列对应的头指数和尾指数;命令缓存链用于缓存各命令队列下发的命令及各命令所在的节点对应的链连接指数。上述方案提供的系统,通过将待缓存命令缓存至命令缓存链,以在硬盘控制器实现命令链式缓存,节省了硬盘控制器的缓存资源。并且,该系统设置有链式缓存回收机制,提高了缓存资源的利用率。并且,在链式缓存器的总缓存空间仅根据命令队列的命令处理目标速率、命令大小及DMA任务延时确定,而无需考虑主机的命令队列数量,从而降低了链式缓存器的总缓存空间需求。
本申请实施例提供了一种硬盘控制器缓存方法,用于对硬盘控制器从主机的命令队列读取到的命令进行缓存。本申请实施例的执行主体为电子设备,比如服务器及其他可用于为对硬盘控制器从主机的命令队列读取到的命令进行缓存的电子设备。
如图10所示,为本申请实施例提供的硬盘控制器缓存方法的流程示意图,该方法包括:
步骤1001,采集主机中任一命令队列下发的待缓存命令;
步骤1002,将待缓存命令,缓存至命令缓存链的空闲头指针指向的节点。
其中,链式缓存器包括链信息缓存器及命令缓存链;链信息缓存器用于缓存空闲头指数、空闲尾指数及各命令队列对应的头指数和尾指数;命令缓存链用于缓存各命令队列下发的命令及各命令所在的节点对应的链连接指数。
具体地,在一实施例中,基于命令缓存链缓存各命令队列下发的命令及各命令所在的节点对应的链连接指数,包括:
确定待缓存命令对应的目标命令队列;
在将待缓存命令缓存至命令缓存链的空闲头指针指向的节点后,若目标命令队列的头指数有效,则将空闲头指针指向的节点的标记值,作为目标命令队列的当前尾指针指向的节点的链连接指数;
将目标命令队列的尾指数更新为空闲头指针指向的节点的标记值;
将空闲头指针指向的节点的链连接指数,作为新的空闲头指数。
具体地,在一实施例中,该方法,还包括:
若目标命令队列的头指数无效,则将空闲头指针指向的节点的标记值,作为目标命令队列的头指数。
具体地,在一实施例中,该方法,还包括:
在链式缓存器中读取待执行命令,并根据待执行命令对应的目标执行命令队列,确定目标逻辑通道;链式缓存器包括命令缓存链;
其中,命令执行模块包括若干个与命令队列一一对应的逻辑通道。
具体地,在一实施例中,在链式缓存器中读取待执行命令,包括:
向链式缓存器发送命令读取需求,以使链式缓存器按照命令读取需求向命令执行模块传输待执行命令。
具体地,在一实施例中,向链式缓存器发送命令读取需求,以使链式缓存器按照命令读取需求向命令执行模块传输待执行命令,包括:
根据命令读取需求,确定目标执行命令队列及命令待读取数;
将链信息缓存器中缓存的目标执行命令队列的头指数,作为当前指数;
从命令缓存链中读取当前指数所指向的节点缓存的待执行命令;
将待执行命令传输至命令执行模块,更新命令待读取数减1;
判断更新后的命令待读取数是否为0;
若更新后的命令待读取数不为0,则将头指数所对应的节点的链连接指数,作为当前指数;
返回至从命令缓存链中读取当前指数所指向的节点缓存的待执行命令的步骤。
具体地,在一实施例中,该方法,还包括:
若更新后的命令待读取数为0,则将空闲尾指数所对应的节点的链连接指数更新为目标执行命令队列的头指数。
具体地,在一实施例中,该方法,还包括:
若当前指数等于目标执行命令队列的尾指数,则将目标执行命令队列的头指数标记为无效。
具体地,在一实施例中,该方法,还包括:
若当前指数不等于目标执行命令队列的尾指数,则将目标执行命令队列的头指数更新为当前指数所对应的节点的链连接指数。
具体地,在一实施例中,该方法,还包括:
将空闲尾指数更新为当前指数。
具体地,在一实施例中,采集主机中任一命令队列下发的待缓存命令,包括:
在命令队尾门铃寄存器的被写入次数达到预设阈值时,基于DMA引擎,向主机发起DMA操作,以采集主机中任一命令队列下发的命令;
其中,主机在任一命令队列的队列尾指针发生变化时,将最新队列尾指针数写入命令队尾门铃寄存器。
具体地,在一实施例中,基于DMA引擎,向主机发起DMA操作,以采集主机中任一命令队列下发的命令,包括:
当采集任一命令队列下发的命令时,根据命令队列的标识信息,确定DMA任务信息;其中,DMA任务信息包括源地址、目标地址和命令长度;
按照DMA任务信息,向主机发起DMA操作。
具体地,在一实施例中,该方法,还包括:
为各命令队列分配虚拟地址,以将虚拟地址作为命令队列的目标地址。
具体地,在一实施例中,该方法,还包括:
监测链式缓存器的剩余缓存空间;
按照DMA任务信息,向主机发起DMA操作,包括:
当剩余缓存空间满足预设标准时,按照DMA任务信息,向主机发起DMA操作。
具体地,在一实施例中,该方法,还包括:
判断剩余缓存空间是否大于当前DMA任务大小;
若剩余缓存空间大于当前DMA任务大小,则确定剩余缓存空间满足预设标准;
若剩余缓存空间不大于当前DMA任务大小,则拆分执行当前DMA任务。
具体地,在一实施例中,该方法,还包括:
根据链式缓存器的总缓存空间和当前缓存空间占用量,确定链式缓存器的剩余缓存空间。
具体地,在一实施例中,链式缓存器的总缓存空间根据命令队列的命令处理目标速率、命令大小及DMA任务延时确定。
本申请实施例提供的硬盘控制器缓存方法,通过将待缓存命令缓存至命令缓存链,以在硬盘控制器实现命令链式缓存,节省了硬盘控制器的缓存资源。并且,该系统设置有链式缓存回收机制,提高了缓存资源的利用率。并且,在链式缓存器的总缓存空间仅根据命令队列的命令处理目标速率、命令大小及DMA任务延时确定,而无需考虑主机的命令队列数量,从而降低了链式缓存器的总缓存空间需求。
本申请实施例提供了一种硬盘设备,如图11所示,为本申请实施例提供的硬盘设备的结构示意图,该硬盘设备包括硬盘控制器主体及如上述实施例提供的硬盘控制器缓存系统。
本申请实施例提供的硬盘设备,通过基于硬盘控制器缓存系统,将待缓存命令缓存至命令缓存链,以在硬盘控制器实现命令链式缓存,节省了硬盘控制器的缓存资源。并且,该系统设置有链式缓存回收机制,提高了缓存资源的利用率。并且,在链式缓存器的总缓存空间仅根据命令队列的命令处理目标速率、命令大小及DMA任务延时确定,而无需考虑主机的命令队列数量,从而降低了链式缓存器的总缓存空间需求。
本申请实施例提供了一种电子设备,用于执行上述实施例提供的硬盘控制器缓存方法。
如图12所示,为本申请实施例提供的电子设备的结构示意图。该电子设备120包括:至少一个处理器121和存储器122。
存储器存储计算机执行指令;至少一个处理器执行存储器存储的计算机执行指令,使得至少一个处理器执行如上实施例提供的硬盘控制器缓存方法。
本申请实施例提供的一种电子设备,用于执行上述实施例提供的硬盘控制器缓存方法,其实现方式与原理相同,不再赘述。
本申请实施例提供了一种计算机可读存储介质,计算机可读存储介质中存储有计算机执行指令,当处理器执行计算机执行指令时,实现如上任一实施例提供的硬盘控制器缓存方法。
本申请实施例的包含计算机可执行指令的存储介质,可用于存储前述实施例中提供的硬盘控制器缓存方法的计算机执行指令,其实现方式与原理相同,不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统和方法,可以通过其它的方式实现。例如,以上所描述的系统实施例仅仅是示意性的,例如,单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,系统或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本申请各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能单元的形式实现。
上述以软件功能单元的形式实现的集成的单元,可以存储在一个计算机可读取存储介质中。上述软件功能单元存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本申请各个实施例所述方法的部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(Read-Only Memory,ROM)、随机存取存储器(Random Access Memory,RAM)、磁碟或者光盘等各种可以存储程序代码的介质。
本领域技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将系统的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。
最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。

Claims (18)

1.一种硬盘控制器缓存系统,其特征在于,包括:命令采集模块和链式缓存器;
所述命令采集模块用于采集主机中任一命令队列下发的待缓存命令,并将所述待缓存命令缓存至所述链式缓存器;
所述链式缓存器用于将得到的待缓存命令缓存至命令缓存链的空闲头指针指向的节点;其中,所述链式缓存器包括链信息缓存器及命令缓存链;
所述链信息缓存器用于缓存空闲头指数、空闲尾指数及各所述命令队列对应的头指数和尾指数;
所述命令缓存链用于缓存各所述命令队列下发的命令及各命令所在的节点对应的链连接指数;
所述命令采集模块包括:命令队尾门铃寄存器和DMA引擎;
所述主机在任一所述命令队列的队列尾指针发生变化时,将最新队列尾指针数写入所述命令队尾门铃寄存器;
所述DMA引擎用于在所述命令队尾门铃寄存器的被写入次数达到预设阈值时,向主机发起DMA操作,以采集所述主机中任一命令队列下发的命令;
所述系统还包括:命令执行模块;
所述命令执行模块用于在所述链式缓存器中读取待执行命令,并根据所述待执行命令对应的目标执行命令队列,确定目标逻辑通道;
其中,所述命令执行模块包括若干个与所述命令队列一一对应的逻辑通道。
2.根据权利要求1所述的系统,其特征在于,所述链式缓存器,具体用于:
确定所述待缓存命令对应的目标命令队列;
在将待缓存命令缓存至命令缓存链的空闲头指针指向的节点后,若所述目标命令队列的头指数有效,则将所述空闲头指针指向的节点的标记值,作为所述目标命令队列的当前尾指针指向的节点的链连接指数;
将所述目标命令队列的尾指数更新为所述空闲头指针指向的节点的标记值;
将所述空闲头指针指向的节点的链连接指数,作为新的空闲头指数。
3.根据权利要求2所述的系统,其特征在于,所述链式缓存器,还用于:
若所述目标命令队列的头指数无效,则将所述空闲头指针指向的节点的标记值,作为所述目标命令队列的头指数。
4.根据权利要求1所述的系统,其特征在于,所述命令执行模块,具体用于:
向所述链式缓存器发送命令读取需求,以使所述链式缓存器按照所述命令读取需求向所述命令执行模块传输所述待执行命令。
5.根据权利要求4所述的系统,其特征在于,所述链式缓存器,具体用于:
根据所述命令读取需求,确定目标执行命令队列及命令待读取数;
将所述链信息缓存器中缓存的所述目标执行命令队列的头指数,作为当前指数;
从所述命令缓存链中读取所述当前指数所指向的节点缓存的待执行命令;
将所述待执行命令传输至所述命令执行模块,更新所述命令待读取数减1;
判断更新后的命令待读取数是否为0;
若更新后的命令待读取数不为0,则将所述头指数所对应的节点的链连接指数,作为当前指数;
返回至所述从所述命令缓存链中读取所述当前指数所指向的节点缓存的待执行命令的步骤。
6.根据权利要求5所述的系统,其特征在于,所述链式缓存器,还用于:
若更新后的命令待读取数为0,则将所述空闲尾指数所对应的节点的链连接指数更新为所述目标执行命令队列的头指数。
7.根据权利要求6所述的系统,其特征在于,所述链式缓存器,还用于:
若所述当前指数等于所述目标执行命令队列的尾指数,则将所述目标执行命令队列的头指数标记为无效。
8.根据权利要求7所述的系统,其特征在于,所述链式缓存器,还用于:
若所述当前指数不等于所述目标执行命令队列的尾指数,则将所述目标执行命令队列的头指数更新为所述当前指数所对应的节点的链连接指数。
9.根据权利要求8所述的系统,其特征在于,所述链式缓存器,还用于:
将空闲尾指数更新为所述当前指数。
10.根据权利要求1所述的系统,其特征在于,所述DMA引擎,具体用于:
当采集任一所述命令队列下发的命令时,根据所述命令队列的标识信息,确定DMA任务信息;其中,所述DMA任务信息包括源地址、目标地址和命令长度;
按照所述DMA任务信息,向主机发起DMA操作。
11.根据权利要求10所述的系统,其特征在于,所述DMA引擎,还用于:
为各所述命令队列分配虚拟地址,以将所述虚拟地址作为所述命令队列的目标地址。
12.根据权利要求10所述的系统,其特征在于,还包括:缓存空间管理器;
所述缓存空间管理器用于监测所述链式缓存器的剩余缓存空间;
所述DMA引擎,具体用于:
当所述剩余缓存空间满足预设标准时,按照所述DMA任务信息,向主机发起DMA操作。
13.根据权利要求12所述的系统,其特征在于,所述DMA引擎,具体用于:
判断所述剩余缓存空间是否大于当前DMA任务大小;
若所述剩余缓存空间大于当前DMA任务大小,则确定所述剩余缓存空间满足预设标准;
若所述剩余缓存空间不大于当前DMA任务大小,则拆分执行当前DMA任务。
14.根据权利要求12所述的系统,其特征在于,所述缓存空间管理器,具体用于:
根据所述链式缓存器的总缓存空间和当前缓存空间占用量,确定所述链式缓存器的剩余缓存空间。
15.根据权利要求14所述的系统,其特征在于,所述链式缓存器的总缓存空间根据所述命令队列的命令处理目标速率、命令大小及DMA任务延时确定。
16.一种硬盘控制器缓存方法,其特征在于,包括:
采集主机中任一命令队列下发的待缓存命令;
将所述待缓存命令,缓存至命令缓存链的空闲头指针指向的节点;其中,链式缓存器包括链信息缓存器及命令缓存链;
所述链信息缓存器用于缓存空闲头指数、空闲尾指数及各所述命令队列对应的头指数和尾指数;
所述命令缓存链用于缓存各所述命令队列下发的命令及各命令所在的节点对应的链连接指数;
所述采集主机中任一命令队列下发的待缓存命令,包括:
在所述命令队尾门铃寄存器的被写入次数达到预设阈值时,基于DMA引擎,向主机发起DMA操作,以采集所述主机中任一命令队列下发的命令;
其中,所述主机在任一所述命令队列的队列尾指针发生变化时,将最新队列尾指针数写入所述命令队尾门铃寄存器;
所述方法,还包括:
在所述链式缓存器中读取待执行命令,并根据所述待执行命令对应的目标执行命令队列,确定目标逻辑通道;所述链式缓存器包括命令缓存链;
其中,命令执行模块包括若干个与所述命令队列一一对应的逻辑通道。
17.一种硬盘设备,其特征在于,包括:硬盘控制器主体及如权利要求1至15任一项所述的硬盘控制器缓存系统。
18.一种电子设备,其特征在于,包括:至少一个处理器和存储器;
所述存储器存储计算机执行指令;
所述至少一个处理器执行所述存储器存储的计算机执行指令,使得所述至少一个处理器执行如权利要求16所述的方法。
CN202311024503.8A 2023-08-15 2023-08-15 一种硬盘控制器缓存系统、方法、硬盘设备及电子设备 Active CN116755635B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN202311024503.8A CN116755635B (zh) 2023-08-15 2023-08-15 一种硬盘控制器缓存系统、方法、硬盘设备及电子设备

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN202311024503.8A CN116755635B (zh) 2023-08-15 2023-08-15 一种硬盘控制器缓存系统、方法、硬盘设备及电子设备

Publications (2)

Publication Number Publication Date
CN116755635A CN116755635A (zh) 2023-09-15
CN116755635B true CN116755635B (zh) 2023-11-03

Family

ID=87951716

Family Applications (1)

Application Number Title Priority Date Filing Date
CN202311024503.8A Active CN116755635B (zh) 2023-08-15 2023-08-15 一种硬盘控制器缓存系统、方法、硬盘设备及电子设备

Country Status (1)

Country Link
CN (1) CN116755635B (zh)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN117331510B (zh) * 2023-11-29 2024-02-20 苏州元脑智能科技有限公司 应用于NVMe控制器的数据迁移方法、装置及设备

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104598194A (zh) * 2014-12-09 2015-05-06 中国航空工业集团公司第六三一研究所 一种头尾指针链表存储器的初始化方法及电路
US9256521B1 (en) * 2010-11-03 2016-02-09 Pmc-Sierra Us, Inc. Methods and apparatus for SAS controllers with link list based target queues
CN111221476A (zh) * 2020-01-08 2020-06-02 深圳忆联信息系统有限公司 提升ssd性能的前端命令处理方法、装置、计算机设备及存储介质
CN112416250A (zh) * 2020-11-19 2021-02-26 深圳电器公司 基于NVMe的固态硬盘的命令处理方法及相关设备
CN115686782A (zh) * 2022-10-18 2023-02-03 苏州浪潮智能科技有限公司 基于固态硬盘的资源调度方法、装置、电子设备及存储介质
CN116150051A (zh) * 2022-11-23 2023-05-23 深圳云豹智能有限公司 命令处理方法、装置、系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9256521B1 (en) * 2010-11-03 2016-02-09 Pmc-Sierra Us, Inc. Methods and apparatus for SAS controllers with link list based target queues
CN104598194A (zh) * 2014-12-09 2015-05-06 中国航空工业集团公司第六三一研究所 一种头尾指针链表存储器的初始化方法及电路
CN111221476A (zh) * 2020-01-08 2020-06-02 深圳忆联信息系统有限公司 提升ssd性能的前端命令处理方法、装置、计算机设备及存储介质
CN112416250A (zh) * 2020-11-19 2021-02-26 深圳电器公司 基于NVMe的固态硬盘的命令处理方法及相关设备
CN115686782A (zh) * 2022-10-18 2023-02-03 苏州浪潮智能科技有限公司 基于固态硬盘的资源调度方法、装置、电子设备及存储介质
CN116150051A (zh) * 2022-11-23 2023-05-23 深圳云豹智能有限公司 命令处理方法、装置、系统

Also Published As

Publication number Publication date
CN116755635A (zh) 2023-09-15

Similar Documents

Publication Publication Date Title
CN114780458B (zh) 数据处理的方法和存储系统
US7941584B2 (en) Data processing apparatus and method for performing hazard detection
CN111949568B (zh) 一种报文处理方法、装置及网络芯片
EP0551191A1 (en) Apparatus and method for transferring data to and from host system
CN110555001B (zh) 数据处理方法、装置、终端及介质
CN116755635B (zh) 一种硬盘控制器缓存系统、方法、硬盘设备及电子设备
US8281103B2 (en) Method and apparatus for allocating storage addresses
CN112948318A (zh) 一种Linux操作系统下基于RDMA的数据传输方法及装置
US20150254207A1 (en) Method and system for ordering i/o access in a multi-node environment
CN113641596A (zh) 缓存管理方法、缓存管理装置、处理器
CN111124270A (zh) 缓存管理的方法、设备和计算机程序产品
US20190146845A1 (en) Lock Allocation Method and Apparatus, and Computing Device
CN110235113B (zh) 存储器控制器和用于数据处理的系统和方法
US9158682B2 (en) Cache memory garbage collector
CN115951844B (zh) 分布式文件系统的文件锁管理方法、设备及介质
CN110413689B (zh) 一种内存数据库的多节点数据同步方法与装置
JPH07239808A (ja) 分散データ管理方式
CN116010293B (zh) 数据请求处理电路、方法及其缓存电路和处理器
US8719499B2 (en) Cache-line based notification
CN116820579A (zh) 访存指令的调度方法、装置、电子设备和存储介质
CN115586943A (zh) 一种智能网卡虚拟机脏页的硬件标记实现方法
CN114610660A (zh) 控制接口数据的方法、装置及系统
US20060143378A1 (en) Information processing apparatus and control method for this information processing apparatus
US7421536B2 (en) Access control method, disk control unit and storage apparatus
CN117971728B (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