8.20 非对称namespace访问报告

8.20.1 非对称namespace访问报告概况

  非对称Namespace访问(ANA)在如下场景下产生,基于访问这个namespace的controller和NVM subsystem内部配置,namespace访问特征(例如性能或范围媒介的能力)可能变化。ANA(Asymmetric Namespace Access)Reporting用于指示关于这些访问特征的主机信息。

  共享namespace可以借助于多PCIe端口或网络端口(涉及NVMe over Fabrics)通过controller们被访问。提供对共享namespace访问的controller们可以通过所有controller提供相同的访问特征,也可以通过部分controller们提供不同的访问特征。(提供相同特征属于对称访问,提供不同的访问特征属于非对称访问)。

  私有namespace在同一时刻只能通过一个controller被访问。通过那个controller持有的namespace的访问特征,可能作为NVM subsystem内部配置变化的结果被嵌入的。如果通过该controller的namespace访问特征受到NVM subsystem内部配置的影响,那么就会发生非对称访问。

对namespace的对称访问发生在:

  • 使用一个controller时的访问特征与使用不同controller时的访问特征相同;
  • 对NVM子系统内部配置的更改不会影响访问特性;

对namespace的非对称访问发生在:

  • 使用一个controller的访问特征可能与使用不同controller时的访问特征不同;
  • 对NVM子系统内部配置的更改可能影响访问特性;

  当命令可能通过任意附带的controller非对称发送到一个共享namespace,特征可能根据使用的controller不同而存在差异;因此,当选择用于每个命令的controller访问namespace时主机应该考虑这些特征。NVM subsystem可以可以执行自主的内部重新配置,从而改变访问特性。

  如果NVM subsystem支持非对称namespace访问报告,NVM subsystem中的所有controller们必须:

  • 把Identify Controller数据结构中的Controller Multi-path I/O和namespace共享功能(CMIC)域的第3位设置为1,表示支持非对称namespace访问报告;
  • 把Identify Controller数据结构中的Asymmetric Namespace Access Capabilities(ANACAP)域第0位设置为1,表示ANA Optimized状态可以被报告的;
  • 如果ANA Non-Optimized状态可以被报告,把Identify Controller数据结构中的ANACAP域的第1位设置为1;
  • 如果ANA Inaccessible状态可以被报告,把Identify Controller数据结构中的ANACAP域的第2位设置为1;
  • 如果ANA Persistent Loss状态可以被报告,把Identify Controller数据结构中的ANACAP域的第3位设置为1;
  • 如果ANA Change状态可以被报告,把Identify Controller数据结构中的ANACAP域的第4位设置为1;
  • 支持ANA变化通知(请参考5.21.1.11章节);
  • 支持ANA log page(请参考5.14.1.12章节)。

  Namespace加载到controller支持ANA报告,必须:

  是一个ANA Group的成员;

  在Identify Namespace数据结构中的ANAGROUPID域里提供一个有效的ANA Group ID(请参考图Figure 245)。

  Figure 491展示一个例子,访问特征多样化的NVM subsystem,呈现两个独立的域。在这个例子中,非易失存储媒介namespace B和namespace C都包含在controller包含的同一个domain域里。结果是,controller 2提供对namespace B和namespace C的最优访问,而controller 1不能提供对namespace B和namespace C的最优访问。

  为了通过controller 1提供对namespace B最优访问,NVM subsystem可以重新配置或可以自动执行内部重配置动作来改变通过controller 1和controller 2对namespace B的访问特征,如图Figure 492所示。controller 2提供对namespace C的最优访问,而controller 1提供对namespace B的最优访问。

8.20.2 ANA组

  同一ANA组的成员namespace执行完全相同的异步ANA状态转换。ANA组为ANA组中的所有成员namespace维护相同的ANA状态(一个namespace的ANA状态变化只能作为ANA组的所有成员namespace的一部分发生变化)。分配namespace到ANA组的方法超出了本规格说明书的范围。

  一个有效的ANA组ID是一个非零值,小于或等于ANAGRPMAX(参考Figure 247)。

  每个ANA组的ANA组ID(ANAGRPID)应该在NVM subsystem中是唯一的。如果Identify Controller数据结构中ANACAP域的第6位被设置为1,那么当namespace在NVM subsystem中已经加载到了任何controller后ANA组ID不能变化,如果ANACAP域的第6位为0,那么当namespace在NVM subsystem中加载到一个controller后ANA组ID还可以变化。如果ANA组ID变化,controller应该发布第8.20.3.6章节中描述的那个Asymetric Namespace Access Change Notice。

  Figure 493展示四个namespace:

  • 私有namespace A 在第一个ANA组中;
  • namespace B和namespace D同时在第二个ANA组中;
  • namespace C在第三个ANA组中。

8.20.3 ANA状态

  Asymmetric Namespace Access State表示关于controller与ANA组之间的关系特征的信息。如下是定义的非对称namespace访问状态:

  • ANA Optimized ;
  • ANA Non-Optimized ;
  • ANA Inaccessible ;
  • ANA Persistent Loss ;
  • ANA Change .

8.20.3.1 ANA Optimized 状态

  当controller和ANA组之间的关系处于这个状态,这个组中到每个namespace的关系特征都是optimized。controller处理的命令报告这个可以对这个ANA组中的任何namespace都可以提供最优访问特征。controller支持ANA Reporting就应该支持报告这个状态。

  当处于这个状态时,所有被这个namespace支持的命令,功能,和操作应该依照本规格说明书中描述的执行。

8.20.3.2 ANA Non-optimized 状态

  当controller和ANA组之间关系于处于这个状态时,这个组中到每个namespace的关系特征都是Non-optimized。controller处理的命令报告这个可以对这个ANA组中的任何namespace都可以提供Non-optimized访问特征(例如一些命令的处理,特别是那些涉及数据传输,相比于controller报告optimized状态,可以低性能操作和使用更少的有效NVM subsystem资源)。对报告这个状态的支持是可选的。

  当处于这个状态,所有被namespace支持的命令,功能,和操作应该依照本规格说明书中描述的执行。

8.20.3.3 ANA Inaccessible 状态

  当controller和ANA组之间关系于处于这个状态时,这个组中到每个namespace的关系特征都是Inaccessible。被controller处理的命令报告这个可以对这个ANA组中的任何namespace都不能访问用户数据。报告这个状态之后的将来(例如随后ANA状态发生了变化),namespace也可以变为通过这个controller可访问。对报告这个状态的支持是可选的。

  当处于这个状态,准确的namespace相关能力信息或许获取不到了。因此,一些Identify namespace数据中返回的namespace能力信息被置成了0。对于namespace能力信息,主机应该使用通过处于ANA Optimized或ANA Non-optimized状态的controller返回的信息。

  除了那些在第8.20.4章节中描述的命令,如果这些命令是在命令指定的namespace与处理命令的controller之间的关系处于这种状态时提交的,controller应该让命令失败,返回Asymmetric Access Inaccessible状态码。

  对于namespace,当被controller报告ANA Inaccessible状态,主机应该在其他报告ANA Optimized状态或ANA Non-optimized状态的controller重新尝试命令。如果没有controller报告ANA Optimized状态和ANA Non-optimized状态,那么可以发生如下转换,controller报告Inaccessible状态可以变成accessible,主机应该在报告Inaccessible状态的controller上重试命令至少ANATT秒(参考Figure 247)。参考第8.21.2章节。

8.20.3.4 ANA Persistent Loss 状态

  当controller和ANA组之间关系于处于这个状态时,这个组中到每个namespace的关系特征都是持久地不可访问。被对ANA组报告这个状态的controller处理的命令都持久地不能访问那个ANA组中namespace的用户数据。controller和ANA组之间的关系处于此状态的,不应转换到任何其他ANA状态。对报告这个状态的支持是可选的。

  当处于这个状态,准确的namespace相关能力信息或许获取不到了。因此,一些Identify namespace数据(例如NUSE域和NVMCAP域)中返回的namespace能力信息被置成了0。对于namespace能力信息,主机应该使用通过处于ANA Optimized或ANA Non-optimized状态的controller返回的信息。

  除了那些在第8.20.4章节中描述的命令,如果这些命令是在命令指定的namespace与处理命令的controller之间的关系处于这种状态时提交的,controller应该让命令失败,返回Asymmetric Access Persistent Loss状态码。

  对于namespace,当controller报告ANA Persistent Loss状态,主机应该在其他报告ANA Optimized状态或ANA Non-optimized状态的controller上重试命令。如果没有controller报告ANA Optimized状态和ANA Non-optimized状态,那么可以发生如下转换,controller报告Inaccessible状态可以变成accessible,主机应该在报告Inaccessible状态的controller上重试命令至少ANATT秒(参考Figure 247)。

8.20.3.5 ANA Change 状态

  从一个ANA状态到另一个ANA状态的变化被称为a transition转换【或状态切换】,状态切换发生在如下方式,ANA变化状态对主机不可见(例如ANA变化状态可以在Asymmetric Namespace Access log的Asymmetric Namespace Access State域中报告,也可以不报告),对报告这个状态的支持是可选的。

  除了那些在第8.20.4章节中描述的命令,如果这些命令是在命令指定的namespace与处理命令的controller之间的关系处于这种状态时提交的,controller应该让命令失败,返回Asymmetric Access Transition状态码。

  对于namespace,当ANA 变化状态时被controller报告,主机应该:

  a)短暂的延时之后,在同一个controller上重试命令,延时至少ANATT(参照Figure247)秒(例如,如果ANATT是30,用10秒间隔执行3次重试,或间隔3秒重试10次);

  b)在其他报告ANA Optimized状态或ANA Non-optimized状态的controller上边重试命令。

8.20.3.6 Asymmetric Namespace Access Change Notifications

  在controller上如果Asymmetric Namespace Access Change Notices被使能(参考第5.21.1.11),那么发生变化时Asymmetric Namespace Access Change Notice应该被controller发送,发送变化的地方:

a)如果ANA组ID变化;

b)如果ANA状态转换失败(例如状态转换已经开始但没有完成,或controller返回了转换之前存在的状态);

c)在进入一下ANA状态时:

  • ANA Optimized状态;
  • ANA Non-optimized状态;
  • ANA Inaccessible状态;
  • ANA Persistent Loss 状态。

8.20.4 ANA状态命令处理影响

Admin命令的处理,如下特点的Admin命令:

  • 非NVM Command命令集指定的命令;
  • 不使用Namespace Identify(Figure 139 - “Namespace Identify Used”列标识为“No”),

  不受ANA状态的影响,除了下边Figure 494指定的。

  Figure 494 描述对命令处理的ANA影响

与ANA相关的其他补充内容

1)主机 Identify Controller data structure时,存储端需提供如下信息:

1.1)CMIC信息,标识Controller是否支持多路径I/O

1.2)Controller支持多路径I/O时,ANA相关参数

2)主机 Identify Namespace data structure时,存储端需提供如下ANA相关信息:

3)get feature时,存储端需提供如下ANA相关信息:

只涉及了查询Asynchronous Event Configuration,无单独查询ANA的feature。

4)get log page时,存储端需提供如下ANA相关信息:

请参考Get Log Page的5.14.1.12 Asymmetric Namespace Access (Log Identifier 0Ch):

https://www.cnblogs.com/JamesLi/p/13162892.html

5)异步事件通知,涉及如下ANA相关信息:

  详情参考异步事件的细节;

转载于:《NVM-Express-1_4-2019.06.10-Ratified》学习笔记(8.20)-- ANA - JamesLi_1119401255 - 博客园 (cnblogs.com)

NVME(学习笔记八)—Asymmetric Namespace Report的更多相关文章

  1. 【opencv学习笔记八】创建TrackBar轨迹条

    createTrackbar这个函数我们以后会经常用到,它创建一个可以调整数值的轨迹条,并将轨迹条附加到指定的窗口上,使用起来很方便.首先大家要记住,它往往会和一个回调函数配合起来使用.先看下他的函数 ...

  2. Learning ROS forRobotics Programming Second Edition学习笔记(八)indigo rviz gazebo

    中文译著已经出版,详情请参考:http://blog.csdn.net/ZhangRelay/article/category/6506865 Learning ROS forRobotics Pro ...

  3. python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑

    python3.4学习笔记(八) Python第三方库安装与使用,包管理工具解惑 许多人在安装Python第三方库的时候, 经常会为一个问题困扰:到底应该下载什么格式的文件?当我们点开下载页时, 一般 ...

  4. Go语言学习笔记八: 数组

    Go语言学习笔记八: 数组 数组地球人都知道.所以只说说Go语言的特殊(奇葩)写法. 我一直在想一个人参与了两种语言的设计,但是最后两种语言的语法差异这么大.这是自己否定自己么,为什么不与之前统一一下 ...

  5. go微服务框架kratos学习笔记八 (kratos的依赖注入)

    目录 go微服务框架kratos学习笔记八(kratos的依赖注入) 什么是依赖注入 google wire kratos中的wire Providers injector(注入器) Binding ...

  6. Redis学习笔记八:集群模式

    作者:Grey 原文地址:Redis学习笔记八:集群模式 前面提到的Redis学习笔记七:主从复制和哨兵只能解决Redis的单点压力大和单点故障问题,接下来要讲的Redis Cluster模式,主要是 ...

  7. Java IO学习笔记八:Netty入门

    作者:Grey 原文地址:Java IO学习笔记八:Netty入门 多路复用多线程方式还是有点麻烦,Netty帮我们做了封装,大大简化了编码的复杂度,接下来熟悉一下netty的基本使用. Netty+ ...

  8. ROS学习笔记八:基于Qt搭建ROS开发环境

    1 前言 本文介绍一种Qt下进行ROS开发的完美方案,使用的是ros-industrial的Levi-Armstrong在2015年12月开发的一个Qt插件ros_qtc_plugin,这个插件使得Q ...

  9. vue学习笔记(八)组件校验&通信

    前言 在上一章博客的内容中vue学习笔记(七)组件我们初步的认识了组件,并学会了如何定义局部组件和全局组件,上一篇内容仅仅只是对组件一个简单的入门,并没有深入的了解组件当中的其它机制,本篇博客将会带大 ...

  10. java jvm学习笔记八(实现jar包的代码签名)

     欢迎装载请说明出处:http://blog.csdn.net/yfqnihao/article/details/8267669 课程源码:http://download.csdn.net/detai ...

随机推荐

  1. 根据返回的多层Json来进行创建文件,达到根据阶层创建,然后压缩成压缩包进行下载

    临时接到一个需求说让根据按照下面的这个图片的结构来打包下载指定位置下的文件到指定位置! 实现思路: 1.把已经实现的树形结构的代码进行调用,拿到他的数据进行创建对应的文件夹 2.因为结构下方的文件没有 ...

  2. 【Linux】字符驱动之sysfs接口实现

    [来源]https://blog.csdn.net/qq_20553613/article/details/104556269

  3. [转帖]shell编程:shell变量的核心基础知识与实战(二)

    shell编程:shell变量的核心基础知识与实战(二) https://www.cnblogs.com/luoahong/articles/9152039.html Shell 变量类型 变量可以分 ...

  4. [转帖]使用 TiDB 读取 TiFlash

    https://docs.pingcap.com/zh/tidb/stable/use-tidb-to-read-tiflash 本文档介绍如何使用 TiDB 读取 TiFlash 副本. TiDB ...

  5. [转帖]如何使用 sed 命令删除文件中的行

    https://zhuanlan.zhihu.com/p/80212245 sed 命令是 Linux 中的重要命令之一,在文件处理方面有着重要作用.可用于删除或移动与给定模式匹配的特定行.-- Ma ...

  6. [转帖]如何部署windows版本的oswatcher

    2017-02-22 没有评论 windows上也有os watcher:OSWFW. 目前支持的windows版本是: Windows XP (x86 & x64)Windows 7 (x8 ...

  7. [转帖]Redis如何绑定CPU

    文章系转载,便于分类和归纳,源文地址:https://www.yisu.com/zixun/672271.html 绑定 CPU Redis 6.0 开始支持绑定 CPU,可以有效减少线程上下文切换. ...

  8. [转帖]Linux make: g++: Command not found

    https://www.cnblogs.com/kerrycode/p/4748606.html Linux使用make命令时遇到"make: g++: Command not found& ...

  9. [转帖]⭐万字长篇超详细的图解Tomcat中间件方方面面储备知识⭐

    https://developer.aliyun.com/article/885079?spm=a2c6h.24874632.expert-profile.321.7c46cfe9h5DxWK 202 ...

  10. [转帖]Perf IPC以及CPU性能

    https://plantegg.github.io/2021/05/16/Perf%20IPC%E4%BB%A5%E5%8F%8ACPU%E5%88%A9%E7%94%A8%E7%8E%87/ Pe ...