一种nvme协议多命令队列的实现方法及系统的制作方法

文档序号:8223306阅读:478来源:国知局
一种nvme协议多命令队列的实现方法及系统的制作方法
【技术领域】
[0001] 本发明涉及NVME协议优化,特别是涉及一种扩充NVME协议多命令队列的实现方 法及系统。
【背景技术】
[0002] NVME是专为企业级和客户端系统设计的采用PCIe固态硬盘的可扩展的主机控 制器接口,其中包括优化的寄存器接口和命令集。从根本上讲,NVME是一个优化的队列接 口,主机将命令提交到队列,由队列来完成对数据的读取或写入,不按主机命令提交的时间 顺序。并且,其有一个专门管理队列的组件来完成队列的创建、删除、命令中止、安全等操 作。在现有的固态硬盘控制芯片中,NVME协议因为其低延迟、节能、CPU性能释放并打破 IOPS(Input/Output Operat ions Per Second,即每秒进行读写(I/O)操作的次数)瓶颈 等特点,迅速成为配合PCIE最合适的接口协议,也是未来固态硬盘控制芯片的主流技术。
[0003] NVME协议支持多个并行命令队列,最大64K个命令队列,而其针对每个命令队列 又有队列信息要保存,所以在实现NVME协议时,需要为对每个队列开辟一片空间,这样多 支持一个队列就要多消耗一部分存储资源,就会导致最终能支持的队列个数有限。图1是 命令队列单独开辟空间的实现方式,控制器从主机端接收NVME命令后,NVME命令选择合适 的已开设的命令队列进行入队操作,LOCAL CPU再从各个命令队列中选取当前需要执行的 NVME队列。每一个NVME命令是64Byte,即使每个队列只缓存32个命令,为支持一个队列 的开销也需要2Kbyte的存储空间,所以目前已经开发的NVME模块中支持的队列个数都在 16个以下,由于存储空间的限制,支持的命令队列个数实际都非常小,远无法达到理论支持 的个数。

【发明内容】

[0004] 针对以上缺陷,本发明目的在于如何解决由于存储空间的限制造成NVME协议无 法实际支持的多命令队列的问题。
[0005] 为了实现上述目的,本发明提供了一种NVME协议多命令队列的实现方法,其特征 在于将命令队列的命令和队列信息分开存放,设置统一的命令存储缓存存放各个命令队列 的元素对应的具体命令和该命令对应的队列号,设置队列信息表存放Host端目前存在的 每个队列的队列信息,SSD控制器按顺序执行具体命令时,根据具体命令对应的队列号从队 列信息表中查寻对应的队列信息。
[0006] 所述的NVME协议多命令队列的实现方法,其特征在于由SSD控制器主动从Host 的命令队列中读取。
[0007] 所述的NVME协议多命令队列的实现方法,其特征在于命令存储缓存缓存于SSD控 制器内部。
[0008] 所述的NVME协议多命令队列的实现方法,其特征在于所述队列信息包括队列起 始地址、队列号、队列大小、队列优先级、队列head doorbell和队列物理连续信息。
[0009] 同时还提供了一种实现NVME协议多命令队列的系统,其特征在于设有:命令获 取模块、命令接收模块,命令存储区域和队列信息表区域,命令获取模块,用于负责主动从 Host端命令队列中读取命令,并更新保存的命令队列信息;命令接收模块处理负责将接收 到的命令与命令对应的队列号写入统一的命令存储区域;队列信息表负责保存命令队列信 息;实现将命令队列的命令和队列信息分开存放。
[0010] 所述的实现NVME协议多命令队列的系统,其特征在于所述队列信息包括队列起 始地址、队列号、队列大小、队列优先级、队列headdoorbell和队列物理连续信息。
[0011] 本发明针对由于存储空间的限制,实际系统支持的NVME协议命令队列个数较小 的问题,本发明提出了主动从Host端命令队列读取命令,在控制器内部开辟统一命令存储 区域来存放这些命令,然后在执行命令时查表获得命令队列信息的实现方法。这样的好处 在于控制芯片增加一个命令队列的支持所消耗的存储资源非常小,所以可以支持非常大的 命令队列个数,可以极大程度的提高I0PS。
【附图说明】
[0012] 图1是命令队列单独开辟空间的实现方式示意图;
[0013] 图2是实现NVME协议多命令队列的系统框图。
【具体实施方式】
[0014] 下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完 整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于 本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他 实施例,都属于本发明保护的范围。
[0015] 图2是实现NVME协议多命令队列的系统框图,相较于命令队列单独开辟空间的实 现方式,本发明将获取的所有命令存入统一的命令存储区域中;同时开辟空间作为队列信 息表,保存各命令队列的相关信息。
[0016] 队列信息表QUEUE_INF_TABLE中存放着每个命令队列的相关信息,一个命令队列 信息包括队列起始地址、队列号、队列大小、队列优先级、队列headdoorbel1和队列物 理连续信息;命令存储区域CMD_BUFFER内存放从Host获取的命令及该命令对应的序列 号;命令获取模块GET_CMD负责主动从Host主机端命令队列中读取命令,并将所读取命令 对应的序列号告知命令接收模块,在命令获取之后还要更新命令队列信息中的队列head doorbell;命令接收模块CMD_RECV处理负责将接收到的命令与命令对应的队列号写入统 一的命令存储区域中。
[0017] 实际操作时,CPU首先在队列信息表中为每一个命令队列创建队列信息单元;然 后由命令获取模块主动从Host端命令队列中读取命令,告知命令接收模块所要接收的命 令序列号,并在命令返回后更新队列信息单元中的队列headdoorbell;返回的命令及其队 列号由命令接收模块写入统一的命令存储区域中,供CPU做排序和批量处理。
[0018] 命令执行过程中,CPU和其他模块可以根据队列号从队列信息表中查寻该队列信 息。
[0019] 具体实施时,如增加对一个命令队列的支持,只需要在命令队列表中增加一个队 列信息单元即可,目前这个单元消耗的资源如下表所示:
【主权项】
1. 一种NVME协议多命令队列的实现方法,其特征在于将命令队列的命令和队列信息 分开存放,设置统一的命令存储缓存存放各个命令队列的元素对应的具体命令和该命令对 应的队列号,设置队列信息表存放化St端目前存在的每个队列的队列信息,SSD控制器按 顺序执行具体命令时,根据具体命令对应的队列号从队列信息表中查寻对应的队列信息。
2. 根据权利要求1所述的NVME协议多命令队列的实现方法,其特征在于由SSD控制器 主动从化St的命令队列中读取。
3. 根据权利要求2所述的NVME协议多命令队列的实现方法,其特征在于命令存储缓存 缓存于SSD控制器内部。
4. 根据权利要求3所述的NVME协议多命令队列的实现方法,其特征在于所述队列信息 包括队列起始地址、队列号、队列大小、队列优先级、队列head doorbell和队列物理连续信 息。
5. -种实现NVME协议多命令队列的系统,其特征在于设有;命令获取模块、命令接收 模块,命令存储区域和队列信息表区域,命令获取模块,用于负责主动从化St端命令队列 中读取命令,并更新保存的命令队列信息;命令接收模块处理负责将接收到的命令与命令 对应的队列号写入统一的命令存储区域;队列信息表负责保存命令队列信息;实现将命令 队列的命令和队列信息分开存放。
6. 根据权利要求5所述的实现NVME协议多命令队列的系统,其特征在于所述队列信息 包括队列起始地址、队列号、队列大小、队列优先级、队列head doorbell和队列物理连续信 息。
【专利摘要】本发明公开了一种NVME协议多命令队列的实现方法,将命令队列的命令和队列信息分开存放,设置统一的命令存储缓存存放各个命令队列的元素对应的具体命令和该命令对应的队列号,设置队列信息表存放Host端目前存在的每个队列的队列信息,SSD控制器按顺序执行具体命令时,根据具体命令对应的队列号从队列信息表中查寻对应的队列信息。同时还实现了一种实现NVME协议多命令队列的系统。通过主动从Host端命令队列读取命令,在控制器内部开辟统一命令存储区域来存放这些命令,在执行命令时查表获得命令队列信息。这样的好处在于控制芯片增加一个命令队列的支持所消耗的存储资源非常小,可以支持非常大的命令队列个数,可以极大程度的提高IOPS。
【IPC分类】G06F3-06, G06F13-38
【公开号】CN104536701
【申请号】CN201410811135
【发明人】黄毅, 黄运新, 董剑
【申请人】记忆科技(深圳)有限公司
【公开日】2015年4月22日
【申请日】2014年12月23日
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1