蛋蛋读剩的NVMe之2:E2E Data Protection

原创内容,转载请注明:  [http://www.ssdfans.com]  谢谢!

End to End Data Protection (端到端数据保护),两端分别是指系统这边的Application,以及SSD这边的NAND。当SSD支持这个功能时,在正常的Logical User Data (用户数据)之外,Meta  Data (元数据)里会包括Protection Info (保护信息)。

业界最常用的数据保护机制是SCSI协议里的DIF(data integrity field)和DIX (data integrity Extension),两者的区别在于DIF的PI (Protection Info)是跟User Data放在一起,而DIX的PI则是存放在一块独立的buffer里。

NVMe提供类似的数据保护方式,分为Type1,Type2,Type3。Type的选择需要在Format namespace时指定,并且会通过回复Identify Namespace上报给Host。

NVMe的PI一共8个Byte, 分别是Guard, Application Tag和Reference Tag,如下图:

PRACT

SSD收到带有PI数据的读写命令时,其处理方式跟PRACT(Protection Information Action)位的值有关。

先看写命令的情况:

  • 如果namespace在format的时候没有启动E2E数据保护,针对Host过来的Logical User Data和Meta,SSD(NVMe模块)不会做任何处理,直接交给后端的Flash Controller模块处理。
  • 如果namespace在format的时候启动了E2E数据保护且PRACT=0,SSD接收到Host传来的数据后会检查PI,如果检查失败,SSD会向Host返回命令失败,并置上相应的错误位(Guard check, App Tag Check 和 Ref Tag Check)。

  • 如果namespace在format的时候启动了E2E数据保护且PRACT=1,并且Metadata size= 8Byte,SSD会生成PI信息并跟User Data一起写入Flash。

  • 如果namespace在format的时候启动了E2E数据保护且PRACT=1,并且Metadata size > 8Byte (比如16 Byte),SSD会生成并覆盖原有的PI信息,跟User Data一起写入Flash。

读命令的情况:

  • 如果namespace在format的时候启动了E2E数据保护且PRACT=0,SSD从Flash读出数据以后会检查PI,如果检查失败,SSD会向Host返回命令失败,并置上相应的错误位(Guard check, App Tag Check 和 Ref Tag Check)。

  • 如果namespace在format的时候启动了E2E数据保护且PRACT=1,并且Metadata size= 8Byte,SSD从Flash读出数据以后会检查PI信息,如果失败,向Host返回命令失败,如果通过,去掉PI(也就是Meta data)仅将User Data返回给Host。

  • 如果namespace在format的时候启动了E2E数据保护且PRACT=1,并且Metadata size > 8Byte (比如16 Byte),SSD从Flash读出数据以后会检查PI信息,如果失败,向Host返回命令失败,如果通过,将包含PI的Meta data连同User Data一起返回给Host。

PRCHK

PRCHK(Protection Information Check)控制PI具体检查的内容。

  • 如果PRCHK bit2=1,SSD比较PI中的Guard与User Data的CRC-16
  • 如果 PRCHK bit1=1,SSD比较PI中的App Tag与读写命令里的LBAT (Logical Block Application Tag)位的内容
  • 如果PRCHK bit0=1
    • 针对 Type1 Protection,SSD比较PI中的Ref Tag与计算出的参考Ref Tag,如果检查失败,向Host 返回命令失败;
    • 参考Ref Tag包含在读写命令的ILBRT- Initial logical Block Reference Tag 或者 ELBRT- Expected logical Block Reference Tag 中;
    • 针对Type 1和Type 2 Protection,参考Ref Tag随着LBA增加递增;
    • 针对Type3 Protection,参考Ref Tag保持不变;
    • 针对Type1 Protection,Host必须保证ILBRT和ELBRT与LBA的最后4个Byte相等;
    • 针对Type2 Protection,SSD检查PI的方式与Type1 相同,不同处在于Host可以任意指定ILBRT和ELBRT;
    • 针对Type3 Protection,SSD不会检查ILBRT和ELBRT,同时可以直接Abort这个命令;
  • 针对Type1和Type 2 Protection,如果App Tag=0xFFFF,PI check会被Disable
  • 针对Type 3 Protection,如果Ref Tag=0xFFFFFFFF,PI check会被Disable

 

提示:使用NVMe CLI 工具Format Namespace时,可以指定是否启用E2E data protection,并设置Protection Type, PRACT, PRCHK。

分类目录 其他, 技术文章.
扫一扫二维码或者微信搜索公众号ssdfans关注(添加朋友->点最下面的公众号->搜索ssdfans),可以经常看到SSD技术和产业的文章(SSD Fans只推送干货)。
ssdfans微信群介绍
技术讨论群 覆盖2000多位中国和世界华人圈SSD以及存储技术精英
固件、软件、测试群 固件、软件和测试技术讨论
异构计算群 讨论人工智能和GPU、FPGA、CPU异构计算
ASIC-FPGA群 芯片和FPGA硬件技术讨论群
闪存器件群 NAND、3D XPoint等固态存储介质技术讨论
企业级 企业级SSD、企业级存储
销售群 全国SSD供应商都在这里,砍砍价,会比某东便宜20%
工作求职群 存储行业换工作,发招聘,要关注各大公司招聘信息,赶快来
高管群 各大SSD相关存储公司高管和创始人、投资人

想加入这些群,请微信扫描下面二维码,或搜索nanoarchplus,加阿呆为微信好友,介绍你的昵称-单位-职务,注明群名,拉你进群。SSD业界需要什么帮助,也可以找阿呆聊。