6.5 End-to-end Protection Information 端到端保护信息

包含数据转存的命令可以使用端到端数据保护。在这些命令内部【位于Command Dword 12 的 [29:26] 这四个bit位】,保护信息功能和保护信息检查字段域,正如Figure 355中定义做了详细说明。

【注:CDW12.PRINFO即是Figure355描述的4个bit位】

Protection Infomation Action(PRACT):保护信息功能位【只占一个bit位】指示对保护信息要做的行动。只有当namespace使用端到端保护信息来格式化的情况这个bit位才有用。具体请参考8.3章节。

Protection Information Check(PRCHK):保护信息检查字段域指定应该作为端到端数据保护处理的一部分进行检查的区域。只有当namespace使用端到端保护信息来格式化的情况这个PRCHK才有用。

【为便于理解端到端数据保护机制的两种配置,此处增加第8.2章节元数据处理的内容】

8.2 Metadata Handling 元数据处理

controller可以支持基于每个逻辑块的元数据。元数据是基于每个逻辑块分配的附加数据。至于主机如何使用元数据区域没有做要求。对元数据最常见的一种用法是表达端到端保护信息。

元数据可以被转存,转存可以是从controller到host或者从host到controller这两种途径的其中之一。在namespace格式化时选择使用的机制。

【1】转存元数据的第一种机制是,作为逻辑块的一个连续的部分【这里说的逻辑块就是与此元数据相关联的逻辑块】。元数据在相关逻辑块的末尾传输,形成一个扩展的逻辑块。Figure449是这种机制的插图。这种情况,逻辑块数据和逻辑块元数据都被PRP1和PRP2所指向(如果使用SGLs的话就是SGL Entry 1)。

【2】转存元数据的第二种机制是,元数据作为一个单独的数据缓冲区。Figure450是这种机制的插图。这种情况,元数据由元数据指针所指向,而逻辑块数据 由数据指针所指向。当一个命令在命令中使用PRPs指向元数据时,元数据需要在物理上是连续的。当一个命令在命令中使用SGLs时,元数据不要求在物理上连续。

对于每个namespace当被格式化时都应该选择转存机制中的其中一个;部分元数据使用一种机制转存另一部分元数据使用另一种机制转存是不支持的。

如果使用了端到端数据保护,那么对于每个逻辑的保护信息域是被包含在元数据中的。

8.3 端到端数据保护

为了提供健壮的从应用到NVM介质,以及从NVM介质回到应用自身的数据保护,可以使用端到端数据保护。如果使能了这个机制,额外的保护信息(例如CRC)被添加到逻辑块以确定逻辑块的完整性,或许由controller评估 和/或 host主机软件评估。这些附加的保护信息,如果出现,根据namespace的格式,它位于元数据的前八字节或者尾八字节。【1】对于超过八字节的元数据格式,如果保护信息包含在元数据的前八字节中,那么CRC不涵盖任何元数据字节。【2】对于元数据格式超过八字节,但保护信息包含在元数据的尾八字节中,那么CRC涵盖所有除了CRC这八个字节之外的所有元数据字节。【1和2总结起来,就是CRC只涵盖(计算)CRC之前的字节,不涵盖CRC后边的字节】。像第8.2章节描述的那样,元数据和之后的这个保护信息,可以配置成紧挨着逻辑块数据或者存放到一个单独的缓冲区中。

在企业级实现中最常用的数据保护机制是SCSI Protection Information,众所周知的像 Data Integrity Field(DIF),Data Integrity Extension(DIX)。这两个机制之间的主要差别是保护信息的位置。在DIF中,保护信息紧挨着逻辑块数据,并创建一个扩展逻辑块。而DIX保护信息被保存在单独的缓冲区中。本规范中定义的端到端数据保护机制是DIF和DIX二者功能的兼容。通过配置元数据紧挨着逻辑块数据来实现DIF功能(Figure 449展示),通过配置元数据和数据分别用单独的缓冲区来实现DIX功能(Figure 450展示)。

NVMe支持SBC-3中指定的定义在SCSI Protection信息模型中的相同的端到端保护类型。当格式化namespace时,端到端数据保护的类型(例如Type1、Type2或Type3)是可选的,并在Identify Namespace数据结构(参考Figure245)中记录。

保护信息格式如图Figure 451所示,包含在与每个逻辑块对应的元数据中。Guard域包含一个通过逻辑块数据计算的CRC-16。CRC-16的计算公式定义在SBC-3中。除了RCR-16之外,DIX也指定一个可选的IP checksum,NVMe接口不支持这个。Application Tag是不透明的数据域,不能被controller理解,它可以用于禁止保护信息的检查。Reference Tag把逻辑块数据与一个地址关联起来,防止被误用或者乱序逻辑块传输。类似于Application Tag,Reference Tag也可以用于禁止保护信息的检查。

8.3.1 The PRACT Bit

作为读和写命令的附带功能(副作用)执行的保护信息处理由命令中的保护信息功能(PRACT)位控制。

8.3.1.1 Protection Infomation和Write Commands

图Figure 452提供了一些保护信息处理作为写命令的附带功能出现的例子。

如果namespace没有带端到端数据保护格式化,那么从主机到NVM转存的逻辑块数据和元数据不携带让controller处理相关的保护信息。

如果namespace带保护信息来格式化,并且PRACT位赋值为0,那么逻辑块数据和元数据,元数据包括保护信息,可能还包含额外元数据,从主机缓冲区转存到NVM(即:元数据字段在NVM和主机缓冲区中保持相同的大小)。当逻辑块数据和元数据透传到controller时,保护信息被校验。如果保护信息校验被发现错误,命令带着检测到错误的状态错误状态码结束(例如:End-to-end
Guard Check Error, End-to-end Application Tag Check Error, or
End-to-end Reference Tag Check Error)。

如果namespace带保护信息格式化,并且命令中PRACT位为1,那么:

1.
如果namespace格式化时,元数据大小【Metadata Size】等于8(参考Figure
246),那么逻辑块数据从主机缓冲区到controller传送。当逻辑块数据透传到controller,controller生成和追加保护信息到逻辑块数据尾部,逻辑块数据和保护信息被写入到NVM(元数据不驻留在主机缓冲区内)。

【下图Figure 246 摘自Identity Namespace章节 5.15.2.1】

2.
如果namespace格式化时,元数据大小【Metadata
Size】大于8,那么逻辑块数据和元数据从主机缓冲区到controller被传送。当元数据透传到controller,controller覆盖写这个保护信息,保护信息属于元数据的一部分。逻辑块数据和元数据都被写入到NVM(在NVM中和主机缓冲区中,元数据域保持同样的大小)。在元数据内部保护信息的位置是namespace格式化时配置的(请参考Figure
245的DPS域)。

【下图Figure 245 摘自Identity Namespace章节 5.15.2.1】

8.3.1.2 Protection Infomation和Read Commands

Figure 453 提供一些保护信息处理例子,它作为一个读命令处理的附带功能出现的。

如果namespace格式化时设置了带保护信息,PRACT的bit位被清0,那么逻辑块数据和元数据被controller从NVM中读出并传递到主机缓冲区,元数据包含保护信息和其他可能的主机元数据(元数据域在NVM中和在主机缓冲区中保持相同的大小)。当逻辑块数据和元数据透传到controller时,元数据内的保护信息被校验的。如果保护信息被校验发现错误,命令结束,返回错误状态码(End-toend
Guard Check Error, End-to-end Application Tag Check Error, or
End-to-end Reference Tag Check Error)。

如果namespace格式化时,设置带保护信息,PRACT的bit为被设置为1,那么:

a)如果namespace格式化时设置的元数据大小(Metadata

Size)等于8(参见Figure246),逻辑块数据和元数据由controller从NVM中读取。当逻辑块和元数据透传到controller时,保护信息被校验,如果保护信息被检测到错误,命令结束,返回探测到的错误码状态(End-toend
Guard Check Error, End-to-end Application Tag Check Error, or
End-to-end Reference Tag Check Error)。处理完保护信息之后,controller只向主机发送逻辑块数据。

b)如果namespace格式化时,设置Metadata

Size大于8,这种情况controller从NVM中读逻辑块数据和元数据,元数据包括保护信息和附件的主机格式的元数据。当逻辑块和元数据透传到controller时,嵌入在元数据中的保护信息被校验,如果保护信息被检测到错误,命令结束,返回探测到的错误码状态(End-toend
Guard Check Error, End-to-end Application Tag Check Error, or
End-to-end Reference Tag Check
Error)。处理完保护信息之后,controller把逻辑块数据和元数据交给主机,嵌入在元数据中的保护信息不做任何变化。(元数据在NVM中和主机缓冲区中大小保持一样)

8.3.1.3 Protection Infomation for Fused Operations

组成的融合操作命令在保护处理方面与单个命令保护处理过程是相同的。

8.3.1.4 Protection Information和Compare命令

图Figure
454
展示保护信息处理导致Compare命令可能产生的额外处理。Compare命令处理同时涉及Write和Read命令,作为Compare命令的一部分,从主机向controller传递的数据和保护信息,保护信息由controller执行校验,与controller执行Write命令保护信息检查并行。Compare命令的另一部分,从NVM媒介中向controller传送数据和保护信息,controller执行保护信息校验与Read命令保护信息检查并行。

8.3.1.5 Control of Protection Infomation Checking - PRCHK

保护信息的校验包括controller如下执行的一系列操作。如果命令中Protection
Infomation
Check(PRCHK)域的第二位bit2设置为1,controller将保护信息Guard域与逻辑块数据计算的CRC-16进行比较。如果PRCHK的第一位bit
1被设置为1,controller将保护信息Application Tag域的未被屏蔽位与命令中Logical Block
Application Tag(LBAT)域进行比较。如果命令中Logical Block Application Tag
Mask(LBATM)域某bit位被设置为0,相应的信息保护Application Tag域的那个bit位屏蔽掉。

对于Type
1保护,如果PRCHK域的bit 0被设置为1,controller将保护信息Reference Tag域与计算的reference
tag进行比较。为命令的第一个LBA计算的reference tag值,包含在命令的Initial Logical Block
Reference Tag(ILBRT)或Expected Initial Logical Block Reference
Tag(EILBRT)域中。如果namespace被格式化为Type 1或Type
2保护,计算出的引用标记对每个后来的逻辑块是递增的。如果namespace被格式化成Type
3保护,对于每个后续逻辑块的引用标记都与初始引用标记保持相同。不像SCSI Protection Infomation Type 1
保护那样暗中使用LBA的最小有效四字节,NVMe使用Type
1保护时,controller总是使用ILBRT或EILBRT域,并要求主机软件来初始化ILBRT或ELBRT域到LBA的最小有效四字节。Type

1保护,controller应该校验ILBRT域或EILBRT域是否正确;如果值与LBA最小有效四字节不匹配,controller结束这个命令,返回非法保护信息的状态。

对于Type

2保护,如果PRCHK域的第0位被设置为1,controller将每个逻辑块的保护信息引用标记域与计算的引用标记进行对比。计算的引用标记对每个后续的逻辑块都递增。为第一个命令的LBA计算的引用标记值,是命令中ILBRT或EILBRT域内的值。主机软件可以设置ILBRT和EILBRT域为任意值。

对于Type
3保护,如果PRCHK域的第0位被设置为1,这个命令应该被终止,返回非法保护信息状态,也可以在命令中Invalid
Field状态终止命令。当使用Type 3保护时,因为计算的引用标记保持不变,所以controller可以忽略ILBRT和EILBRT域。

保护校验可以不管命令中的PRCHK域的状态,作为保护信息Application
Tag和Reference Tag域值的一个额外处理,关闭它。如果namespace格式化为Type 1或Type
2保护,当保护信息Application
Tag的值是0xFFFF时,不论PRCHK域的状态如何,所有保护信息校验被关闭。如果namespace格式化为Type
3保护,当保护信息Application Tag的值是0xFFFF和保护信息Reference
Tag值是0xFFFFFFFF时,不论PRCHK域的状态如何,所有保护信息校验被关闭。

插入的保护信息包括Guard域中计算的CRC-16,Application Tag域中LBAT字段值,以及Reference Tag域中计算的引用标记。

《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(6.5-加-8.2-加-8.3)End-to-end_Data_Protection的更多相关文章

  1. 2019/1/10 redis学习笔记(二)

    本文不涉及集群搭建操作 关于在lua脚本中操作redis的应用场景 大家都知道redis对于单个集合的操作是原子性的;但是有可能有一种场景是这样.比如说抢红包,现在有十个人抢五份红包,抽象到我们jav ...

  2. 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承

    <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...

  3. 驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址

    驱动开发学习笔记. 0.07 Uboot链接地址 加载地址 和 链接脚本地址 最近重新看了乾龙_Heron的<ARM 上电启动及 Uboot 代码分析>(下简称<代码分析>) ...

  4. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(5.23)-- Format NVM command

    5.23 Format NVM command - NVM Command Set Specific Format NVM命令用于低级格式化NVM媒介.这个命令被host主机使用,来变更LBA数据大小 ...

  5. selenium学习笔记11——driver.get(url) 页面加载时间太长

    在执行自动化测试用例过程中,发现因为网络慢或其他原因导致driver.get(url) 时,页面一直在加载,页面没有加载完成就不会去继续执行下面的动作,但是实际上需要操作的元素已经加载出来了. 解决方 ...

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

    材料说明: 文档<NVM-Express-1_4-2019.06.10-Ratified.pdf>来自于NVMe网站:https://nvmexpress.org/ 笔记目的是学习NVMe ...

  7. 201521123003《Java程序设计》第10周学习笔记

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...

  8. Jerry Wang从2017年到2019年的自由泳学习笔记

    打腿 把注意力调整到脚部,尽量不要让他打出水面,因为在空气中大腿完全是无用功,但是如果只是脚跟出水一点,倒也没什么关心,但是主观上,要控制一下,如果你听到你的打腿是"咚咚咚咚"这样 ...

  9. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(5.21.1.10-加-6.4)Atomic_Operations

    5.21.1.10 Write Atomicity Normal 这个特性控制AWUN和NAWUN参数的操作.设置的属性值在set Feature命令的Dword 11中表明. 如果提交Get Fea ...

  10. 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8.8)-- Reservations

    8.8 Reservations 预订 NVMe的reservation预订功能,用于让两个或多个主机能够协调配合的访问共享namespace.使用这些功能的协议和方式超出了本规格说明书的范围.对这些 ...

随机推荐

  1. nethogs-linux程序网络使用情况

    netthogs可以显示每个程序的网络传输情况安装nethogs工具yum install https://mirrors.tuna.tsinghua.edu.cn/epel/7/x86_64/Pac ...

  2. 《自拍教程19》ffmpeg_音视频图像转码工具

    ffmpeg命令介绍 ffmpeg.exe(linux/imac一般不带后缀,ffmpeg), 是一款音视频编解码的命令行工具软件, 常用于多媒体测试的文件制作与转码. 我们常用的:格式工厂,Medi ...

  3. NOIP幂次方

    #include<stdio.h> ] = { ,,,,,,,,,,,,,,, };//由题意n最大为20000,所以最多会用到2的14次方 //为了防止mid+1出错,故写到15次方 i ...

  4. 杭电-------2055An Easy Problem(C语言)

    #include<stdio.h> int main() { int m; int i; scanf("%d", &m); ]; int y; int z; ; ...

  5. C语言RH850 F1KM serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 今天我要介绍的RH85 ...

  6. PAT-1005 Spell It Right 解答(C/C++/Java/python)

    1.Description: Given a non-negative integer N, your task is to compute the sum of all the digits of  ...

  7. dmock 基于Django的轻量级Mock平台

    GitHub:https://github.com/yjlch1016/dmock # dmock 基于Django的轻量级Mock平台 dmock即Django+Mock的缩写 一.思路: mock ...

  8. Play! 1.x 访问远程web

    本文参考 Play Framework 控制层发起HTTP请求 (Send Http Request In Controller) 参考连接地址:http://blog.csdn.net/fhzait ...

  9. MySql概述及入门(五)

    MySql概述及入门(五) MySQL集群搭建之读写分离 读写分离的理解 为解决单数据库节点在高并发.高压力情况下出现的性能瓶颈问题,读写分离的特性包括会话不开启事务,读语句直接发送到 salve 执 ...

  10. STT-MRAM存在的两个弊端

    随着自旋转移矩效应的发现以及材料和结构的优化,基于自旋转移矩效应的STT-MRAM器件应运而生.自从自旋转移矩效应被证实以来,一方面研究人员通过大量的努力尝试降低磁化反转的临界电流,增加热稳定性:另一 ...