尧图网站建设 尧图网络
  • 首页
  • 关于我们
  • 服务项目
  • 案例展示
  • 建站流程
  • 资讯中心
  • 联系我们
首页/资讯中心/详情

浅析NVMe协议:PRP/SGL数据传输格式

浅析NVMe协议:PRP/SGL数据传输格式
📅 发布时间:2026/6/30 22:56:22

文章目录

    • 概述
    • PRP
      • PRP Entry
      • PRP List
    • SGL
      • SGL描述符
      • SGL描述符类型
        • SGL Data Block描述符
        • SGL BitBucket描述符
        • SGL Segment描述符
        • SGL Last Segment描述符
        • Keyed SGL Data Block描述符
        • Transport SGL Data Block描述符
      • SGL Segment
    • 相关参考

概述

NVMe支持PRP(Physical Region Page)和SGL(Scatter-Gather List)两种方式描述数据的位置和长度等信息,其中,PRP是以主机物理页面为基本单位来描述数据的位置信息,存放在PRP里的地址需要满足主机物理页面对齐,配合页面偏移描述数据的实际地址;SGL适合描述多个分散的数据区域,相对于PRP,SGL在使用上要相对灵活一些,地址对齐粒度通常可以是Byte或Dword。

PRP

NVMe协议使用PRP描述数据的示意如下:

PRP Entry

PRP Entry是PRP格式的基本描述单元,指向主机中的一个物理内存页面。NVMe协议定义的PRP Entry格式如下:

PRP Entry包含Page Base Address和Offset:

  • Page Base Address:物理内存页面的地址;
  • Offset:数据在物理内存页面中的偏移,需要满足Dword对齐,通常只有命令中的第一个PRP Entry需要使用Offset来指示数据偏移。

上面的n取决于物理内存页面的大小,典型场景是4KB,那么n的值就是11,主机驱动可以通过CC.MPS字段配置物理内存页面大小到NVMe控制器。

PRP List

PRP List是一系列PRP Entry的数组,用于描述使用多个物理页面的数据,协议定义如下:

SGL

NVMe命令使用SGL描述数据示意如下:

SGL描述符

通用SGL描述符的格式定义如下:

SGL描述符是一个16Byte的表项,其中最高位的Byte描述了SGL的类型信息,包括SGL描述符类型和SGL描述符子类型。

协议支持的SGL描述符类型如下:

对于SGL描述符子类型,主要用于对不同类型SGL描述符的Address字段进一步做解释。

协议主要使用的SGL描述符子类型主要是0和1,其它值取决于传输层特殊定义或保留,对于0和1子类型的含义说明如下:

  • 0指示Address字段包含了64位的内存地址;
  • 1指示Address字段包含了从特定位置的偏移,通常是用于NoF Capsule同时携带了SQE和数据的场景下,描述数据在Capsule中的偏移位置。

SGL描述符类型

SGL Data Block描述符

SGL Data Block描述符记录数据在主机中的位置信息,包含数据起始地址和长度,是SGL中描述数据的基本单元。

SGL Data Block描述符记录的地址和长度,需要满足NVMe Controller对于地址对齐粒度的要求,通常可以是Byte或DWord,最终取决于NVMe Controller Identify里的配置。

SGL BitBucket描述符

SGL BitBucket描述符只携带了长度信息,自身不指向数据,通常用于读写命令中,指示NVMe Controller跳过对应长度的数据不处理。

SGL Segment描述符

SGL Segment描述符记录的是SGL Segment在内存中的地址和长度。

SGL Last Segment描述符

SGL Last Segment描述符用于记录SGL List中最后一级SGL Segment的位置信息。

Keyed SGL Data Block描述符

Keyed SGL Data Block描述符相较于常规的SGL Data Block描述符,额外携带了Key的信息,主要用于RDMA场景访问内存时作权限校验。

Transport SGL Data Block描述符

Transport SGL Data Block描述符提供了特定于NVMe传输层的数据描述方式,描述符本身只描述数据的长度,至于数据的位置以及传输方式,则由对应的传输层进行处理。

SGL Segment

SGL Segment是SGL描述符的数组,用于描述单一SGL描述符无法描述的多个数据区域。

相关参考

  • 《NVM Express Base Specification,Revision 2.3》

相关新闻

  • 不要把CNC机内测头当成三坐标
  • 从入门到精通:Python OpenPyXL完整教程
  • PCL 垂距法实现点云精简

最新新闻

  • 降级——“丢卒保车“的艺术
  • 免费开源图片元数据批量编辑终极指南:ExifToolGUI完全教程
  • Codex++ 配置 Codex 模型教程
  • 告别手忙脚乱!SAP EWM RF手持终端从登录到拣货发货的保姆级实操指南
  • 如何3步搞定多GPU服务器监控:Zabbix智能监控方案终极指南
  • 保姆级教程:手把手教你用SurroundOcc跑通NuScenes数据集(从数据加载到可视化全流程)

日新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

周新闻

  • Windows字体自定义终极方案:No!! MeiryoUI完全指南
  • Deepin Boot Maker:告别命令行,3分钟制作Linux启动盘的智能解决方案
  • Plain Craft Launcher 2:重新定义你的Minecraft游戏体验

月新闻

  • 2026年6月公司网站搭建最新热门渠道测评:四大低成本/零代码平台对比+避坑
  • 【Linux】Linux arm 编译QT程序,出现expected “}“报错
  • 【MATLAB例程】四基站二维AOA定位与距离辅助增强对比仿真。基于角度观测和测距修正的固定目标平面定位精度分析

关于尧图

  • 公司简介
  • 团队介绍
  • 企业文化
  • 荣誉资质

服务项目

  • 定制开发
  • 电商建站
  • UI 设计
  • 运维服务

快速链接

  • 案例展示
  • 建站流程
  • 常见问题
  • 资讯中心

联系方式

  • 📍北京市朝阳区互联网产业园 A 座 10 层
  • 📞400-888-8888
  • ✉️contact@rkmt.cn
  • 🕐周一至周日 9:00-21:00

© 2024 北京尧图网络科技有限公司 版权所有 | 京 ICP 备 XXXXXXXX 号