CN115033186B - 双端口NVMe控制器及读写命令处理方法 - Google Patents
双端口NVMe控制器及读写命令处理方法 Download PDFInfo
- Publication number
- CN115033186B CN115033186B CN202210947971.1A CN202210947971A CN115033186B CN 115033186 B CN115033186 B CN 115033186B CN 202210947971 A CN202210947971 A CN 202210947971A CN 115033186 B CN115033186 B CN 115033186B
- Authority
- CN
- China
- Prior art keywords
- module
- sub
- interface
- command
- protocol interface
- 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
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
- G06F3/0611—Improving I/O performance in relation to response time
-
- 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/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
-
- 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/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/18—Handling requests for interconnection or transfer for access to memory bus based on priority control
-
- 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/0658—Controller construction arrangements
-
- 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)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Human Computer Interaction (AREA)
- Bus Control (AREA)
Abstract
本发明涉及一种双端口NVMe控制器及读写命令处理方法,包括:NVMe协议接口模块、第一加速器和第二加速器,NVMe协议接口模块包括第一、第二NVMe协议接口子模块、映射子模块和连接子模块;NVMe协议接口模块还包括第一、第二接口,第一、第二接口为NVMe协议接口模块用于连接PCIe接口模块的接口;映射子模块连接在第一接口和第一NVMe协议接口子模块之间;在单端口模式下工作的双端口NVMe控制器中,连接子模块连接在映射子模块和第二NVMe协议接口子模块之间;在双端口模式下工作的双端口NVMe控制器中,连接子模块连接在第二接口和第二NVMe协议接口子模块之间。本发明能够减少控制器延迟,提高NVMe控制器的性能。
Description
技术领域
本发明涉及NVMe固态硬盘技术领域,尤其是涉及一种双端口NVMe控制器及读写命令处理方法。
背景技术
NVMe固态硬盘凭借低延迟和高吞吐量的特点,已经取代机械硬盘,成为企业级市场和消费级市场的主要存储介质。双端口NVMe硬盘使用两个独立的PCIe接口和主机通信,相比单端口NVMe硬盘能够显著提高NVMe硬盘的可用性。支持双端口的NVMe硬盘根据使用的固件的不同,可以工作在双端口模式或单端口模式。举例来说,一个设备可以提供1个PCIe4.0x4的接口,或者2个PCIe4.0x2的接口,其中,x4表示可以使用4个物理链路和主机通信,x2表示可以使用2个物理链路和主机通信,x4接口的最大通信速度是x2接口的最大通信速度的2倍。作为NVMe固态硬盘的重要组成部分,NVMe固态硬盘的控制器对NVMe固态硬盘的整体性能极其重要的影响。
参见图1,对NVMe固态硬盘的控制器的具体结构进行说明。从图1中可以看出,控制器包括PCIe接口模块、双端口NVMe控制模块、介质控制模块、CPU组, PCIe接口模块连接主机,存储介质控制模块连接存储介质。其中,双端口NVMe控制模块使用2个通信接口和PCIe接口模块通信,接口1在单端口模式和双端口模式使用,接口2仅在双端口模式使用。PCIe接口模块实现PCIe协议,完成芯片内部接口协议和PCIe协议之间的转换。CPU组包含若干个CPU,与双端口NVMe控制模块相关的功能包括对配置寄存器填入配置信息、处理数据读写的控制信息。存储介质控制模块负责将数据写入存储介质、将数据从存储介质读出。
基于图1示出的控制器,一条NVMe命令的处理过程大致包括:
1、主机通过PCIe接口模块通过双端口NVMe控制模块有新命令;
2、双端口NVMe控制模块通过PCIe接口模块从主机的内存中读取新命令;
3、双端口NVMe控制模块通知CPU对读取的新命令进行解析,CPU将新命令解析为一个或多个内部能够处理的命令。比如,对一条包含多个LBA的写命令,将其分解为多条每次操作1个LBA的写操作;
4、双端口NVMe控制模块执行解析后的命令;对写命令,双端口NVMe控制模块从主机读取每个LBA的数据并将数据写入LBA对应位置;
5、双端口NVMe控制模块通过PCIe接口模块向主机反馈应答信息,例如成功或失败,将其写入主机内存。
可见,在现有技术中,命令的解析工作是由CPU完成,这是因为NVMe命令的格式复杂且仍在演化。所有的解析工作都由CPU完成,这样会造成延迟大、性能低、功耗大。随着PCIe接口的速度不断升级,CPU处理能力不足的问题日益突出。
而且,目前的双端口NVMe控制模块内部一般包括两个子控制器,一个子控制器中包括一个NVMe模块和一个加速器,NVMe模块和加速器共同完成对NVMe命令的读取,将命令转交给CPU,CPU完成命令解析后,将解析结果发送给加速器,进而完成主机和存储介质之间的数据传输。其中一个子控制器可以工作在单端口模式和双端口模式下,而另外一个子控制器仅工作在双端口模式下。为此,一般需要可以工作在单端口模式和双端口模式下的子控制器的性能较强,需要过设计,而仅工作在双端口模式下的子控制器的性能较弱,需要欠设计。
可见,目前的双端口NVMe控制模块中,单端口模式下是有一个子控制器不工作的,即不能发挥这一个子控制器的性能。而在双端口模式下,性能较高的一个子控制器的性能是不能完全发挥出来的,即会造成电路性能的浪费。
发明内容
为了解决上述技术问题或者至少部分地解决上述技术问题,本发明提供了一种双端口NVMe控制器及读写命令处理方法。
第一方面,本发明实施例提供一种双端口NVMe控制器,包括:NVMe协议接口模块、第一加速器和第二加速器,其中:
所述第一加速器连接在所述NVMe协议接口模块和所述第二加速器之间;所述NVMe协议接口模块用于连接在PCIe接口模块和所述第一加速器之间;所述PCIe接口模块用于连接主机;所述第一加速器还用于与介质控制模块连接,所述介质控制模块用于连接存储介质;所述第一加速器和所述第二加速器还用于连接CPU;
其中,所述NVMe协议接口模块包括第一NVMe协议接口子模块、第二NVMe协议接口子模块、映射子模块和连接子模块;所述NVMe协议接口模块还包括第一接口和第二接口,所述第一接口和所述第二接口为所述NVMe协议接口模块用于连接PCIe接口模块的两个接口;所述映射子模块连接在所述第一接口和所述第一NVMe协议接口子模块之间;在单端口模式下工作的双端口NVMe控制器中,所述连接子模块连接在所述映射子模块和所述第二NVMe协议接口子模块之间;在双端口模式下工作的双端口NVMe控制器中,所述连接子模块连接在所述第二接口和所述第二NVMe协议接口子模块之间;在单端口模式下工作的双端口NVMe控制器中,所述映射子模块用于:在所述第一接口空闲且同时接收到所述第一NVMe协议接口子模块和所述第二NVMe协议接口子模块发送来的请求时,确定两个请求的先后顺序;
所述第一加速器用于:在检测到一个NVMe协议接口子模块中的命令状态变化时,通过命令状态变化的NVMe协议接口子模块和该NVMe协议接口子模块所连接的接口从所述主机中读取待执行命令,将所述待执行命令发送给第二加速器进行解析,并在解析之后在所述CPU的控制下实现所述主机和所述存储介质之间的数据传输。
第二方面,本发明实施例提供一种读写命令处理方法,该方法基于第一方面提供的双端口NVMe控制器实现,在单端口模式下工作的双端口NVMe控制器中,所述方法包括:
所述第一加速器在检测到一个NVMe协议接口子模块中的命令状态发生变化时,通过命令状态发生变化的NVMe协议接口子模块、所述第一接口和所述PCIe接口模块向所述主机发送命令获取请求;
所述映射子模块在接收到所述主机通过所述PCIe接口模块和所述第一接口返回的命令时,将所述命令通过所述命令状态发生变化的NVMe协议接口子模块发送至所述第一加速器;
所述第一加速器将所述命令发送至所述第二加速器,以使所述第二加速器对所述命令进行解析;
在解析完成后将所述命令发送至所述CPU,若所述命令为写命令,则所述CPU则控制所述第一加速器通过所述命令状态发生变化的NVMe协议接口子模块发送写入数据获取请求;
所述映射子模块在接收到所述主机通过所述PCIe接口模块和所述第一接口返回的待写入数据时,将所述待写入数据通过所述命令状态发生变化的NVMe协议接口子模块发送至所述第一加速器;
所述第一加速器将所述待写入数据通过所述介质控制模块写入到所述存储介质中;
所述第一加速器在写入完毕后,通过所述命令状态发生变化的NVMe协议接口子模块向主机发送应答消息。
本发明实施例提供的双端口NVMe控制器及读写命令处理方法,在双端口模式下,可以使用第一接口和第二接口与PCIe接口模块通信,此时第一接口和第一NVMe协议接口子模块通过映射子模块连接,第二接口和第二NVMe协议接口子模块通过连接子模块连接。在单端口模式下,只能通过其中的第一接口和PCIe接口模块通信,此时,第一接口和第一NVMe协议接口子模块通过映射子模块连接,第一接口和第二NVMe协议接口子模块通过映射子模块、连接子模块连接。可见,不论是在单端口模式还是在双端口模式下工作,两个NVMe协议接口子模块都可以参与处理流程,使得两个NVMe协议接口子模块都会发挥作用。两个NVMe协议接口子模块可以选用相同的接口子模块,不必对第一NVMe协议接口子模块采用高性能配置,即不必进行过设计,对第二NVMe协议接口子模块不必进行欠设计,也就不存在双端口模式下的高性能的接口子模块的电路性能无法充分发挥的问题。而且,在本发明实施例中采用第二加速器进行命令解析,从而减少CPU的解析工作量,可以进一步减少延迟,提高NVMe控制器的性能。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本发明的实施例,并与说明书一起用于解释本发明的原理。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,对于本领域普通技术人员而言,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为NVMe固态硬盘的控制器的结构框图;
图2为本发明一个实施例中双端口NVMe控制器的结构框图;
图3为本发明一个实施例中NVMe协议接口模块的结构框图;
图4为本发明一个实施例中第一加速器和第二加速器的结构框图;
图5是本发明一个实施例中映射表的映射关系示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动的前提下所获得的所有其他实施例,都属于本发明保护的范围。
第一方面,本发明实施例提供一种双端口NVMe控制器。
参见图2和图3,双端口NVMe控制器包括:NVMe协议接口模块、第一加速器和第二加速器,其中:
所述第一加速器连接在所述NVMe协议接口模块和所述第二加速器之间;所述NVMe协议接口模块用于连接在PCIe接口模块和所述第一加速器之间;所述PCIe接口模块用于连接主机;所述第一加速器还用于与介质控制模块连接,所述介质控制模块用于连接存储介质;所述第一加速器和所述第二加速器还用于连接CPU;
其中,所述NVMe协议接口模块包括第一NVMe协议接口子模块、第二NVMe协议接口子模块、映射子模块和连接子模块;所述NVMe协议接口模块还包括第一接口和第二接口,所述第一接口和所述第二接口为所述NVMe协议接口模块用于连接PCIe接口模块的两个接口;所述映射子模块连接在所述第一接口和所述第一NVMe协议接口子模块之间;在单端口模式下工作的双端口NVMe控制器中,所述连接子模块连接在所述映射子模块和所述第二NVMe协议接口子模块之间;在双端口模式下工作的双端口NVMe控制器中,所述连接子模块连接在所述第二接口和所述第二NVMe协议接口子模块之间;在单端口模式下工作的双端口NVMe控制器中,所述映射子模块用于:在所述第一接口空闲且同时接收到所述第一NVMe协议接口子模块和所述第二NVMe协议接口子模块发送来的请求时,确定两个请求的先后顺序;
所述第一加速器用于:在检测到一个NVMe协议接口子模块中的命令状态变化时,通过命令状态变化的NVMe协议接口子模块和该NVMe协议接口子模块所连接的接口从所述主机中读取待执行命令,将所述待执行命令发送给第二加速器进行解析,并在解析之后在所述CPU的控制下实现所述主机和所述存储介质之间的数据传输。
其中,双端口NVMe控制器中所谓的双端口即第一接口和第二接口。
其中,在单端口模式下工作的双端口NVMe控制器中,所述连接子模块连接在所述映射子模块和所述第二NVMe协议接口子模块之间;在双端口模式下工作的双端口NVMe控制器中,所述连接子模块连接在所述第二接口和所述第二NVMe协议接口子模块之间。可见,在不同工作模式下,连接子模块和其它子模块连接关系是不同的。一个支持双端口的NVMe硬盘被部署在一个计算机系统时,只工作在一种工作模式下,即只工作在单端口模式,或者只工作在双端口模式下,因此双端口NVMe控制器的连接子模块和其它子模块的连接关系通常是不会发生变化的。如果想要变更工作模式,则需要对双端口NVMe控制器内的连接子模块与其它子模块的连接关系进行重新配置。
其中,NVMe协议接口模块的作用包括:实现NVMe协议定义的两个接口。在双端口模式下,可以使用第一接口和第二接口与PCIe接口模块通信,此时第一接口和第一NVMe协议接口子模块通过映射子模块连接,第二接口和第二NVMe协议接口子模块通过连接子模块连接。在单端口模式下,只能通过其中的第一接口和PCIe接口模块通信,此时,第一接口和第一NVMe协议接口子模块通过映射子模块连接,第一接口和第二NVMe协议接口子模块通过映射子模块、连接子模块连接。
可见,不论是在单端口模式还是在双端口模式下工作,两个NVMe协议接口子模块都可以参与处理流程,使得两个NVMe协议接口子模块都会发挥作用。两个NVMe协议接口子模块可以选用相同的接口子模块,不必对第一NVMe协议接口子模块采用高性能配置,即不必进行过设计,对第二NVMe协议接口子模块不必进行欠设计,也就不存在双端口模式下的高性能的接口子模块的电路性能无法充分发挥的问题。
可理解的是,在双端口模式下工作的双端口NVMe控制器中,映射子模块仅连通第一接口和第一NVMe协议接口子模块,此时映射子模块仅是一个传递命令或数据的作用。而在单端口模式下工作的双端口NVMe控制器中,映射子模块除了连通第一接口和第一NVMe协议接口子模块外,还连通了第一接口和连接子模块,即连通了第一接口和第二NVMe协议接口子模块。即第一接口可能会在同时接收到来自两个NVMe协议接口子模块发送来的请求,此时就需要确定两个请求的先后顺序,即确定将两个请求发送给PCIe接口模块的先后顺序,避免两个请求的上传发生冲突。
例如,轮流设置两个NVMe协议接口子模块的优先级为较高。首先,设定一个NVMe协议接口子模块的优先级较高。第一接口同时接收到来自两个NVMe协议接口子模块发送来的请求时,将优先级较高的NVMe协议接口子模块发送的请求在先,另一个NVMe协议接口子模块发送来的请求在后,即先发送优先级较高的NVMe协议接口子模块发送的请求,再发送优先级较低的NVMe协议接口子模块发送的请求。之后,再设置另一个NVMe协议接口子模块的优先级较高,以供下一次第一接口同时接收到来自两个NVMe协议接口子模块发送的请求时进行顺序确定。
也就是说,所述映射子模块可以具体用于:在所述第一接口空闲且同时接收到所述第一NVMe协议接口子模块和所述第二NVMe协议接口子模块发送来的请求时,先将当前优先级较高的NVMe协议接口子模块发送来的请求通过所述第一接口和所述PCIe接口模块发送至所述主机,再将当前优先级较低的NVMe协议接口子模块发送来的请求通过所述第一接口和所述PCIe接口模块发送至所述主机,再将两个NVMe协议接口子模块的优先级互换,使得所述映射子模块在下一次处于空闲同时接收到来自两个NVMe协议接口子模块发送的请求时进行顺序确定。
可理解的是,单端口模式下的双端口NVMe控制器中的两个NVMe协议接口子模块同时通过第一接口向主机发送请求时,映射子模块会进行仲裁处理,确定两个请求的先后顺序,先后通过第一接口向主机发送请求。
其中,第一NVMe协议接口子模块和第二NVMe协议接口子模块是两个独立的NVMe协议接口子模块,每一个NVMe协议接口子模块都可以实现NVMe协议定义的寄存器。每一个NVMe协议接口子模块中的寄存器包括管理寄存器和IO寄存器。管理寄存器用来实现同组内的IO寄存器的使能等信息;IO寄存器即读写寄存器,用来实现命令、数据的缓存等。双端口NVMe控制器中的每一个NVMe协议接口子模块中的管理寄存器仅有一组,而IO寄存器有多组。主机通过PCIe接口模块对双端口NVMe控制器中的不同地址进行读写,完成对双端口NVMe控制器的配置、控制和IO读写。
在单端口模式下的双端口NVMe控制器中,可以将两个NVMe协议接口子模块中的寄存器地址形成一个映射表,以便于主机依据该映射表轮流使能两个NVMe协议接口子模块中的IO寄存器。
从图5中可以看出,在单端口模式下的双端口NVMe控制器中,映射子模块可以固定选择第一NVMe协议接口子模块中的管理寄存器。而第二NVMe协议接口子模块中的管理寄存器仅在双端口模式下的双端口NVMe控制器中使用。
在图5中,位于左侧的是映射表,该映射表可以存于映射子模块中,在该映射表中,第一NVMe协议接口子模块中的IO寄存器映射到映射表中序号为奇数的IO寄存器中,第二NVMe协议接口子模块中的IO寄存器映射到映射表中序号为偶数的IO寄存器中。由于按照顺序依次使能这些IO寄存器,例如,如果先使能映射表中左侧的IO寄存器1,而左侧的该IO寄存器1映射的是右侧中第一NVMe协议接口子模块中的IO寄存器1,则第一NVMe协议接口子模块中的IO寄存器1处于可使用的状态。下一次使能映射表中左侧的IO寄存器2,而左侧的该IO寄存器2映射的是右侧中第二NVMe协议接口子模块中的IO寄存器1,则第二NVMe协议接口子模块中的IO寄存器1处于可使用的状态。再下一次,使能映射表中左侧的IO寄存器3,而该左侧的IO寄存器3会映射到右侧的第一NVMe协议接口子模块中的IO寄存器2,则第一NVMe协议接口子模块中的IO寄存器2处于可使用的状态。
可见,可以在配置阶段按照映射表的顺序使能IO寄存器。使能IO寄存器的时候会按顺序进行使能,可以一次使能1个、2个、3个、4个IO寄存器,例如,同时使能映射表中的IO寄存器1、2、3和4。
可理解的是,主机可以通过PCIe接口模块、第一接口、映射子模块向处于可用状态的IO寄存器对应的NVMe协议接口子模块中的IO寄存器写入新命令通知信息。可见,通过映射表可以平衡两个NVMe协议接口子模块的工作负载,提高单端口模式下的整体性能。
当然,在读写阶段,只能向处于使能状态的IO寄存器对应的NVMe协议接口子模块的IO寄存器中写入新命令通知信息。如果处于使能状态的IO寄存器有多个,可以向其中任何一个或多个处于使能状态的IO寄存器对应的NVMe协议接口子模块的IO寄存器中写入新命令通知信息。此时,虽然使用IO寄存器进行读写可以是没有顺序的,但是由于每个NVMe协议接口子模块上的IO寄存器数量大体相等,所以从整体上看,主机的读写被分散到两个NVMe协议接口子模块。
也就是说,在单端口模式下的双端口NVMe控制器中,所述映射子模块中可以存储有映射表;所述映射表中的管理寄存器与所述第一NVMe协议接口子模块中的管理寄存器具有映射关系,所述映射表中序号为奇数的IO寄存器与所述第一NVMe协议接口子模块中IO寄存器具有映射关系;所述映射表中序号为偶数的IO寄存器与所述第二NVMe协议接口子模块中IO寄存器具有映射关系;对应的,所述映射子模块还可以用于:按照所述映射表中各个IO寄存器的排列顺序依次使能至少一个IO寄存器;在接收到所述主机通过所述PCIe接口模块和所述第一接口发送来的新命令通知信息时,将所述新命令通知信息写入与当前处于使能状态的IO寄存器具有映射关系的NVMe协议接口子模块的IO寄存器中,以使被写入新命令通知信息的NVMe协议接口子模块的命令状态发生变化。
在一个实施例中,主机向第一NVMe协议接口子模块发送了新命令的通知,则第一加速器则仍然通过第一NVMe协议接口子模块向主机发送命令获取请求,主机通过第一NVMe协议接口子模块向第一加速器返回新的命令。而如果新的命令为写命令,则第一加速器仍然通过第一NVMe协议接口子模块向主机中发送获取待写入数据的请求,主机仍然通过第一NVMe协议接口子模块向第一加速器返回写入数据。
主机向一个NVMe协议接口子模块写入新命令的通知信息,一旦该通知信息写入了某个NVMe协议接口子模块中,后续针对该通知信息所作的操作都会通过该NVMe协议接口子模块实现主机和第一加速器之间的数据或命令传输。
例如,对于PCIe传输中常见的请求和应答分离的问题,可以用不同的序号区分不同NVMe协议接口子模块的请求和应答:
1、NVMe协议接口子模块通过PCIe接口模块向主机发送请求的同时会发送一个标识来表明请求来自自身;
2、主机通过PCIe接口模块针对该标识发送应答信号;
3、映射子模块接收到应答信号时,将应答信号发送到标识相同的NVMe协议接口子模块中。
可见,通过标识区分不同的NVMe协议接口子模块,从而保证发送请求的NVMe协议接口子模块和接收针对该请求对应的应答信号的NVMe协议接口子模块是同一个。即,由主机向单端口模式下的双端口NVMe控制器发送数据时,会将数据原路反回至对应的NVMe协议接口子模块中。
也就是说,在单端口模式下工作的单端口NVMe控制器中,每一个NVMe协议接口子模块还可以用于:针对所述主机向该NVMe协议接口子模块所写入的新命令通知信息,在通过PCIe接口模块和所述第一接口向所述主机发送命令获取请求或写入数据获取请求时,在所述命令获取请求或所述写入数据获取请求中携带有该NVMe协议接口子模块的标识;其中,所述主机针对所述命令获取请求返回的命令或针对所述写入数据获取请求返回的待写入数据中携带有该标识;对应的,映射子模块还可以用于:在接收到所述主机发送来的命令或待写入数据时,根据所述命令或所述待写入数据中携带的标识,将所述命令或待写入数据发送至该标识对应的NVMe协议接口子模块中。
例如,第一NVMe协议接口子模块中被主机写入新命令通知,第一加速器通过第一NVMe协议接口子模块向主机发送命令获取请求,第一NVMe协议接口子模块在该命令获取请求添加自身的标识。主机针对该命令获取请求下发命令,命令中同样携带上述标识。映射子模块接收到命令时,通过标识便可以知道应该将该命令发送第一NVMe协议接口子模块。如果该命令为写命令,还需要获取待写入数据,因此第一加速器通过第一NVMe协议接口子模块向主机发送写入数据获取请求,第一NVMe协议接口子模块在该写入数据获取请求添加自身的标识。主机针对该写入数据获取请求下发待写入数据,数据中同样携带上述标识。映射子模块接收到待写入数据时,通过标识便可以知道应该将该待写入数据发送第一NVMe协议接口子模块。
在本发明实施例中,上述待执行命令可以是读命令或者写命令。
针对读命令的处理过程大致为:第一加速器在得知有新命令时,通过NVMe协议接口模块、PCIe接口模块向主机发送命令获取请求,主机在接收到该获取请求后,将新命令通过PCIe接口模块、NVMe协议接口模块发送给第一加速器,进而实现命令的读取。接着,第一加速器将该命令发送给第二加速器,第二加速器对该命令进行解析,解析后得知是读命令,解析后得到的读命令被CPU读取,CPU启动介质控制模块,从而使得存储介质中的数据通过介质控制模块传输到第一加速器,第一加速器将数据通过NVMe协议接口模块、PCIe接口模块发送至主机,实现读命令的执行,即将存储介质中的数据读取至主机。
针对写命令的处理过程大致包括: 第一加速器在得知有新命令时,通过NVMe协议接口模块、PCIe接口模块向主机发送命令获取请求,主机在接收到该获取请求后,将新命令通过PCIe接口模块、NVMe协议接口模块发送给第一加速器,进而实现命令的读取。接着,第一加速器将该命令发送给第二加速器,第二加速器对该命令进行解析,解析后得到写命令,解析后的写命令被CPU读取。CPU通知介质控制模块在存储介质中准备好存储空间,然后控制第一加速器发送数据获取请求,数据获取请求通过NVMe协议接口模块、PCIe接口模块发送至主机,所述主机将待写入的数据通过PCIe接口模块、NVMe协议接口模块发送至第一加速器,从而第一加速器将待写入数据通过介质控制模块发送至存储介质进行写入,从而实现写命令的执行,即将主机中的数据写入到存储介质中。
当然,不论是在读命令还是在写命令执行完毕后,CPU都可以控制第一加速器向主机发送应答消息,以告知主机命令执行完毕。
从上述处理过程中可以看出第一加速器的功能有两个:一个是命令的读取,一个是数据的传输,通过设置第一加速器可以实现双端口NVMe控制器在命令读取和数据传输两方面的加速。
以上为本发明实施例提供的双端口NVMe控制器针对读写命令的处理大致过程,针对单端口和双端口均使用。涉及到第一加速器、第二加速器内部结构的扩展,处理流程会更为复杂一些。
其中,第二加速器的作用是对待执行命令进行解析。
其中,存储介质为闪存等NVM,PCIe接口模块实现PCIe协议,完成NVMe硬盘和主机的数据传输。NVMe协议接口模块包括NVMe协议定义的寄存器接口及传递命令、数据等信息的传输通道。
其中,第一加速器可以实现对命令的读取和数据传输的加速,第二加速器可以实现对命令的解析的加速,两种加速器是通过不同的方式加速双端口NVMe控制器的处理速度。
在一个实施例中,参见图4,所述第一加速器包括第一加速子模块和第二加速子模块;所述第二加速器包括第三加速子模块和第四加速子模块;所述第一加速子模块和所述第三加速子模块连接,所述第二加速子模块和所述第四加速子模块连接,以实现所述第一加速器和所述第二加速器之间的连接;所述第一加速子模块和第一NVMe协议接口子模块连接,所述第二加速子模块和第二NVMe协议接口子模块连接,以实现第一加速器和NVMe协议接口模块的连接。
可见,第一加速子模块连接在第一NVMe协议接口子模块和第三加速子模块之间,第二加速子模块连接在第二NVMe协议接口子模块和第四加速子模块之间。
可理解的是,第一加速器通过两个接口和NVMe协议接口模块连接,第一加速器也通过两个接口和第二加速器连接。
基于第一加速器和第二加速器的以上结构,可以实现两个子控制器,第一子控制器包括第一NVMe协议接口子模块、第一加速子模块和第三加速子模块。第二子控制器包括第二NVMe协议接口子模块、第二加速子模块和第四加速子模块。
在单端口模式下的双端口NVMe控制器中,第一子控制器通过映射子模块与第一接口连接,第二子控制器通过连接子模块、映射子模块与第一接口连接。在双端口模式下的双端口NVMe控制器中,第一控制器通过映射子模块与第一接口连接,第二子控制器通过连接子模块与第二接口连接。
其中,第一加速器中的第一加速子模块和第二加速子模块是两个相同的加速子模块。第二加速器中的第三加速子模块和第四加速子模块也是两个相同的加速子模块,两个加速子模块完全独立工作。
在一个实施例中,第一NVMe协议接口子模块、第二NVMe协议接口子模块可以通过不同的两个CPU接口和CPU连接,当然这两个CPU接口可以连接到不同的两个CPU,也可以连接到一个CPU。芯片设计中广泛使用多核心的控制器,将两个CPU接口连接到两个CPU可以进一步提高双端口NVMe控制器的性能。其中,映射子模块和第一NVMe协议接口子模块可以与一个CPU接口连接,连接子模块和第二NVMe协议接口子模块可以与另外一个CPU接口连接。
在实际中,主机可以通过PCIe接口模块向第一NVMe协议接口子模块发送新命令通知消息,这样第一NVMe协议接口子模块中的命令状态就会有变化,这样第一加速子模块就会得知主机上有新的命令,进而通过第一NVMe协议接口子模块、PCIe接口模块向主机发送命令获取请求。同样的,主机也可以通过PCIe接口模块向第二NVMe协议接口子模块发送新命令通知消息,这样第二NVMe协议接口子模块中的命令状态就会有变化,这样第二加速子模块就会得知主机上有新的命令,进而通过第二NVMe协议接口子模块、PCIe接口模块向主机发送命令获取请求。即,第一加速子模块可以从第一NVMe协议接口子模块中获取是否有新的命令这一信息,第二加速子模块可以从第二NVMe协议接口子模块中获取是否有新的命令这一信息。
在一个实施例中,参见图4,所述第一加速器中还可以包括选择子模块,所述选择子模块连接所述第一加速子模块和所述第二加速子模块,所述选择子模块还用于连接所述介质控制模块;其中:所述选择子模块用于:在所述第一加速子模块和所述第二加速子模块均需要向所述存储介质传输数据时,选中当前优先级较高的加速子模块进行数据传输,并在该加速子模块传输数据完毕后,设置另一个加速子模块的优先级为更高。
其中,第一加速器中的第一加速子模块和第二加速子模块均连接到介质控制模块,介质控制模块不能同时实现两个加速子模块向存储介质传输数据。具体的,两个加速子模块通过一个介质控制接口连接介质控制模块。
其中,第一加速子模块和第二加速子模块是两个相同的加速子模块,都能完成命令的读取和数据的传输。不论是在单端口模式还是双端口模式下,两个加速子模块均共享一个介质控制接口向存储介质传输数据。
在同一时刻,第一加速子模块和第二加速子模块中只能有一个加速子模块向存储介质传输数据,具体是哪个加速子模块由选择子模块来确定。选择子模块的确定方式为优先级。例如,选择子模块交替设置两个加速子模块的优先级为较高。例如,当第一加速子模块和第二加速子模块均需要通过选择子模块、介质控制模块向存储介质传输数据时,首先可以设定第一加速子模块的优先级为较高,此时第一加速子模块可以向存储介质传输数据。在第一加速子模块传输完毕后,选择子模块将第二加速子模块的优先级设置为较高,此时第二加速子模块可以向存储介质传输数据。在第二加速子模块传输完毕后,选择子模块又将第一加速子模块的优先级设置为较高。
可知如果两个加速子模块均需要传输数据时,可以通过优先级确定传输数据的优先顺序。较高优先级的加速子模块的优先级会保持到该加速子模块数据传输完毕。但是,如果只有一个加速子模块需要向存储介质传输数据,则选择子模块直接选中该加速子模块,即不必经过优先级确定,该加速子模块直接可以将数据通过选择子模块、介质控制模块传输给存储介质。如果没有加速子模块需要传输数据时,选择子模块不必选中任意加速子模块。
具体的,如果加速子模块需要向传输介质发送数据时,会先向选择子模块发送请求,如果选择子模块接收到两个请求,则需要根据优先级进行选择。如果选择子模块只接收到一个请求,则选中发送该请求的加速子模块。选择子模块会向选中的加速子模块发送应答信号,接收到应答信号的加速子模块可以开始进行数据传输。
以上为加速子模块需要向存储介质传输数据时的处理过程。
在一个实施例中,所述选择子模块还可以用于:接收所述介质控制模块发送来的ID信号,所述ID信号为0,则选中所述第一加速子模块,以使从所述存储介质中读取的数据通过所述第一加速子模块发送至所述主机;若所述ID信号为1,则选中所述第二加速子模块,以使从所述存储介质中读取的数据通过所述第二加速子模块发送至所述主机;其中,若所述待执行命令通过所述第一NVMe协议接口子模块发送至所述第一加速子模块,则所述ID信号为0;若所述待执行命令通过所述第二NVMe协议接口子模块发送至所述第二加速子模块,则所述ID信号为1。
也就是说,从存储介质传输数据到加速子模块时,需要根据选择子模块接收到的OD信号来确定。
具体的,如果待执行命令是通过第一NVMe协议接口子模块发送至第一加速子模块,则第一加速子模块会通过选择子模块告知介质控制模块,或者由CPU告知介质控制模块。之后,在需要将介质中的数据读取至主机时,介质控制模块就会向选择子模块发送ID信号为0,此时选择子模块选中所述第一加速子模块,从而使得从所述存储介质中读取的数据通过所述第一加速子模块发送至所述主机。
具体的,如果待执行命令是通过第二NVMe协议接口子模块发送至第二加速子模块,则第二加速子模块会通过选择子模块告知介质控制模块,或者由CPU告知介质控制模块。之后,在需要将介质中的数据读取至主机时,介质控制模块就会向选择子模块发送ID信号为1,此时选择子模块选中所述第二加速子模块,从而使得从所述存储介质中读取的数据通过所述第二加速子模块发送至所述主机。
可见,虽然命令的读取和命令的执行的方向是相反的,但是命令的读取和命令的执行是通过同一个通路实现的。
在一个实施例中,所述第二加速器还可以用于:若根据所述第二加速器中存储的解析规则对所述待执行命令进行解析,则将所述待执行命令发送至所述CPU以使所述CPU解析所述待执行命令,并将所述解析结果反馈至所述第二加速器。
可理解的是,如果第二加速器解析不了待执行命令,在将待执行命令发送至CPU,借助CPU对待执行命令进行解析。在第二加速器中存储的是现有或常见的解析规则。CPU中的解析规则可以时常更新、增加,因此CPU中的解析规则比较多,可以实现复杂指令的解析。也就是说,通过第二加速器和CPU结合,实现命令的解析。这种方式可以分担一部分CPU的解析工作。
可理解的是,在双端口模式的双端口NVMe控制器中,两个子控制器分别通过第一接口和第二接口和主机交互。而在单端口模式的双端口NVMe控制器中,两个子控制器都通过第一接口和主机交互。
可理解的是,本发明实施例提供的双端口NVMe控制器中包括第二加速器,用于对命令进行解析,从而减少CPU的解析工作量,可以进一步减少延迟,提高双端口NVMe控制器的性能。
第二方面,本发明实施例提供一种读写命令处理方法,该方法基于第一方面提供的双端口NVMe控制器实现。
在单端口模式下工作的双端口NVMe控制器中,所述方法包括:
1、所述第一加速器在检测到一个NVMe协议接口子模块中的命令状态发生变化时,通过命令状态发生变化的NVMe协议接口子模块、所述第一接口和所述PCIe接口模块向所述主机发送命令获取请求;
2、所述映射子模块在接收到所述主机通过所述PCIe接口模块和所述第一接口返回的命令时,将所述命令通过所述命令状态发生变化的NVMe协议接口子模块发送至所述第一加速器;
3、所述第一加速器将所述命令发送至所述第二加速器,以使所述第二加速器对所述命令进行解析;
4、在解析完成后将所述命令发送至所述CPU,若所述命令为写命令,则所述CPU则控制所述第一加速器通过所述命令状态发生变化的NVMe协议接口子模块发送写入数据获取请求;
5、所述映射子模块在接收到所述主机通过所述PCIe接口模块和所述第一接口返回的待写入数据时,将所述待写入数据通过所述命令状态发生变化的NVMe协议接口子模块发送至所述第一加速器;
6、所述第一加速器将所述待写入数据通过所述介质控制模块写入到所述存储介质中;
7、所述第一加速器在写入完毕后,通过所述命令状态发生变化的NVMe协议接口子模块向主机发送应答消息。
具体的,通过以下过程对上述流程进一步举例说明:
首先主机会将待写入数据保存在主机内存中,将NVMe命令也写入主机内存中。主机通过PCIe接口模块、第一接口向映射子模块发送一个新命令通知信息。映射子模块将该新命令通知信息写入第一NVMe协议接口子模块的IO寄存器2中,使得第一NVMe协议接口子模块的命令状态发生变化。
当第一加速器中的第一加速子模块得知第一NVMe协议接口子模块的命令状态发生变化时,第一加速子模块通过第一NVMe协议接口子模块、映射子模块、第一接口、PCIe接口模块向主机发送命令获取请求,该命令获取请求中携带有第一NVMe协议接口子模块的标识。当主机接收到该命令获取请求后,将命令通过PCIe接口模块、第一接口发送至映射子模块,且使该命令中也携带有第一NVMe协议接口子模块的标识。因此映射子模块嫁给命令发送给第一NVMe协议接口子模块,第一NVMe协议接口子模块将该命令发送给第一加速器中的第一加速子模块。
第一加速子模块将命令发送给第三加速子模块进行解析。解析完成后,会得到当前操作的类型即写操作、待写入数据在主机内存中的地址、待写入数据在存储介质中的写入地址等。第三加速子模块将解析结果保存在自身缓存中。
将解析后的命令被CPU读取,CPU做好准备,例如,准备好介质控制模块中的缓存,之后CPU启动第一加速子模块,第一加速子模块从第三加速子模块中获取解析后得到的主机内存地址,即得知待写入数据在主机内存中的地址。然后第一加速子模块通过第一NVMe协议接口子模块、映射子模块、第一接口、PCIe接口模块向主机发送写入数据获取请求,该请求中也携带有标识。
主机将带有标识的待写入数据通过PCIe接口模块、第一接口发送给映射子模块,映射子模块同样根据标识将待写入数据发送给第一NVMe协议接口子模块,第一NVMe协议接口子模块将待写入数据发送给第一加速子模块。
第一加速子模块将待写入数据通过选择子模块、介质控制模块发送给存储介质,进而实现数据的写入。在所有的数据写入完成后,CPU控制第一加速子模块按原路向主机发送应答消息,以告知主机写入完成。
在一个实施例中,本发明实施例提供的方法还可以包括如下步骤:
8、若所述命令为读命令,则所述CPU控制所述介质控制模块,以使所述介质控制模块将所述存储介质中的待读取数据通过所述介质控制模块发送至所述第一加速器;
9、所述第一加速器将所述待读取数据通过所述命令状态发生变化的NVMe协议接口子模块发送至所述主机,以使所述主机将所述待读取数据写入主机内存中;
10、所述第一加速器在发送完毕后,通过所述命令状态发生变化的NVMe协议接口子模块向主机发送应答消息。
可见,针对读命令,命令的读取过程是一样的,不同之处在于命令的执行。
具体的,通过以下过程对上述流程进一步举例说明:
首先主机会将待写入数据保存在主机内存中,将NVMe命令也写入主机内存中。主机通过PCIe接口模块、第一接口向映射子模块发送一个新命令通知信息。映射子模块将该新命令通知信息写入第一NVMe协议接口子模块的IO寄存器2中,使得第一NVMe协议接口子模块的命令状态发生变化。
当第一加速器中的第一加速子模块得知第一NVMe协议接口子模块的命令状态发生变化时,第一加速子模块通过第一NVMe协议接口子模块、映射子模块、第一接口、PCIe接口模块向主机发送命令获取请求,该命令获取请求中携带有第一NVMe协议接口子模块的标识。当主机接收到该命令获取请求后,将命令通过PCIe接口模块、第一接口发送至映射子模块,且使该命令中也携带有第一NVMe协议接口子模块的标识。因此映射子模块嫁给命令发送给第一NVMe协议接口子模块,第一NVMe协议接口子模块将该命令发送给第一加速器中的第一加速子模块。
第一加速子模块将命令发送给第三加速子模块进行解析。解析完成后,会得到当前操作的类型即读操作、待读取数据可主机写入的地址等。第三加速子模块将解析结果保存在自身缓存中。
将解析后的命令被CPU读取,之后CPU控制所述介质控制模块,使得所述介质控制模块将所述存储介质中的待读取数据通过所述介质控制模块发送至所述第一加速子模块。
第一加速子模块从第三加速子模块中获取写入地址,进而将待读取数据通过第一NVMe协议接口子模块、映射子模块、第一接口、PCIe接口模块发送给主机,并写入对应的主机内存地址中。在写入完成后,CPU可以控制第一加速子模块按照原路向主机发送应答消息。
同样的,针对双端口模式的双端口NVMe控制器中,命令的读取和执行也是类似的,只不过第二NVMe协议接口子模块和主机之间的交互经过的是连接子模块和第二接口,而在单端口模式的双端口NVMe控制器中,第二NVMe协议接口子模块和主机之间的交互经过的是连接子模块、映射子模块和第一接口。
可理解的是,本发明实施例提供的方法中有关内容的解释、具体实施方式、有益效果、举例等内容可以参见第一方面提供的控制器中的相应部分,此处不再赘述。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本领域技术人员应该可以意识到,在上述一个或多个示例中,本发明所描述的功能可以用硬件、软件、挂件或它们的任意组合来实现。当使用软件实现时,可以将这些功能存储在计算机可读介质中或者作为计算机可读介质上的一个或多个指令或代码进行传输。
以上所述的具体实施方式,对本发明的目的、技术方案和有益效果进行了进一步详细说明,所应理解的是,以上所述仅为本发明的具体实施方式而已,并不用于限定本发明的保护范围,凡在本发明的技术方案的基础之上,所做的任何修改、等同替换、改进等,均应包括在本发明的保护范围之内。
Claims (10)
1.一种双端口NVMe控制器,其特征在于,包括:NVMe协议接口模块、第一加速器和第二加速器,其中:
所述第一加速器连接在所述NVMe协议接口模块和所述第二加速器之间;所述NVMe协议接口模块用于连接在PCIe接口模块和所述第一加速器之间;所述PCIe接口模块用于连接主机;所述第一加速器还用于与介质控制模块连接,所述介质控制模块用于连接存储介质;所述第一加速器和所述第二加速器还用于连接CPU;
其中,所述NVMe协议接口模块包括第一NVMe协议接口子模块、第二NVMe协议接口子模块、映射子模块和连接子模块;所述NVMe协议接口模块还包括第一接口和第二接口,所述第一接口和所述第二接口为所述NVMe协议接口模块用于连接PCIe接口模块的两个接口;所述映射子模块连接在所述第一接口和所述第一NVMe协议接口子模块之间;在单端口模式下工作的双端口NVMe控制器中,所述连接子模块连接在所述映射子模块和所述第二NVMe协议接口子模块之间;在双端口模式下工作的双端口NVMe控制器中,所述连接子模块连接在所述第二接口和所述第二NVMe协议接口子模块之间;在单端口模式下工作的双端口NVMe控制器中,所述映射子模块用于:在所述第一接口空闲且同时接收到所述第一NVMe协议接口子模块和所述第二NVMe协议接口子模块发送来的请求时,确定两个请求的先后顺序;
所述第一加速器用于:在检测到一个NVMe协议接口子模块中的命令状态变化时,通过命令状态变化的NVMe协议接口子模块和该NVMe协议接口子模块所连接的接口从所述主机中读取待执行命令,将所述待执行命令发送给第二加速器进行解析,并在解析之后在所述CPU的控制下实现所述主机和所述存储介质之间的数据传输。
2.根据权利要求1所述的双端口NVMe控制器,其特征在于,所述第一加速器包括第一加速子模块和第二加速子模块,所述第一加速子模块和所述第二加速子模块是两个相同的加速子模块;所述第二加速器包括第三加速子模块和第四加速子模块,所述第三加速子模块和所述第四加速子模块是两个相同的加速子模块;所述第一加速子模块和所述第三加速子模块连接,所述第二加速子模块和所述第四加速子模块连接,以实现所述第一加速器和所述第二加速器之间的连接;所述第一加速子模块和第一NVMe协议接口子模块连接,所述第二加速子模块和第二NVMe协议接口子模块连接,以实现第一加速器和NVMe协议接口模块的连接。
3.根据权利要求2所述的双端口NVMe控制器,其特征在于,所述第一加速器还包括选择子模块,所述选择子模块连接所述第一加速子模块和所述第二加速子模块,所述选择子模块还用于连接所述介质控制模块;其中:所述选择子模块用于:在所述第一加速子模块和所述第二加速子模块均需要向所述存储介质传输数据时,选中当前优先级较高的加速子模块进行数据传输,并在该加速子模块传输数据完毕后,设置另一个加速子模块的优先级为更高。
4.根据权利要求3所述的双端口NVMe控制器,其特征在于,
所述选择子模块还用于:接收所述介质控制模块发送来的ID信号,所述ID信号为0,则选中所述第一加速子模块,以使从所述存储介质中读取的数据通过所述第一加速子模块发送至所述主机;若所述ID信号为1,则选中所述第二加速子模块,以使从所述存储介质中读取的数据通过所述第二加速子模块发送至所述主机;
其中,若所述待执行命令通过所述第一NVMe协议接口子模块发送至所述第一加速子模块,则所述ID信号为0;若所述待执行命令通过所述第二NVMe协议接口子模块发送至所述第二加速子模块,则所述ID信号为1。
5.根据权利要求1所述的双端口NVMe控制器,其特征在于,所述映射子模块具体用于:在所述第一接口空闲且同时接收到所述第一NVMe协议接口子模块和所述第二NVMe协议接口子模块发送来的请求时,先将当前优先级较高的NVMe协议接口子模块发送来的请求通过所述第一接口和所述PCIe接口模块发送至所述主机,再将当前优先级较低的NVMe协议接口子模块发送来的请求通过所述第一接口和所述PCIe接口模块发送至所述主机,再将两个NVMe协议接口子模块的优先级互换,使得所述映射子模块在下一次处于空闲同时接收到来自两个NVMe协议接口子模块发送的请求时进行顺序确定。
6.根据权利要求1所述的双端口NVMe控制器,其特征在于,在单端口模式下的双端口NVMe控制器中,所述映射子模块中存储有映射表;所述映射表中的管理寄存器与所述第一NVMe协议接口子模块中的管理寄存器具有映射关系,所述映射表中序号为奇数的IO寄存器与所述第一NVMe协议接口子模块中IO寄存器具有映射关系;所述映射表中序号为偶数的IO寄存器与所述第二NVMe协议接口子模块中IO寄存器具有映射关系;
对应的,所述映射子模块还用于:按照所述映射表中各个IO寄存器的排列顺序依次使能至少一个IO寄存器;在接收到所述主机通过所述PCIe接口模块和所述第一接口发送来的新命令通知信息时,将所述新命令通知信息写入与当前处于使能状态的IO寄存器具有映射关系的NVMe协议接口子模块的IO寄存器中,以使被写入新命令通知信息的NVMe协议接口子模块的命令状态发生变化。
7.根据权利要求6所述的双端口NVMe控制器,其特征在于,在单端口模式下工作的单端口NVMe控制器中,每一个NVMe协议接口子模块还用于:针对所述主机向该NVMe协议接口子模块所写入的新命令通知信息,通过PCIe接口模块和所述第一接口向所述主机发送命令获取请求或写入数据获取请求,并在所述命令获取请求或所述写入数据获取请求中携带有该NVMe协议接口子模块的标识;其中,所述主机针对所述命令获取请求返回的命令或针对所述写入数据获取请求返回的待写入数据中携带有该标识;
对应的,映射子模块还用于:在接收到所述主机发送来的命令或待写入数据时,根据所述命令或所述待写入数据中携带的标识,将所述命令或待写入数据发送至该标识对应的NVMe协议接口子模块中。
8.根据权利要求1所述的双端口NVMe控制器,其特征在于,
所述第二加速器还用于:若根据所述第二加速器中存储的解析规则对所述待执行命令进行解析,则将所述待执行命令发送至所述CPU以使所述CPU解析所述待执行命令,并将解析结果反馈至所述第二加速器。
9.一种读写命令处理方法,其特征在于,该方法基于权利要求1~8任一项所述的双端口NVMe控制器实现,在单端口模式下工作的双端口NVMe控制器中,所述方法包括:
所述第一加速器在检测到一个NVMe协议接口子模块中的命令状态发生变化时,通过命令状态发生变化的NVMe协议接口子模块、所述第一接口和所述PCIe接口模块向所述主机发送命令获取请求;
所述映射子模块在接收到所述主机通过所述PCIe接口模块和所述第一接口返回的命令时,将所述命令通过所述命令状态发生变化的NVMe协议接口子模块发送至所述第一加速器;
所述第一加速器将所述命令发送至所述第二加速器,以使所述第二加速器对所述命令进行解析;
在解析完成后将所述命令发送至所述CPU,若所述命令为写命令,则所述CPU则控制所述第一加速器通过所述命令状态发生变化的NVMe协议接口子模块发送写入数据获取请求;
所述映射子模块在接收到所述主机通过所述PCIe接口模块和所述第一接口返回的待写入数据时,将所述待写入数据通过所述命令状态发生变化的NVMe协议接口子模块发送至所述第一加速器;
所述第一加速器将所述待写入数据通过所述介质控制模块写入到所述存储介质中;
所述第一加速器在写入完毕后,通过所述命令状态发生变化的NVMe协议接口子模块向主机发送应答消息。
10.根据权利要求9所述的方法,其特征在于,所述方法还包括:
若所述命令为读命令,则所述CPU控制所述介质控制模块,以使所述介质控制模块将所述存储介质中的待读取数据通过所述介质控制模块发送至所述第一加速器;
所述第一加速器将所述待读取数据通过所述命令状态发生变化的NVMe协议接口子模块发送至所述主机,以使所述主机将所述待读取数据写入主机内存中;
所述第一加速器在发送完毕后,通过所述命令状态发生变化的NVMe协议接口子模块向主机发送应答消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210947971.1A CN115033186B (zh) | 2022-08-09 | 2022-08-09 | 双端口NVMe控制器及读写命令处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210947971.1A CN115033186B (zh) | 2022-08-09 | 2022-08-09 | 双端口NVMe控制器及读写命令处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN115033186A CN115033186A (zh) | 2022-09-09 |
CN115033186B true CN115033186B (zh) | 2022-11-01 |
Family
ID=83130546
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210947971.1A Active CN115033186B (zh) | 2022-08-09 | 2022-08-09 | 双端口NVMe控制器及读写命令处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN115033186B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108062285A (zh) * | 2014-06-27 | 2018-05-22 | 华为技术有限公司 | 一种访问NVMe存储设备的方法和NVMe存储设备 |
CN111831227A (zh) * | 2020-07-07 | 2020-10-27 | 山东华芯半导体有限公司 | 一种nvme协议命令加速处理系统 |
CN112765055A (zh) * | 2019-11-01 | 2021-05-07 | 北京忆芯科技有限公司 | 存储设备的控制部件 |
CN113468083A (zh) * | 2021-07-02 | 2021-10-01 | 成都忆芯科技有限公司 | 一种双端口NVMe控制器及控制方法 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP3616073A4 (en) * | 2017-05-03 | 2021-02-17 | Eidetic Communications Inc. | DATA ACCELERATION CONTROL APPARATUS AND METHOD |
-
2022
- 2022-08-09 CN CN202210947971.1A patent/CN115033186B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108062285A (zh) * | 2014-06-27 | 2018-05-22 | 华为技术有限公司 | 一种访问NVMe存储设备的方法和NVMe存储设备 |
CN112765055A (zh) * | 2019-11-01 | 2021-05-07 | 北京忆芯科技有限公司 | 存储设备的控制部件 |
CN111831227A (zh) * | 2020-07-07 | 2020-10-27 | 山东华芯半导体有限公司 | 一种nvme协议命令加速处理系统 |
CN113468083A (zh) * | 2021-07-02 | 2021-10-01 | 成都忆芯科技有限公司 | 一种双端口NVMe控制器及控制方法 |
Also Published As
Publication number | Publication date |
---|---|
CN115033186A (zh) | 2022-09-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US20210182221A1 (en) | Novel ssd architecture for fpga based acceleration | |
JP4799417B2 (ja) | ホストコントローラ | |
US6996659B2 (en) | Generic bridge core | |
US6850998B2 (en) | Disk array system and a method for controlling the disk array system | |
US20240119014A1 (en) | Novel ssd architecture for fpga based acceleration | |
US7970959B2 (en) | DMA transfer system using virtual channels | |
US20070147522A1 (en) | Integrated circuit capable of independently operating a plurality of communication channels | |
CN113590528A (zh) | 基于hp接口的多通道数据采集存储回放卡、系统及方法 | |
CN112131174A (zh) | 支持在多个芯片之间通信的方法、装置、电子设备和计算机存储介质 | |
CN115827524A (zh) | 一种数据传输方法以及装置 | |
US7409486B2 (en) | Storage system, and storage control method | |
US20070083708A1 (en) | Controller of redundant arrays of independent disks and operation method thereof | |
US8756356B2 (en) | Pipe arbitration using an arbitration circuit to select a control circuit among a plurality of control circuits and by updating state information with a data transfer of a predetermined size | |
JP3578075B2 (ja) | ディスクアレイ制御装置及びディスクアレイ制御方法 | |
CN115033186B (zh) | 双端口NVMe控制器及读写命令处理方法 | |
US7257680B2 (en) | Storage system including shared memory and plural disk drives, processors, and shared memory control units | |
US6633927B1 (en) | Device and method to minimize data latency and maximize data throughput using multiple data valid signals | |
CN115883022B (zh) | Dma传输控制方法、装置、电子设备及可读存储介质 | |
US9985873B1 (en) | Data storage system providing asymmetric multipath storage access | |
CN109992539B (zh) | 双主机协同工作装置 | |
US6523077B1 (en) | Data processing apparatus and data processing method accessing a plurality of memories in parallel | |
US20060277326A1 (en) | Data transfer system and method | |
CN116932451A (zh) | 一种数据处理方法、主机及相关设备 | |
CN114327248A (zh) | 存储节点、存储设备及网络芯片 | |
JP4025032B2 (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 | ||
GR01 | Patent grant | ||
GR01 | Patent grant |