传统需要冷重启服务器才能升级固件的操作,需要用户停止业务,umount文件系统,冷重启完成SSD固件升级,然后mount文件系统,重新启动业务系统的各个模块。对用户来说,操作复杂,容易出错。所以用户更希望有一种不需要重启即可完成硬件固件升级的方法。
另一方面,对于可靠性要求很高的存储系统而言,更会要求SSD必须支持固件在线升级功能,才能保证存储系统服务的连续性。存储系统通常有多种方式完成SSD的固件升级,如对目标升级SSD停止IO操作,瞬间完成固件升级后,通过缓存或者RAID机制在目标SSD重建增量数据。
SSD固件升级主要分为下载和激活两个步骤,激活成功,固件升级成功。通过开源命令行工具nvmecli即可执行。
在NVMe协议标准中(截图Figure 76取自《NVM Express 1.3b》),对Commit指令所跟参数有详细定义。其中Commit Action(CA)指明升级固件下载和激活不同执行方式的组合。如:
一般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系列支持在线固件升级功能,固件升级可以在业务有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强烈建议: