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

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

手机号码,快捷登录

手机号码,快捷登录

找回密码

  登录   注册  

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

[原创] NVMe高速传输之摆脱XDMA设计15:NVMe控制器设计

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

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

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

x
  选用XDMA做NVMe IP的关键传输模块,可以加速IP的设计,但是XDMA对于开发者来说,还是不方便,原因是它就象一个黑匣子,调试也非一番周折,尤其是后面PCIe4.0升级。因此决定直接采用PCIe直接设计。
      NVMe 控制模块负责实现用户请求事务与 NVMe 事务的转换、 NVMe 命令提交与完成机制、 PRP 寻址机制。 在 NoP 逻辑加速引擎中, 用户通过配置系统控制模块的相关寄存器来发送 DMA 或队列管理请求, NVMe 控制模块在得到任务信息后生成对应的 NVMe 命令, 并通过指令提交与完成机制实现与 NVMe SSD 的任务交互。NVMe 控制模块一方面通过硬件实现降低了命令交互的延迟和 PRP 寻址机制的过程延迟, 另一方面通过结构的设计继承了软件协议栈的灵活性, 这使得系统即使在不同的应用场景下也能充分发挥性能优势。 如图 1 所示 NVMe 控制模块按照功能划分为命令控制模块、 队列管理模块、 PRP 管理模块三个部分。

NVMe15之控制器组成.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站用户:专注与守望
链接:https://space.bilibili.com/58513 ... st.card_title.click


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

本版积分规则

关闭

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


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

GMT+8, 2025-8-2 15:47 , Processed in 0.018643 second(s), 8 queries , Gzip On, Redis On.

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