在线咨询
eetop公众号 创芯大讲堂 创芯人才网
切换到宽版

EETOP 创芯网论坛 (原名:电子顶级开发网)

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

快捷导航
搜帖子
查看: 91|回复: 0

[原创] NVMe控制器之队列管理

[复制链接]
发表于 昨天 16:18 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

x
队列管理模块是整个NVMe Host控制器的核心模块,该模块实现了提交队列与完成队列的管理,多队列请求的仲裁判决等功能。队列管理模块中含有数据选择单元、SQ、CQ、和仲裁器等模块。其中Admin SQ与IO SQ的内部结构一致,包含状态机、BRAM、Tail REG和Head REG。Admin CQ与IO CQ的内部结构一致,包含状态机、Tail REG和Head REG。队列管理模块框图如图1所示。
nvme控制器1.png
                              
图1 队列管理模块框图
在NVMe协议中,使用队列来传输、缓存和处理命令条目,以实现Host端和NVMe SSD端之间的通信。在CPU上运行NVMe软件协议栈,其Host端生成提交命令的速度远大于NVMe SSD的执行速度,同时由于CPU的指令是顺序执行的,需要通过中断来通知CPU去处理完成信息。因此,通过增加提交队列和完成队列的深度可以提高系统的传输性能。
本设计利用FPGA的并行处理能力来加速NVMe Host端的控制流程。相较于软件协议栈,通过硬件电路生成提交命令的速度更快,并且能够通过并行操作去实时检查返回的完成信息,从而避免了采用中断来通知CPU去处理完成信息而造成延迟较大的问题。本设计主要针对顺序读写场景进行了资源方面的优化。考虑到在顺序读写情况下,传输性能与队列深度的大小无关,且硬件逻辑生成NVMe命令的速度要远大于软件协议栈生成NVMe命令的速度,因此通过增加提交队列和完成队列的深度来提高系统的传输性能的方法不再可行,本设计将提交队列深度设置为NVMe SSD一次突发读取的数据量大小,这样在保证性能的前提下,可以尽可能的减少资源的消耗。此外,取消了完成队列缓存的设计,对完成信息的解析工作通过组合逻辑电路对其进行实时检测,而不用通过中断来通知NVMe Host检查,从而可以提高NVMe命令的执行效率,并节省了大量的存储资源。
提交队列内部由一个双端口RAM、两个寄存器和一个状态机构成。其中,提交队列分为Admin提交队列和I/O提交队列,分别用于管理Admin命令和I/O命令。虽然这两个队列针对的命令条目不同,但其内部结构相同。因此,通过采用相同的设计来实现两个队列,以提高代码的复用性和可维护性。双端口RAM使用BRAM资源实现,包括两个128位宽、深度可配置的端口,用于实现NVMe命令的缓存。四个控制寄存器用于监测队列状态,包括Head指针和Tail指针。Head指针指向队列中下一个被执行的命令的位置,Tail指针指向队列中下一个空位置,新产生的命令条目总是被写入Tail所指向的位置。当同一个队列的Head指针等于Tail指针加1时,表示队列为满;当Head指针等于Tail指针时,表示队列为空。该模块中的状态机用来实现门铃寄存器信息更新的流程控制工作。队列管理状态机的跳转图如图2所示。
图2队列管理状态机跳转图
各状态说明如下:
IDLE:空闲状态,该状态为模块上电后的初始化状态,该状态下检测到s_axis_entry_valid信号有效时,表示有提交命令传输至队列管理模块,状态跳转至RD_SQ_REG状态,否则维持当前IDLE状态。
RD_SQ_REG:读提交队列寄存器状态,该状态下读取提交队列中的cmd_cnt寄存器,cmd_cnt寄存器负责记录队列中缓存的命令数,即SQ Head指针与SQ Tail指针之差,当cmd_cnt寄存器的值大于10时向仲裁器发起更新门铃寄存器请求,这里设置为10主要是考虑到减少NVMe Host控制器和NVMe SSD之间的数据交互次数,让其通过突发传输一次读取多条命令,来达到提升系统性能的效果,同时,为了解决长时间没有接收到新的提交命令使得小于10条命令无法发送的情况,添加了超时机制,当计时计数器达到一定值时,不再等待cmd_cnt满足条件,直接跳转至SC_REQ状态,否则维持当前状态。

对相关视频感兴趣的请移步B站,搜用户名:  专注与守望

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐 上一条 /2 下一条

小黑屋| 手机版| 关于我们| 联系我们| 隐私声明| EETOP 创芯网
( 京ICP备:10050787号 京公网安备:11010502037710 )

GMT+8, 2025-5-4 07:22 , Processed in 0.012973 second(s), 7 queries , Gzip On, MemCached On.

eetop公众号 创芯大讲堂 创芯人才网
快速回复 返回顶部 返回列表