PBlaze5 920系列特性——可变Sector Size管理(下)

上篇文章介绍了nvme format命令,通过这条命令就可以开启端到端数据保护功能,并且可以在VSS技术支持下,根据业务需求选择合适的格式化方式。

在进行读写操作之前, 我们先要熟悉一下 Protection Information的定义。

PI信息格式与Type1/2/3

在列举命令之前需要简要介绍一下Protection Info的格式:

 

                                                                                         PI保护信息的数据结构

可以看到每个8bytes的PI都会包括由16 比特 guard tag(用户数据的CRC校验信息),16比特application tag(应用指定tag)和32比特reference tag(检测数据写入正确的LBA地址)组成。

端到端数据保护中的Type1/2/3就代表了不同的reference tag设置和PI检查方式。

  • Type1:reference Tag随着LBA增加递增,并且Host必须保证ILBRT和ELBRT与LBA的最后4个Bytes相等;

  • Type 2:reference Tag随着LBA增加递增,SSD检查PI的方式与Type1 相同,允许Host指定任意ILBRT和ELBRT;

  • Type3:reference Tag保持不变,SSD不会检查ILBRT和ELBRT。

 

从nvme write命令看数据如何加上PI存进NAND

基本知识介绍完毕。接下来就让Host发笔写数据给这块PBlaze5 D926 NVMe SSD。

上图中第一条命令先生成了一个512Bytes的实验数据,并在由第二条write命令写入到NVMe SSD中。在这条命令中,-s指明了数据起始的LBA,-z是数据量,-y为元数据大小。倒数第二个--prinfo既是Protection Information Field 的意思,其包含PRACT和PRCHK两个参数,分别有如下定义:

 

PRACT(指明了PI信息生成的机制)

=1时, controller生成PI并将其写入NAND

=0时, controller获取上层应用下发的PI信息,将检查PI信息并写入NAND

PRCHK(指明了控制器收到包时检查的PI信息)

Bit2=1,SSD在收到packet时,检查CRC

Bit1=1,SSD在收到packet时,检查App Tag

Bit0=1,SSD在收到packet时,检查Reference Tagca

 

这条命令里我们设置了PRINFO为0xf(即所有bit均为1),并且指定了一个ref-tag (0x12345678)。NVMe SSD控制器在接到命令之后为数据生成PI并整合命令中ref-tag的值,存进NAND。不指定ref-tag,那么控制器会生成完整的PI信息,存进NAND。这个过程示意如下:

从nvme read命令看数据如何从SSD正确读出

 

相应的,我们将刚写进SSD的数据读出来。

同样,我们在命令中也看到了prinfo参数,这里的PRINFO同样包含PRACT和PRCHK,其作用解释如下:

 

PRACT(指明读数据时控制器是否返回PI信息)

=1时, SSD controller不向host返回PI信息;只返回data block

=0时, SSD controller;检查PI信息, 向host返回PI信息以及data block

PRCHK(指明控制器校验的PI信息)

Bit2=1,SSD在收到packet时,检查CRC

Bit1=1,SSD在收到packet时,检查App Tag

Bit0=1,SSD在收到packet时,检查Reference Tag

 

这条命令可以解释为,我们从起始LBA为0x12345678开始读512Bytes数据和8Bytes元数据,并记录进data_meta_read_7.bin文件中。在此过程检查CRC、APP tag和Reference Tag三个PI信息,并将PI信息和数据一并返回给host。整个过程如下图:

 

读命令中ref-tag=0x12345678,与上文写命令中ref-tag相等,否则会报出end-to-end reference tag check failure。

读者朋友们如果有兴趣,可以尝试在read 命令中去掉 ref-tag; 或者将ref-tag修改为其他值,看一下返回结果的变化。

我们展示了一组数据如何通过nvme write命令从host下发到SSD,最终存进NAND,又如何通过nvme read命令将数据校验后正确读出。需要指出的是为了便于理解,我们限制了很多实验条件,事实上不同的PRINFO、不同的应用及系统环境都会有相应的规范。

需要深入定制的用户可以联系我们的工程师进行进一步沟通!

 

 

本文作者:黄辉   |   Memblaze 产品工程师

更多原创技术内容,请关注 Memblaze 微信公众号。

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值