提交成功
返回列表

PBlaze5 920 系列 NVMe SSD——如何不重启即可完成固件升级?

2020 / 03 / 17
1

固件在线升级的市场需求

 

传统需要冷重启服务器才能升级固件的操作,需要用户停止业务,umount文件系统,冷重启完成SSD固件升级,然后mount文件系统,重新启动业务系统的各个模块。对用户来说,操作复杂,容易出错。所以用户更希望有一种不需要重启即可完成硬件固件升级的方法。


另一方面,对于可靠性要求很高的存储系统而言,更会要求SSD必须支持固件在线升级功能,才能保证存储系统服务的连续性。存储系统通常有多种方式完成SSD的固件升级,如对目标升级SSD停止IO操作,瞬间完成固件升级后,通过缓存或者RAID机制在目标SSD重建增量数据。

 

 

固件升级步骤和激活方式

 

SSD固件升级主要分为下载和激活两个步骤,激活成功,固件升级成功。通过开源命令行工具nvmecli即可执行。

 

  • 在nvmecli版本1.5以下,激活操作通过命令fw-activate实现
  • 在nvmecli版本1.5以上,激活操作通过命令fw-commit实现

 

在NVMe协议标准中(截图Figure 76取自《NVM Express 1.3b》),对Commit指令所跟参数有详细定义。其中Commit Action(CA)指明升级固件下载和激活不同执行方式的组合。如:

 

  • 001b:向指定slot下载固件,需要reset后完成激活操作
  • 011b:向指定slot下载固件,激活立即生效,固件升级完成

 

 

固件升级需要Reset

 

一般SSD固件升级需要Reset,也就是需要对服务器进行冷重启才能完成升级。步骤如下:

 

1. 通过Download命令将固件镜像文件下载到SSD的DRAM中

 

2. 主机端发送Firmware Commit指令,参数指定-a 1(即Commit Action为001b),固件激活需要reset操作。需要关闭服务器后,再重启,固件才算成功被激活。这一步操作也是将固件从DRAM写入NAND。

 

固件下载后会通过CRC校验有效性。

 

 

需要Reset操作的固件升级举例如下:

 

标准定义SSD支持7个slot,slot 1 是只读权限,用于存放出厂固件,slot 2和3 可用于固件下载。示例选择slot 2(-s 2)进行固件下载。

 

# nvmRfw-download -f release_fw.tar/dev/nvme0n1

#nvme fw-activate -s 2 -a 1 /dev/nvme0n1

 

需要对服务器冷重启才能升级成功。

 

 

PBlaze5 920支持在线固件升级

 

新一代PBlaze5 920系列支持在线固件升级功能,固件升级可以在业务有IO的情况下进行,无需重启服务器。升级步骤如下:

 

1. 固件1正常运行时,通过Download命令将固件2镜像文件下载到SSD的DRAM中

 

2. 激活:主机端发送Firmware Commit指令,参数指定-a 3(即Commit Action为011b),无需reset,即可完成固件激活。

 

 

在线固件升级举例如下:

 

# nvmRfw-download -f release_fw.tar/dev/nvme0n1

#nvme fw-activate -s 2 -a 3 /dev/nvme0n1

 

根据测试,执行在线升级指令后,业务IO仅暂停1s后恢复。

 

 

由于SSD在数据中心大量部署,如果批量进行在线固件升级,对业务还是有较大影响,所以仍然需要大量用户环境的实际验证。虽然PBlaze5 920支持有IO的情况下进行固件在线升级,Memblaze强烈建议:

 

  • 用户在业务压力较小时进行固件升级操作;

 

  • 对于业务压力持续很大的业务系统,建议停止业务做SSD固件升级,但是由于不需要umount文件系统、不需要停止应用、更不需要重启服务器,用户所需要付出的代价相比传统升级方式小了很多;

 

  • 双端口场景下,在线升级的目标一般是要在存储系统业务不停止的情况下完成,所以需要存储系统相关缓存、RAID等机制的保证。