当前位置: 首页 > news >正文

NVMe高速传输之摆脱XDMA设计18:PRP控制模块设计

    PRP控制模块负责实现指令相关的PRP列表的生成、存储与管理。NVMe的提交命令中,存在PRP1和PRP2两个字段,PPR2作为地址指针还是PRP列表指针是根据命令请求数据传输长度和PRP1的偏移量来确定的。当PRP2作为PRP列表指针时,PRP2指向PRP列表的首地址。在传统的NVMe系统中,PRP列表存放的位置一般与数据存放位置接近,因此在处理指令过程中,读取PRP经历的延时与读取数据的延时相近,为了降低读取PRP的延时,使用PRP控制模块将PRP的存储位置转移到NoP逻辑加速引擎内部。PRP控制模块的结构和连接关系如图1所示。

图1 PRP控制模块结构和连接关系图

当用户想要进行大块数据传输时,需要使用PRP提供数据的分布地址,为了降低PRP寻址的延时和复杂度,使用PRP控制模块替代原本的PRP机制。需要传输大块零散分布数据时,可以减小DMA请求长度,不使用PRP链表,将PRP链表条目字节转换为DMA请求地址。需要传输大块连续数据时,只需要PRP链表将由PRP控制模块根据请求地址自动生成。指令控制模块接收到相关指令时,根据PRP1和传输长度判断PRP2类型,如果PRP2类型为PRP链表指针,则以指令ID为地址,将PRP1的4KB偏移写入PRP MEM,PRP2则包含指令ID并指向PRP控制模块。当PCIe加速模块收到指向PRP控制模块的读数据请求时,判断为读PRP请求,PRP控制模块根据读地址取出对应的存储条目返回,然后将该数据进行偏移4KB地址计算后重新写入PRP MEM。PRP MEM的大小与指令ID池的深度一致,每个指令ID指向一个64比特的PRP MEM存储条目。、

http://www.dtcms.com/a/303461.html

相关文章:

  • NVMe高速传输之摆脱XDMA设计21:PCIe请求模块设计(下)
  • 机器学习基础-matplotlib
  • clock_nanosleep系统调用及示例
  • node后端-JWT认证
  • Excel VBA宏的使用
  • 大模型应用班-第3课 从Excel到大屏:AI编程实战全解析 HW3 从零到一:香港疫情数据看板开发实战指南
  • 【GoLang #4】:Go 语言 函数详述(定义调用 | 匿名函数 闭包 | defer)
  • windows clion远程连接ubuntu运行调试nginx-1.22.1版本
  • 【优先级高,先补充】基于文本增强跨模态特征交互注意网络的多模态情感分析
  • SVN与GIT的区别,分别使用与哪些管理场景?
  • 《汇编语言:基于X86处理器》第10章 结构和宏(2)
  • Linux——线程池的模拟实现
  • 解决c++静态成员编译报错:‘xxx‘ is not a member of ‘xxx‘ 问题
  • 第五届先进算法与神经网络国际学术会议(AANN 2025)
  • vue项目进首页不加载全部资源
  • 【数据结构初阶】--二叉树(三)
  • ICDC自动化部署方案概述
  • 如何规范化项目执行
  • 2024年7月19日全国青少年信息素养大赛图形化(Scratch)编程小学低年级组复赛真题+答案解析
  • KubeSphere离线部署Kubernetes集群
  • “量子通信”
  • 系统远程配置
  • 概率有限自动机定义与示例
  • 智慧社区项目开发(二)——基于 JWT 的登录验证功能实现详解
  • 吃透 lambda 表达式(匿名函数)
  • mysql详细知识点
  • python中类变量 __slots__ 解析
  • Matplotlib(三)- 图表辅助元素
  • Vue3判断对象是否为空方法
  • 飞鹤困局:增长神话的裂痕