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. Debian 10 或Ubuntu 安装后启动黑屏解决办法

    对于双显卡设备,很有可能是开源显卡驱动异常导致无法启动,在启动参数那一行加上 nouveau.modeset=0 禁用nouveau驱动即可进入系统

  2. jquery带下拉列表的购物车组件封装

    按照国际惯例先放效果图 安静的时候它长这样 等待加载时它长这样(功能是设置的按需加载,网速慢或者加载数据大时会出现) 加载之后购物车没有商品时这样 有商品长这样 接下来放代码: cart.html & ...

  3. Android布局管理器-使用FrameLayout帧布局管理器显示层叠的正方形以及前景照片

    场景 Android布局管理器-使用LinearLayout实现简单的登录窗口布局: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details ...

  4. redis中hash数据类型

    remoteSelf:1>hset website google "www.google.com" "1" remoteSelf:1>hget we ...

  5. linux 查看系统资源使用信息的一些命令集合

    linux上的进程查看及管理工具: pstree,ps,pidof,pgrep,top,htop,glances,pmap,vmstat,dstat,kill,pkill,job,bg,fg,nohu ...

  6. Premiere Pro CC2018安装教程

    Premiere Pro CC2018安装教程 下载安装包:去官网下载或者百度PR2018的安装包 解压安装包后,找到Set-up.exe,右键,打开 安装的时候我们需要注册一个账号,点击“获取Ado ...

  7. 开源版 nignx 不支持 ntml 验证

    最近在一个环境相对比较复杂(F5+nginx)的项目中部署系统,系统要集成windows域验证来实现单点登录(即使用windows账户直接登录系统,不用输入账号密码).这里就遇到问题了,域认证很不稳定 ...

  8. hash类型的应用场景 —— Redis实战经验

    hash类型是一个string类型的field和value的映射表,每个 hash 可以存储 232 - 1 键值对(40多亿),hash类型主要有以下应用场景. 1. 购物车 以用户id为key,商 ...

  9. 并发编程之J.U.C的第一篇

    并发编程之J.U.C AQS 原理 ReentrantLock 原理 1. 非公平锁实现原理 2)可重入原理 3. 可打断原理 5) 条件变量实现原理 3. 读写锁 3.1 ReentrantRead ...

  10. 纪中17日T1 2321. 方程

    纪中17日T1 2321. 方程 (File IO): input:cti.in output:cti.out 时间限制: 1000 ms  空间限制: 262144 KB  具体限制   Goto ...