NVMe协议里定义SSD控制器可以支持给每个逻辑块(也就是用户数据)增加额外的元数据,主机如何使用元数据区域自定义(如分布式文件系统的元数据),元数据最常见的用途之一是传递PI端到端保护信息(end-to-end protection information)

NVMe 1.4 定义的 End-to-End Protection Information 长度为 8 字节,包含3个 Tag 区域:

  • 16bit Guard Tag(用户数据的 CRC 校验信息)
  • 16bit Application Tag(应用指定 tag)
  • 32bit Reference Tag 组成(Reference Tag 把逻辑块数据与一个地址关联起来,防止被误用或者乱序逻辑块传输,用来检测数据是否写入错误的 LBA 地址)。
  1. PI信息即可以由主机端添加,也可以由SSD控制器添加。
  2. 根据对SSD命名空间的格式化(512B or 4KB sector),PI可以放置在元数据的前8或后8字节。如果Metadata元数据超过8字节(如支持64B元数据):
    1. PI在Metadata前8字节,PI中CRC tag的生成不包括metadata字节。
    2. PI在Metadata后8字节,PI中CRC tag的生成包含metadata字节,但不包括后8字节PI。
  3. PI 的具体实现,有 DIF 和 DIX 两种方式。DIF 和 DIX 两种数据保护机制的主要区别是 PI 信息的位置不同。具体选择哪种格式,要根据应用场景的需求。
    1. DIF 即元数据与用户数据(LBA Data)连续存放
    2. DIX 格式则是元数据与用户数据单独存放;

NVMe 2.0  (PI > 8B)

a) 16b Guard Protection Information;

b) 32b Guard Protection Information; and

c) 64b Guard Protection Information

Protection Information Field(PRINFO) 包括PRACT(Protection Information Action)和PRCHK(Protection Information Check) 字段。PRACT指明了PI信息生成的机制PRCHK指明了controller收到包时检查的PI信息。PRACT 和PRCHK 由 nvmecli 的 prinfo 参数控制,通过nvme write和nvme read设置

Protection Information Action (PRACT)  and Write Commands

PI + PRACT = 0    (namespace format)

  • End-to-end Guard Check Error,
  • End-to-end Application Tag Check
  • Error, End-to-end Storage Tag Check Error, or
  • End-to-end Reference Tag Check Error

PI + PRACT = 1  MD (Metadata)  Size  = PI Size (namespace format)

  • The logical block data from host buffer is transferred to the controller.(The metadata is not resident within host buffer)
  • Controller generates and appends PI to the end of the logical block data ==> written to NVM

PI + PRACT = 1  MD (Metadata)  Size > PI Size (namespace format)

  • The logical block data and the metadata from host buffer is transferred to the controller.
  • The controller overwrites the PI portion of the metadata without checking PI portion regardless of PRCHK settings.
  • The logical block data and metadata are written to the NVM.

PRACT

  1. =1时,

    1. MD < 8B, SSD controller生成新的PI替代host传入的PI,并将其写入NAND
    2. MD > 8B,host生成的PI直接传入SSD,替换MD的前8或者后8字节(这里还需要注意kernel是否支持)
  2. =0时, controller获取上层应用下发的PI信息,将检查PI信息并写入NAND

协议定义了metadata/PI是8byte和大于8byte(16Byte)时的不同处理方式,增加额外保护信息,相当于增加了额外数据写入量,不同SSD厂商因为采用的算法不同,NAND寿命不同,metadata最大支持的大小也有差异,比较主流的市场需求是medata支持64byte(4096+64B)。

PRCHK

  • Bit2=1,SSD在收到packet时,检查CRC
  • Bit1=1,SSD在收到packet时,检查App Tag
  • Bit0=1,SSD在收到packet时,检查Reference Tag

Protection Information Action (PRACT)  and Read Commands

PRACT

  • =1时,

    • MD<8B,SSD controller不向host返回PI信息,只返回data block
    • MD>8B,SSD controller向host返回PI信息 (这里同样需要注意kernal是否支持)
  • =0时, SSD controller检查PI信息, 向host返回PI信息以及data block

PRCHK

  • Bit2=1,SSD在收到packet时,检查CRC
  • Bit1=1,SSD在收到packet时,检查App Tag
  • Bit0=1,SSD在收到packet时,检查Reference Tag

企业级SSD的端到端数据保护技术 - 知乎 (zhihu.com)

PI Types

T10 defines four types of protection:

Type 0: no protection. When a drive is formatted with Type 0 protection, it does not support any protection information.

Type 1: SBC defines the Logical Block Reference Tag field and Logical Block Guard field but does not define the Logical Block Application Tag field.

Type 2: SBC defines the Logical Block Guard field and the Logical Block Reference Tag field as well except for the first addressed LBA.

Type 3: SBC defines the Logical Block Guard field, but does not define the contents of the Logical Application Tag field or the Logical Reference Tag field.

The PI related information is MC (Metadata Capabilities), DPC (End-to-end Data Protection Capabilities), DPS (End-to-end Data Protection Type Settings) and FLBAS (Formatted LBA Size).

NVMe End-to-End Protection Information相关推荐

  1. 基于PCIe的NVMe协议在FPGA中实现方法

    NVMe协议是工作在PCIE的最上层协议层的,故需要先搞清楚PCIE.本文基于Xilinx的UltraScale+,开发工具为Vivado2021.2.学习中以spec为主,其它资料辅助参考(重点介绍 ...

  2. NVMe 2.0a - Sanitize

    目录 8.21 Sanitize Operations 8.21.1 NVMe 2.0对sanitize的改动有四点: 1. Sanitize Status log page更新要在NVM subsy ...

  3. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8)

    8 Feature(特性) 8.1 固件升级过程 固件升级通过重启激活的过程是: 1. 主机发一个Firmware Image Download命令,下载固件映像版本到controller.可能有多个 ...

  4. PBlaze5 920系列特性——可变Sector Size管理(上)

    这是一条nvmecli的format命令,需要指出的是这条命令会打开PBlaze5 系列NVMe SSD端到端数据保护功能.当下,端到端数据保护技术已经是PBlaze5 910/916及最新发布的PB ...

  5. Sanitize小知识

    增强数据安全擦除 Sanitize 安全擦除SSD中存储的数据,在一些场景下是非常必要的功能.譬如你手中有一块NVMe SSD想重新用做其他业务,或者设备折旧退役,为保证之前SSD的数据不被泄露,安全 ...

  6. SG3 tool hdd 512/520 format

    #apt-get 去安裝 [root@benjr ~]# apt-get install sg3-utils The Linux sg3_utils package http://sg.danny.c ...

  7. 未来流媒体工作流的核心技术

    来源:Video Breakthroughs 原标题:Core Technologies for Streaming Workflows, in 2021 and beyond 原作者:Nicolas ...

  8. 服务器硬件监控转载:

    转载:http://nolinux.blog.51cto.com/4824967/1664664 前一周上架服务器,本来准备把针对服务器的硬件监控这一部分总结下成文,结果过个端午给过忘了...今天就又 ...

  9. 解读Linux命令格式

    解读Linux命令格式 环境 Linux HA5-139JK 2.6.18-164.el5 #1 SMP Tue Aug 18 15:51:48 EDT 2009 x86_64 x86_64 x86_ ...

最新文章

  1. hdu1443 Joseph(约瑟夫环)
  2. MERGE INTO
  3. 图像的亮度和对比度区别
  4. STRUTS模拟试题
  5. iOS- 如何改变section header
  6. Open*** 服务器的搭建
  7. 编译程序基本原理的知识笔记
  8. Springboot 启动时Bean初始化,启动异常-Assert.isTrue(condition,message) 报错
  9. 回溯法采用的搜索策略_急性阑尾炎最典型的症状为:
  10. paip.C#.NET利用WebBrowser获取完整COOKIE
  11. TeamTalk UtilPdu详解
  12. 二进制搜索树(BSTs) 和AVL 树
  13. 鲁迅研究(海南大学)
  14. 品牌如何赋能加盟商,攻克时艰
  15. 亚洲“印度河水塔”是受依赖度最高、最为脆弱的高山系统
  16. python输出乘法式子(HLOJ)(完整解析)
  17. Altium Designer简介及使用流程
  18. ros安装教程unbuntu20.04
  19. python语法与函数
  20. do while“直到”型循环

热门文章

  1. 学而时习之数据结构篇: TiDB NewSQL数据库到底 New 在哪里?
  2. Yapi集成idea使用
  3. 下一个 Brython? 不, 是 Python in WebAseembly
  4. GC是什么?为什么要有GC?
  5. 60集Python入门视频PPT整理 | Python代码的测试、调试与探查
  6. iostat IO统计原理linux内核源码分析----基于单通道SATA盘
  7. python语法之注释
  8. 在家怎么能赚钱?三分钟教会你4个赚钱方法!
  9. Java如何扑克牌给扑克牌赋值_JAVA学习前十天:小结、面向对象之”扑克牌“例子...
  10. 全球移动运营商代码及相应名称