《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 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的更多相关文章
- PHP学习笔记 - 进阶篇(10)
PHP学习笔记 - 进阶篇(10) 异常处理 抛出一个异常 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被 ...
- 《Java核心技术·卷Ⅰ:基础知识(原版10》学习笔记 第5章 继承
<Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 目录 <Java核心技术·卷Ⅰ:基础知识(原版10>学习笔记 第5章 继承 5.1 类.超类和子类 5.1 ...
- Effective STL 学习笔记 Item 21:Comparison Function 相关
Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; f ...
- Flutter学习笔记(21)--TextField文本框组件和Card卡片组件
如需转载,请注明出处:Flutter学习笔记(21)--TextField文本框组件和Card卡片组件 今天来学习下TextField文本框组件和Card卡片组件. 只要是应用程序就少不了交互,基本上 ...
- angular学习笔记(三十)-指令(10)-require和controller
本篇介绍指令的最后两个属性,require和controller 当一个指令需要和父元素指令进行通信的时候,它们就会用到这两个属性,什么意思还是要看栗子: html: <outer‐direct ...
- 《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数据大小 ...
- 2019/1/10 redis学习笔记(二)
本文不涉及集群搭建操作 关于在lua脚本中操作redis的应用场景 大家都知道redis对于单个集合的操作是原子性的;但是有可能有一种场景是这样.比如说抢红包,现在有十个人抢五份红包,抽象到我们jav ...
- 《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(1)
材料说明: 文档<NVM-Express-1_4-2019.06.10-Ratified.pdf>来自于NVMe网站:https://nvmexpress.org/ 笔记目的是学习NVMe ...
- 201521123003《Java程序设计》第10周学习笔记
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-2 1.1 截图你的提交结果(出 ...
随机推荐
- 快速筛出topK的快速选择算法和BFPRT优化
本文始发于个人公众号:TechFlow,原创不易,求个关注 在之前Python系列当中,我们介绍了heapq这个库的用法,它可以在\(O(nlogn)\)的时间里筛选出前K大或者前K小的元素.今天我们 ...
- Pyinstaller打包exe,丢失图标等问题
Pyinstaller打包exe,丢失图标等问题 一.原因 exe运行时会解压一个名为'_MEI*'的资源文件夹到电脑的临时目录,程序结束时删除. 程序里使用'\图标.png'这样的路径,exe运行时 ...
- ASP.NET Core MVC 网站学习笔记
ASP.NET Core MVC 网站学习笔记 魏刘宏 2020 年 2 月 17 日 最近因为” 新冠” 疫情在家办公,学习了 ASP.NET Core MVC 网站的一些知识,记录如下. 一.新建 ...
- ACM 英文学习系列
因为ACM题目描述全是英文,所以有必要学习学习相关词汇...内心极为无奈 废话不多说 rooted binary tree 有根二叉树 integers n 英[ˈɪntɪdʒəz] 整数 ...
- 利用低代码优化人力资源配置,为软件开发降本提效 ZT
低代码 是一种主要应用于企业信息化领域的快速开发技术.借助低代码,开发者无需编码即可生成企业应用的常见功能,少量编码能开发出更多扩展功能.有了低代码技术,IT团队甚至业务团队都可以参与到编写应用程序当 ...
- TensorFlow安装-(Ubuntu18.04.3 & Anaconda3)
1.背景 使用ubuntu18.04.3安装Anaconda3之后使用网上教程安装tensorflow失败,踩了多个坑,特此总结经验 附官方教程:https://tensorflow.google.c ...
- 查看mysql是否锁表了
1.查看表是否被锁: (1)直接在mysql命令行执行:show engine innodb status\G. (2)查看造成死锁的sql语句,分析索引情况,然后优化sql. (3)然后show p ...
- 浅谈python的第三方库——pandas(终)
作为pandas系列的最终章,本文引出一个数据"复制"问题. 示例如下: 从上图中可以看到:我们对data_pd做了删除一行的操作,但是这并没有改变变量data_pd在内存中的值, ...
- 洛谷P1880 [NOI1995]石子合并 纪中21日c组T4 2119. 【2016-12-30普及组模拟】环状石子归并
洛谷P1880 石子合并 纪中2119. 环状石子归并 洛谷传送门 题目描述1 在一个圆形操场的四周摆放N堆石子,现要将石子有次序地合并成一堆.规定每次只能选相邻的2堆合并成新的一堆,并将新的一堆的石 ...
- TypeScript(进行中)
https://ts.xcatliu.com 简介 什么是 TypeScript 即使不显式的定义类型,也能够自动做出类型推论 即使第三方库不是用 TypeScript 写的,也可以编写单独的类型文件 ...