浅析NVMe协议:DIF

发布于:2025-09-01 ⋅ 阅读:(20) ⋅ 点赞:(0)

概述

NVMe协议将DIF信息作为元数据的一部分进行携带。

DIF数据格式

在这里插入图片描述

DIF的PI由多个字段组成,包括:

  • Guard字段:基于逻辑块数据计算的CRC校验值(CRC-16、CRC-32或CRC-64),用于检测数据完整性。
  • Application Tag:由上层应用定义,用于业务逻辑标识。
  • Reference Tag:将数据与逻辑块地址(LBA)关联,防止写入错误位置。

盘片支持DIF

Format

使能NVMe DIF特性的前提是盘片需要格式化成支持DIF,协议提供了Format命令对盘进行格式化,其中有几个字段描述了对DIF的关键支持。

PIL

描述DIF信息在元数据中存放的位置,通常元数据的大小要超过8字节,8字节的DIF信息则通常放置在元数据的首部或尾部的位置,具体则取决于PIL字段的值:
在这里插入图片描述

  • PIL=0:描述DIF信息存放于元数据的首部8个字节;
  • PIL=1:描述DIF信息存放于元数据的尾部8个字节。

若元数据大小恰好为8字节,那么PIL设置成0或1都无所谓。

PI

PI描述了盘片使能的DIF类型,有4中取值,如下:
在这里插入图片描述

MSET

MSET描述了元数据的传输方式:分离或连续。
在这里插入图片描述

LBAF

LBAF描述了当前使用的扇区格式,常见的格式包括:512、512+8、4096以及4096+64等,盘片支持的元数据大小也由这个字段所指定。
在这里插入图片描述

协议命令DIF支持

NVMe读写命令中提供了两个字段:PRACT和PRCHK,用于描述了NVMe控制器对DIF数据的处理行为和校验方式。

PRACT

PRACT字段用于描述NVMe控制器是否对DIF信息进行插入、替换或剥离等处理,并与元数据大小有关,分为以下几种情况:

PRACT=0

无论携带的元数据多少,DIF信息都会原封不动进行传输,NVMe控制器不会对DIF信息进行修改;
在这里插入图片描述
在这里插入图片描述

PRACT=1

元数据传输过程中不会携带DIF信息,NVMe控制器会自动生成DIF信息下盘(Write命令)或剥离DIF信息(Read命令):

  • 元数据大小为8字节:数据传输过程中不会携带DIF信息,等价于任何元数据也不会携带,NVMe控制器会针对读写命令处理DIF信息,插入或者剥离;
    在这里插入图片描述

在这里插入图片描述

  • 元数据大小超过8字节:数据传输过程中,元数据对应DIF区域不会携带有效的DIF信息,NVMe控制器会替换DIF区域数据后下盘,或剥离。
    在这里插入图片描述

在这里插入图片描述

PRCHK

PRCHK描述了数据检验类型。
在这里插入图片描述

相关参考

  • 《NVM-Express-Base-Specification-2.0c-2022.10.04-Ratified-1》

网站公告

今日签到

点亮在社区的每一天
去签到