NVMe Protect Information

PI位于userdata后的metadata中。

NVMe IO读写命令中的Dword12中的PRINFO有两个关键字段:PRACT、PRCHK

PRCHK[0]=1:检查PI的Reference Tag字段

PRCHK[1]=1:检查PI的Application Tag字段

PRCHK[2]=1:检查PI的Guard字段

 英文缩写解释:

Guard:根据userdata生成的CRC
Application Tag:metadata中的保护信息(PI)中的字段,用户自己添加的,可为任意值
Reference Tag:metadata的保护信息(PI)中的字段,一般为LBA的前4Byte

ILBRT:写命令中DW14中的字段(Initial Logic Block Reference Tag),指的是该命令中第一个LBA的参考值,一般直接用LBA填入即可。
LBAT:写命令中DW15中的字段(Logic Block Application Tag),可为任意值
LBATM:写命令中DW15中的字段(Logic Block Application Tag Mask),指的是LBAT的mask,两个刚好都是16bit,一一对应地mask,0表示mask,比如0x00ff,表示mask掉LBAT的高8位。

EILBRT:读命令中DW14中的字段(Initial Logic Block Reference Tag),指的是该命令中第一个LBA的参考值,一般直接用第一个LBA填入即可,在写命令时每个LBA的metadata已经有对应的Reference Tag,通过这个保证我们读的LBA是正确的,不会读成另外的LBA。
ELBAT:读命令中DW15中的字段(Logic Block Application Tag),在写命令时每个LBA的metadata已经有对应的Application Tag,通过这个进一步保证我们读的LBA是正确的,不会读成另外的LBA。
ELBATM:读命令中DW15中的字段(Logic Block Application Tag Mask),指的是LBAT的mask,两个刚好都是16bit,一一对应地mask,0表示mask,比如0x00ff,表示mask掉LBAT的高8位。

nvm:非易失性储存介质
 

如果PRACT为1

若是8Byte metadata:

写命令由控制器生成PI,最后随同userdata一起送入nvm。

读命令中控制器摘除PI,只剩userdata返回给主机。
若是8Byte以上metadata(16、32、64、128):

写命令由控制器生成PI,直接覆盖掉metadata前8Byte或者后8Byte,最后随同userdata+metadata一起送入nvm。

读命令中控制器不管PI,连同userdata+metadata返回给主机。
 

如果PRACT为0

8(16、32、64、128)Byte metadata:

写命令由主机在送数据时直接在metadata中加入PI,控制器负责检查PI。最后随同userdata一起返回主机。

读命令,控制器根据命令和userdata检查nvm中读出数据的PI,无误则返回给主机。

PI有四种type,在设置namespace格式的时候确定一种

Type0:不支持PI。

Type1:Reference Tag随着LBA+1而+1,并且host必须保证ILBRT(Initial Logic Block Reference Tag)和 EILBRT(Expect Initial Block Reference Tag)的值与LBA的最后4个Byte相同。

Type2:Reference Tag随着LBA递增而增加,SSD检查PI的方式与Type1相同,允许host指定任意ILBRT和EILBRT。

Type3:Reference Tag保持不变,SSD不会检查ILBRT和EILBRT。

在写命令中,(PRACT=0)控制器检查metadata中的PI(主机生成)的字段是否与命令中的一样:
①控制器根据uesr_data生成CRC,与metadata中PI的Guard字段进行比对。

②控制器比对metadata中PI的Application Tag和命令中DW15的LBAT,DW15的LBATM mask掉的bit不用比对。

③控制器比对第一个LBA的metadata中PI的Reference Tag和命令中DW14的ILBRT,因为Reference Tag会随着LBA+1而+1,所以也需要逐一比对每个LBA的Reference Tag。

在读命令中,(PRACT=0)控制器检查metadata中的PI的字段是否与命令中的一样:
①控制器根据uesr_data生成CRC,与metadata中PI的Guard字段进行比对。

②控制器比对metadata中PI的Application Tag和命令中的DW15的ELBAT,DW15的LBATM mask掉的bit不用比对。

③控制器比对第一个LBA的metadata中PI的Reference Tag和命令中的DW14的EILBRT,因为Reference Tag会随着LBA+1而+1,所以也需要逐一比对每个LBA的Reference Tag。

Type1:上述读写情况的第三点中第一个LBA的metadata中PI的Reference Tag和命令中的DW14的ILBRT必须与第一个LBA的最后4个字节相同,不同的话控制器直接返回PI错误或者command field错误。

Type2:和Type1一样,但是不需要保证第一个LBA的metadata中PI的Reference Tag和命令中的DW14的ILBRT和第一个LBA的最后4个字节相同,比如LBA为0x133,另外两个可以设置成0x155(这两个必须一样),该命令的第二个LBA就是0x134,第三个LBA就是0x135。。。。。。
Reference Tag和ILBRT相应+1。

Type3:直接不检查Reference Tag

不管命令中PRCHK字段的状态如何,
保护检查可能由于“Application Tag”和“Reference Tag”的字段值而被禁用。
如果命名空间格式化为Type 1或Type 2的PI,那么Application Tag的值为0xFFFF时,所有PI检查都将被禁用,不管PRCHK字段。
如果命名空间格式化为Type 3的PI,则当Application Tag为0xFFFF,Reference Tag为0xFFFFFFFF时,所有PI检查都将被关闭,不管PRCHK字段。

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值