3.6Shutdown处理

本节介绍了在断电条件之前进行shutdown处理的推荐步骤。

3.6.1基于内存传输的Controller Shutdown

建议主机在即将发生断电或shutdown情况时按照本节中的步骤执行控制器的有序shutdown。

主机应按顺序执行以下操作以对控制器 normal shutdown:

  1. 如果控制器已经enable(即 CC.EN 设置为“1”):
      a.停止向控制器提交任何新的 I/O 命令并允许任何未完成的命令完成;
      b.如果控制器实现了 I/O 队列,那么主机应该使用 Delete I/O Submission Queue 命令删除所有 I/O Submission Queue。Delete I/O Submission Queue 命令成功完成的结果是任何剩余未完成的命令都被中止;
      c.如果控制器实现了 I/O 队列,那么主机应该使用 Delete I/O Completion Queue 命令删除所有 I/O Completion Queue;
  2. 主机应将 Shutdown Notification(CC.SHN) 字段设置为 01b 以指示正常的控制器shutdown操作。控制器通过将 Shutdown Status(CSTS.SHST) 字段更新为 10b 并将 Shutdown Type(CSTS.ST) 字段清除为“0”来指示shutdown处理何时完成。

主机应按顺序执行以下操作以实现 abrupt shutdown:

  1. 如果控制器已enable(即CC.EN设置为“1”),则停止向控制器提交任何新的I/O命令;
  2. 主机应将 Shutdown Notification(CC.SHN) 字段设置为 10b 以指示 abrupt shutdown 操作。控制器通过将 Shutdown Status(CSTS.SHST) 字段更新为 10b 并将 CSTS.ST 清为“0”来指示shutdown处理何时完成。

要进入 D3 power state,应遵循为控制器normal shutdown的关闭步骤。

建议主机至少等待 Identify Controller data structure 中报告的 RTD3 Entry Latency 以完成shutdown操作;如果 RTD3 Entry Latency 中报告的值为 0h,则主机应至少等待一秒。不建议通过 CC.EN 字段disable控制器。这会导致 Controller Reset,这可能会影响完成shutdown处理所需的时间。在shutdown处理过程中,控制器可能会中止任何命令,状态码为 Commands Aborted due to Power Loss Notification。

当 CSTS.ST 清为“0”时,可以安全地给控制器断电,并且 CSTS.SHST 表示控制器shutdown处理已完成(无论 CC.EN 的值如何)。在 CC.EN 从“0”变为“1”之前,控制器断电仍然是安全的。 要在控制器报告控制器shutdown处理完成(即 CSTS.ST 清0且 CSTS.SHST 设置为 10b)后使用 CC.EN 开始在控制器上执行命令:

  • 如果 CC.EN 设置为“1”,则该控制器需要进行Controller Reset(CC.EN 从“1”清为“0”);要么
  • 如果 CC.EN 被清为“0”,则需要enable控制器(即,CC.EN 从“0”设置为“1”)。

然后应该在该控制器上执行初始化序列。

在控制器shutdown之前主机是否中止所有未完成的命令到 Admin Queue是一个实现选择。当控制器报告shutdown处理完成时,唯一应该在 Admin Queue 中未完成的命令是Asynchronous Event Request 命令。

3.6.2基于消息传输的Controller Shutdown

要启动控制器的shutdown,主机应使用 Property Set 命令(请参阅第 6.6 节)将 Shutdown Notification (CC.SHN) 字段设置为:

  • 01b 启动 normal shutdown 操作;要么
  • 10b 启动 abrupt shutdown。

在主机启动控制器shutdown后,主机可以在 NVMe Transport 级别断开连接,或者主机可以选择轮询 CSTS.SHST 以确定控制器何时完成关闭(即,控制器不应在 NVMe Transport 级别启动断开连接)。在启动 shutdown 之前主机是否中止所有未完成的命令是一个实现选择。

CC.EN 字段不用于关闭控制器(即,它用于 Controller Reset)。

从控制器 shutdown 开始到:

  • 发生 Controller Level Reset;或者
  • 如果控制器是动态的,则从 NVM 子系统中移除,

控制器应:

  • 仅处理 Fabrics 命令(参见Figure 375);且
  • 禁用 Keep Alive timer(如果支持)。

CC.EN 转换为“0”后(即,由于 Controller Level Reset),主机和控制器之间的关联应保留至少 2 分钟。在此时间之后,如果尚未重新enable控制器,则可能会删除关联。

3.6.3NVM Subsystem Shutdown

NVM Subsystem Shutdown是指由一个Controller发起的对一个Domain或NVM Subsystem中的所有控制器进行shutdown操作。

3.6.3.1只有一个Domain的NVM子系统的NVM Subsystem Shutdown

NVM 子系统内所有控制器的 normal shutdown(即 normal NVM Subsystem Shutdown)由以下方式启动:

  • 当 CAP.CPS 设置为 11b 时,主机将值 4E726D6Ch (“Nrml”) 写入 NSSD.NSSC;或
  • 向 Management Endpoint(请参阅 NVM Express Management Interface Specification)发出 NVMe-

MI Shutdown 命令,指定 normal shutdown。

对于此次 normal NVM Subsystem Shutdown的 NVM 子系统中的每个控制器,如果:

  • CSTS.SHST 设置为 00b;且
  • 存在未完成的 Asynchronous Event Request 命令,

则控制器应在关闭控制器之前发出 Normal NVM Subsystem Shutdown 事件。

NVM 子系统内所有控制器的 abrupt shutdown(即 abrupt NVM Subsystem Shutdown)由以下方式启动:

  • 当 CAP.CPS 设置为 11b 时,主机将值 41627074h(“Abpt”)写入 NSSD.NSSC;要么
  • 向 Management Endpoint(请参阅 NVM Express Management Interface Specification)发出 NVMe-MI Shutdown 命令,指定 abrupt shutdown。

对于 normal shutdown 或 abrupt NVM Subsystem Shutdown,当 CSTS.ST 设置为“1”并且 CSTS.SHST 指示shutdown处理完成(即,CSTS.SHST 设置为 10b)时,在 NVM 子系统中的任何控制器上关闭 NVM 子系统是安全的。在发生 NVM Subsystem Reset 之前,关闭 NVM 子系统的电源仍然是安全的。

如果 NVM 子系统内正在处理或完成normal或abrupt NVM Subsystem Shutdown(即,在 NVM 子系统中的所有控制器上,CSTS.ST 设置为“1”并且 CSTS.SHST 设置为 01b 或 10b),则:

  • NVM Subsystem Reset 将 NVM 子系统中所有控制器中的 CSTS.SHST 清除为 00b;并且
  • 任何其他类型的 Controller Level Reset 对该 NVM Subsystem Shutdown 的处理没有影响。

3.6.3.2具有多个Domain的NVM子系统的Domain Shutdown

此控制器和关联域内的所有控制器上的 normal NVM Subsystem Shutdown 由以下方式启动: - 当 CAP.CPS 设置为 10b 时,主机将值 4E726D6Ch ("Nrml") 写入 NSSD.NSSC;或者 - 向 Management Endpoint(请参阅 NVM Express Management Interface Specification)发出 NVMe-MI Shutdown 命令,指定 normal shutdown。

对于此 normal NVM subsystem shutdown 的域中的每个控制器,若:

  • CSTS.SHST 清为 00b;并且
  • 存在未完成的 Asynchronous Event Request 命令,

则控制器应在关闭控制器之前发出 Normal NVM Subsystem Shutdown 事件。

对此控制器和关联域内的所有控制器的 abrupt NVM Subsystem Shutdown 由以下方式启动:

  • 当 CAP.CPS 设置为 10b 时,主机将值 41627074h(“Abpt”)写入 NSSD.NSSC;要么
  • 向 Management Endpoint(请参阅 NVM Express Management Interface Specification)发出 NVMe-MI Shutdown 命令,指定 abrupt shutdown。

对于域上的normal或abrupt NVM Subsystem Shutdown,当 CSTS.ST 设置为“1”并且 CSTS.SHST 指示shutdown处理完成(即 CSTS.SHST 设置为 10b)时,在域中的任何控制器上对域进行掉电是安全的。在该域上发生 NVM Subsystem Reset 之前,域掉电仍然是安全的。

如果在域中处理或完成normal或 abrupt NVM Subsystem Shutdown(即,在域中的所有控制器上,CSTS.ST 设置为“1”并且 CSTS.SHST 设置为 01b 或 10b),则:

  • NVM Subsystem Reset 将域中所有控制器中的 CSTS.SHST 清除为 00b;并且
  • 任何其他类型的 Controller Level Reset 对该shutdown的处理没有影响。
GitHub 加速计划 / nv / nvm
78.07 K
7.82 K
下载
nvm-sh/nvm: 是一个 Node.js 版本管理器,用于在不同的 Node.js 版本之间进行切换。它可以帮助开发者轻松管理多个 Node.js 版本,方便进行开发和测试。特点包括轻量级、易于使用、支持跨平台等。
最近提交(Master分支:3 个月前 )
9c9ff4ba Moved issue template into ISSUE_TEMPLATE folder 18 天前
51ea809d - 18 天前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐