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

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

找回密码

  登录   注册  

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

[原创] NVMe控制器之架构讨论

[复制链接]
发表于 3 小时前 | 显示全部楼层 |阅读模式

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

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

x
NVMe 控制模块负责实现用户请求事务与 NVMe 事务的转换、 NVMe 命令提交与完成机制、 PRP 寻址机制。 在 NoP 逻辑加速引擎中, 用户通过配置系统控制模块的相关寄存器来发送 DMA 或队列管理请求, NVMe 控制模块在得到任务信息后生成对应的 NVMe 命令, 并通过指令提交与完成机制实现与 NVMe SSD 的任务交互。NVMe 控制模块一方面通过硬件实现降低了命令交互的延迟和 PRP 寻址机制的过程延迟, 另一方面通过结构的设计继承了软件协议栈的灵活性, 这使得系统即使在不同的应用场景下也能充分发挥性能优势。 如图 1 所示 NVMe 控制模块按照功能划分为命令控制模块、 队列管理模块、 PRP 管理模块三个部分。

NVME控制架构.png

图1 NVMe控制器架构图

指令控制模块负责 NVMe 指令的组装、分配、注销。在 NVMe 协议中, 一条 NVMe指令由 16 个双字构成, 不同指令对应字段的含义也不相同。 因此当系统控制模块发起请求事务时, 指令控制模块将对应寄存器中的信息整合成为 NVMe 的提交队列条目, 并分配唯一的指令 ID, 再将条目写入提交队列中, 实现指令的组装和分配; 当接收到完成队列中的正常完成条目时, 指令控制模块提取其中的指令 ID 进行注销。队列管理模块实现 NVMe 提交队列和完成队列的存储、 门铃机制、 仲裁机制,以及队列的创建和删除管理。 NVMe 队列是实现 NVMe 指令提交与完成机制的核心组件, 队列的数量和深度直接影响数据传输的性能。 在小数据随机读写的场景下, 性能随着队列数量和深度线性增加然后趋于饱和; 在大数据顺序读写的场景下, 性能则受队列数量和深度影响很小。 为了适应不同的应用场景, 队列管理模块采用存储和控制分离的结构设计, 实现动态配置队列, 以更低的时间和资源成本实现性能的最优发挥。
PRP 控制模块实现 PRP 的管理与生成。 每一条涉及数据传输的 NVMe 指令都有对应的 PRP 条目或列表来指示地址, PRP 控制模块根据指令 ID 创建对应的 PRP 列表头指针, 在有指令需要读取 PRP 列表时根据 ID 生成与指令对应的 PRP 条目。 PRP控制模块使 PRP 的存储位置更加接近数据传输链路, 从而降低 PRP 读取延迟, 提高数据传输效率。

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

接下来对指令控制模块、 队列管理模块、 PRP 控制模块的结构设计进行分析。


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

本版积分规则

关闭

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

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

GMT+8, 2025-4-24 13:55 , Processed in 0.013084 second(s), 8 queries , Gzip On, MemCached On.

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