一种双端口NVMe控制器及控制方法

文档序号:68088 发布日期:2021-10-01 浏览:62次 >En<

阅读说明:本技术 一种双端口NVMe控制器及控制方法 (Dual-port NVMe controller and control method ) 是由 张泽 王祎磊 于 2021-07-02 设计创作,主要内容包括:本申请提供了一种双端口NVMe控制器及控制方法,双端口NVMe控制器包括第一主机接口和第二主机接口,分别与第一主机和第二主机连接,分别用于接收第一主机发送的第一NVMe命令以及第二主机发送的第二NVMe命令;主机命令处理单元,包括第一主机命令处理支路和第二主机命令处理支路;其中,第一主机命令处理支路用于处理从第一主机接口所接收的第一NVMe命令;第二主机命令处理支路用于处理从第二主机接口所接收的第二NVMe命令;以及至少一个共享存储器,共享存储器用于存储第一NVMe命令和第二NVMe命令。本申请的技术方案能够实现适用于双端口模式,并且能够避免冲突。(The application provides a dual-port NVMe controller and a control method, wherein the dual-port NVMe controller comprises a first host interface and a second host interface, is respectively connected with a first host and a second host, and is respectively used for receiving a first NVMe command sent by the first host and a second NVMe command sent by the second host; the host command processing unit comprises a first host command processing branch and a second host command processing branch; the first host command processing branch is used for processing a first NVMe command received from the first host interface; the second host command processing branch is used for processing a second NVMe command received from the second host interface; and at least one shared memory for storing the first NVMe commands and the second NVMe commands. The technical scheme of the application can be suitable for a dual-port mode, and can avoid conflict.)

一种双端口NVMe控制器及控制方法

技术领域

本申请一般地涉及数据处理的领域。更具体地,本申请涉及一种双端口NVMe控制器及控制方法。

背景技术

图1A展示了固态存储设备的框图。固态存储设备102同主机相耦合,用于为主机提供存储能力。主机同固态存储设备102之间可通过多种方式相耦合,耦合方式包括但不限于通过例如SATA(Serial Advanced Technology Attachment,串行高级技术附件)、SCSI(Small Computer System Interface,小型计算机系统接口)、SAS(Serial AttachedSCSI,串行连接SCSI)、IDE(Integrated Drive Electronics,集成驱动器电子)、USB(Universal Serial Bus,通用串行总线)、PCIE(Peripheral Component InterconnectExpress,PCIe,高速外围组件互联)、NVMe(NVM Express,高速非易失存储)、以太网、光纤通道、无线通信网络等连接主机与固态存储设备102。主机可以是能够通过上述方式同存储设备相通信的信息处理设备,例如,个人计算机、平板电脑、服务器、便携式计算机、网络交换机、路由器、蜂窝电话、个人数字助理等。存储设备102(下文中,将固态存储设备简称为存储设备)包括接口103、控制部件104、一个或多个NVM芯片105以及DRAM(Dynamic RandomAccess Memory,动态随机访问存储器)110。

上述NVM芯片105包括NAND闪存、相变存储器、FeRAM(Ferroelectric RAM,铁电存储器)、MRAM(Magnetic Random Access Memory,磁阻存储器)、RRAM(Resistive RandomAccess Memory,阻变存储器)等是常见的存储介质。

上述接口103可适配于通过例如SATA、IDE、USB、PCIE、NVMe、SAS、以太网、光纤通道等方式与主机交换数据。

上述控制部件104用于控制在接口103、NVM芯片105以及DRAM 110之间的数据传输,还用于存储管理、主机逻辑地址到闪存物理地址映射、擦除均衡、坏块管理等。控制部件104可通过软件、硬件、固件或其组合的多种方式实现,例如控制部件104可以是FPGA(Field-programmable gate array,现场可编程门阵列)、ASIC(Application SpecificIntegrated Circuit,应用专用集成电路)或者其组合的形式。控制部件104也可以包括处理器或者控制器,在处理器或控制器中执行软件来操纵控制部件104的硬件来处理IO(Input/Output)命令。控制部件104还可以耦合到DRAM110,访问DRAM 110的数据。在DRAM可存储FTL表和/或缓存的IO命令的数据。

控制部件104以遵循NVM芯片105的接口协议的方式向NVM芯片105发出命令,以操作NVM芯片105,并接收从NVM芯片105输出的命令执行结果。已知的NVM芯片接口协议包括“Toggle”、“ONFI”等。

存储器目标(Target)是NAND闪存封装内的共享CE(Chip Enable,芯片使能)信号的一个或多个逻辑单元(LUN,Logic UNit)。NAND闪存封装内可包括一个或多个管芯(Die)。典型地,逻辑单元对应于单一的管芯。逻辑单元可包括多个平面(Plane)。逻辑单元内的多个平面可以并行存取,而NAND闪存芯片内的多个逻辑单元可以彼此独立地执行命令和报告状态。

存储介质上通常按页来存储和读取数据。而按块来擦除数据。块(也称物理块)包含多个页。块包含多个页。存储介质上的页(称为物理页)具有固定的尺寸,例如17664字节。物理页也可以具有其他的尺寸。

在存储设备102中,利用FTL(Flash Translation Layer,闪存转换层)来维护从逻辑地址(LBA)到物理地址的映射信息。逻辑地址构成了操作系统等上层软件所感知到的固态存储设备的存储空间。物理地址是用于访问固态存储设备的物理存储单元的地址。在相关技术中还可利用中间地址形态实施地址映射。例如将逻辑地址映射为中间地址,进而将中间地址进一步映射为物理地址。存储了从逻辑地址到物理地址的映射信息的表结构被称为FTL表。FTL表是存储设备中的重要元数据。FTL表的数据项记录了存储设备中以数据单元为单位的地址映射关系。

主机以遵循存储协议的IO命令访问存储设备。控制部件根据来自主机的IO命令,生成一个或多个介质接口命令并提供给介质接口控制器。介质接口控制器根据介质接口命令生遵循NVM芯片的接口协议的存储介质访问命令(例如,编程命令、读命令、擦除命令)。控制部件还跟踪从一个IO命令生成的所有介质接口命令都被执行完成,并向主机指示IO命令的处理结果。

参看图1B,控制部件包括主机接口1041、主机命令处理单元1042、存储命令处理单元1043、介质接口控制器1044与存储介质管理单元1045。主机接口1041获取主机提供的IO命令。主机命令处理单元1042根据IO命令生成存储命令提供给存储命令处理单元1043。存储命令可以访问相同大小的存储空间,例如4KB。将NVM芯片中记录的对应一个存储命令所访问数据的数据单元称为数据帧。物理页记录一个或多个数据帧。例如,物理页的大小17664字节,而数据帧大小为4KB,则一个物理页能存储4个数据帧。

存储介质管理单元1045为每个存储命令维护逻辑地址到物理地址的转换。例如,存储介质管理单元1045包括FTL表(下文将对FTL进行解释)。对于读命令,存储介质管理单元1045输出存储命令所访问的逻辑地址(LBA)对应的物理地址。对于写命令,存储介质管理单元1045为其分配可用的物理地址,并记录其访问的逻辑地址(LBA)与分配的物理地址的映射关系。存储介质管理单元1045还维护诸如垃圾回收、磨损均衡等管理NVM芯片所需的功能。

存储命令处理单元1043根据存储介质管理单元1045提供的物理地址,操作介质接口控制器1044向NVM芯片105发出存储介质访问命令。

为了清楚的目的,将主机发送给存储设备102的命令称为IO命令,将主机命令处理单元1042发送给存储命令处理单元1043的命令称为存储命令,将存储命令处理单元1043发送给介质接口控制器1044的命令称为介质接口命令,而将介质接口控制器1044发送给NVM芯片105的命令称为存储介质访问命令。存储介质访问命令遵循NVM芯片的接口协议。

在NVMe协议中,固态存储设备102收到写命令后,通过主机接口1041去主机的内存中获取数据,然后把这些数据写入到闪存中。对于读命令,当数据从闪存中读出后,固态存储设备102会通过主机接口1041把数据搬移到主机内存中。

主机和存储设备之间传输的数据通过两种方式来描述:一是PRP(PhysicalRegion Page,物理区域页),二是SGL(Scatter/Gather List,分散收集列表)。PRP是链接起来的若干个PRP条目,每个PRP条目是一个64位内存物理地址,用于描述一个物理页(Page)空间。SGL是一个链表,由一个或多个SGL段组成,每个SGL段又由一个或多个SGL描述符组成;每个SGL描述符描述了数据缓存的地址与长度,即每个SGL描述符对应一个主机内存地址空间;每个SGL描述符具有固定的大小(例如16字节)。

无论是PRP还是SGL,本质都是描述主机内存中的一个或多个地址空间,这些地址空间在主机内存中的位置是任意的。主机在NVMe命令中携带PRP或者SGL相关信息,告诉存储设备数据源在主机内存中的位置,或者从闪存中读出的数据应当放到主机内存中的位置。

如图1C展示了一种现有技术的主机命令处理单元1042的基本构成。现有技术中,主机命令处理单元1042在处理IO命令时,需要根据IO命令从主机获取对应的SGL或PRP,并且对SGL或PRP进行解析,以确定对应的主机内存地址。如图1C所示,主机命令处理单元1042主要包括共享存储器、DMA模块和子CPU系统。其中,子CPU系统包括多个CPU,CPU用于运行程序以处理SGL或PRP,以及配置DMA模块。DMA模块用于处理DMA命令,实施主机与存储设备之间的数据传输。共享存储器(share memory)用于存储数据、NVMe命令等。

图1D从另一种视角展示了一种存储设备的基本构成,存储设备包括接口(相当于图1B中的接口103),主机命令处理单元(相当于图1B中的主机命令处理单元1042),DRAM(相当于图1B中的DRAM 110),总线和后端模块。其中,主机命令处理单元、后端模块和DRAM通过总线进行交互。其中后端模块相当于图1B中的存储命令处理单元1043和介质接口控制器1044。图1D主要用于表明,对于处理主机命令的主机命令处理单元来说,处理主机命令之外的部分可以统称为后端模块。

随着SSD技术的发展,双端口技术开始出现。如图2A展示了一种双端口应用场景,两个主机系统(第一主机和第二主机)分别使用不同的端口访问同一存储设备,例如,第一主机经过PCIe接口和端口0访问存储设备,第二主机通过PCIe接口和端口1访问存储设备。对于存储设备而言,在双端口模式下,其具有同时两个主机与进行交互的能力。

发明内容

本申请的旨在实现图2A的双端口模式下主机与存储设备之间的数据传输,而存储设备如何对从两个主机接收的NVMe命令进行处理是存储设备与主机进行数据传输的一个重要环节。

作为举例,图2B体现了一种双端口NVMe控制器的结构示意图。如图2B所示,存储设备包括第一主机接口、第二主机接口、主机命令处理单元、存储命令处理单元和介质接口控制器。由主机命令处理单元处理既处理来自于第一主机接口的第一主机命令,又处理来自于第二主机接口的第二主机命令。该方案虽然能够实现双端口功能,但是由于两个主机接口同时使用同一个主机命令处理单元,导致两个主机接口的IO会彼此抢占资源,导致冲突的产生。

为了在避免冲突的前提下实现双端口模式,本申请为第二主机的NVMe命令处理提供了额外的硬件,即为第一主机提供第一主机接口和第一主机命令处理支路,为第二主机提供第二主机接口和第二主机命令处理支路,而且第一主机命令处理支路和第二主机命令处理支路所使用的硬件是相互独立的;使得第一主机命令处理支路专用于处理第一主机的第一NVMe命令,第二主机命令处理支路专用于处理第二主机的第二NVMe命令。因此,本申请的技术方案能够在避免冲突的前提下实现双端口模式。

进一步地,本申请还为两套主机命令处理支路可以共用共享存储器,以及若仅有一个主机连接存储设备时,可以使未连接主机的一套硬件设备不工作,从而节约硬件资源。

进一步地,对于NVMe写命令,第一主机命令处理支路和第二主机命令处理支路可以共用CPU和后端模块。DMA传输电路在将写命令的数据从主机搬移到存储设备内存后,通知CPU,由CPU操作后端模块将数据写入到闪存(NVM)中。例如,CPU可以按照4KB的数据粒度进行调度和处理,因此CPU并不需要关心所处理的数据属于哪个主机的NVMe命令,因此即使是一个较大的NVMe命令也不会长时间阻塞其他的NVMe命令,使得两个主机之间的抢占效应降低。

根据本申请的第一方面,提供了根据本申请第一方面的第一双端口NVMe控制器,包括:第一主机接口和第二主机接口,分别与第一主机和第二主机连接,分别用于接收第一主机发送的第一NVMe命令以及第二主机发送的第二NVMe命令;主机命令处理单元,包括第一主机命令处理支路和第二主机命令处理支路;其中,第一主机命令处理支路用于处理从第一主机接口所接收的第一NVMe命令;第二主机命令处理支路用于处理从第二主机接口所接收的第二NVMe命令;以及至少一个共享存储器,所述共享存储器用于存储所述第一NVMe命令和所述第二NVMe命令。

根据本申请第一方面的第一双端口NVMe控制器,提供了根据本申请第一方面的第二双端口NVMe控制器,所述共享存储器包括第一共享存储器:所述第一共享存储器连接所述第一主机命令处理支路和第二主机命令处理支路,用于存储所述第一NVMe命令和第二NVMe命令。

根据本申请第一方面的第一双端口NVMe控制器,提供了根据本申请第一方面的第三双端口NVMe控制器,所述共享存储器包括第一共享存储器和第二共享存储器:所述第一共享存储器连接所述第一主机命令处理支路,所述第二共享存储器连接所述第二主机命令处理支路;所述第一共享存储器用于存储所述第一NVMe命令,第二共享存储器用于存储所述第二NVMe命令。

根据本申请第一方面的第一双端口NVMe控制器,提供了根据本申请第一方面的第四双端口NVMe控制器,还包括关闭控制单元,其用于:响应于第一主机接口关闭的通知,关闭第一主机接口和第一主机命令处理支路;以及响应于第二主机接口关闭的通知,关闭第二主机接口和第二主机命令处理支路。

根据本申请第一方面的第一双端口NVMe控制器,提供了根据本申请第一方面的第五双端口NVMe控制器,所述关闭控制单元还用于:响应于第一主机接口关闭的通知,释放共享存储器中第一NVMe命令所占用的存储空间;以及响应于第二主机接口关闭的通知,释放共享存储器中第二NVMe命令所占用的存储空间。

根据本申请第一方面的第一至第五任一双端口NVMe控制器,提供了根据本申请第一方面的第六双端口NVMe控制器,其中,第一主机命令处理支路包括第一SGL和/或PRP单元,第一写入发起电路和第一DMA传输电路:第一SGL和/或PRP单元响应于接收的第一NVMe命令,获取与第一NVMe命令对应的SGL和/或PRP,根据所述SGL和/或PRP来生成一个或多个第一DMA命令,将所述一个或多个第一DMA命令存储在共享存储器中;所述第一写入发起电路,响应于一个第一NVMe命令对应的一个或多个第一DMA命令存储完成,将第一DMA命令索引发送到第一DMA传输电路;所述第一DMA传输电路,根据所述第一DMA命令索引从共享存储器中获取所述一个或多个第一DMA命令,根据获取的一个或多个第一DMA命令从第一主机搬移数据。

根据本申请第一方面的第六双端口NVMe控制器,提供了根据本申请第一方面的第七双端口NVMe控制器,第二主机命令处理支路包括第二SGL和/或PRP单元,第二写入发起电路和第二DMA传输电路:第二SGL和/或PRP单元响应于接收的第二NVMe命令,获取与第二NVMe命令对应的SGL和/或PRP,根据所述SGL和/或PRP来生成一个或多个第二DMA命令,将所述一个或多个第二DMA命令存储在共享存储器中;所述第二写入发起电路,响应于一个第二NVMe命令对应的一个或多个第二DMA命令存储完成,将第二DMA命令索引发送到第二DMA传输电路;所述第二DMA传输电路,根据所述第二DMA命令索引从共享存储器中获取所述一个或多个第二DMA命令,根据获取的一个或多个第二DMA命令从第二主机搬移数据。

根据本申请第一方面的第七双端口NVMe控制器,提供了根据本申请第一方面的第八双端口NVMe控制器,还包括至少一个处理器模块,连接所述第一DMA传输电路和第二DMA传输电路,用于:当所述第一DMA传输电路将一个或多个第一DMA命令所指示的数据搬移至存储设备内存后,和/或所述第二DMA传输电路将一个或多个第二DMA命令所指示的数据搬移至存储设备内存后,所述处理器模块控制后端模块以将对应的数据写入NVM。

根据本申请第一方面的第七双端口NVMe控制器,提供了根据本申请第一方面的第九双端口NVMe控制器,所述第一DMA传输电路、第二DMA传输电路通过总线与存储设备内存耦合;所述关闭控制单元还用于:响应于第一主机接口关闭的通知,判断第一DMA传输电路是否在进行数据传输,若有数据传输,则控制所述总线进行重启或放弃当前数据传输;以及响应于第二主机接口关闭的通知,判断第二DMA传输电路是否在进行数据传输,若有数据传输,控制所述总线进行重启或放弃当前数据传输。

根据本申请第一方面的第一至第五任一双端口NVMe控制器,提供了根据本申请第一方面的第十双端口NVMe控制器,所述第一主机命令处理支路包括第一SGL和/或PRP单元,以及第一DMA传输电路;所述第二主机命令处理支路包括第二SGL和/或PRP单元,以及第二DMA传输电路;还包括至少一个读取发起电路;所述第一SGL和/或PRP单元用于获取并解析所述第一NVMe命令以获得对应的SGL和/或PRP,根据所述SGL和/或PRP来生成一个或多个第一DMA命令,将所述一个或多个第一DMA命令存储在共享存储器中;所述第二SGL和/或PRP单元用于获取并解析所述第二NVMe命令以获得对应的SGL和/或PRP,根据所述SGL和/或PRP来生成一个或多个第二DMA命令,将所述一个或多个第二DMA命令存储在共享存储器中;所述读取发起电路请求后端模块将一个或多个第一DMA命令或一个或多个第二DMA命令所指示的数据从NVM搬移到存储设备内存中;以及响应于至少一个第一DMA命令或至少一个第二DMA命令的数据被搬移到存储设备内存中,将所述第一DMA命令索引提供给所述第一DMA传输电路,或者将所述第二DMA命令索引提供给所述第二DMA传输电路;所述第一DMA传输电路,根据从所述读取发起电路接收的第一DMA命令索引,从共享存储器中获取对应的至少一个第一DMA命令,根据获取的至少一个第一DMA命令将数据搬移至第一主机;所述第二DMA传输电路,根据从所述读取发起电路接收的第二DMA命令索引,从共享存储器中获取对应的至少一个第二DMA命令,根据获取的至少一个第二DMA命令将数据搬移至第二主机。

根据本申请第一方面的第十双端口NVMe控制器,提供了根据本申请第一方面的第十一双端口NVMe控制器,所述读取发起电路包括第一读取发起电路和第二读取发起电路:所述第一读取发起电路,用于请求后端模块将第一NVMe命令所对应的一个或多个第一DMA命令指示的数据从NVM搬移到存储设备内存中;以及响应于至少一个第一DMA命令数据被搬移到存储设备内存中,将所述第一DMA命令索引提供给所述第一DMA传输电路;所述第二读取发起电路,用于请求后端模块将第二NVMe命令所对应的一个或多个第二DMA命令指示的数据从NVM搬移到存储设备内存中;以及响应于至少一个第二DMA命令数据被搬移到存储设备内存中,将所述第二DMA命令索引提供给所述第二DMA传输电路。

根据本申请第一方面的第十一双端口NVMe控制器,提供了根据本申请第一方面的第十二双端口NVMe控制器,第一主机接口和第二主机接口之一连接主机时,第一读取发起电路和第二读取发起电路共同控制第一DMA传输电路或第二DMA传输电路。

根据本申请第一方面的第十至第十二任一双端口NVMe控制器,提供了根据本申请第一方面的第十三双端口NVMe控制器,所述第一读取发起电路和所述第二读发起电路均包括CPU。

根据本申请第一方面的第十双端口NVMe控制器,提供了根据本申请第一方面的第十四双端口NVMe控制器,所述第一DMA传输电路、第二DMA传输电路通过总线与存储设备内存耦合;所述关闭控制单元还用于:响应于第一主机接口关闭的通知,判断第一DMA传输电路是否在进行数据传输,若有数据传输,则控制所述总线进行重启或放弃当前数据传输;以及响应于第二主机接口关闭的通知,判断第二DMA传输电路是否在进行数据传输,若有数据传输,控制所述总线进行重启或放弃当前数据传输。

根据本申请的第二方面,提供了根据本申请第二方面的第一双端口NVMe控制器的控制方法,双端口NVMe控制器用于连接两个主机,包括:通过第一主机接口和第一主机命令处理支路来处理来自于第一主机的第一NVMe命令;通过第二主机接口和第二主机命令处理支路来处理来自于第二主机的第二NVMe命令;以及通过至少一个共享存储器存储所述第一NVMe命令和第二NVMe命令。

根据本申请的第二方面的第一双端口NVMe控制器的控制方法,提供了根据本申请第二方面的第二双端口NVMe控制器的控制方法,通过一个共享存储器存储所述第一NVMe命令和NVMe命令;或者通过两个共享存储器分别对应存储所述第一NVMe命令和NVMe命令。

根据本申请的第二方面的第一双端口NVMe控制器的控制方法,提供了根据本申请第二方面的第三双端口NVMe控制器的控制方法,当接收到第一主机接口关闭的通知时,关闭第一主机接口和第一主机命令处理支路;以及当接收到第二主机接口关闭的通知时,关闭第二主机接口和第二主机命令处理支路。

根据本申请的第二方面的第三双端口NVMe控制器的控制方法,提供了根据本申请第二方面的第四双端口NVMe控制器的控制方法,当接收到第一主机接口关闭的通知时,释放共享存储器中第一主机的NVMe命令所占用的存储空间;以及当接收到第二主机接口关闭的通知时,释放共享存储器中第二主机的NVMe命令所占用的存储空间。

根据本申请的第二方面的第一至第四任一双端口NVMe控制器的控制方法,提供了根据本申请第二方面的第五双端口NVMe控制器的控制方法,通过第一主机接口和第一主机命令处理支路来处理来自于第一主机的第一NVMe命令,包括:响应于接收的第一NVMe命令,获取与第一NVMe命令对应的SGL和/或PRP,根据所述SGL和/或PRP来生成一个或多个第一DMA命令,将所述一个或多个第一DMA命令存储在共享存储器中;响应于一个第一NVMe命令对应的一个或多个第一DMA命令存储完成,发送第一DMA命令索引;根据所述第一DMA命令索引从共享存储器中获取所述一个或多个第一DMA命令,根据获取的一个或多个第一DMA命令从第一主机搬移数据。

根据本申请的第二方面的第五双端口NVMe控制器的控制方法,提供了根据本申请第二方面的第六双端口NVMe控制器的控制方法,通过第二主机接口和第二主机命令处理支路来处理来自于第二主机的第二NVMe命令,其中,包括:响应于接收的第二NVMe命令,获取与第二NVMe命令对应的SGL和/或PRP,根据所述SGL和/或PRP来生成一个或多个第二DMA命令,将所述一个或多个第二DMA命令存储在共享存储器中;响应于一个第二NVMe命令对应的一个或多个第二DMA命令存储完成,发送第二DMA命令索引;根据所述第二DMA命令索引从共享存储器中获取所述一个或多个第第二DMA命令,根据获取的一个或多个第二DMA命令从第二主机搬移数据。

根据本申请的第二方面的第六双端口NVMe控制器的控制方法,提供了根据本申请第二方面的第七双端口NVMe控制器的控制方法,还包括:当一个或多个第一DMA命令所指示的数据搬移至存储设备内存后,控制后端模块以将数据写入NVM;以及当一个或多个第二DMA命令所指示的数据搬移至存储设备内存后,控制后端模块以将数据写入NVM。

根据本申请的第二方面的第六双端口NVMe控制器的控制方法,提供了根据本申请第二方面的第八双端口NVMe控制器的控制方法,响应于第一主机接口或第二主机接口关闭的通知,判断对应的DMA传输电路是否在进行数据传输,若有数据传输,则控制总线进行重启或放弃当前数据传输。

根据本申请的第二方面的第一至第四任一双端口NVMe控制器的控制方法,提供了根据本申请第二方面的第九双端口NVMe控制器的控制方法,通过第一主机命令处理支路处理所述第一NVMe命令,包括:获取并解析所述第一NVMe命令以获得对应的SGL和/或PRP,根据所述SGL和/或PRP来生成一个或多个第一DMA命令,将所述一个或多个第一DMA命令存储在共享存储器中;根据第一DMA命令索引,从共享存储器中获取对应的至少一个第一DMA命令,根据获取的至少一个DMA命令将数据搬移至第一主机;通过第二主机命令处理支路处理所述第二NVMe命令,包括:获取并解析所述第二NVMe命令以获得对应的SGL和/或PRP,根据所述SGL和/或PRP来生成一个或多个第二DMA命令,将所述一个或多个第二DMA命令存储在共享存储器中;根据第二DMA命令索引,从共享存储器中获取对应的至少一个第二DMA命令,根据获取的至少一个第二DMA命令将数据搬移至第二主机。

根据本申请的第二方面的第九双端口NVMe控制器的控制方法,提供了根据本申请第二方面的第十双端口NVMe控制器的控制方法,还包括:通过第一主机命令处理支路中的第一读取发起电路请求后端模块将第一NVMe命令所对应的一个或多个第一DMA命令指示的数据从NVM搬移到存储设备内存中;以及响应于至少一个第一DMA命令的数据被搬移到存储设备内存中,发送第一DMA命令索引;通过第二主机命令处理支路中的第二读取发起电路请求后端模块将第二NVMe命令所对应的一个或多个第二DMA命令指示的数据从NVM搬移到存储设备内存中;以及响应于至少一个第二DMA命令的数据被搬移到存储设备内存中,发送第二DMA命令索引。

根据本申请的第二方面的第十双端口NVMe控制器的控制方法,提供了根据本申请第二方面的第十一双端口NVMe控制器的控制方法,所述第一读取发起电路和第二读取发起电路为同一电路或不同的两个电路。

根据本申请的第二方面的第十一双端口NVMe控制器的控制方法,提供了根据本申请第二方面的第十二双端口NVMe控制器的控制方法,当第一主机接口和第二主机接口之一连接主机时,通过所述第一读发起电路和所述第二读发起电路共同控制所述第一DMA传输电路或第二DMA传输电路。

根据本申请的第二方面的第十双端口NVMe控制器的控制方法,提供了根据本申请第二方面的第十三双端口NVMe控制器的控制方法,所述第一读取发起电路和第二读取发起电路均采用CPU。

根据本申请的第二方面的第九双端口NVMe控制器的控制方法,提供了根据本申请第二方面的第十四双端口NVMe控制器的控制方法,响应于第一主机接口或第二主机接口关闭的通知,判断对应的DMA传输电路是否在进行数据传输,若有数据传输,则控制总线进行重启或放弃当前数据传输。

根据本申请的第三方面,提供了一种存储设备,包括本申请第一方面的第一至第十四任一NVMe控制器。

根据本申请的第四方面,提供了一种电子设备,包括本申请第一方面的第一至第十四任一NVMe控制器。

附图说明

为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请中记载的一些实施例,对于本领域普通技术人员来讲,还可以根据这些附图获得其他的附图。

图1A为现有技术的固态存储设备的框图;

图1B为现有技术中的控制部件的结构示意图;

图1C为现有技术中的主机命令处理单元的结构示意图;

图1D为存储设备的另一种结构框图;

图2A为一种双端口模式应用场景示意图;

图2B为一种双端口NVMe控制器的结构图;

图3为根据本申请实施例的一种双端口NVMe控制器的结构框图;

图4为根据本申请实施例的一种双端口NVMe控制器处理写命令的工作示意图;

图5为根据本申请实施例的一种双端口NVMe控制器处理读命令的工作示意图;

图6为根据本申请实施例的另一种双端口NVMe控制器处理读命令的工作示意图;

图7为根据本申请实施例的又一种双端口NVMe控制器处理读命令的工作示意图;

图8为根据本申请实施例的再一种双端口NVMe控制器处理读命令的工作示意图;

图9为根据本申请实施例的双端口NVMe控制器控制方法流程图;

图10为图9中步骤S102的一种分解流程图(适于写命令);

图11为图9中步骤S102的另一种分解流程图(适于读命令);

图12为图9中步骤S102的又一种分解流程图(适于读命令)。

具体实施方式

如图3展示了一种双端口NVMe控制器。例如,两个主机与存储设备连接,两个主机均向存储设备发送NVMe命令或者两个主机中的一个主机向存储设备发送NVMe命令的场景时,可应用图3所示的NVMe控制器执行对主机发送的NVMe命令进行处理。

如图3所示,NVMe控制器包括第一主机接口、第二主机接口、第一主机命令处理支路、第二主机命令处理支路和共享存储器。除此之外,NVMe控制器还包含有存储命令处理单元和介质接口控制器。其中,第一主机接口连接第一主机,用于接收第一主机发送的第一NVMe命令,第二主机接口连接第二主机,用于接收第二主机发送的第二NVMe命令。第一主机命令处理支路用于处理从第一主机接口接收的第一NVMe命令;第二主机命令处理支路用于处理从第二主机接口接收的第二NVMe命令;共享存储器用于存储第一NVMe命令和第二NVMe命令。为了清楚的目的,将第一主机命令处理支路和第二主机命令处理支路合称为主机命令处理单元。

在一个实施例中,第一主机接口、第一主机命令处理支路为专用于第一主机的硬件;第二主机接口、第二主机命令处理支路为专用于第二主机的硬件。共享存储器是用于存储NVMe命令或者与NVMe命令相关的信息或命令的器件。作为举例,为了节约硬件资源,在存储设备中可以设置一个共享存储器,第一主机命令处理支路和第二主机命令处理支路可共用该存储器件。

在另一个实施例中,为了避免第一主机命令处理支路和第二主机命令处理支路抢占共享存储器资源,在本申请所提供的NVMe控制器中可以采用两个共享存储器,例如为第一主机接口、第一主机命令处理支路分配第一共享存储器,为第二主机接口、第二主机命令处理支路分配第二共享存储器;使得第一共享存储器专用于存储第一主机发送的第一NVMe命令相关信息,第二共享存储器专用于存储第二主机发送的第二NVMe命令相关信息。

在通常的应用场景中,双端口NVMe控制器服务于两个主机,即如图3所示的第一主机和第二主机。在另一些应用场景中,双端口NVMe控制器也可能服务于单个主机,例如,两个主机中一个主机与存储设备断开连接,或者不向存储设备发送NVMe命令,即主机与存储设备之间没有信息交互。例如图3所示的双端口NVMe控制器仅服务于第一主机,此时双端口NVMe控制器会产生第二主机关闭的通知。

作为举例,可以通过检测第二主机对应的PCIe接口信号以识别出第二主机与存储设备之间没有信息交互,进而产生第二主机关闭的通知。双端口NVMe控制器内部的关闭控制单元(图中未示出,关闭控制单元可以由CPU或者是独立于CPU的硬件实现)响应于上述第二主机关闭的通知,关闭第二主机的专用硬件,第二主机的专用硬件包括第二主机接口、第二主机命令处理支路;或者包括第二主机接口、第二主机命令处理支路和第二共享存储器。在一个实施例中,关闭控制单元还可以响应于第一主机接口关闭的通知,将第一共享存储器中存储的第一NVMe命令相关信息所占用的存储空间释放,或者响应于第二主机接口关闭的通知将第二共享存储器中第二NVMe命令相关信息所占用的存储空间释放。

在又一个实施例中,关闭控制单元还可以响应于第一主机接口关闭的通知将共享存储器中第一NVMe命令所占用的存储空间释放,或者响应于第二主机接口关闭的通知将共享存储器中第二NVMe命令所占用的存储空间释放。

主机向存储设备发送IO命令时,可以基于NVMe协议发送,而基于NVMe协议所发送IO命令通常也可称为NVMe命令,例如,NVMe命令包括读命令或写命令,对于写命令,其用于指示从主机到存储设备的数据搬移,而将数据从主机搬移到存储设备又包括两个步骤:通过DMA传输电路将数据从主机内存搬移至DRAM,以及通过后端模块(图1B中所示的介质接口控制器1044)将数据从DRAM搬移至NVM。

作为举例,图4展示了一种双端口NVMe控制器处理写命令的工作示意图。

如图4所示,第一主机命令处理支路包括第一SGL/PRP单元、第一写入发起电路和第一DMA传输电路。第二主机命令处理支路包括第二SGL/PRP单元、第二写入发起电路和第二DMA传输电路。作为举例,第一主机命令处理支路的结构与第二主机命令处理支路的结构类似,以及第一主机命令处理支路处理第一NVMe处理过程与第二主机命令处理支路处理第二NVMe处理过程类似。基于此,下面主要对第一主机命令处理支路结构、其各部件的功能以及其处理第一NVMe(写命令)的过程进行说明,而对第二主机命令处理支路结构、其各部件的功能以及其处理第二NVMe(写命令)的过程则简要进行介绍。需要注意的是,下文中涉及的第一NVMe命令/第一写命令/第一读命令、第二NVMe命令/第二写命令/第二读命令是用于标识NVMe命令/写命令/读命令所对应的主机,第一、第二并不是指NVMe命令的数量。同理,第一DMA命令、第二DMA命令是用于标识DMA命令对应的主机处理支路,第一、第二并不是指DMA命令的数量。

如图4所示,第一SGL/PRP单元响应于接收的第一NVMe命令,获取与第一NVMe命令对应的SGL或PRP,根据所述SGL或PRP来生成一个或多个第一DMA命令,将一个或多个第一DMA命令存储在共享存储器中。

作为举例,第一SGL/PRP单元可以利用CPU实现,也可以利用独立于CPU之外的硬件电路实现。关于如何根据NVMe命令提取SGL和PRP,以及根据SGL和PRP生成DMA命令,可以采用现有技术中的已有技术手段,故而在此仅简要进行说明。

NVMe命令中包含有PRP域或SGL域,其可以是SGL或PRP本身,指向要访问的主机内存地址空间,也可以是指针,指向SGL或PRP链表。基于此,在一个实施例中,NVMe命令携带了SGL或PRP,第一SGL和/或PRP单元响应于接收到该NVMe命令,可以直接获取SGL或PRP。在另一个实施例中,NVMe命令携带了SGL或PRP指针,第一SGL和/或PRP单元响应于接收到该NVMe命令,存储设备根据上述SGL或PRP指针,访问主机,从主机获取SGL或PRP。

在一个应用场景中,第一SGL/PRP单元可以包括SGL单元和PRP单元,通过SGL单元处理SGL相关的NVMe命令,通过PRP单元处理PRP相关的NVMe命令,即第一SGL/PRP单元既可以处理SGL相关的NVMe命令,也可以处理PRP相关的NVMe命令。在另一个应用场景中,第一SGL/PRP单元可以包括SGL单元或PRP单元,即第一SGL/PRP单元可以处理SGL相关的NVMe命令,或者处理PRP相关的NVMe命令。本申请对第一SGL/PRP单元的结构不做限制。

如图4所示,第一主机通过第一主机接口向存储设备传输第一写命令,第一主机接口将第一写命令传输到共享存储器进行存储,该过程表示为过程(1)。CPU或者独立于CPU的硬件电路从共享存储器中获取提取第一写命令中的PRP/SGL字段,将第一写命令提供给第一SGL/PRP单元,该过程表示为过程(2)。若第一写命令携带了SGL,则第一SGL/PRP单元将SGL缓存在第一SGL/PRP缓存单元,若第一写命令携带了SGL指针,则通过第一主机接口从第一主机中获取SGL并且缓存到第一SGL/PRP缓存单元中,该过程表示为过程(3);接着,第一SGL/PRP单元根据SGL生成一个或多个第一DMA命令,将一个或多个第一DMA命令存储在共享存储器中,该过程表示为过程(4)。

DMA命令生成完成后,第一SGL/PRP单元通知第一写入发起电路,该过程表示为过程(5),将用于指示DMA命令在共享存储器中位置的第一DMA命令索引,例如DMA命令指针,传递给第一写入发起电路。第一DMA传输电路接收上述第一DMA命令索引,并且根据上述第一DMA命令索引,从共享存储器中取出一个或多个第一DMA命令,该过程表示为过程(7-1),第一DMA传输电路执行数据搬移操作,从第一主机向存储设备内存传输数据,该过程表示为过程(7-2)。

当一个第一DMA命令所指示的数据搬移结束时,生成数据搬移结束的通知,该过程表示为过程(8)。在过程(5)中,第一写入发起电路除了获得了第一DMA命令索引,还获得了第一写命令ID。因此,在某个第一DMA命令被处理完成后,向第一写入发起电路反馈相应的信息(例如,还包含了某个第一DMA命令所属的第一写命令ID),第一写入发起电路由此便可以识别出是哪个第一写命令对应的第一DMA命令。例如,若某个第一写命令包含3个第一DMA命令,记为1#,2#和3#。当1#,2#和3#全部被处理完成时,第一写入发起电路均会得到相应的通知。第一写入控制电路根据该第一写命令ID即可判断该第一写命令对应的3个第一DMA命令全部被处理完成,生成该第一写命令执行完成的通知,该过程表示为过程(9)。根据NVMe协议,该通知可以通过操作CQ队列实现。在通知第一主机的同时,共享存储器可以释放第一写命令以及该第一写命令对应的第一DMA命令(如1#,2#和3#)在共享存储器中的空间。

图4所示的实施例中,在某个第一DMA命令存储完成后,第一写入发起电路能够获知该第一DMA命令存储完成,此时由第一SGL/PRP单元通知第一写入发起电路有新的第一DMA命令写入了共享存储器中。在其他实施例中,也可以通过检测共享存储器是否存在待处理的第一DMA命令,由其他电路通知第一写入发起电路。另外,第一SGL/PRP缓存单元用于缓存SGL或PRP,在一些实施例中,根据SGL/PRP单元的处理速度,第一SGL/PRP缓存单元也可以考虑省略。另外,第一SGL/PRP单元、第一写入发起电路、第一DMA传输电路均由独立于CPU的硬件电路实现,可以降低CPU的开销。

关于第二主机、第二主机接口对应的第二主机命令处理支路,包含的第二SGL/PRP单元、第二写入发起电路和第二DMA传输电路,其结构和处理过程与上述第一主机命令处理支路类似,故而不再重复叙述。需要注意的是,第二主机命令处理支路是与第一主机命令处理支路相互独立的,也就是说,第一主机命令处理支路专用于处理来自于第一主机的第一写命令,第二主机命令处理支路专用于处理第二主机发送的第二写命令,第一主机命令处理支路不会处理第二写命令,第二主机命令处理支路不会处理第一写命令。

另外,第一主机命令处理支路和第二主机命令处理支路共用了一个CPU和后端模块,该CPU连接第一DMA传输电路和第二DMA传输电路,用于当第一DMA传输电路将第一写命令对应的第一DMA命令所指示的数据搬移至DRAM后,控制后端模块将数据写入NVM;或者,当第二DMA传输电路将第二写命令对应的第二DMA命令所指示的数据搬移至DRAM后,控制后端模块将数据写入NVM。上述共用CPU和后端模块的设计能够节省硬件资源。而且,对于第一写命令和第二写命令,由于CPU在调度和处理对应的存储命令时可以按照固定的数据粒度(例如4KB)来进行,因此CPU并不需要关心所处理的数据属于哪个主机的写命令,例如即使某个来自于第一主机的第一写命令很大,由于CPU并不会处理完第一写命令所对应的第一DMA命令之后,再来处理第二写命令对应的第二DMA命令,而是,例如随机地按照固定的数据粒度从共享存储器中获取DMA命令来处理,因此,来自于第二主机的第二写命令不会被长时间阻塞,从而降低了处理NVMe命令的延迟。

再者,第一DMA传输电路、第二DMA传输电路通过总线(例如图1D所示的总线)与DRAM耦合。当第一主机接口关闭时,上文提到的关闭控制单元还用于判断第一DMA传输电路是否在进行数据传输,若有数据传输,则控制总线进行重启或放弃当前数据传输。同理,当第二主机接口关闭时,上述关闭控制单元还用于判断第二DMA传输电路是否在进行数据传输,若有数据传输,控制总线进行重启或放弃当前数据传输。

以上介绍了双端口NVMe控制器处理写命令的电路和原理,下面将介绍双端口NVMe控制器处理读命令的电路和原理。其中,读命令用于指示从存储设备到主机的数据搬移,从存储设备到主机的数据搬移也包括两个步骤:通过后端模块将数据从NVM读出到DRAM,通过DMA传输电路将数据从存储设备内存搬移至主机内存。

图5展示了一种双端口NVMe控制器处理读命令的工作示意图,图5中的第一主机命令处理支路包括第一主机接口、第一SGL/PRP单元和第一DMA传输电路,第二主机命令处理支路包括第二主机接口、第二SGL/PRP单元和第二DMA传输电路。上述电路的结构与图4所展示的类似,故而不再详细介绍。作为举例,基于读命令的特点,第一主机命令处理支路和第二主机命令处理支路可共用了一个读取控制电路。下面以第一主机命令处理支路处理第一主机发送的读命令的过程进行说明。

如图5所示,第一主机通过第一主机接口向存储设备传输第一读命令,主机接口将第一读命令传输到共享存储器进行存储,该过程表示为过程(1)。提取读命令中的PRP/SGL字段,将读命令提供给第一SGL/PRP单元,该过程表示为过程(2)。若第一读命令携带了SGL,则将SGL缓存在第一SGL/PRP缓存单元,若第一读命令携带了SGL指针,则通过主机接口从第一主机中获取SGL并且缓存到第一SGL/PRP缓存单元中,该过程表示为过程(3);接着,根据SGL生成一个或多个第一DMA命令,将第一DMA命令存储在共享存储器中,该过程表示为过程(4)。第一DMA命令生成完成后,第一SGL/PRP单元通知读取发起电路,该过程表示为过程(5),将用于指示第一DMA命令在共享存储器中位置的第一DMA命令索引,例如DMA命令指针,传递给读取发起电路。

读取发起电路接收上述第一DMA命令索引。同时,读取发起电路访问后端模块,请求后端模块将第一DMA命令所指示的数据从NVM读出到存储设备内存(DRAM)中,该过程表示为过程(6)。读取发起电路等待后端模块将第一DMA命令所指示的数据读出到存储设备内存(DRAM)中,当某一个或多个第一DMA命令所指示的数据读出到DRAM中时,读取发起电路能够获知该信息,例如,可以是由后端模块通知读取发起电路,也可以由读取发起电路根据存储设备内存的状态获知,该过程表示为过程(7)。读取发起电路响应于某一个或多个第一DMA命令所指示的数据读出到DRAM中,即可将上述第一DMA命令索引提供给第一DMA传输电路,该过程表示为过程(8)。第一DMA传输电路根据第一DMA命令索引,从共享存储器中取出对应的一个或多个第一DMA命令,该过程表示为过程(9),同时第一DMA传输电路执行数据搬移操作,从DRAM向第一主机内存搬移数据,该过程表示为过程(10)。

当一个DMA命令所指示的数据搬移结束时,生成数据搬移结束的通知,该过程表示为过程(11)。在过程(5)中,读取发起电路除了获得第一DMA命令索引,还获得了第一读命令ID,用于标识读命令。在一个实施例中,在某个第一DMA命令被处理完成后,向读取发起电路反馈相应的信息(例如,还包含了某个第一DMA命令所属的读命令ID),读取发起电路由此便可以识别出是哪个第一读命令对应的第一DMA命令。当判断某个第一读命令对应的第一DMA命令全部被处理完成时,生成该第一读命令执行完成的通知,以通知第一主机,该过程表示为过程(12)。在通知第一主机的同时,共享存储器可以释放第一读命令以及该第一读命令对应的第一DMA命令在共享存储器中的空间。

图5所示的实施例中,在DMA命令存储完成后,读取发起电路能够获知某个DMA命令存储完成,此时由第一SGL/PRP单元通知读取发起电路有新的DMA命令写入了共享存储器中。在其他实施例中,也可以通过检测共享存储器中的数据存储状态的方式,由其他电路通知读取发起电路。

同理,第二SGL/PRP单元在根据来自于第二主机接口的第二读命令生成第二DMA命令并且存储于共享存储器后,也会通知读取发起电路,将第二DMA命令索引提供给读取发起电路,该过程表示为过程(5’)。读取发起电路接收上述第二DMA命令索引。同时,读取发起电路访问后端模块,请求后端模块将第二DMA命令所指示的数据从NVM读出到存储设备内存(DRAM)中,该过程表示为过程(6’)。读取发起电路等待后端模块将第二DMA命令所指示的数据读出到存储设备内存(DRAM)中,当某一个或多个第二DMA命令所指示的数据读出到DRAM中时,读取发起电路能够获知该信息,该过程表示为过程(7’)。读取发起电路响应于某一个或多个第二DMA命令所指示的数据读出到DRAM中,将上述第二DMA命令索引提供给第二DMA传输电路,该过程表示为过程(8’)。第二DMA传输电路根据第二DMA命令索引,从共享存储器中取出对应的一个或多个第二DMA命令,该过程表示为过程(9’),同时第二DMA传输电路执行数据搬移操作,从存储设备内存向第二主机内存搬移数据,该过程表示为过程(10’)。

当一个第二DMA命令所指示的数据搬移结束时,生成数据搬移结束的通知,该过程表示为过程(11’)。读取控制电路判断出第二读命令对应的DMA命令全部被处理完成时,生成该第二读命令执行完成的通知,以通知第二主机,该过程表示为过程(12’)。在通知第二主机的同时,共享存储器可以释放第二读命令以及第二读命令对应的第二DMA命令在共享存储器中的空间。

图5所示实施例的第一主机命令处理支路和第二主机命令处理支路共用一个读取发起电路。该读取发起电路可以由独立于CPU的硬件实现,也可以由CPU实现。优选地,采用CPU来实现该读取发起电路。

作为举例,第一主机命令处理支路和第二主机命令处理支路也可以不共用一个读取发起电路,例如,第一主机命令处理支路包含第一读取发起电路,第二主机命令处理支路包含第二读取发起电路。

图6展示了第一主机命令处理支路和第二主机命令处理支路分别使用第一读取发起电路和第二读取发起电路的电路原理图。如图6所示,第一读取发起电路能够与后端模块进行交互,包括第一读取发起电路访问后端模块,请求后端模块处理第一读命令对应的第一DMA命令所指示的数据,表示为过程(6),以及后端模块将数据读出到DRAM后,通知第一读取发起电路,表示为过程(7)。第二读取发起电路也能够与后端模块进行交互,包括第二读取发起电路访问后端模块,请求后端模块处理第二读命令对应的第二DMA命令所指示的数据,表示为过程(6’),以及后端模块将数据读出到DRAM后,通知第二读取发起电路(7’)。需要注意的是,第一,后端模块在对第一读取发起电路和第二读取发起电路进行通知时是具有选择性的。也就是说,当第一DMA命令所指示的数据读出后,后端模块通知第一读取发起电路,而当第二DMA命令所指示的数据读出后,后端模块通知第二读取发起电路。第二,第一主机命令处理支路和第二主机命令处理支路是相互独立的,在某个主机接口关闭时,对应主机接口的硬件关闭,释放相应的存储空间。图6所示的实施例,在第一主机、第二主机均在线的情况下,能够较好地完成数据处理任务。但是在实际应用场景中,某个主机掉线或与存储设备之间没有信息交互,即某个主机接口关闭的情形也是经常发生的,也就是说,双端口NVMe控制器也会工作在单端口模式。在单端口模式下,可以按照图6所示的方式关闭相应的硬件。

在单端口模式下,为了提高NVMe控制器的处理效率以及避免硬件资源的浪费,作为举例,在单端口模式下,可以关闭对应的主机命令处理支路的一部分硬件资源,而将另一部分硬件资源与另一主机命令处理支路进行结合来一起处理NVMe命令。例如,当第一主机掉线时,关闭第一主机所对应的第一主机命令处理支路中第一主机接口,而将第一主机命令处理支路中的第一读取发起电路和第二主机命令处理支路第二读取发起电路同时服务于第二NVMe命令所对应的DMA命令处理。

图7展示了本申请实施例提供的又一种NVMe控制器的工作示意图。如图7所示的NVMe控制器与如图6所示的NVMe控制器不同之处在于,第二主机命令处理支路中的第二读取发起电路不仅与第二主机命令处理支路耦合,还与第一主机命令处理支路中的第一SGL/PRP单元耦合(表示为(a)),以及与第一DMA传输电路耦合(表示为(b))。在第一主机、第二主机均在线的情况下,图7所示的NVMe控制器工作过程与图6相同,在此不做赘述。而在第一主机在线时,图7所示的NVMe控制器工作过程与图6工作不同,具体描述如下:

在第二主机接口关闭时,第二主机接口和第二SGL/PRP单元可以关闭,但第二读取发起电路仍然运行,由于上述耦合关系((a)、(b))的存在,此时第二读取发起电路和第一读取发起电路可以同时都服务于处理第一NVMe命令所对应的第一DMA命令,包括响应于第一SGL/PRP单元将第一DMA命令存储完成的通知,获取第一DMA命令索引,以及在后端模块将第一DMA命令指示的数据读出到DRAM后,将第一DMA命令索引发送给第一DMA传输电路,由第一DMA传输电路执行从DRAM到主机的数据搬移。。在双端口NVMe控制器处于单端口模式时,采用两个读取发起电路能够提高对第一NVMe命令的响应效率。

图8展示了本申请实施例提供的再一种NVMe控制器的工作示意图。如图8所示,第一主机命令处理支路中的第一读取发起电路不仅与第一主机命令处理支路中的第一SGL/PRP单元和第一DMA传输电路耦合,还与第二主机命令处理支路中的第二SGL/PRP单元耦合(表示为(c)),以及与第二DMA传输电路耦合(表示为(d))。作为举例,在双端口模式下,图8所示的NVMe控制器与上述图6和图7所示的NVMe控制器工作过程类似。而在第一主机掉线,第二主机在线连接的情况下,图8所示的NVMe控制器与上述图6和图7所示的NVMe控制器工作过程不同。具体的,工作过程如下所示:

将第一主机接口和第一SGL/PRP单元关闭,第二读取发起电路和第一读取发起电路可以同时都服务于处理第二NVMe命令所对应的第二DMA命令,包括响应于第二SGL/PRP单元将第二DMA命令存储完成的通知,获取第二DMA命令索引,以及在后端模块将第二DMA命令指示的数据读出到DRAM后,将第二DMA命令索引发送给第二DMA传输电路,由第二DMA传输电路执行从DRAM到主机的数据搬移。在双端口NVMe控制器处于单端口模式时,采用两个读取发起电路能够提高对第二NVMe命令的响应效率。

另外,在图7和图8的实施例的基础上,在一个实施例中,还可以使双端口NVMe控制器同时具有图7所示的耦合关系((a)、(b))和图8所示的耦合关系((c)、(d))。在该实施例中,第一主机命令处理支路的第一读取发起电路可以用于第二主机命令处理支路,第二主机命令处理支路的第二读取发起电路可以用于第一主机命令处理支路,第一主机接口和第二主机接口是等同的。

根据本申请的一个方面,本申请还提供了一种双端口NVMe控制器的控制方法。图9展示了一种控制方法流程。包括步骤S101、S102和步骤S103。需要说明的是,步骤S101、S102和步骤S103中序号的顺序并不代表步骤执行的顺序,这些步骤可以变换次序或者同时执行。

如图9所示的方法包括:步骤S101,通过第一主机接口连接第一主机,通过第二主机接口连接第二主机。步骤S102,通过第一主机命令处理支路处理第一NVMe命令,通过第二主机命令处理支路处理第二NVMe命令。步骤S103,通过至少一个共享存储器存储第一NVMe命令和第二NVMe命令。

根据本申请实施例的方法,可以通过两个独立的主机命令处理支路分别处理来自于第一主机和第二主机的NVMe命令,因此可以降低对资源的抢占。进一步地,还可以通过在某个主机接口关闭时,关闭该主机接口对应的硬件的方式来减少能源损耗。

如图10、图11和图12展示了步骤S102的几种不同的实施方式。

如图10的方法包括:执行步骤S201,响应于接收的第一NVMe命令,获取与第一NVMe命令对应的SGL和/或PRP,根据SGL和/或PRP来生成一个或多个第一DMA命令,将一个或多个第一DMA命令存储在共享存储器中。响应于接收的第二NVMe命令,获取与第二NVMe命令对应的SGL和/或PRP,根据SGL和/或PRP来生成一个或多个第二DMA命令,将一个或多个第二DMA命令存储在共享存储器中。

然后执行步骤S202,响应于一个第一NVMe命令对应的一个或多个第一DMA命令存储完成,发送第一DMA命令索引;以及响应于一个第二NVMe命令对应的一个或多个第二DMA命令存储完成,发送第二DMA命令索引。

最后,执行步骤S203,根据第一DMA命令索引从共享存储器中获取一个或多个第一DMA命令,根据获取的一个或多个第一DMA命令从第一主机搬移数据。根据第二DMA命令索引从共享存储器中获取一个或多个第二DMA命令,根据获取的一个或多个第二DMA命令从第二主机搬移数据。

如图10所示的方法适用于NVMe命令为写命令的情况,能够将第一NVMe命令所指示的数据搬移到存储设备内存(例如DRAM)。

如图11的方法包括:执行步骤S301,响应于第一NVMe命令,获取并解析第一NVMe命令以获得对应的SGL和/或PRP,根据SGL和/或PRP来生成一个或多个第一DMA命令,将一个或多个第一DMA命令存储在共享存储器中;响应于第二NVMe命令,获取并解析第二NVMe命令以获得对应的SGL和/或PRP,根据SGL和/或PRP来生成一个或多个第二DMA命令,将一个或多个第二DMA命令存储在共享存储器中。

然后执行步骤S302,读取发起电路请求后端模块将第一NVMe命令所对应的一个或多个第一DMA命令指示的数据从NVM搬移到存储设备内存(DRAM)中。读取发起电路请求后端模块将第二NVMe命令所对应的一个或多个第二DMA命令指示的数据从NVM搬移到存储设备内存(DRAM)中。

最后执行步骤S303,响应于至少一个第一DMA命令的数据被搬移到存储设备内存中,发送第一DMA命令索引,第一DMA传输电路根据第一DMA命令索引获取并处理第一DMA命令。响应于至少一个第二DMA命令的数据被搬移到存储设备内存中,发送第二DMA命令索引,第二DMA传输电路根据第二DMA命令索引获取并处理第二DMA命令。

如图12的方法,包括步骤S401、S402和S403,与图11所示方法的区别在于步骤S402中,分别采用相互独立的读取发起电路请求后端模块,以及在步骤S403中,相互独立的读取发起电路分别响应于第一DMA命令所指示数据搬移至DRAM,指示第一DMA传输电路处理第一DMA命令;以及响应于第二DMA命令所指示数据搬移至DRAM,指示第二DMA传输电路处理第二DMA命令。

总结来说,图11和图12的方法适用于NVMe命令为读命令的情况,并且图11的方法中,可以采用一个读取发起电路与后端模块、第一DMA传输电路、第二DMA传输电路交互,而图12中,例如,可以采用第一读取发起电路与后端模块、第一DMA传输电路交互,采用第二读取发起电路与后端模块、第二DMA传输电路交互。可以参看图5、图6、图7、图8来理解本实施例的相关方法。

根据本申请的一个方面,本申请实施例还提供一种存储设备,是指如图1A、图1B所示的存储设备102,存储设备102包括接口103、控制部件104、一个或多个NVM芯片105以及DRAM 110。控制部件104包括上述实施例所描述的NVMe控制器,由于上文已经详细介绍了NVMe控制器,因此在此不再详细叙述。

根据本申请的一个方面,本申请实施例还提供一种电子设备,该电子设备包括处理器和存储设备,存储设备为以上实施例所提及的存储设备。由于上文中已经进行了详细地介绍,故而不再详细叙述。

需要说明的是,为了简明的目的,本申请将一些方法及其实施例表述为一系列的动作及其组合,但是本领域技术人员可以理解本申请的方案并不受所描述的动作的顺序限制。因此,依据本申请的公开或教导,本领域技术人员可以理解其中的某些步骤可以采用其他顺序来执行或者同时执行。进一步,本领域技术人员可以理解本申请所描述的实施例可以视为可选实施例,即其中所涉及的动作或模块对于本申请某个或某些方案的实现并不一定是必需的。另外,根据方案的不同,本申请对一些实施例的描述也各有侧重。鉴于此,本领域技术人员可以理解本申请某个实施例中没有详述的部分,也可以参见其他实施例的相关描述。

在具体实现方面,基于本申请的公开和教导,本领域技术人员可以理解本申请所公开的若干实施例也可以通过本文未公开的其他方式来实现。例如,就前文所述的电子设备或装置实施例中的各个单元来说,本文在考虑了逻辑功能的基础上对其进行拆分,而实际实现时也可以有另外的拆分方式。又例如,可以将多个单元或组件结合或者集成到另一个系统,或者对单元或组件中的一些特征或功能进行选择性地禁用。就不同单元或组件之间的连接关系而言,前文结合附图所讨论的连接可以是单元或组件之间的直接或间接耦合。在一些场景中,前述的直接或间接耦合涉及利用接口的通信连接,其中通信接口可以支持电性、光学、声学、磁性或其它形式的信号传输。

尽管已描述了本申请的优选实施例,但本领域内的技术人员一旦得知了基本创造性概念,则可对这些实施例作出另外的变更和修改。所以,所附权利要求意欲解释为包括优选实施例以及落入本申请范围的所有变更和修改。显然,本领域的技术人员可以对本申请进行各种改动和变型而不脱离本申请的精神和范围。这样,倘若本申请的这些修改和变型属于本申请权利要求及其等同技术的范围之内,则本申请也意图包含这些改动和变型在内。

29页详细技术资料下载
上一篇:一种医用注射器针头装配设备
下一篇:一种多模式DMA数据传输系统

网友询问留言

已有0条留言

还没有人留言评论。精彩留言会获得点赞!

精彩留言,会给你点赞!