CN112732176A - 基于fpga的ssd访问方法及装置、存储系统及存储介质 - Google Patents
基于fpga的ssd访问方法及装置、存储系统及存储介质 Download PDFInfo
- Publication number
- CN112732176A CN112732176A CN202011580592.0A CN202011580592A CN112732176A CN 112732176 A CN112732176 A CN 112732176A CN 202011580592 A CN202011580592 A CN 202011580592A CN 112732176 A CN112732176 A CN 112732176A
- Authority
- CN
- China
- Prior art keywords
- command
- doorbell
- information
- writing
- ssd
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/061—Improving I/O performance
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0655—Vertical data movement, i.e. input-output transfer; data movement between one or more hosts and one or more storage devices
- G06F3/0659—Command handling arrangements, e.g. command buffers, queues, command scheduling
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input 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/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0679—Non-volatile semiconductor memory device, e.g. flash memory, one time programmable memory [OTP]
-
- Y—GENERAL 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
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE 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/00—Energy 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
本公开提供了一种基于FPGA的SSD访问方法及装置、存储系统及存储介质。该方法包括:响应于接收到的至少一个读写请求,向用户命令控制字缓存区写入至少一个命令控制字,所述命令控制字包括访问类型、IO SQ编号、访问的LBA数量、以及访问的LBA的起始地址;在所述用户命令控制字缓存区不为空时,基于所述至少一个命令控制字和NVMe协议,向IO SQ命令缓存区中写入IO SQ命令;在所述IO SQ命令缓存区不为空时,向TAIL DOORBELL缓存区写入IO TAIL DOORBELL信息,所述IO TAIL DOORBELL信息包括IO SQ编号、TAIL DOORBELL值;在所述IO SQ命令缓存区不为空时,将所述IO SQ命令缓存区中的IO SQ命令写入SQ,并将与所述IO SQ命令具有相同IO SQ编号的IO TAIL DOORBELL信息写入SSD,以使SSD读取SQ中的IO SQ命令。
Description
技术领域
本公开涉及数据存储领域,特别涉及一种基于FPGA的SSD访问方法及装置、存储系统及存储介质。
背景技术
目前随着各种信息化的发展,要存储的数据量越来越大,对储存器的带宽和功耗要求越来越高。传统的机械硬盘受带宽限制,越来越不能满足需求。而固态硬盘(SolidState Disk,SSD)具有读写速度快、抗震性强、低功耗、低噪音、温度适应范围大等机械硬盘所不具备的优点,其目前已广泛应用于军事、消费计算机、航空及导航设备等领域。
支持SSD访问控制的接口协议主要有串行高级技术附件(Serial AdvancedTechnology Attachment,SATA)协议和非易失性存储器规范(Non-Volatile Memoryexpress,NVMe)协议两种。NVMe协议是在高速串行计算机扩展总线标准(PeripheralComponent Interconnect express,PCIe)上附加支持SSD传输的控制协议。
发明内容
本公开实施例提供了一种基于FPGA的SSD访问方法及装置、存储系统及存储介质。所述技术方案如下:
本公开至少一实施例提供了一种基于FPGA的SSD访问方法,所述方法包括:
响应于接收到的至少一个读写请求,向用户命令控制字缓存区写入至少一个命令控制字,所述命令控制字包括访问类型、IO SQ编号、访问的LBA数量、以及访问的LBA的起始地址;
在所述用户命令控制字缓存区不为空时,基于所述至少一个命令控制字和NVMe协议,向IO SQ命令缓存区中写入IO SQ命令;
在所述IO SQ命令缓存区不为空时,向TAIL DOORBELL缓存区写入IO TAILDOORBELL信息,所述IO TAIL DOORBELL信息包括IO SQ编号、TAIL DOORBELL值;
在所述IO SQ命令缓存区不为空时,将所述IO SQ命令缓存区中的IO SQ命令写入SQ,并将与所述IO SQ命令具有相同IO SQ编号的IO TAIL DOORBELL信息写入SSD,以使SSD读取SQ中的IO SQ命令。
可选地,所述向TAIL DOORBELL缓存区写入IO TAIL DOORBELL信息,包括:
每向所述IO SQ命令缓存区中写入一个IO SQ命令,则将当前的IO SQ编号加1;
基于加1得到的IO SQ编号生成所述IO TAIL DOORBELL信息,并写入所述TAILDOORBELL缓存区。
可选地,所述方法还包括:
将CQ中的CQ信息读入IO CQ命令缓存区;
在所述IO CQ命令缓存区不为空时,向HEAD DOORBELL缓存区写入IO HEADDOORBELL信息,所述IO HEAD DOORBELL信息包括IO CQ编号、HEAD DOORBELL值;
将所述IO CQ命令缓存区中的IO HEAD DOORBELL信息写入SSD。
可选地,所述向HEAD DOORBELL缓存区写入IO HEAD DOORBELL信息,包括:
每向所述IO CQ命令缓存区中读入一个CQ信息,则将当前的IO CQ编号加1;
基于加1得到的IO CQ编号生成所述IO HEAD DOORBELL信息,并写入所述HEADDOORBELL缓存区。
本公开至少一实施例提供了一种基于FPGA的SSD访问装置,所述装置包括:
用户命令处理模块,用于响应于接收到的至少一个读写请求,向用户命令控制字缓存区写入至少一个命令控制字,所述命令控制字包括访问类型、IO SQ编号、访问的LBA数量、以及访问的LBA的起始地址;
SQ组帧处理模块,用于在所述用户命令控制字缓存区不为空时,基于所述至少一个命令控制字和NVMe协议,向IO SQ命令缓存区中写入IO SQ命令;
TAIL DOORBELL维护模块,用于在所述IO SQ命令缓存区不为空时,向TAILDOORBELL缓存区写入IO TAIL DOORBELL信息,所述IO TAIL DOORBELL信息包括IO SQ编号、TAIL DOORBELL值;
PCIE总线模块,用于在所述IO SQ命令缓存区不为空时,将所述IO SQ命令缓存区中的IO SQ命令写入SQ,并将与所述IO SQ命令具有相同IO SQ编号的IO TAIL DOORBELL信息写入SSD,以使SSD读取SQ中的IO SQ命令。
可选地,所述TAIL DOORBELL维护模块,用于每向所述IO SQ命令缓存区中写入一个IO SQ命令,则将当前的IO SQ编号加1;基于加1得到的IO SQ编号生成所述IO TAILDOORBELL信息,并写入所述TAIL DOORBELL缓存区。
可选地,所述装置还包括:
CQ解析处理模块,用于将CQ中的CQ信息读入IO CQ命令缓存区;
HEAD DOORBELL维护模块,用于在所述IO CQ命令缓存区不为空时,向HEADDOORBELL缓存区写入IO HEAD DOORBELL信息,所述IO HEAD DOORBELL信息包括IO CQ编号、HEAD DOORBELL值;
所述PCIE总线模块,还用于将所述IO CQ命令缓存区中的IO HEAD DOORBELL信息写入SSD。
可选地,所述HEAD DOORBELL维护模块,用于每向所述IO CQ命令缓存区中读入一个CQ信息,则将当前的IO CQ编号加1;基于加1得到的IO CQ编号生成所述IO HEADDOORBELL信息,并写入所述HEAD DOORBELL缓存区。
本公开至少一实施例提供了一种存储系统,所述存储系统包括FPGA和与所述FPGA连接的SSD,所述FPGA包括如前述任一项所述的基于FPGA的SSD访问装置。
本公开至少一实施例提供了一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一条程序代码,所述程序代码由处理器加载并执行以实现如前述任一项所述的基于FPGA的SSD访问方法。
本公开实施例提供的技术方案带来的有益效果是:
在本公开实施例中,在接收到的读写请求时,并不是直接转换成SQ命令,而是先将读写请求中的参数提取并放入到缓存中,也即用户命令控制字;在将读写请求中的参数组装成IO SQ命令时,也并非直接写入SQ中,而是先放入缓存中;同样地,IO TAIL DOORBELL信息也不是生成后直接写到SSD,而是先放入缓存中。在相关技术中,上述几个步骤实际上是串行执行的,必须前一步完成才能执行后一步,并且必须最后一步完成后才能重新执行下一个读写请求的第一步,而在本公开实施例中,由于上述缓存的存在,各个步骤采用流水线式并行处理方式,两个读写请求处理间隙更小,可以有效提高SSD的读写效率。
附图说明
为了更清楚地说明本公开实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本公开实施例提供的一种存储系统的拓扑示意图;
图2是本公开实施例提供的一种基于FPGA的SSD访问方法的流程图;
图3是本公开实施例提供的一种基于FPGA的SSD访问方法的流程图;
图4是本公开实施例提供的一种SSD控制器初始化的流程图;
图5是本公开实施例提供的一种用户命令控制字缓存区写入的流程图;
图6是本公开实施例提供的一种IO SQ命令缓存区写入的流程图;
图7是本公开实施例提供的一种TAIL DOORBELL缓存区写入的流程图;
图8是本公开实施例提供的一种HEAD DOORBELL缓存区写入的流程图;
图9是本公开实施例提供的一种DOORBELL写入SSD的流程图;
图10是本公开实施例提供的一种基于FPGA的SSD访问装置的结构示意图;
图11示出了本发明一个示例性实施例提供的电子设备的结构框图。
具体实施方式
为使本公开的目的、技术方案和优点更加清楚,下面将结合附图对本公开实施方式作进一步地详细描述。
下面结合图1对本公开实施例提供的方法所应用的系统架构进行说明:
图1是本公开实施例提供的一种存储系统的拓扑示意图。参见图1,该存储系统:
FPGA 10和与所述FPGA 10连接的SSD 20,该SSD 20可以为SSD卡,SSD 20包括控制器、缓存器和闪存(NAND FLASH)构成,所述FPGA 10通过PCIe总线和SSD 20连接,FPGA 10通过执行NVMe协议进行SSD 20的访问,实现向SSD 20中写入数据,或者从SSD 20中读取数据。在FPGA 10和SSD 20进行交互时,实际上是FPGA 10和SSD 20中的控制器进行NVMe协议的数据交互的过程。
NVMe协议是在PCIe上附加支持SSD传输的控制协议。在PCIe层面,FPGA 10作为PCIe的根复合(ROOT Complex)端,SSD 20的控制器作为PCIe的终点(EndPoint)端。FPGA 10建立PCIe网络,通过PCIe总线配置SSD 20的控制器中的消息信号中断(Message SignalInterrupt,MSI)等PCIe寄存器、配置SSD 20的控制器中的基础地址寄存器(Base AddressRegister,BAR)空间以及PCIe地址空间映射等。在NVMe层面,FPGA 10属于NVMe的主机(HOST)端。
图2是本公开实施例提供的一种基于FPGA的SSD访问方法的流程图。该方法由图1中的FPGA 10执行,参见图2,该方法包括:
步骤101:响应于接收到的至少一个读写请求,向用户命令控制字缓存区写入至少一个命令控制字。
上述读写请求是用户(例如终端设备)发送给FPGA的,读写请求中包括访问类型(读或者写)、访问的逻辑区块地址(Logical Block Address,LBA)数量、以及访问的LBA的起始地址。FPGA中的一个模块对读写请求进行解析,得到其中的参数,并生成对应的命令控制字。将命令控制字缓存在FPGA内起来,使得FPGA不用等到该读写请求处理完,就可以处理下一个读写请求,该读写请求后续的处理由FPGA中的其他模块并性地完成。
其中,命令控制字包括访问类型、输入/输出(Input/Output,IO)提交队列(Submission Queue,SQ)编号、LBA数量、以及访问的LBA的起始地址。
其中,SQ是FPGA中的一个存储队列,用来存储FPGA提交给SSD处理的命令,该命令即为SQ命令。与SQ对应的是FPGA中的完成队列(Completion Queue,CQ),用来存储SSD返回给FPGA的信息,该信息即为CQ信息(SQ命令的执行结果)。
SQ和CQ都有两种类型,一种是管理(ADMIN),另一种是IO。以SQ为例,ADMIN SQ用来存放ADMIN SQ命令,实现主机对SSD的管理控制;IO SQ用来存放IO SQ命令,实现主机与SSD之间的数据传输。
在NVMe系统中,SQ和CQ可以是一对一的关系,也可以是多对一的关系,并且是成对的。在NVMe系统中,只有一对ADMIN SQ/CQ,是一一对应关系;IO SQ/CQ可以有很多对。
每个队列都有生产者和消费者,生产者往队列的尾部写入信息或命令,消费者从队列的头部取出信息或命令。对于SQ来说,主机是它的生产者,主机向SQ的尾部写入SQ命令;SSD是它的消费者,SSD从SQ的头部取出SQ命令执行。对于CQ来说,SSD是它的生产者,SSD向CQ的尾部写入CQ信息;主机是它的消费者,主机从CQ的头部读取CQ信息。
步骤102:在所述用户命令控制字缓存区不为空时,基于所述至少一个命令控制字和NVMe协议,向IO SQ命令缓存区中写入IO SQ命令。
其中,IO SQ命令包括命令双字节值0(Command Dword 0)字段、命名空间标识符(Namespace Identifier)字段、保留(Reserved)字段、元数据指针(Metadata Pointer)字段、物理范围输入1(Physical Region Range Entry 1)字段、物理范围输入2(PhysicalRegion Range Entry 2)字段以及命令双字节值10~15(Command Dword 10~15)字段。
IO CQ命令则包括专用命令(Command Specific)字段、保留(Reserved)字段、SQ标识符(SQ Identifier)字段、SQ头指针(SQ Head Pointer)字段、状态域(Status Field)字段和命令标识符(Command Identifier)字段。
步骤103:在所述IO SQ命令缓存区不为空时,向TAIL DOORBELL缓存区写入IO尾门铃(TAIL DOORBELL)信息,所述IO TAIL DOORBELL信息包括IO SQ编号、TAIL DOORBELL值。
步骤104:在所述IO SQ命令缓存区不为空时,将所述IO SQ命令缓存区中的IO SQ命令写入SQ,并将与所述IO SQ命令具有相同IO SQ编号的IO TAIL DOORBELL信息写入SSD,以使SSD读取SQ中的IO SQ命令。
其中,IO TAIL DOORBELL信息被写入SSD中的DOORBELL寄存器。
DOORBELL寄存器用来记录SQ和CQ的头部和尾部的位置。每个SQ或CQ都有两个对应的DOORBELL,即头门铃(HEAD DOORBELL)和TAIL DOORBELL。
在本公开实施例中,在接收到的读写请求时,并不是直接转换成SQ命令,而是先将读写请求中的参数提取并放入到缓存中,也即用户命令控制字;在将读写请求中的参数组装成IO SQ命令时,也并非直接写入SQ中,而是先放入缓存中;同样地,IO TAIL DOORBELL信息也不是生成后直接写到SSD,而是先放入缓存中。在相关技术中,上述几个步骤实际上是串行执行的,必须前一步完成才能执行后一步,并且必须最后一步完成后才能重新执行下一个读写请求的第一步,而在本公开实施例中,由于上述缓存的存在,各个步骤采用流水线式并行处理方式,两个读写请求处理间隙更小,可以有效提高SSD的读写效率。
图3是本公开实施例提供的一种基于FPGA的SSD访问方法的流程图。该方法由图1中的FPGA 10执行,参见图3,该方法包括:
步骤200:对SSD中的控制器进行初始化。
在该步骤中,FPGA按照NVMe要求对SSD控制器进行初始化,实现NVMe标准协议中的寄存器初始化配置,并且把SSD的工作状态上报给用户。初始化流程如图4所示。图4是本公开实施例提供的一种SSD控制器初始化的流程图。参见图4,步骤200包括:
步骤2001:确定PCIE链路是否正常。如果PCIE链路不正常,则继续执行步骤2001;如果PCIE链路已经正常,则执行步骤2002。
步骤2002:读取控制器能力(Controller Capabilities,CAP)寄存器,以确定该SSD中控制器的参数。
这里,从CAP寄存器中确定出的参数,主要是指SSD的控制器支持的页大小范围、门铃寄存器之间的地址间隔、SSD支持的SQ和CQ物理地址的连续性、SSD的控制器支持的单个SQ大小等。
步骤2003:配置类别代码(Class Code,CC)寄存器,使CC寄存器中的CC.EN=0。
通过配置CC寄存器的EN位为低,清除当前SSD的控制器所保存的寄存器配置参数,为新参数配置做准备。
步骤2004:读取控制器状态(Controller Status,CSTS)寄存器,得到CSTS.RDY的值。如果读取到的CSTS.RDY的值为1’b0,则执行步骤2005;否则重复执行步骤2004。
判断CSTS寄存器中RDY(Ready)位是否为低,若为低,则表明SSD的控制器准备好接受新的配置;否则表示未准备好,则进行重复检测。
值得说明的是,这里1’b0表示的就是1个bit且值为0,后文中1’b1表示的就是1个bit且值为1。
步骤2005:配置管理队列属性(Admin Queue Attributes,AQA)寄存器,确定SQ和CQ的大小,以命令个数为单位。
步骤2006:配置管理提交队列基地址(Admin Submission Queue Base Address,ASQ)寄存器,确定ADMIN SQ的基地址。
步骤2007:配置ACQ寄存器,确定ADMIN CQ的基地址。
步骤2008:再次配置CC寄存器,使CC寄存器中的CC.EN=1,重新使能SSD的控制器。
步骤2009:读取CSTS寄存器,得到CSTS.RDY的值。如果读取到的CSTS.RDY的值为1’b1,则执行步骤2010;否则重复执行步骤2009。
读取CSTS寄存器的RDY位,等待RDY位拉高,即表示SSD的控制器初始化完成。
步骤2010:通过ADMIN命令创建IO SQ和IO CQ;创建完成后,初始化结束。
示例性地,发送ADMIN命令,ADMIN命令里的指令(opcode)字段为Create IOSubmission Queue,表示创建IO SQ;ADMIN命令里的指令字段为Create IO CompletionQueue,则表示创建IO CQ。
SSD的控制器初始化完成后,按照NVMe协议,FPGA通过ADMIN SQ创建IO SQ和IOCQ,创建成功后,表明初始化成功完成。初始化完成后,将SSD初始化成功完成信息,上报给用户,并且准备接收来自于用户的访问请求。
FPGA作为NVMe的HOST端,需要对FPGA和SSD中的控制器之间的数据传输地址进行管理,即做各类数据的地址映射。这些数据地址包括ADMIN SQ和ADMIN CQ的基地址、IO SQ和IO CQ的基地址、待读写数据的基地址、设置特性(SET FEATURE)的基地址、标识(IDENTIFY)的基地址等。
地址映射就是设置NVMe协议里的各类数据的地址,包括SQ地址,CQ地址,数据地址等,也就是做地址划分。地址映射包括通过设置SSD的控制器的ASQ和ACQ寄存器值,确定管理队列的基地址,然后通过创建IO队列确定IO队列的基地址以及数据读写的基地址。
步骤201:在对SSD控制器初始化完成后,创建ADMIN SQ和ADMIN CQ。
在ADMIN SQ和ADMIN CQ创建后,FPGA会向其中写入ADMIN SQ命令,并通过门铃通知SSD读取,然后SSD会向ADMIN CQ写入CQ信息,FPGA读取并解析ADMIN CQ接收的CQ信息,判决访问结果是否成功。
如果访问成功,则执行步骤202,如果访问没有成功,则将错误码上报给用户,由用户决定是否重传。IO完成队列时,有每次执行的结果,只要返回的完成结果状态不是预设的状态,则判断为访问成功。
步骤202:响应于接收到的至少一个读写请求,向用户命令控制字缓存区写入至少一个命令控制字。
其中,所述命令控制字包括访问类型、IO SQ编号、访问的LBA数量、以及访问的LBA的起始地址。下表1是本公开实施例提供的命令控制字的格式:
表1
其中,访问类型表示该读写请求是读还是写;IO SQ编号表示对应后续产生的第几个SQ命令;访问的LBA数量、以及访问的LBA的起始地址对应要访问的SSD中的地址。
由于用户命令控制字缓存区会出现满的情况,所以步骤202的具体过程可以参见图5。图5是本公开实施例提供的一种用户命令控制字缓存区写入的流程图。参见图5,步骤202包括:
步骤2021:判断用户命令控制字缓存区是否已满。如果用户命令控制字缓存区已满,则重复步骤2021;如果用户命令控制字缓存区未满,则执行步骤2022。
步骤2022:创建用户命令控制字并写入用户命令缓存区。
步骤203:在所述用户命令控制字缓存区不为空时,基于所述至少一个命令控制字和NVMe协议,向IO SQ命令缓存区中写入IO SQ命令。
由于IO SQ命令缓存区会出现满的情况,所以步骤203的具体过程可以参见图6。图6是本公开实施例提供的一种IO SQ命令缓存区写入的流程图。参见图6,步骤203包括:
步骤2031:判断用户命令控制字缓存区是否为空。如果用户命令控制字缓存区为空,则重复步骤2031;如果用户命令控制字缓存区非空,则执行步骤2032。
步骤2032:读取用户命令控制字并创建IO SQ命令。
步骤2033:判断IO SQ命令缓存区是否已满。如果IO SQ命令缓存区已满,则重复步骤2033;如果IO SQ命令缓存区未满,则执行步骤2034。
步骤2034:将IO SQ命令写入IO SQ命令缓存区。
步骤204:在所述IO SQ命令缓存区不为空时,向TAIL DOORBELL缓存区写入IOTAIL DOORBELL信息,所述IO TAIL DOORBELL信息包括IO SQ编号、TAIL DOORBELL值。
下表2是本公开实施例提供的IO TAIL DOORBELL信息的格式:
表2
由于TAIL DOORBELL缓存区会出现满的情况,所以步骤204的具体过程可以参见图7。图7是本公开实施例提供的一种TAIL DOORBELL缓存区写入的流程图。参见图7,步骤204包括:
步骤2041:判断IO SQ命令缓存区是否为空。如果IO SQ命令缓存区为空,则重复步骤2041;如果IO SQ命令缓存区非空,则执行步骤2042。
步骤2042:更新IO TAIL DOORBELL信息。
步骤2043:判断IO TAIL DOORBELL缓存区是否已满。如果IO TAIL DOORBELL缓存区已满,则重复步骤2043;如果IO TAIL DOORBELL缓存区未满,则执行步骤2044。
步骤2044:将更新后的IO TAIL DOORBELL信息写入IO TAIL DOORBELL缓存区。
需要说明的是,IO TAIL DOORBELL缓存区可有同时缓存有多个IO TAIL DOORBELL信息。
在上述步骤2042中,更新IO TAIL DOORBELL信息,包括:
每向所述IO SQ命令缓存区中写入一个IO SQ命令,则将当前的IO SQ编号加1;
基于加1得到的IO SQ编号生成所述IO TAIL DOORBELL信息。
在更新完成后,如果IO TAIL DOORBELL缓存区未满,则将更新后的IO TAILDOORBELL信息写入IO TAIL DOORBELL缓存区。
步骤205:在所述IO SQ命令缓存区不为空时,将所述IO SQ命令缓存区中的IO SQ命令写入SQ,并将与所述IO SQ命令具有相同IO SQ编号的IO TAIL DOORBELL信息写入SSD,通知SSD读取SQ中的IO SQ命令。
在本公开实施例中,写入SSD的实际是IO TAIL DOORBELL信息中的TAIL DOORBELL值。
如前所述,IO TAIL DOORBELL信息包括SQ编号和IO TAIL值信息。IO TAILDOORBELL编号决定了后续DOORBELL寄存器的地址。因为NVMe支持多个SQ和多个CQ,这些SQ和CQ的TAIL寄存器和HEAD寄存器的地址是各有不同的。例如,假设CAP.DSTRD为0,编号为0的SQ的TAIL寄存器偏移地址为1000h,编号为1的SQ的TAIL寄存器偏移地址为1000h+8,依此类推。
步骤206:将CQ中的CQ信息读入IO CQ命令缓存区。
FPGA作为NVMe的HOST端,需要对访问结果(CQ信息)进行处理,并将访问结果回馈给用户,也即将写入结果或者读取到的数据返回给用户。
步骤207:在所述IO CQ命令缓存区不为空时,向HEAD DOORBELL缓存区写入IOHEAD DOORBELL信息,所述IO HEAD DOORBELL信息包括IO CQ编号、HEAD DOORBELL值。
在本公开实施例中,写入SSD的实际是IO HEAD DOORBELL信息中的HEAD DOORBELL值。
下表3是本公开实施例提供的IO HEAD DOORBELL信息的格式:
表3
由于HEAD DOORBELL缓存区会出现满的情况,所以步骤207的具体过程可以参见图8。图8是本公开实施例提供的一种HEAD DOORBELL缓存区写入的流程图。参见图8,步骤207包括:
步骤2071:判断IO CQ命令缓存区是否为空。如果IO CQ命令缓存区为空,则重复步骤2071;如果IO CQ命令缓存区非空,则执行步骤2042。
步骤2072:更新IO HEAD DOORBELL信息。
步骤2073:判断IO HEAD DOORBELL缓存区是否已满。如果IO HEAD DOORBELL缓存区已满,则重复步骤2073;如果IO HEAD DOORBELL缓存区未满,则执行步骤2074。
步骤2074:将更新后的IO HEAD DOORBELL信息写入IO HEAD DOORBELL缓存区。
在上述步骤2072中,更新IO HEAD DOORBELL信息,包括:
每向所述IO CQ命令缓存区中读入一个CQ信息,则将当前的IO CQ编号加1;
基于加1得到的IO CQ编号生成所述IO HEAD DOORBELL信息。
在更新完成后,如果IO TAIL DOORBELL缓存区未满,则将更新后的IO TAILDOORBELL信息写入IO TAIL DOORBELL缓存区。
在IO CQ缓存区不空时,表明SSD有CQ信息发送给FPGA。FPGA检测到该缓存区不空时,将CQ信息读出,并且按照NVMe协议对IO CQ信息解析。记录该CQ对应的SQ编号和SQ ID,这样就可以确定该CQ对应的SQ帧编号,并且根据返回的信息字确定访问结果是否成功,把访问结果反馈给用户。每次解析完成CQ信息后,要更新IO HEAD DOORBELL信息,该信息包括SQ编号(为CQ对应的SQ帧编号)和IO HEAD值,在IO HEAD缓存区不满时,将IO HEAD信息写入缓存区。
步骤208:将所述IO CQ命令缓存区中的IO HEAD DOORBELL信息写入SSD。
IO TAIL DOORBELL信息和IO HEAD DOORBELL信息都需要通过DOORBELL发送,为了提高性能,当IO TAIL DOORBELL信息和IO HEAD DOORBELL信息都需要发送时,优先处理IOTAIL DOORBELL信息。
DOORBELL操作实质是通过PCIE设置SSD中控制器的DOORBELL寄存器,DOORBELL寄存器包括TAIL和HEAD两种。在FPGA中,DOORBELL发送是PCIE发送操作状态机里的一个状态,同一时间只能执行IO TAIL DOORBELL信息和IO HEAD DOORBELL信息中的一个的发送。
下面结合图9对将DOORBELL信息写入SSD的过程进行说明。图9是本公开实施例提供的一种DOORBELL写入SSD的流程图。参见图9,该过程实际包括步骤205和步骤208的过程,具体包括:
步骤2581:判断IO TAIL DOORBELL缓存区是否为空。如果IO TAIL DOORBELL缓存区为空,则执行步骤2582;如果IO TAIL DOORBELL缓存区非空,则执行步骤2583。
步骤2582:采用IO TAIL DOORBELL缓存区的TAIL DOORBELL信息更新SSD的IO SQTAIL DOORBELL寄存器。
步骤2583:判断IO HEAD DOORBELL缓存区是否为空。如果IO HEAD DOORBELL缓存区为空,则执行步骤2581;如果IO HEAD DOORBELL缓存区非空,则执行步骤2584。
步骤2584:采用IO HEAD DOORBELL缓存区的HEAD DOORBELL信息更新SSD的IO SQHEAD DOORBELL寄存器。
在本公开实施例中,FPGA中的各种缓存区可以采用先进先出(First Input FirstOutput,FIFO)存储器实现。
图10是本公开实施例提供的一种基于FPGA的SSD访问装置的结构示意图。参见图10,该装置包括:用户命令处理模块301、SQ组帧处理模块302、TAIL DOORBELL维护模块303和PCIE总线模块304。
其中,用户命令处理模块301,用于响应于接收到的至少一个读写请求,向用户命令控制字缓存区写入至少一个命令控制字,所述命令控制字包括访问类型、IO SQ编号、访问的LBA数量、以及访问的LBA的起始地址;
SQ组帧处理模块302,用于在所述用户命令控制字缓存区不为空时,基于所述至少一个命令控制字和NVMe协议,向IO SQ命令缓存区中写入IO SQ命令;
TAIL DOORBELL维护模块303,用于在所述IO SQ命令缓存区不为空时,向TAILDOORBELL缓存区写入IO TAIL DOORBELL信息,所述IO TAIL DOORBELL信息包括IO SQ编号、TAIL DOORBELL值;
PCIE总线模块304,用于在所述IO SQ命令缓存区不为空时,将所述IO SQ命令缓存区中的IO SQ命令写入SQ,并将与所述IO SQ命令具有相同IO SQ编号的IO TAIL DOORBELL信息写入SSD,以使SSD读取SQ中的IO SQ命令。
可选地,所述TAIL DOORBELL维护模块303,用于每向所述IO SQ命令缓存区中写入一个IO SQ命令,则将当前的IO SQ编号加1;基于加1得到的IO SQ编号生成所述IO TAILDOORBELL信息,并写入所述TAIL DOORBELL缓存区。
可选地,该装置还包括:CQ解析处理模块305和HEAD DOORBELL维护模块306。
其中,CQ解析处理模块305,用于将CQ中的CQ信息读入IO CQ命令缓存区;
HEAD DOORBELL维护模块306,用于在所述IO CQ命令缓存区不为空时,向HEADDOORBELL缓存区写入IO HEAD DOORBELL信息,所述IO HEAD DOORBELL信息包括IO CQ编号、HEAD DOORBELL值;
所述PCIE总线模块304,还用于将所述IO CQ命令缓存区中的IO HEAD DOORBELL信息写入SSD。
可选地,所述HEAD DOORBELL维护模块306,用于每向所述IO CQ命令缓存区中读入一个CQ信息,则将当前的IO CQ编号加1;基于加1得到的IO CQ编号生成所述IO HEADDOORBELL信息,并写入所述HEAD DOORBELL缓存区。
需要说明的是:上述实施例提供的基于FPGA的SSD访问装置在进行SSD访问时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的基于FPGA的SSD访问装置与基于FPGA的SSD访问方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图11示出了本发明一个示例性实施例提供的电子设备的结构框图。通常,电子设备包括有:处理器401和存储器402。
处理器401可以采用FPGA(Field-Programmable Gate Array,现场可编程门阵列)来实现。
存储器402可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器402还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器402中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器401所执行以实现本申请中方法实施例提供的基于FPGA的SSD访问方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本公开的可选实施例,并不用以限制本公开,凡在本公开的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本公开的保护范围之内。
Claims (10)
1.一种基于FPGA的SSD访问方法,其特征在于,所述方法包括:
响应于接收到的至少一个读写请求,向用户命令控制字缓存区写入至少一个命令控制字,所述命令控制字包括访问类型、IO SQ编号、访问的LBA数量、以及访问的LBA的起始地址;
在所述用户命令控制字缓存区不为空时,基于所述至少一个命令控制字和NVMe协议,向IO SQ命令缓存区中写入IO SQ命令;
在所述IO SQ命令缓存区不为空时,向TAIL DOORBELL缓存区写入IO TAIL DOORBELL信息,所述IO TAIL DOORBELL信息包括IO SQ编号、TAIL DOORBELL值;
在所述IO SQ命令缓存区不为空时,将所述IO SQ命令缓存区中的IO SQ命令写入SQ,并将与所述IO SQ命令具有相同IO SQ编号的IO TAIL DOORBELL信息写入SSD,以使SSD读取SQ中的IO SQ命令。
2.根据权利要求1所述的方法,其特征在于,所述向TAIL DOORBELL缓存区写入IO TAILDOORBELL信息,包括:
每向所述IO SQ命令缓存区中写入一个IO SQ命令,则将当前的IO SQ编号加1;
基于加1得到的IO SQ编号生成所述IO TAIL DOORBELL信息,并写入所述TAILDOORBELL缓存区。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
将CQ中的CQ信息读入IO CQ命令缓存区;
在所述IO CQ命令缓存区不为空时,向HEAD DOORBELL缓存区写入IO HEAD DOORBELL信息,所述IO HEAD DOORBELL信息包括IO CQ编号、HEAD DOORBELL值;
将所述IO CQ命令缓存区中的IO HEAD DOORBELL信息写入SSD。
4.根据权利要求3所述的方法,其特征在于,所述向HEAD DOORBELL缓存区写入IO HEADDOORBELL信息,包括:
每向所述IO CQ命令缓存区中读入一个CQ信息,则将当前的IO CQ编号加1;
基于加1得到的IO CQ编号生成所述IO HEAD DOORBELL信息,并写入所述HEADDOORBELL缓存区。
5.一种基于FPGA的SSD访问装置,其特征在于,所述装置包括:
用户命令处理模块,用于响应于接收到的至少一个读写请求,向用户命令控制字缓存区写入至少一个命令控制字,所述命令控制字包括访问类型、IO SQ编号、访问的LBA数量、以及访问的LBA的起始地址;
SQ组帧处理模块,用于在所述用户命令控制字缓存区不为空时,基于所述至少一个命令控制字和NVMe协议,向IO SQ命令缓存区中写入IO SQ命令;
TAIL DOORBELL维护模块,用于在所述IO SQ命令缓存区不为空时,向TAIL DOORBELL缓存区写入IO TAIL DOORBELL信息,所述IO TAIL DOORBELL信息包括IO SQ编号、TAILDOORBELL值;
PCIE总线模块,用于在所述IO SQ命令缓存区不为空时,将所述IO SQ命令缓存区中的IO SQ命令写入SQ,并将与所述IO SQ命令具有相同IO SQ编号的IO TAIL DOORBELL信息写入SSD,以使SSD读取SQ中的IO SQ命令。
6.根据权利要求5所述的装置,其特征在于,所述TAIL DOORBELL维护模块,用于每向所述IO SQ命令缓存区中写入一个IO SQ命令,则将当前的IO SQ编号加1;基于加1得到的IOSQ编号生成所述IO TAIL DOORBELL信息,并写入所述TAIL DOORBELL缓存区。
7.根据权利要求5或6所述的装置,其特征在于,所述装置还包括:
CQ解析处理模块,用于将CQ中的CQ信息读入IO CQ命令缓存区;
HEAD DOORBELL维护模块,用于在所述IO CQ命令缓存区不为空时,向HEAD DOORBELL缓存区写入IO HEAD DOORBELL信息,所述IO HEAD DOORBELL信息包括IO CQ编号、HEADDOORBELL值;
所述PCIE总线模块,还用于将所述IO CQ命令缓存区中的IO HEAD DOORBELL信息写入SSD。
8.根据权利要求7所述的装置,其特征在于,所述HEAD DOORBELL维护模块,用于每向所述IO CQ命令缓存区中读入一个CQ信息,则将当前的IO CQ编号加1;基于加1得到的IO CQ编号生成所述IO HEAD DOORBELL信息,并写入所述HEAD DOORBELL缓存区。
9.一种存储系统,其特征在于,所述存储系统包括FPGA和与所述FPGA连接的SSD,所述FPGA包括如权利要求5至权利要求8中任一项所述的基于FPGA的SSD访问装置。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质中存储有至少一条程序代码,所述程序代码由处理器加载并执行以实现如权利要求1至权利要求4中任一项所述的基于FPGA的SSD访问方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011580592.0A CN112732176B (zh) | 2020-12-28 | 2020-12-28 | 基于fpga的ssd访问方法及装置、存储系统及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202011580592.0A CN112732176B (zh) | 2020-12-28 | 2020-12-28 | 基于fpga的ssd访问方法及装置、存储系统及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112732176A true CN112732176A (zh) | 2021-04-30 |
CN112732176B CN112732176B (zh) | 2022-10-04 |
Family
ID=75606357
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202011580592.0A Active CN112732176B (zh) | 2020-12-28 | 2020-12-28 | 基于fpga的ssd访问方法及装置、存储系统及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112732176B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113722090A (zh) * | 2021-07-26 | 2021-11-30 | 浪潮电子信息产业股份有限公司 | 一种任务管理方法、装置、设备及计算机可读存储介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107992436A (zh) * | 2016-10-26 | 2018-05-04 | 杭州华为数字技术有限公司 | 一种NVMe数据读写方法及NVMe设备 |
CN108829353A (zh) * | 2018-06-15 | 2018-11-16 | 郑州云海信息技术有限公司 | 一种基于NVMe的网络化存储系统及方法 |
US20190095274A1 (en) * | 2017-09-26 | 2019-03-28 | Silicon Motion, Inc. | Methods and apparatuses for proactive ecc failure handling |
CN109814811A (zh) * | 2019-01-30 | 2019-05-28 | 哈尔滨工业大学 | 一种减小NVMe SSD响应延迟影响高速数据存储设备写入速度的方法 |
CN110073323A (zh) * | 2017-03-24 | 2019-07-30 | 西部数据技术公司 | 使用控制器存储器缓冲区进行推测性执行命令的系统和方法 |
CN110109626A (zh) * | 2019-05-20 | 2019-08-09 | 哈尔滨工业大学 | 一种基于FPGA的NVMe SSD命令处理方法 |
US20200257629A1 (en) * | 2019-02-12 | 2020-08-13 | Samsung Electronics Co., Ltd. | Systems and methods for streaming storage device content |
CN111542803A (zh) * | 2018-06-30 | 2020-08-14 | 华为技术有限公司 | 一种基于NVMe的数据写入方法、装置及系统 |
CN111752484A (zh) * | 2020-06-08 | 2020-10-09 | 深圳大普微电子科技有限公司 | 一种ssd控制器、固态硬盘及数据写入方法 |
-
2020
- 2020-12-28 CN CN202011580592.0A patent/CN112732176B/zh active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107992436A (zh) * | 2016-10-26 | 2018-05-04 | 杭州华为数字技术有限公司 | 一种NVMe数据读写方法及NVMe设备 |
CN110073323A (zh) * | 2017-03-24 | 2019-07-30 | 西部数据技术公司 | 使用控制器存储器缓冲区进行推测性执行命令的系统和方法 |
US20190095274A1 (en) * | 2017-09-26 | 2019-03-28 | Silicon Motion, Inc. | Methods and apparatuses for proactive ecc failure handling |
CN108829353A (zh) * | 2018-06-15 | 2018-11-16 | 郑州云海信息技术有限公司 | 一种基于NVMe的网络化存储系统及方法 |
CN111542803A (zh) * | 2018-06-30 | 2020-08-14 | 华为技术有限公司 | 一种基于NVMe的数据写入方法、装置及系统 |
CN109814811A (zh) * | 2019-01-30 | 2019-05-28 | 哈尔滨工业大学 | 一种减小NVMe SSD响应延迟影响高速数据存储设备写入速度的方法 |
US20200257629A1 (en) * | 2019-02-12 | 2020-08-13 | Samsung Electronics Co., Ltd. | Systems and methods for streaming storage device content |
CN110109626A (zh) * | 2019-05-20 | 2019-08-09 | 哈尔滨工业大学 | 一种基于FPGA的NVMe SSD命令处理方法 |
CN111752484A (zh) * | 2020-06-08 | 2020-10-09 | 深圳大普微电子科技有限公司 | 一种ssd控制器、固态硬盘及数据写入方法 |
Non-Patent Citations (1)
Title |
---|
已注销: "《NVME-SQ、CQ&DoorBell》", 《CSDN博客》 * |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113722090A (zh) * | 2021-07-26 | 2021-11-30 | 浪潮电子信息产业股份有限公司 | 一种任务管理方法、装置、设备及计算机可读存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN112732176B (zh) | 2022-10-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN112256601B (zh) | 数据存取控制方法、嵌入式存储系统及嵌入式设备 | |
US20190163364A1 (en) | System and method for tcp offload for nvme over tcp-ip | |
JP5181141B2 (ja) | 入出力処理システムにおいて間接データ・アドレッシングを提供するための装置、並びにその方法およびコンピュータ・プログラム | |
EP3608790B1 (en) | Modifying nvme physical region page list pointers and data pointers to facilitate routing of pcie memory requests | |
CN112416250B (zh) | 基于NVMe的固态硬盘的命令处理方法及相关设备 | |
CN109564502B (zh) | 应用于存储设备中的访问请求的处理方法和装置 | |
US20230384979A1 (en) | Data processing method, apparatus, and system | |
CN116414735A (zh) | 数据存储方法、系统、存储访问配置方法及相关设备 | |
US10853255B2 (en) | Apparatus and method of optimizing memory transactions to persistent memory using an architectural data mover | |
CN117591450B (zh) | 一种数据处理系统、方法、设备及介质 | |
CN112732176B (zh) | 基于fpga的ssd访问方法及装置、存储系统及存储介质 | |
KR102454695B1 (ko) | 캐시 장치, 캐시, 시스템, 데이터 처리 방법, 장치 및 매체 | |
CN116670661A (zh) | 图形处理器的缓存访问方法、图形处理器及电子设备 | |
CN115242813A (zh) | 一种文件访问方法、网卡以及计算设备 | |
US8230134B2 (en) | Fast path SCSI IO | |
CN116610262A (zh) | 降低ssd顺序读延时的方法、装置、设备及介质 | |
CN113220608B (zh) | 一种NVMe命令处理器及其处理方法 | |
CN115982068A (zh) | 数据处理方法及相关装置 | |
CN116601616A (zh) | 一种数据处理装置、方法及相关设备 | |
CN109445686B (zh) | 一种存储磁盘以及存取数据的方法 | |
US20240168876A1 (en) | Solving submission queue entry overflow using metadata or data pointers | |
WO2024055679A1 (zh) | 数据存储方法、装置、系统、芯片及加速设备 | |
WO2022126534A1 (zh) | 数据处理方法及相关设备 | |
CN118295943A (zh) | 读响应保序方法、系统、存储介质及电子设备 | |
CN115562574A (zh) | 一种NVMe加速系统、方法、设备及可读介质 |
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 |