CN104536701B - 一种nvme协议多命令队列的实现方法及*** - Google Patents
一种nvme协议多命令队列的实现方法及*** Download PDFInfo
- Publication number
- CN104536701B CN104536701B CN201410811135.6A CN201410811135A CN104536701B CN 104536701 B CN104536701 B CN 104536701B CN 201410811135 A CN201410811135 A CN 201410811135A CN 104536701 B CN104536701 B CN 104536701B
- Authority
- CN
- China
- Prior art keywords
- queue
- order
- command
- queuing message
- nvme
- 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
Landscapes
- Telephonic Communication Services (AREA)
Abstract
本发明公开了一种NVME协议多命令队列的实现方法,将命令队列的命令和队列信息分开存放,设置统一的命令存储缓存存放各个命令队列的元素对应的具体命令和该命令对应的队列号,设置队列信息表存放Host端目前存在的每个队列的队列信息,SSD控制器按顺序执行具体命令时,根据具体命令命令对应的队列号从队列信息表中查寻对应的队列信息。同时还实现了一种实现NVME协议多命令队列的***。通过主动从Host端命令队列读取命令,在控制器内部开辟统一命令存储区域来存放这些命令,在执行命令时查表获得命令队列信息。这样的好处在于控制芯片增加一个命令队列的支持所消耗的存储资源非常小,可以支持非常大的命令队列个数,可以极大程度的提高IOPS。
Description
技术领域
本发明涉及NVME协议优化,特别是涉及一种扩充NVME协议多命令队列的实现方法及***。
背景技术
NVME是专为企业级和客户端***设计的采用PCIe固态硬盘的可扩展的主机控制器接口,其中包括优化的寄存器接口和命令集。从根本上讲,NVME是一个优化的队列接口,主机将命令提交到队列,由队列来完成对数据的读取或写入,不按主机命令提交的时间顺序。并且,其有一个专门管理队列的组件来完成队列的创建、删除、命令中止、安全等操作。在现有的固态硬盘控制芯片中,NVME协议因为其低延迟、节能、CPU性能释放并打破IOPS(Input/Output Operat ions Per Second,即每秒进行读写(I/O)操作的次数)瓶颈等特点,迅速成为配合PCIE最合适的接口协议,也是未来固态硬盘控制芯片的主流技术。
NVME协议支持多个并行命令队列,最大64K个命令队列,而其针对每个命令队列又有队列信息要保存,所以在实现NVME协议时,需要为对每个队列开辟一片空间,这样多支持一个队列就要多消耗一部分存储资源,就会导致最终能支持的队列个数有限。图1是命令队列单独开辟空间的实现方式,控制器从主机端接收NVME命令后,NVME命令选择合适的已开设的命令队列进行入队操作,LOCAL CPU再从各个命令队列中选取当前需要执行的NVME队列。每一个NVME命令是64Byte,即使每个队列只缓存32个命令,为支持一个队列的开销也需要2Kbyte的存储空间,所以目前已经开发的NVME模块中支持的队列个数都在16个以下,由于存储空间的限制,支持的命令队列个数实际都非常小,远无法达到理论支持的个数。
发明内容
针对以上缺陷,本发明目的在于如何解决由于存储空间的限制造成NVME协 议无法实际支持的多命令队列的问题。
为了实现上述目的,本发明提供了一种NVME协议多命令队列的实现方法,其特征在于将命令队列的命令和队列信息分开存放,设置统一的命令存储缓存存放各个命令队列的元素对应的具体命令和该命令对应的队列号,设置队列信息表存放Host端目前存在的每个队列的队列信息,SSD控制器按顺序执行具体命令时,根据具体命令对应的队列号从队列信息表中查寻对应的队列信息。
所述的NVME协议多命令队列的实现方法,其特征在于由SSD控制器主动从Host的命令队列中读取。
所述的NVME协议多命令队列的实现方法,其特征在于命令存储缓存缓存于SSD控制器内部。
所述的NVME协议多命令队列的实现方法,其特征在于所述队列信息包括队列起始地址、队列号、队列大小、队列优先级、队列head doorbell和队列物理连续信息。
同时还提供了一种实现NVME协议多命令队列的***,其特征在于设有:命令获取模块、命令接收模块,命令存储区域和队列信息表区域,命令获取模块,用于负责主动从Host端命令队列中读取命令,并更新保存的命令队列信息;命令接收模块处理负责将接收到的命令与命令对应的队列号写入统一的命令存储区域;队列信息表负责保存命令队列信息;实现将命令队列的命令和队列信息分开存放。
所述的实现NVME协议多命令队列的***,其特征在于所述队列信息包括队列起始地址、队列号、队列大小、队列优先级、队列head doorbell和队列物理连续信息。
本发明针对由于存储空间的限制,实际***支持的NVME协议命令队列个数较小的问题,本发明提出了主动从Host端命令队列读取命令,在控制器内部开辟统一命令存储区域来存放这些命令,然后在执行命令时查表获得命令队列信息的实现方法。这样的好处在于控制芯片增加一个命令队列的支持所消耗的存储资源非常小,所以可以支持非常大的命令队列个数,可以极大程度的提高 IOPS。
附图说明
图1是命令队列单独开辟空间的实现方式示意图;
图2是实现NVME协议多命令队列的***框图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图2是实现NVME协议多命令队列的***框图,相较于命令队列单独开辟空间的实现方式,本发明将获取的所有命令存入统一的命令存储区域中;同时开辟空间作为队列信息表,保存各命令队列的相关信息。
队列信息表QUEUE_INF_TABLE中存放着每个命令队列的相关信息,一个命令队列信息包括队列起始地址、队列号、队列大小、队列优先级、队列head doorbel l和队列物理连续信息;命令存储区域CMD_BUFFER内存放从Host获取的命令及该命令对应的序列号;命令获取模块GET_CMD负责主动从Host主机端命令队列中读取命令,并将所读取命令对应的序列号告知命令接收模块,在命令获取之后还要更新命令队列信息中的队列headdoorbell;命令接收模块CMD_RECV处理负责将接收到的命令与命令对应的队列号写入统一的命令存储区域中。
实际操作时,CPU首先在队列信息表中为每一个命令队列创建队列信息单元;然后由命令获取模块主动从Host端命令队列中读取命令,告知命令接收模块所要接收的命令序列号,并在命令返回后更新队列信息单元中的队列head doorbell;返回的命令及其队列号由命令接收模块写入统一的命令存储区域中,供CPU做排序和批量处理。
命令执行过程中,CPU和其他模块可以根据队列号从队列信息表中查寻该队列信息。
具体实施时,如增加对一个命令队列的支持,只需要在命令队列表中增加一 个队列信息单元即可,目前这个单元消耗的资源如下表所示:
从上表可以看出,只需要增加115bit,就可以增加对一个队列的支持;所以支持1024个队列,也只需要增加15Kbyte不到的存储空间即可。而如果区分队列来存储命令,一个NVME命令是64Byte,即使只缓存32个命令,为支持一个队列的开销也需要2Kbyte的存储空间,两者资源消耗比大于128:1。可根据实际***的需要对队列信息单元各个元素占用的空间做调整。
同时采用该机制对于性能方面也有较大的提升,比较完了消耗之后,因为在命令获取部分,最重要的是获取足够多的命令给CPU做排序和批量处理,因为本发明采用了统一命令存储区域,所以该存储空间的深度也是可以大于单独按队列设计的命令存储空间,所以可以向CPU提供的命令大于按照独立队列实现的设计,因此性能也是明显高于独立队列实现的设计。
此外,本发明会在命令执行时,增加一个查队列信息表的步骤,虽然单独看一个命令的执行会增加几个时钟周期,但是在命令pipeline执行时,是没有明显延时的。
以上所揭露的仅为本发明一种实施例而已,当然不能以此来限定本之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于本发明所涵盖的范围。
Claims (6)
1.一种NVME协议多命令队列的实现方法,其特征在于将命令队列的命令和队列信息分开存放,设置统一的命令存储缓存存放各个命令队列的元素对应的具体命令和该命令对应的队列号,设置队列信息表存放Host端目前存在的每个队列的队列信息,SSD控制器按顺序执行具体命令时,根据具体命令对应的队列号从队列信息表中查寻对应的队列信息。
2.根据权利要求1所述的NVME协议多命令队列的实现方法,其特征在于由SSD控制器主动从Host的命令队列中读取。
3.根据权利要求2所述的NVME协议多命令队列的实现方法,其特征在于命令存储缓存缓存于SSD控制器内部。
4.根据权利要求3所述的NVME协议多命令队列的实现方法,其特征在于所述队列信息包括队列起始地址、队列号、队列大小、队列优先级、队列head doorbell和队列物理连续信息。
5.一种实现NVME协议多命令队列的***,其特征在于设有:命令获取模块、命令接收模块、 命令存储区域和队列信息表区域,命令获取模块用于负责主动从Host端命令队列中读取命令,并更新保存的命令队列信息;命令接收模块处理负责将接收到的命令与命令对应的队列号写入统一的命令存储区域;队列信息表负责保存命令队列信息;实现将命令队列的命令和队列信息分开存放。
6.根据权利要求5所述的实现NVME协议多命令队列的***,其特征在于所述队列信息包括队列起始地址、队列号、队列大小、队列优先级、队列head doorbell和队列物理连续信息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410811135.6A CN104536701B (zh) | 2014-12-23 | 2014-12-23 | 一种nvme协议多命令队列的实现方法及*** |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410811135.6A CN104536701B (zh) | 2014-12-23 | 2014-12-23 | 一种nvme协议多命令队列的实现方法及*** |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104536701A CN104536701A (zh) | 2015-04-22 |
CN104536701B true CN104536701B (zh) | 2018-02-06 |
Family
ID=52852236
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410811135.6A Active CN104536701B (zh) | 2014-12-23 | 2014-12-23 | 一种nvme协议多命令队列的实现方法及*** |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104536701B (zh) |
Families Citing this family (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106569736B (zh) * | 2015-10-10 | 2018-10-19 | 北京忆芯科技有限公司 | NVMe协议处理器及其处理方法 |
CN106775434B (zh) | 2015-11-19 | 2019-11-29 | 华为技术有限公司 | 一种NVMe网络化存储的实现方法、终端、服务器及*** |
CN107045483B (zh) * | 2016-02-05 | 2019-10-18 | 北京忆恒创源科技有限公司 | 基于队列的消息交换方法及其装置 |
CN105892945B (zh) * | 2016-03-30 | 2019-09-20 | 深圳忆联信息***有限公司 | 一种信息更新方法及电子设备 |
US10379745B2 (en) * | 2016-04-22 | 2019-08-13 | Samsung Electronics Co., Ltd. | Simultaneous kernel mode and user mode access to a device using the NVMe interface |
CN107526695B (zh) * | 2016-06-20 | 2021-03-02 | 北京忆芯科技有限公司 | NVMe配置空间实现方法与装置 |
CN107526696B (zh) * | 2016-06-20 | 2020-12-29 | 北京忆芯科技有限公司 | 软件定义的sr-iov模块 |
CN111352873B (zh) * | 2016-06-30 | 2021-10-08 | 北京忆芯科技有限公司 | NVMe协议命令处理方法与装置 |
CN107992436B (zh) * | 2016-10-26 | 2021-04-09 | 华为技术有限公司 | 一种NVMe数据读写方法及NVMe设备 |
EP3358456A4 (en) * | 2016-12-05 | 2018-08-08 | Huawei Technologies Co., Ltd. | Control method, storage device and system for data read/write command in nvme over fabric architecture |
CN107077426B (zh) * | 2016-12-05 | 2019-08-02 | 华为技术有限公司 | NVMe over Fabric架构中数据读写命令的控制方法、设备和*** |
CN108369530B (zh) * | 2016-12-05 | 2021-06-15 | 华为技术有限公司 | 非易失性高速传输总线架构中数据读写命令的控制方法、设备和*** |
CN107861894B (zh) * | 2017-11-03 | 2021-08-31 | 郑州云海信息技术有限公司 | NVMe协议的队列命令的执行方法、装置及存储介质 |
CN109976661B (zh) * | 2017-12-27 | 2020-08-14 | 华为技术有限公司 | 基于nof的读取控制方法、装置及*** |
CN108549610B (zh) * | 2018-03-27 | 2021-02-23 | 深圳忆联信息***有限公司 | 一种NVMe扩展的实现方法及固态硬盘 |
CN111736779B (zh) * | 2018-04-25 | 2022-01-11 | 上海忆芯实业有限公司 | Nvm接口命令的优化执行方法与装置 |
CN109165105A (zh) * | 2018-08-17 | 2019-01-08 | 郑州云海信息技术有限公司 | 一种主机和物理机*** |
CN112015527B (zh) * | 2019-05-29 | 2024-03-22 | 闪迪技术有限公司 | 管理从提交队列获取和执行命令 |
CN111857579B (zh) * | 2020-06-30 | 2024-02-09 | 广东浪潮大数据研究有限公司 | 一种ssd盘片控制器复位方法、***、装置及可读存储介质 |
CN111831227A (zh) * | 2020-07-07 | 2020-10-27 | 山东华芯半导体有限公司 | 一种nvme协议命令加速处理*** |
CN111831226B (zh) * | 2020-07-07 | 2023-09-29 | 山东华芯半导体有限公司 | 一种自主输出nvme协议命令加速处理方法 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678201A (zh) * | 2012-09-21 | 2014-03-26 | Plx科技公司 | 具有逻辑设备能力的pci express切换器 |
CN103970688A (zh) * | 2013-02-04 | 2014-08-06 | Lsi公司 | 缩短数据存储***中写入等待时间的方法和*** |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20130086311A1 (en) * | 2007-12-10 | 2013-04-04 | Ming Huang | METHOD OF DIRECT CONNECTING AHCI OR NVMe BASED SSD SYSTEM TO COMPUTER SYSTEM MEMORY BUS |
US10360176B2 (en) * | 2012-01-17 | 2019-07-23 | Intel Corporation | Techniques for command validation for access to a storage device by a remote client |
-
2014
- 2014-12-23 CN CN201410811135.6A patent/CN104536701B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103678201A (zh) * | 2012-09-21 | 2014-03-26 | Plx科技公司 | 具有逻辑设备能力的pci express切换器 |
CN103970688A (zh) * | 2013-02-04 | 2014-08-06 | Lsi公司 | 缩短数据存储***中写入等待时间的方法和*** |
Non-Patent Citations (1)
Title |
---|
多通道固态盘***的设计与实现;樊旭光;《中国优秀硕士学位论文全文数据库信息科技辑》;20130715;第4.2节,图4-6 * |
Also Published As
Publication number | Publication date |
---|---|
CN104536701A (zh) | 2015-04-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104536701B (zh) | 一种nvme协议多命令队列的实现方法及*** | |
US11307769B2 (en) | Data storage method, apparatus and storage medium | |
KR102147356B1 (ko) | 캐시 메모리 시스템 및 그 동작방법 | |
USRE45097E1 (en) | High speed memory and input/output processor subsystem for efficiently allocating and using high-speed memory and slower-speed memory | |
US9690705B1 (en) | Systems and methods for processing data sets according to an instructed order | |
TWI400617B (zh) | 無線傳輸之排程及資料快取 | |
US8244984B1 (en) | System and method for cleaning dirty data in an intermediate cache using a data class dependent eviction policy | |
JP4275085B2 (ja) | 情報処理装置、情報処理方法、およびデータストリーム生成方法 | |
US20150127691A1 (en) | Efficient implementations for mapreduce systems | |
US9244980B1 (en) | Strategies for pushing out database blocks from cache | |
CN105589664B (zh) | 虚拟存储高速传输方法 | |
CN105224255B (zh) | 一种存储文件管理方法及装置 | |
CN104580437A (zh) | 一种云存储客户端及其高效数据访问方法 | |
US9690713B1 (en) | Systems and methods for effectively interacting with a flash memory | |
US20170039002A1 (en) | Memory device that changes execution order of commands | |
CN103150395A (zh) | 基于ssd的文件***目录路径解析方法 | |
CN110058816A (zh) | 一种基于ddr的高速多用户队列管理器及方法 | |
CN102314400A (zh) | 一种分散聚合式dma方法及装置 | |
US10740029B2 (en) | Expandable buffer for memory transactions | |
US9733988B1 (en) | Systems and methods to achieve load balancing among a plurality of compute elements accessing a shared memory pool | |
CN106201918A (zh) | 一种基于大数据量和大规模缓存快速释放的方法和*** | |
Ji et al. | An I/O scheduling strategy for embedded flash storage devices with mapping cache | |
CN106598502A (zh) | 数据存储方法和*** | |
CN110096456A (zh) | 一种高速率大容量缓存方法与装置 | |
JP7010922B2 (ja) | フォワーディングエントリアクセス |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |