CN115454902A - 一种基于pcie接口的nvme通信系统及方法 - Google Patents
一种基于pcie接口的nvme通信系统及方法 Download PDFInfo
- Publication number
- CN115454902A CN115454902A CN202210923846.7A CN202210923846A CN115454902A CN 115454902 A CN115454902 A CN 115454902A CN 202210923846 A CN202210923846 A CN 202210923846A CN 115454902 A CN115454902 A CN 115454902A
- Authority
- CN
- China
- Prior art keywords
- nvme
- command
- queue
- controller
- data
- 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.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4221—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being an input/output bus, e.g. ISA bus, EISA bus, PCI bus, SCSI bus
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/40—Bus structure
- G06F13/4063—Device-to-bus coupling
- G06F13/4068—Electrical coupling
- G06F13/4081—Live connection to bus, e.g. hot-plugging
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Bus Control (AREA)
Abstract
本发明公开了一种基于PCIE接口的NVME通信系统及方法,在CPU侧采用操作系统携带的NVMe驱动,在FPGA端基于FPGA的PCIe通信接口进行开发NVMe控制器程序。FPGA端存有NVMe驱动加载过程中需要的硬盘信息,并且按照符合NVMe协议规定形式的数据包和主机端进行通信。在FPGA侧虚拟出一个SSD,CPU端可以对该硬盘进行读写操作,FPGA端接收到的数据包不进行存储,而是进行算法处理,处理结果CPU端可以同时读操作获取。与现有技术相比,本发明基于PCIE板卡能够适用于更多的操作系统,即插即用且不需要驱动,为PCIE板卡的使用提供了便利性。
Description
技术领域
本发明属于FPGA和CPU数据通信接口的应用技术领域,特别是涉及一种基于PCIE接口的NVME通信接口实现方法、装置。
背景技术
随着各种信息化的高速发展,数据的通信速率要求也越来越高。目前通用高速板卡设备都是基于PCIE接口进行高速数据传输服务。PCIE(Peripheral ComponentInterconnect express)是一种高速串行计算机扩展总线标准。传统的PCIE板卡设备和CPU主机之间的通信采用基于PCIE的直接内存访问方式(DMA)进行数据传输,分别存在以下实际问题:
1)BLOCK DMA方式,实现简单,但操作系统开销较大,较难申请一大片连续内存。
2)Scatter Gather DMA方式,解决Block DMA问题,操作效率大大提高。
3)Minimum Latency DMA方式,这种方式不经过中断,也不去查询板卡的信息,仅查询PC本地内存的数据,所以系统负载以及时延都可以有效的控制。
4)Multi-DMA方式,支持多路独立的数据通过DMA传输到PC,每个DMA负责其中一个或多个收发通道,这种方式可以简化HDL的结构以及软件和驱动的结构。数据传输方式没有固定的模式,主机PCIE驱动和FPGA端PCIE设备程序需要一一对应,在更换操作系统或操作系统版本需要进行PCIE驱动程序的适配工作,开发工作量大。
非易失性存储器标准(Non-Volatile Memory Express,NVME)是运行在PCIE接口之上的协议标准,实现了Host与SSD之间通讯的协议,是基于PCIE的存储设备规范,用于高速固态硬盘SSD主机接口。NVME协议接口允许主机软件与非易失性存储器子系统通信,通常作为寄存器级接口连接到PCIE接口。目前主流的系统Linux、Windows、Unix都提供了NVME驱动。存在NVME协议<---事务层<---数据链路层<---物理层的层级关系。其中,NVME协议作为命令层和应用层协议位于最上层,下面3层均为PCIE接口部分。PCIE规范定义了传输层(或称作事务层)、数据链路层和物理层。
发明内容
本方案旨在提出一种基于PCIE接口的NVME通信接口统及方法,实现了基于PCIE接口的CPU和FPGA之间基于NVME协议的高速数据通信。
本发明利用以下的技术方案实现:
一种基于PCIE接口的NVME通信系统,该系统包括作为NVME主设备的CPU主机以及作为NVME从设备的FPGA模块;所述CPU主机通过PCIE通信接口和所述FPGA模块连接,所述FPGA模块按照符合NVME协议规定形式的数据包和CPU主机进行通信;其中:
所述CPU主机进一步包括NVME驱动,通过NVME驱动提供的API接口实现了所述CPU主机对所述FPGA模块进行访问和读写操作;
所述FPGA模块进一步包括ROM存储器、NVME控制器、虚拟SSD硬盘以及外挂DDR缓存,保存有NVME驱动加载过程中所需的硬盘信息写入到虚拟SSD硬盘的数据发送给FPGA模块内部进行算法处理以区分NVME控制器接收到的数据和发送的数据,所述ROM存储器用于存储虚拟SSD硬盘参数信息,作为NVME驱动加载过程所需的硬盘参数信息;CPU主机通过PCIE接口完成FPGA模块中的虚拟SSD进行识别和读写操作,从而实现数据通信。
一种基于PCIE接口的NVME通信方法,该方法具体包括以下步骤:
步骤1、通过PCIE通信接口的枚举,将FPGA模块的PCIE通信接口空间映射到计算机端地址空间,CPU主机通过对BAR0空间访问完成NVME控制器的初始化;具体地,CPU主机按照NVME协议要求对NVME控制器进行初始化,按照NVME协议进行寄存器初始化配置,获取虚拟SSD的工作状态;
步骤2、将在进行的虚拟SSD硬盘识别信息保存于FPGA模块内部的ROM存储器中,将FPGA模块的PCIE通信模块配置空间映射到计算机端地址空间,完成基于FPGA模块的虚拟SSD的枚举和配置,初始化在进行的虚拟SSD硬盘,具体处理包括FPGA模块根据在进行的虚拟SSD硬盘中不同Admin命令提交队列的命令回复不同命令完成队列的指令,完成虚拟SSD硬盘初始化;初始化完成后,将虚拟SSD硬盘初始化完成信息上报给用户,NVME控制器就绪,接收请求;
步骤3、FPGA模块接收到从IO命令提交队列提取的数据,进行计算,将运算结果通过命令完成队列发送给计算机;其中,CPU主机通过IO命令提交队列提交IO命令请求;IO命令提交队列用来存放NVME命令,I/O命令请求转化成NVME命令;FPGA模块通过直接内存访问方式获取IO命令请求,之后进行数据的接收和发送;通过直接内存访问方式由命令完成队列上传处理结果。
与现有技术相比,本发明所能达成的有益技术效果如下:
基于PCIE的板卡能够适用于更多的操作系统,不存在驱动适配的问题,做到了板卡的即插即用,不需要驱动。为板卡的使用提供了便利性。
附图说明
图1为一种CPU和FPGA之间的NVME通信系统拓扑结构图。
图2为NVME控制器DB组成和操作助理数据结构图。
图3为CPU主机、FPGA模块、NVME控制器之间的数据操作过程示意图。
图4为本发明的一种CPU和FPGA之间的NVME通信方法流程图。
图5为虚拟SSD初始化流程。
具体实施方式
下面结合附图对本发明的技术方案作进一步详细描述。
如图1所示,为本发明的一种CPU和FPGA之间的NVME通信系统拓扑结构图。该系统包含CPU主机10、NVME驱动30和FPGA模块20。其中,CPU主机10通过PCIE总线和FPGA模块20连接,CPU主机10上具有NVME驱动30,CPU主机10和所述FPGA模块20之间通过NVME驱动30实现PCIE总线连接。NVME驱动30执行NVME通信协议,其采用操作系统携带的NVME驱动。
FPGA模块20内部包含ROM存储器301、NVME控制器302和虚拟SSD硬盘303,其外挂有DDR缓存304。CPU主机侧通过NVME驱动提供的API接口实施对FPGA模块内部虚拟SSD硬盘的访问,进行读写操作。CPU主机与虚拟SSD硬盘之间的数据通信实际是CPU主机与FPGA模块内部的NVME控制器之间进行的数据交互。写入到虚拟SSD硬盘的数据不进行存储,发送给FPGA模块内部进行算法处理,从虚拟SSD硬盘中读取的数据为经过算法处理的数据结果。
ROM存储器中存储了虚拟SSD硬盘参数信息。在本设计中存在真是SSD部件,需要在FPGA内部存储固定的硬盘信息,在主机查询硬盘信息时,从ROM汇总取出,回复给CPU主机。
固态硬盘的配置参数包括channel(用于传输命令和数据的NAND总线)总数、CE(NAND内部的片选,也叫target)总数、LUN总数和每一LUN包含的Block数;根据所述硬盘参数确定所述固态硬盘的Block总数;根据所述固态硬盘的Block总数和所述ParityLUN的数量计算所述固态硬盘的空间损耗率。还包括生产厂商、容量、功能、日志页面等。
CPU主机和FPGA模块分别具有第一PCIE通信接口40、第二PCIE通信接口50。第一PCIE通信接口40与CPU主机10连接,第二PCIE通信接口50与FPGA模块中的NVME控制器连接,进行NVME控制器的程序开发。FPGA模块保存有NVME驱动加载过程中所需的硬盘信息,按照符合NVME协议规定形式的数据包和CPU主机进行通信。在FPGA模块中虚拟出一个虚拟SSD硬盘,CPU主机对该硬盘进行读写操作,FPGA模块端接收到的数据包不进行存储,进行处理,处理结果由CPU主机读操作获取。
本发明的CPU主机和FPGA之间的NVME通信系统中,CPU主机为NVME主设备,FPGA为NVME从设备。
如图2所示,为NVME控制器DB组成和操作助理数据结构图。说明了DB的组成和操作主体,SQ Head DB和SQ Tail DB是由控制器来更新的,SQ Tail DB和CQ Head DB是由CPU主机来更新的。DB在数据处理流程中,起到了两个作用,一个是记住了SQ和CQ的头和尾,另一个是通知,通知NVME控制器有新命令需要处理和命令完成状态已经处理。
如图3所示,为CPU主机、FPGA模块、NVME控制器之间的数据操作过程示意图。该数据操作过程包括算法操作、SQ解析操作、头部门铃(Head Doorbell)维护操作、CQ组帧操作以及尾部门铃(Tail Doorbell)维护操作。具体描述如下:
算法操作,用于对FPGA模块接收到的数据进行算法处理,区分NVME控制器接收到的数据和发送的数据。本设计中算法逻辑为对接收到的数据按位取反。算法操作结果送至DDR存储器,存储通信过程中的Admin命令提交队列(Adamin SQ)信息,包括CPU主机和NVME控制器之间的数据传输地址进行映射,这些地址包括Admin SQ基地址和Admin CQ基地址、IO SQ基地址和IO CQ基地址、读写数据的主机内存地址、设置特性基地址和标识基地址等。进行SQ解析操作,对于接收到的命令提交队列SQ命令进行解析。进行头部门铃(HeadDoorbell)维护操作,用于维护CPU主机和NVME控制器头部门铃的位置。通过设置于CPU主机和FPGA模块之间的PCIE通信接口提供的高速数据传输链路进行SQ命令、CQ命令和Doorbell信息传输。进行CQ组帧操作,在接收到CPU主机发来的SQ命令之后,根据NVME协议规定的数据包格式进行CQ组帧,发送给CPU主机。进行尾门铃(Tail Doorbell)维护操作,用于维护CPU主机和尾部门铃的位置。操作结果保存至ROM存储器。
如图4所示,为本发明的一种CPU和FPGA之间的NVME通信方法流程图。CPU主机主要通过PCIE接口完成FPGA端虚拟SSD的识别并进行数据的通信。
步骤1、通过PCIE通信接口的枚举,将FPGA模块的PCIE通信接口空间映射到计算机端地址空间,CPU主机通过对BAR0空间访问完成NVME控制器的初始化;具体地,CPU主机按照NVME协议要求对NVME控制器进行初始化,按照NVME协议进行寄存器初始化配置,获取虚拟SSD的工作状态;
步骤2、将在进行的虚拟SSD硬盘识别信息保存于FPGA模块内部的ROM存储器中,将FPGA模块的PCIE通信模块配置空间映射到计算机端地址空间,完成基于FPGA模块的虚拟SSD的枚举和配置,初始化在进行的虚拟SSD硬盘,具体处理包括FPGA模块根据在进行的虚拟SSD硬盘中不同Admin命令提交队列(Adamin SQ)的命令回复不同命令完成队列(CQ)的指令,完成虚拟SSD硬盘初始化;初始化完成后,将虚拟SSD硬盘初始化完成信息上报给用户,NVME控制器就绪,可以接收请求;
其中,在FPGA内部ROM存储器中存有虚拟SSD参数,包括channel总数、CE总数、LUN总数和Bolck总数。通过此参数在FPGA侧虚拟一个SSD硬盘,用于和主机进行数据通信。NVME控制器的存储数据主要分为两部分,一部分存储数据定义了NVME控制器整体属性,另外一部分存储数据为每组队列的头尾DB寄存器。
本步骤还包括:在建立上述队列之前,CPU主机获取当前系统中运行的CPU核的数量N,通过Set Feature命令咨询NVME控制器中队列数量的限制M,选择M、N两者较小的值(MIN(N,M))在CPU主机创建IOSQ队列、CQ队列,通知NVME控制器;
步骤4、FPGA模块接收到从IO命令提交队列(IOSQ)提取的数据,进行计算,将运算结果通过命令完成队列(CQ)发送给计算机。其中,IO命令提交队列用来存放NVME命令,NVME命令是主机与NVME控制器交流的基本单元,I/O请求也要转化成NVME命令。CPU主机通过IO命令提交队列(IOSQ)提交IO请求。FPGA模块通过DMA获取IO请求,之后通过DMA进行数据的接收和发送;通过命令完成队列(CQ)上传处理结果,命令完成队列(CQ)通信方式为DMA。
如图5所示,为虚拟SSD初始化流程。该流程具体流程描述如下:
步骤2-1、PCIE设备枚举:在系统启动时,BIOS会枚举整个PCI的总线,之后将扫描到的设备通过ACPI tables传给操作系统。当操作系统加载时,PCI Bus驱动则会根据此信息读取各个PCI设备的Header Config空间,从class code寄存器获得一个特征值;classcode是PCI bus用来选择哪个驱动加载设备的唯一根据,NVME Spec定义的class code是010802h,NVME SSD内部的Controller PCIE Header中class code都会设置成010802h;
步骤2-2、根据系统配置设置PCIE寄存器:包括电源管理设置、中断设置等;
步骤2-3、读取NVME控制器的控制能力(NVMECAP):确定VMe控制器支持的页、门铃、物理地址等;
步骤2-4、读取NVME控制器重置完成状态(CSTS.RDY),
步骤2-5、判断是否满足CSTS.RDY=0;
如否,返回步骤2-4;如是,继续执行步骤2-6;
步骤2-6、配置Admin队列,包括Admin队列属性(Admin Queue Attributes,AQA)、Admin命令提交队列基地址(Admin Submission Queue Base Address,ASQ)和Admin命令完成队列基地址(Admin Completion Queue Base Address(ACQ);Admin命令提交队列用于主机向NVME设备提交Admin命令;Admin命令完成队列用于NVME设备向主机返回命令完成状态;
步骤2-7、配置NVME控制器参数,包括选择仲裁机制的设置、初始化内存页的大小、选择IO请求命令的设置;
步骤2-8、配置CC.EN=1,即设置控制器的使能;
步骤2-9、判断是否满足CSTS.RDY=1,该式的含义是“等待NVME控制器的表明已经准备好处理命令”;
如否,返回步骤2-8;如是执行步骤2-9;
步骤2-9、获取NVME控制器配合,确定命名空间配置,应用发布识别指令和指定控制器数据结构来决定控制器的配置,主控应通过发布识别指令和指定命名空间数据结构决定每个命名空间来确定每一个命名空间的配置;
步骤2-10、主控应通过设置队列功能标识符数量的功能指令和决定IOSQ和IOCQ的数量,决定之后再配置MSI和MSI-X寄存器;
1根据系统配置需求和控制器的数量需求来分配IOCQ的数量,用创建IOCQ指令来分配IOCQ;
2根据系统配置需求和控制器的数量需求来分配IOSQ的数量,用创建IOSQ指令来分配IOSQ。
经过上述的流程后,在CPU主机侧得到一个盘符,CPU主机通过此盘符和FPGA模块进行数据通信。FPGA模块端利用本地ROM存储器中存储的硬盘信息配合主机完成虚拟SSD设备的注册使用,但是在FPGA模块端不存在虚拟SSD存储空间,即虚拟SSD硬盘。CPU主机将数据进行虚拟SSD硬盘的数据读写,实际是与FPGA模块内部的虚拟SSD硬盘进行通信。CPU主机发送的数据,在FPGA内部进行处理,CPU主机读取的数据则为经过密码算法处理的结果数据。
在建立IO命令提交队列和IO命令完成队列之前,主机获取当前系统中运行的CPU核的数量N,然后通过SetFeature命令咨询NVME控制器中队列数量的限制M,选择MIN(N,M)值在主机创建队列,同时通知NVME控制器。
建立IO命令提交队列和IO命令完成队列的具体流程如下:
a.初始化AdminQueue属性(AQA)、AdminQueue基地址(ASQ)和完成队列基地址寄存器;
b.配置IO命令提交队列(IOSQ)大小“CC.IOSQES”和IO命令完成队列(IOCQ)大小“CC.IOCQES”;
c.配置控制器(CC),包括定义了IO SQ队列和IOCQ队列元素大小、关机状态提醒、仲裁机制、内存页大小、支持的IO指令集、使能;
d.设置IO命令提交队列和IO命令完成队列下发队列属性命令,set feature的CQ指示IO命令提交队列和IO命令完成队列的个数;
e.设置每个队列支持的最大个数和是否需要队列在物理上连续;
f.创建IO命令完成队列(IOCQ);
g.创建IO命令提交队列(IOSQ)。
NVME控制器的响应命令描述如下:
NVME控制器的响应命令分为Admin指令和IO指令。Admin指令通过Admin命令提交队列(Admin SQ)和Admin命令完成队列(Admin CQ)进行传输,主要负责管理NVME控制器,也包含一些控制指令。IO指令主要通过IO命令提交队列(IO SQ)和IO命令完成队列(IO CQ)进行传输,主要负责完成数据的传输。
对于接收到的Admin指令,则需要判断是GET命令或者是SET命令,如果是SET命令,则将指令存储在DDR缓存中,同一配置指令覆盖缓存,如果为GET指令则从FPGA本地ROM和DDR缓存中获取需要的信息,按照NVME协议发送到CPU主机。
在CPU主机和NVME控制器之间的通信过程中,FPGA模块根据本地ROM存储器中信息回复Admin指令所需的配置管理信息,在FPGA端虚拟一个虚拟SSD硬盘。保证CPU主机对FPGA端虚拟SSD的读写操作。如表1所示,为Admin指令及处理方式。
表1
本发明一些具体实施环节描述如下:
一、NVME控制器的Admin命令提交和完成步骤如下:
I、CPU主机将要处理的多个命令放在下一个Admin命令提交队列(Admin SQ)中;
II、CPU主机用新的提交队列尾指针更新提交队列尾部DB寄存器,告知控制器新命令被提交,需要处理;
III、NVME控制器将命令从Admin命令提交队列(Admin SQ)读至NVME控制器,仲裁机制用于决定控制器执行哪一个提交队列下发的命令;
IV、控制器处理下一个命令的执行,命令可能乱序执行;
V、在命令执行完成后,控制器在关联的Admin命令完成队列中放(Admin CQ),在CQ中,NVME控制器记录提交队列头指针位置SQHD,每个新CQ会反转Phase Tag表示这个CQ是新的;
VI、NVME控制器向主机发送中断,告知主机有新CQ要被处理;
VII、CPU主机处理CQ,包括对错误产生动作;
VIII、CPU主机写完成队列头DB寄存器(CQHD)告知CQ被处理,在处理CQ后更新关联的完成队列头DB寄存器(CQHD)。
二、NVME控制器的响应命令构建步骤如下:
在CPU主机侧构建命令提交队列(SQ)指令:
a)CDW0.OPC设置为合适的命令;
b)CDW0.FUSE是否为fused op;
c)CDW0.CID与SQ组合形成唯一的cmd id;
d)NSID
e)MPTR,记录Meta Region偏移。
f)PRP1/2记录数据传输的src/dst
g)CDW10-15cmd spec info
CPU主机软件写相应提交队列DB寄存器(SQxTDBL),提交多个cmd处理。对提交队列DB寄存器写操作会触发控制器从提交队列中取SQ,NVME控制器将在完成项CQ中反馈最近处理的SQ。
三、NVME控制器因为命令完成产生中断,处理完成命令,该流程步骤如下:
a)DW2.SQID指示提交队列ID;
b)DW3.CID指示完成cmd;
c)DW3.SF指示cmd完成状态;
d)DW3.SF中会记录错误。
主机软件通过更新相应的完成队列Head DB寄存器(CQyHDBL)指示可用的完成队列CQ。更新CQyHDBL,相应的中断也会被清除。
四、NVME控制侧对IO请求的响应过程,具体过程如下:
NVME控制器初始化完成之后,CPU主机和NVME控制器之间的数据传输地址进行映射,这些地址包括admin SQ和ADMIN CQ的基地址,IO SQ和IO CQ的的基地址,待读写数据的主机内存地址,设置特性基地址和标识基地址等。
在NVME控制器初始化完成之后,主机创建IO SQ和IO CQ,主机和NVME控制器之间通过命令进行信息更细的通知,通过基于队列的直接内存访问方式(DMA方式)进行数据的交互。队列用来存放NVME命令,NVME命令是主机与NVME控制器交流的基本单元,应用的I/O请求也要转化成NVME Command。主机通过SQ提交IO请求;FPGA通过DMA方式获取IO请求,之后通过DMA方式进行数据的接收和发送;通过CQ上传处理结果,CQ的通信方式为DMA方式。
NVME控制器的IO命令写流程,具体流程包括以下步骤:
1、FPGA模块端查询SQ DB寄存器的值,判断寄存器的值是否更新,如果更新,则更新FPGA模块本地SQ Head DB寄存器,如果没有更新,则继续查询SQ DB寄存器的值。
2、更新FPGA模块本地SQ Head DB寄存器,用于指示当前命令操作的位置,用于和查询的SQ DB进行比较判断是否存在SQ DB寄存器更新。
3、本地存储空间不满,在收到主机数据下发请求后,FPGA模块侧需要判断数据存储空间是否不满,不满说明有存储空间,FPGA模块通过DMA方式,获取主机内存中的数据。如果满则需要等待本地数据处理,等待不满后才可以进行继续进行DMA操作。
4、通过DMA方式读取数据,FPGA模块根据SQ的地址信息,在主机内存中读取数据。
5、向CQ中写入完成信息,通过CQ通知主机SQ中的信息处理完成。
6、更新CQTailDB寄存器,更新本地的CQ Tail DB寄存器。
7、通知主机命令完成,通知主机,命令处理完成,主机更新CQ Head DB。
NVME控制器的IO命令读数据流程如下:
a)主机准备一条读命令、并且将命令放到内存的SQ中
b)主机通知NVME有新的命令待处理,SQyTDBL(Submission Queue y TailDoorbell)是控制寄存器信息,主机和FPGA端通过BAR0进行通新,主机更新BAR0中控制寄存器的值
c)NVME控制器获取到寄存器更新消息,通过DMA读取主机中一条SQ,一条SQ为64byte。从读取的SQ中获得命令的地址、队列和命令的ID、操作类型(OPC)、数据的地址、以及SSD在系统中的Device ID等
d)NVME控制器处理步骤3中SQ命令,NVME控制器将需要发送的数据使用DMA的方式写到指定的内存地址。
e)NVME控制器把命令执行状态总结为一条记录添加在CQ中,此时NVME控制器会向主机的CQ内存队列中添加一个16byte记录
f)NVME控制器以中断的方式通知主机处理CQ中记录,
g)CPU主机处理CQ中的内容
h)CPU主机更新内存中的Completion Queue y Head Doorbell信息。相应的控制寄存器中的DB信息也会更新。
本发明中涉及术语简称说明:
PCIe(Peripheral Component Interconnect express):一种高速串行计算机扩展总线标准。
NVMe(Non-Volatile Memory express):一种基于PCIe的存储设备规范,用于高速固态硬盘SSD主机接口。
FPGA(Field-Programmable Gate Array):现场可编程门阵列。
SQ(Submissions Queue):命令提交队列,用于主机向NVMe设备提交命令。
CQ(Completion Queue):命令完成队列,用于NVMe设备向主机返回命令完成状态。
DB(Doorbell):门铃。
CAP——控制器能力,定义了内存页大小的最大最小值、支持的I/O指令集、DB寄存器步长、等待时间界限、仲裁机制、队列是否物理上连续、队列大小。
VS——版本号,定义了控制器实现NVMe协议的版本号。
INTMS——中断掩码,每个bit对应一个中断向量,使用MSI-X中断时,此寄存器无效。
INTMC——中断有效,每个bit对应一个中断向量,使用MSI-X中断时,此寄存器无效。
CC——控制器配置,定义了I/OSQ和CQ队列元素大小、关机状态提醒、仲裁机制、内存页大小、支持的I/O指令集、使能。
CSTS——控制器状态,包括关机状态、控制器致命错误、就绪状态。
AQA——Admin队列属性,包括SQ大小和CQ大小。
ASQ——Admin SQ基地址。
ACQ——Admin CQ基地址。
SQ Head DB——命令提交队列头部数据。
SQ Tail DB——命令提交队列尾部数据。
CQ Head DB——命令完成队列头部数据。
上述实施例只为说明本发明的技术构思及特点,其目的在于让熟悉此项技术的人士能够了解本发明的内容并据以实施,并不能以此限制本发明的保护范围。凡根据本发明精神实质所作的等效变化或修饰,都应涵盖在本发明的保护范围之内。
Claims (8)
1.一种基于PCIE接口的NVME通信系统,其特征在于,该系统包括作为NVME主设备的CPU主机以及作为NVME从设备的FPGA模块;所述CPU主机通过PCIE通信接口和所述FPGA模块连接,所述FPGA模块按照符合NVME协议规定形式的数据包和CPU主机进行通信;其中:
所述CPU主机进一步包括NVME驱动,通过NVME驱动提供的API接口实现了所述CPU主机对所述FPGA模块进行访问和读写操作;
所述FPGA模块进一步包括ROM存储器、NVME控制器、虚拟SSD硬盘以及外挂DDR缓存,保存有NVME驱动加载过程中所需的硬盘信息写入到虚拟SSD硬盘的数据发送给FPGA模块内部进行算法处理以区分NVME控制器接收到的数据和发送的数据,所述ROM存储器用于存储虚拟SSD硬盘参数信息,作为NVME驱动加载过程所需的硬盘参数信息;CPU主机通过PCIE接口完成FPGA模块中的虚拟SSD进行识别和读写操作,从而实现数据通信。
2.如权利要求1所述的一种基于PCIE接口的NVME通信系统,其特征在于,所述NVME控制器中的包括SQ Head DB和SQ Tail DB,SQ Head DB和SQ Tail DB是由控制器来更新的,SQTail DB和CQ Head DB是由CPU主机来更新的。
3.如权利要求1所述的一种基于PCIE接口的NVME通信系统,其特征在于,所述NVME控制器的响应命令包括Admin指令和IO指令;其中,Admin指令通过Admin命令提交队列和Admin命令完成队列进行传输,负责管理NVME控制器;IO指令通过IO命令提交队列和IO命令完成队列进行传输,负责完成数据的传输。
4.如权利要求1所述的一种基于PCIE接口的NVME通信系统,其特征在于,在CPU主机和NVME控制器之间的通信过程中,FPGA模块根据本地ROM存储器中信息回复Admin指令所需的配置管理信息,在FPGA端虚拟一个虚拟SSD硬盘,保证CPU主机对FPGA端虚拟SSD的读写操作。
5.如权利要求1所述的一种基于PCIE接口的NVME通信系统,其特征在于,所述NVME控制器的存储数据分为两部分:一部分存储数据为NVME控制器整体属性,另外一部分存储数据为每组队列的头尾DB寄存器。
6.一种基于PCIE接口的NVME通信方法,其特征在于,该方法具体包括以下步骤:
步骤1、通过PCIE通信接口的枚举,将FPGA模块的PCIE通信接口空间映射到计算机端地址空间,CPU主机通过对BAR0空间访问完成NVME控制器的初始化;具体地,CPU主机按照NVME协议要求对NVME控制器进行初始化,按照NVME协议进行寄存器初始化配置,获取虚拟SSD的工作状态;
步骤2、将在进行的虚拟SSD硬盘识别信息保存于FPGA模块内部的ROM存储器中,将FPGA模块的PCIE通信模块配置空间映射到计算机端地址空间,完成基于FPGA模块的虚拟SSD的枚举和配置,初始化在进行的虚拟SSD硬盘,具体处理包括FPGA模块根据在进行的虚拟SSD硬盘中不同Admin命令提交队列的命令回复不同命令完成队列的指令,完成虚拟SSD硬盘初始化;初始化完成后,将虚拟SSD硬盘初始化完成信息上报给用户,NVME控制器就绪,接收请求;
步骤3、FPGA模块接收到从IO命令提交队列提取的数据,进行计算,将运算结果通过命令完成队列发送给计算机;其中,CPU主机通过IO命令提交队列提交IO命令请求;IO命令提交队列用来存放NVME命令,I/O命令请求转化成NVME命令;FPGA模块通过直接内存访问方式获取IO命令请求,之后进行数据的接收和发送;通过直接内存访问方式由命令完成队列上传处理结果。
7.如权利要求1所述的一种基于PCIE接口的NVME通信方法,其特征在于,所述步骤2中,虚拟SSD初始化流程具体包括以下步骤:
步骤2-1、PCIE设备枚举:在系统启动时,BIOS枚举整个PCI的总线,将扫描到的设备通过ACPI tables传给操作系统;当操作系统加载时,PCI Bus驱动读取各个PCI设备的HeaderConfig空间,从class code寄存器获得一个特征值;
步骤2-2、根据系统配置设置PCIE寄存器,至少包括电源管理设置和中断设置;
步骤2-3、读取NVME控制器的控制能力,至少包括VMe控制器支持的页、门铃和物理地址的确定;
步骤2-4、读取NVME控制器重置完成状态;
步骤2-5、判断是否满足CSTS.RDY=0;
如否,返回步骤2-4;如是,继续执行步骤2-6;
步骤2-6、配置Admin命令队列,包括Admin命令队列属性、Admin命令提交队列基地址和Admin命令完成队列基地址;其中,Admin命令提交队列用于主机向NVME设备提交Admin命令,Admin命令完成队列用于NVME设备向主机返回命令完成状态;
步骤2-7、配置NVME控制器参数,包括选择仲裁机制的设置、初始化内存页的大小和选择IO请求命令的设置;
步骤2-8、配置CC.EN=1,即设置控制器的使能;
步骤2-9、判断是否满足CSTS.RDY=1;
如否,返回步骤2-8;如是执行步骤2-9;
步骤2-9、获取NVME控制器配合,确定命名空间配置,应用发布识别指令和指定控制器数据结构来决定控制器的配置,通过发布识别指令和指定命名空间数据结构决定每个命名空间来确定每一个命名空间的配置;
步骤2-10、通过设置队列功能标识符数量的功能指令和决定IO SQ和IO CQ的数量,决定之后再配置MSI和MSI-X寄存器;
①根据系统配置需求和控制器的数量需求来分配IO CQ的数量,用创建IO CQ指令来分配IO CQ;
②根据系统配置需求和控制器的数量需求来分配IO SQ的数量,用创建IO SQ指令来分配IO SQ。
8.如权利要求1所述的一种基于PCIE接口的NVME通信方法,其特征在于,在建立上述队列之前,所述步骤2中还包括以下处理:
CPU主机获取当前系统中运行的CPU核的数量N,通过Set Feature命令咨询NVME控制器中队列数量的限制M,选择M、N两者中小的值MIN(N,M)在CPU主机创建IO SQ队列、CQ队列,通知NVME控制器。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210923846.7A CN115454902A (zh) | 2022-08-02 | 2022-08-02 | 一种基于pcie接口的nvme通信系统及方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210923846.7A CN115454902A (zh) | 2022-08-02 | 2022-08-02 | 一种基于pcie接口的nvme通信系统及方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN115454902A true CN115454902A (zh) | 2022-12-09 |
Family
ID=84296491
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210923846.7A Pending CN115454902A (zh) | 2022-08-02 | 2022-08-02 | 一种基于pcie接口的nvme通信系统及方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115454902A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115951942A (zh) * | 2023-03-09 | 2023-04-11 | 湖南博匠信息科技有限公司 | 一种提高龙芯平台系统盘运行效率的方法及系统 |
CN116737636A (zh) * | 2023-08-11 | 2023-09-12 | 珠海星云智联科技有限公司 | Pcie设备热拔插控制方法及相关装置 |
-
2022
- 2022-08-02 CN CN202210923846.7A patent/CN115454902A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115951942A (zh) * | 2023-03-09 | 2023-04-11 | 湖南博匠信息科技有限公司 | 一种提高龙芯平台系统盘运行效率的方法及系统 |
CN115951942B (zh) * | 2023-03-09 | 2023-05-12 | 湖南博匠信息科技有限公司 | 一种提高龙芯平台系统盘运行效率的方法及系统 |
CN116737636A (zh) * | 2023-08-11 | 2023-09-12 | 珠海星云智联科技有限公司 | Pcie设备热拔插控制方法及相关装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10997093B2 (en) | NVME data processing method and NVME device | |
US10152433B2 (en) | Inline PCI-IOV adapter | |
US9696942B2 (en) | Accessing remote storage devices using a local bus protocol | |
US9727503B2 (en) | Storage system and server | |
US5586268A (en) | Multiple peripheral adapter device driver architecture | |
CN112256601B (zh) | 数据存取控制方法、嵌入式存储系统及嵌入式设备 | |
JP4917174B2 (ja) | 制御装置と通信するように構成されたホスト・コンピュータ・システムにおける入出力(i/o)操作用の入出力処理を容易にするためのコンピュータ・プログラム、装置、および方法 | |
JP5159901B2 (ja) | 制御装置と通信するように構成されたホスト・コンピュータ・システムにおける入出力(i/o)操作に関するi/o処理を容易にするための方法 | |
US20170102874A1 (en) | Computer system | |
JP4543086B2 (ja) | 一体化したdmaエンジンを用いて、高性能に揮発性ディスクドライブメモリへのアクセスを行うための装置および方法 | |
US20170329625A1 (en) | Method, apparatus, and system for accessing storage device | |
US20150304423A1 (en) | Computer system | |
CN100405303C (zh) | 数据处理系统 | |
CN115454902A (zh) | 一种基于pcie接口的nvme通信系统及方法 | |
US5701450A (en) | System including ATA sequencer microprocessor which executes sequencer instructions to handle plurality of real-time events allowing to perform all operations without local microprocessor intervention | |
US5062042A (en) | System for managing data which is accessible by file address or disk address via a disk track map | |
CN104021109B (zh) | 用于在计算机系统中传递中断的技术 | |
KR20070108410A (ko) | 호스트 제어기 상에서의 독립적이면서 동시적인 데이터전달을 위한 방법 및 장치 | |
US11995019B2 (en) | PCIe device with changeable function types and operating method thereof | |
US11704263B2 (en) | Configurable multi-function PCIe endpoint controller in an SoC | |
CN115203101A (zh) | PCIe装置及其操作方法 | |
EP4105771A1 (en) | Storage controller, computational storage device, and operational method of computational storage device | |
EP3270293B1 (en) | Two stage command buffers to overlap iommu map and second tier memory reads | |
US20080155222A1 (en) | Computer system | |
JP2001306265A (ja) | 記憶制御装置および記憶制御装置の制御方法 |
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 | ||
CB02 | Change of applicant information | ||
CB02 | Change of applicant information |
Address after: Room 4, Floor 1, No. 139 Shenzhou Avenue, Binhai High-tech Zone, Binhai New Area, Tianjin, 300392 Applicant after: Tianjin Photoelectric Gathered Energy Communication Co.,Ltd. Address before: 300202 No. 6, Taishan Road, Tianjin, Hexi District Applicant before: JUNENG SPECIAL COMMUNICATION EQUIPMENT CO.,LTD., TOEC GROUP CO.,LTD. |