zoukankan      html  css  js  c++  java
  • FC-NVMe阅读摘要(一)

    首字母缩写

    IU     Information Unit

    BLS    Basic Link Service

    ELS    Extended Link Service

    PLOGI   N_Port Login

    PRLI      Process Login

    FLOGI   Fabric Login

    P_BSY     N_Port Busy

    LS_ACC  Link Service Accept reply frame

    LS_RJT   Link Service Reject reply frame

    定义

    Data Series

      数据序列。它是构成一个特定命令全部数据传输的NVMe数据信息单元们的集。【注:对应NVMe over Fabrics的SGL数据,这些IU中的数据们称为数据序列】

    FLOGI

      Fabric Login,扩展的链路服务。

    LBA data

      从NVMe设备上读或向NVMe设备上写的数据。【注:逻辑块地址数据】

    metadata

      关于特定LBA数据的上下文的信息。【元数据】

    概况

    结构与概念

    FC是逻辑上的一个点对点串行数据通道。

    支持NVMe over FC传输能力的Nx_Ports统称为NVMe_Ports。

    FC-2层是一个交付服务,包含信息分组和定义的服务类。

    NVMe over FC端口

    作为NVM subsystem Port ID,是特定于NVM subsystem的,由NVM subsystem分配。如果多个NVM subsystem使用同一个端口,那么在多个NVM subsystem中使用的这同一个端口的NVM subsystem Port ID可能相同也可能不同。

    NVMe over FC连接

    NVMe over FC连接是对NVMe controller上抽象的一个SQ和CQ,这NVMe over FC连接可以是Admin队列也可以是一个I/O队列。

    NVMe管理队列是在创建关联NVMe_LS请求时同时创建的。创建关联NVMe_LS请求指定了Admin提交队列的大小,也是Amin完成队列的大小。

    NVMe的I/O队列也是由NVMe over Fabrics Connect命令创建。

    First burst

    在NVMe_XFER_RDY IU之前不能接收和处理NVMe_DATA IU。

    按顺序交付和行为

    4.7.1 概况

    NVMe_Ports和Fabrics必须提供在一个Exchange中按顺序交付帧。

    一些从initiator发的NVMe命令要求按顺序处理(例如fused操作)。为了容许这些命令按发送的顺序被处理,使用了Command Sequence Number。

    对于NVMe应答,所有NVMe_ERSP信息单元应答被要求按它们发送的顺序来处理。为了容许NVMe_ERSP信息单元按顺序处理,也是用了Command Sequence Number。

    没有顺序要求的NVMe应答信息单元,必须收到后尽快处理。对于应答,CQE必须按照第4.8.2章节中指定的那样生成。

    4.7.2 命令序号(CSN)

    命令序号是一个4字节无符号整数,从0开始,并且必须按照每个命令递增1。每个NVMe连接维护一个独立的递增计数器。计数达到最大表示值后绕回到0。以下是CSN的使用和判断规则:

    a)CSN必须对每个NVMe连接的第一个NVMe命令信息单元从0开始计数,并按1递增;

    b)CSN增长到最大数后绕回到0;

    c)initiator的NVMe_Port不能在第一个命令提交完成前再使用相同的CSN发送:包括NVMe_XFER_RDY信息单元、NVMe_DATA信息单元的第一个数据帧、NVMe_RSP/NVMe_ERSP信息单元、ABTS。

    d)target NVMe_Port必须使用CSN排序命令。

    4.7.3 应答序号

    4.11 数据传输

    4.11.1 概况

    NVMe over Fabrics指定了两种数据传输类型:

    a)in-capsule数据

    b)SGL数据

    In-capsule数据是指数据传输在capsule里边。SGL数据时内存范围列表指定的数据。所有这两种数据传输对于NVMe over FC来说都必须转换成数据序列【Data Series】传输。为了在NVMe over FC上对应NVMe over Fabrics数据传输,指定了如下三种传输规则:

    a)in-capsule数据;

    b)关于写的SGL数据;

    c)关于读的SGL数据。

    4.11.2 in-capsule数据

    in-capsule数据在数据序列中传输。对于数据和元数据,capsule包含指向数据序列偏移位置的指针。指针格式在NVMe中指定的。

    3.11.3 SGL数据

    4.11.3.1 概况

    NVMe over Fabrics定义了在Fabric上传输SGL的机制,FC不能在Fabric上发送SGL(例如,需要RDMA机制支持),因此SGL必须转换成Data Series中的数据在FC网络上发送。

    4.11.3.2 SGL映射

    NVMe SGL是一个内存范围列表一边接收NVMe controller把它们聚集起来,为了能通过NVMe over FC传输:

    a)写时,SGL指针指向的数据必须重新放置到Data Series中;

    b)读时,必须让NVMe controller把数据重新放入Data Series中;

    c)对于既读又写的情况,SQE中的SGL数据字段必须被重新放置。

    4.11.3.3 SGL entry格式

    为了在SQE中传输SGL,应该:

    a)SGL Descriptor Type字段必须设置为0;

    b)SGL Descriptor SubType字段必须设置为0;

    c)SGL Data Blocak描述符的Address字段必须设置为0;

    d)SGL Data Block描述的Length字段必须包含Data Series中数据的长度。

    4.12 NVMe over FC功能的Discovery

    一些NVMe over FC功能要求target端NVMe_Port和initiator端NVMe_Port达成共识写上一致的使用。下边Table 2提供了每个NVMe over FC功能的Discovery处理参考。

    4.13 NVMe over FC的应用以及FC-FS-5和FC-LS-3行为

    附录 C  NVMe over FC初始化和设备发现

    C.1 NVMe over FC设备发现步骤

    C.1.1 发起端。。

    以下步骤可以被发起端NVMe_Port用于发现交换网络拓扑中的NVMe over FC设备。

    依赖于特定配置和管理需求,除了步骤1到3,其他任何步骤可以被省略或可以被本标准之外的动作执行。

    1)执行Fabric Login;

    2)使用Name Server登陆;

    3)在Name Server上注册信息:

      a)FC-4 类型对象(参见第7.2章节);

      b)FC-4特性对象(参见第7.3章节)。

    4)向Fabric Controller注册State Change Notification(参见FC-LS-3)

    5)向Name Server下发一个GID_FF查询,含带Domain_ID Scope和Area_ID Scope字段设置成0,FC-4 Feature Bits字段设置为0x04(即:支持Discovery Service),Type code字段设置为0x28(即:NVMe over FC)。这个查询获得一个支持NVMe over FC设备的Port ID列表,以及Discovery Service。

    6)对于GID_FF在接受CT_IU中返回的支持Type 0x28和FC-4 Feature Bits为0x04所有N_Port ID的每个Port ID:

      i)NVMe层启动一个与NVMe Discovery Service的会话:

        1)发起端NVMe_Port确保有一个与FC target NVMe_Port的login。注意:如果initiator端NVMe_Port和target端NVMe_Port之间已经有了一个活动的login,那么一下步骤可以跳过:

          i)发送PLOGI;

          ii)发送PRLI,Type字段设置为0x28。

        2)FC-NVMe层创建一个关联并初始化Admin Queue连接:

          i)发送Create Association NVMe_LS到Discovery Service子系统。

        3)NVMe层通过新创建的传输层Admin Queue连接下发NVMe Connect命令。Connect命令用于创建Admin Queue。

          i)Connect命令作为写操作类型。

        4)NVMe层可以通过Admin Queue连接请求更多的NVMe或Fabric命令去处理。其他命令可以是执行NVMe Fabrics认证或获取/设置属性配置新创建的NVMe controller。

          i)命令为无数据,读或写操作类。

        5)这个NVMe Discovery Service无IO队列被创建。

        6)NVMe层下发Get Log Page命令,Log Id设置为0x70,从Discovery Service读取Discovery Log Entries。

          i)命令为读操作类。

        7)NVMe层确定不需要再与Discovery Service进一步交互就可以使用FC-NVMe终止服务。

          i)发送NVMe_Disconnect LS到Discovery Service。在LS参数里表明终止关联。

          ii)FC-NVMe target接收LS并生成LS应答。

          iii)传输层关联和所有相关连接被终止。

          iv)如果这是initiator NVMe_Port与target NVMe_Port之间仅有的最后一个关联,login可能被终止。

            1)发送LOGO到FC-NVMe target。

    7)向Name Server下发一个GID_FF查询,含带Domain_ID Scope和Area_ID Scope字段设置成0,FC-4 Feature Bits字段设置为0x01(即:支持的NVMe over FC target功能),Type code字段设置为0x28(即:NVMe over FC)。这个查询获得一个支持NVMe over FC协议设备的Port ID列表,以及支持的NVMe over Fabrics Target Port Function;

    8)操作期间,如果NVMe层选择与一个在Discovery Log记录中认定的某个NVMe存储子系统通信,NVMe层使用FC-NVMe层与NVMe subsystem建立会话;

      i)

    9)

  • 相关阅读:
    Benelux Algorithm Programming Contest 2016 Preliminary K. Translators’ Dinner(思路)
    Benelux Algorithm Programming Contest 2016 Preliminary Target Practice
    Benelux Algorithm Programming Contest 2016 Preliminary I. Rock Band
    Benelux Algorithm Programming Contest 2016 Preliminary A. Block Game
    ICPC Northeastern European Regional Contest 2019 Apprentice Learning Trajectory
    ICPC Northeastern European Regional Contest 2019 Key Storage
    2018 ACM ICPC Asia Regional
    2018 ACM ICPC Asia Regional
    Mybatis入库出现异常后,如何捕捉异常
    优雅停止 SpringBoot 服务,拒绝 kill -9 暴力停止
  • 原文地址:https://www.cnblogs.com/JamesLi/p/11589862.html
Copyright © 2011-2022 走看看