NVMe 队列管理模块设计1

NVMe 队列管理模块设计

什么是队列管理模块

队列管理模块是NVMe控制器的核心模块,将负责NVMe指令控制流程中的多个环节,将原本位于CPU内存中的提交队列和完成队列改为由PL端的硬件逻辑实现。通过硬件逻辑模块实现队列管理控制,提高处理能力,使队列和指令的管理效率得以提高。主要包括以下几个功能:
(1)管理多个提交队列以及完成队列。通过分析本课题项目性能指标,针对大容量的数据存储需求,并且为了满足读写速率至少为1500MBps的要求,NVMe控制器将包含1组Admin提交/完成队列以及4组I/O提交/完成队列,通过多队列并行工作提高传输速率。指令组装完成后,队列管理模块提取Admin提交指令FIFO或I/O提交指令FIFO中的新指令,并检查分析各队列实时的信用值情况,采取最优的存放策略以确定指令将要存放的提交队列。同时,SSD端返回的完成信息也将通过队列管理模块进行判断后放入对应的完成队列中。并且,提交指令和完成信息存放入队列中时,将实时更新对应队列的信用值,表示指令存储空间被占用或是得到释放。
(2)实时监控多个提交和完成队列的存放情况,当其中任意队列满足请求仲裁条件后,将控制相应队列发出请求仲裁信号。
(3)通过Round-Robin循环仲裁机制实现对多个提交队列和完成队列的仲裁请求进行判断及授权操作。获得仲裁授权的队列将发送其当前队列的门铃信息至后续模块进行处理。

队列管理模块结构

队列管理模块结构如图1所示。

在这里插入图片描述
首先,若Admin提交指令FIFO非空,且Admin提交队列剩余信用值不为零,队列管理模块将提取FIFO中的新指令,直接放入Admin提交队列,并且此时Admin提交队列的信用值将减一以用来表示该提交队列的剩余指令存储空间减少;若I/O提交指令FIFO非空,则将根据各个I/O提交队列当前的信用值情况和预设的存放策略来选择指令将要存放的I/O提交队列。在本课题的设计中,将采用带权重的存放策略,即对不同的I/O提交队列赋予不同的权值。在I/O指令存放时,若有多个I/O提交队列的剩余信用值大于零,则将I/O指令优先存放至权值最高的I/O提交队列,且对应I/O提交队列的信用值将减一以表示I/O指令存储空间减少。若所有I/O队列剩余信用值皆为零,则此时队列管理模块将停止获取I/O提交指令FIFO。本课题采用带权值提交队列的存放策略主要根据以下因素进行考虑,通过判断权重的高低,能够将多个I/O提交指令尽可能的放入同一个队列中来降低仲裁请求的频率以及仲裁授权在不同队列之间频繁切换次数,能够有效提升整个模块的性能、降低NVMe控制器延时并通过减少切换频率使模块功耗能够有所降低。NVMe控制器中不同I/O提交队列所分配的权重由高到低依次为IO1、IO2、IO3、IO4。
由于SSD内部控制器调度机制的实际策略选择不同,可能导致提交指令乱序执行,因此需要给队列中的每个提交指令分配独特的命令ID号,防止队列错误释放尚未执行完成的指令存储空间。因此,当指令确定将要存放的提交队列之后,队列管理模块将从对应提交队列命令ID号寄存器的最低位开始检查空闲的指令存放空间位置,并将寄存器空闲位置所对应的ID号分配给提交指令。同时,队列管理模块将根据完成信息中DW3的队列ID号以及DW4中所携带的命令ID号,释放所对应的提交队列中指定的存放空间。命令ID号的分配原理如图2所示。
图2命令ID号的分配原理

NVMe host IP 效果见 视频demo (B站 搜 NVMe IP):
https://search.bilibili.com/all?keyword=nvme%20ip&from_source=nav_search_new

目前优化设计,支持DDR或BRAM方式实现NVMe Host IP,速度进一步提升。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值