5.21.1.10 Write Atomicity Normal

这个特性控制AWUN和NAWUN参数的操作。设置的属性值在set Feature命令的Dword 11中表明。

如果提交Get Feature命令查询这个特性,属性值填写到completion应答CQE的Dword 0中返回。

【补充知识】

在Feature中设置原子操作的位置在Feature Identitiers的0Ah处,如下:

【参照spdk代码如下】

【参考Figure 286 可知,当前只用了一个bit位,参考代码如下】

6.4 Atomic Operations 原子操作

对原子操作controller所支持的参数定义概况如下Figure 350。这些参数可能影响命令的行为和执行顺序,基于写大小(基于每个controller或每个namespace)。

在Identity Controller数据结构中,NVM subsystem记录了在各种条件下能保证原子写入的大小,这个大小是写操作的逻辑块数,这里说的各种条件包括普通操作、电源失效、以及Compare&Write融合操作。在Identity Controller数据结构中记录【report】的这些值适用于所有namespace,支持任何namespace格式,它形成一个基线值保证不变化。

一个NVM subsystem可以对这些字段域,在Identity Namespace数据结构中为每个namespace记录【report】特定于这个namespace格式的值。如果一个NVM subsystem基于每个namespace记录值,那么这些值必须大于或等于在Identity Controller数据结构中表明的相应基线值。

(Namespace) Atomic Write Unit Normal,(Namespace) Atomic Write Unit Power Fail,(Namespace) Atomic Compare & Write Unit 这些在Identity Controller数据结构中或在Identity Namespace数据结构中的字段域值,对外报告呈现哪一个值,取决于它需要的值是基线还是特定于具体namespace。

controller可以支持Atomic Boundaries,这个边界要求原子操作不能跨越。Namespace Atomic Boundary Parameters (NABSN, NABO, and NABSPF)对namespace定义这些边界。如果NABSN或NABSPF被设置了非0值,这个namespace就支持Atomic Boundaries。如果namespace不支持Atomic Boundaries就应该把NABSN和NABSPF字段域设置为0。Namespace Atomicity Parameter 和 Namespace Atomic Boundary Parameter 值可能是格式特定的,如果namespace格式被修改这些值也可能随之变化。

在共享namespace的情况下,被单个controller执行的操作对共享namespace在写原子性级别是原子性的,写原子性级别按命令提交到的那个controller的相应的Identity Controller或Identity Namespace数据结构中的记录。

6.4.1 AWUN/NAWUN

AWUN/NAWUN控制命令执行的原子性,是在与其他命令关系方面。它们利用将数据块写入NVM时内部命令序列化,防止在NVM上出现包括一部分数据来自一个新命令而一部分数据来自其他一个或多个新命令的数据块。

如果被提交的写命令使用的大小小于或等于AWUN/NAWUN值,写命令也没有穿越原子边界,那么相对于其他读写命令,这个到NVM的写命令做到原子性,对host主机是能够有保证的。如果被提交的写命令使用的大小大于AWUN/NAWUN值,或穿越了原子边界,那么对命令原子性是没有保证的。对于那些由于电源失效或其他错误条件引起的写错误来说,AWUN/NAWUN没有任何适用性。

host主机可以通过配置Write Atomicity Normal特性(请参考5.21.1.10章节的feature设置)来设置成不需要AWUN和NAWUN,这种设置可能在一些执行中带来高性能。

6.4.1.1 AWUN/NAWUN例子

这个例子中,AWUN/NAWUN的值是2K(相当于4个512字节的逻辑块),namespace原子边界大小(NABSN和NABSPF)为0。主机下发两个写命令,每个命令的写长度都是2K。命令A写LBAs 0-3,命令B写LBAs 1-4,都是写四个512字节的逻辑块。

由于命令A和命令B的大小都符合小于或等于AWUN/NAWUN的值,controller串行化这两个写命令,LBAs 0-4中的结果数据反映出命令A后跟命令B,或者命令B后跟命令A,但不会出现一些逻辑块被来自命令A的数据写入而一些逻辑块被来自命令B的数据写入这种中间状态。Figure 351展示LBAs 0-4中数据的有效结果和无效结果的例子。

如果写命令A和写命令B的大小超过AWUN/NAWUN的值,那么顺序是无法保证的,命令A和命令B执行后,在指定的LBA范围内有可能是来自命令A和命令B数据的任意组合。

6.4.2 AWUPF/NAWUPF

AWUPF和NAWUPF指出当电源失效或其他错误条件中断写操作引起破损(不完整)写时controller的行为。破损写是指那些应该连续写入的数据逻辑块实际上只有一些存储到NVM中,剩下的目标逻辑块处于不确定状态,或许一些逻辑块包含原始数据一些逻辑块包含来自写操作的新数据。

如果提交的写命令大小小于或等于AWUPF/NAWUPF值,并且写命令也没有超越原子边界,如果由于电源失效或其他错误条件而命令失败,controller保证随后的读命令,读刚才与写命令相关的逻辑块必须返回下边两种数据的其中之一:

所有的都是老数据

所有的都是新数据

如果提交的写命令大小大于AWUPF/NAWUPF值,或写命令超越原子边界,那么对随后读出的相关逻辑块数据不做保证。

6.4.2.1 AWUPF/NAWUPF例子

6.4.3 Atomic Boundaries 原子边界

原子边界控制controller如何执行第6.4章节中定义的原子性保证,并在命令中指定LBA范围的对齐方式。原子边界仅仅基于每个namespace定义。如果NABSN或NABSPF设置了非0值那么namespace支持原子边界。

为确保后向兼容,即使写入跨域了原子边界,AWUN、AWUPF和ACWU记录的值也必须要支持它们。如果controller不能保证跨越原子边界的原子性,则controller应设置AWUN、AWUPF和ACWU为0h(0就表示1个LBA)。

边界大小必须大于或等于相应的原子写大小(即:NABSN/NABSPF分别大于或等于NAWUN/NAWUPF)。NABO必须小于或等于NABSN和NABSPF。

对于Boundary Offset (NABO) 和Boundary Size (NABSN或NABSPF) ,如果没有逻辑块地址越界,命令中LBA范围位于Namespace Atomic Boundary之内:对于任意大于等于0的整数y,范围是Boundary Offset + (y * Boundary Size)。

如果一个写命令超越了NABSN值指定的原子边界,那么基于NAWUN参数的原子性都无法保证。如果写命令超越了NABSPF值指定的原子边界,那么基于NAWUPF参数的原子性都无法保证。

Figure 354展示了一个原子边界的行为示例。单独写到蓝色或黄色区域不超越原子边界。

《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(5.21.1.10-加-6.4)Atomic_Operations的更多相关文章

  1. PHP学习笔记 - 进阶篇(10)

    PHP学习笔记 - 进阶篇(10) 异常处理 抛出一个异常 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被 ...

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

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

  3. Effective STL 学习笔记 Item 21:Comparison Function 相关

    Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; f ...

  4. Flutter学习笔记(21)--TextField文本框组件和Card卡片组件

    如需转载,请注明出处:Flutter学习笔记(21)--TextField文本框组件和Card卡片组件 今天来学习下TextField文本框组件和Card卡片组件. 只要是应用程序就少不了交互,基本上 ...

  5. angular学习笔记(三十)-指令(10)-require和controller

    本篇介绍指令的最后两个属性,require和controller 当一个指令需要和父元素指令进行通信的时候,它们就会用到这两个属性,什么意思还是要看栗子: html: <outer‐direct ...

  6. 《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数据大小 ...

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

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

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

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

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

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

随机推荐

  1. Python学习小记(5)---Magic Method

    具体见The Python Language Reference 与Attribute相关的有 __get__ __set__ __getattribute__ __getattr__ __setat ...

  2. Python json 序列号字典 文本的存储和读取

    rootDir='./resources/v1/'# 根目录 # 按钮测试图片 btnTestPicUrl = { 'armyAttack' : rootDir+'testPic/gj2.jpg', ...

  3. SAP SD 销售中的借贷项凭证

    SAP SD 销售中的借贷项凭证 SAP系统中,正常与客户的应收款都能通过销售订单来实现. 但实际操作中,常有收款后发现价格有误或其他原因需退款客户或补收客户货款的情况,或者客户需要少量的材料,但不能 ...

  4. Spring Boot 配置拦截器方式

    其实spring boot拦截器的配置方式和springMVC差不多,只有一些小的改变需要注意下就ok了.下面主要介绍两种常用的拦截器: 一.基于URL实现的拦截器: public class Log ...

  5. NFS服务配置 Linux

    两台机器: NFS服务器:192.168.1.100 (我的是Ubuntu系统) 客户机:192.168.1.123 (保证两台机器互相可以ping通) 需求:在NFS服务器上创建一个共享文件夹/ho ...

  6. fastJson&edis

    fastJson&redis 1. fastJson 1.1 依赖 <dependency> <groupId>com.alibaba</groupId> ...

  7. PHP-CMS代码审计(4)

    这次找了个发卡平台,url:  https://files.cnblogs.com/files/b1gstar/kamiphp.zip 从52破解上下载的 : 先把网站搭建起来. 网站没有采用mvc框 ...

  8. tomcat虚拟路径的配置方法

    方式一: 将web项目配置到webapps以外的目录 在conf/server.xml中配置,找到<host>标签,<Content docBase="E:\yqs\Jsp ...

  9. AI 数学基础 张量 范数

    1.张量 几何代数中定义的张量是基于向量和矩阵的推广,通俗一点理解的话,我们可以将标量视为零阶张量,矢量视为一阶张量,那么矩阵就是二阶张量. 例如,可以将任意一张彩色图片表示成一个三阶张量,三个维度分 ...

  10. MySQL 8 模式匹配

    MySQL 提供了两种模式匹配: 标准 SQL 模式匹配 基于扩展正则的模式匹配 SQL 模式匹配使用 LIKE 命令进行模式匹配操作, _ 匹配任意单个字符.% 匹配任意多个字符,包含 0 个字符 ...