热插拔功能是PCIe SSD的一项重要功能, 能大大简化设备更换和调试步骤。特别是在服务器厂商推出支持 U.2 接口的产品后,对热插拔的需求更加广泛。热插拔在 PBlaze5 PCIe SSD应用非常成熟。这篇文章旨在为使用 PBlaze5为代表的U.2接口的PCIe SSD进行热插拔操作提供参考。
热插拔(Hot-plug)功能是允许用户在不关闭系统,不切断电源的情况下取出和更换设备,从而提高了系统对灾难的及时恢复能力、增强扩展性和灵活性等。支持热插拔的平台能够保证在热插入(Hot Insertion)的时候,自动检测到设备并将其注册到相应驱动,在热拔出的时候,能够自动检测到设备丢失并从驱动移除,整个过程不需要系统重启。 并且在热插拔操作之后,系统和设备能够正常工作。
热插拔操作看似简单,但是根据设备是否带电、操作系统是否提前得到通知等因素,热插拔有多重操作场景。根据场景的不同,热插拔可以分为以下四类具体的操作:
热插拔类型 | 场景描述 | PBlaze5 支持情况 |
热添加 / 热插入 (Hot Add/Hot Insertion) |
将 PCIe SSD 插入带电、OS 正在运行的系统中,或者同时有上层 软件(RAID)正在管理使用 SSD。
通常该操作是为了扩容或者替换失效的设备。
|
支持 |
正常热移除 (Orderly Hot Removal) |
通知操作系统,提前禁用设备的情况下进行拔出动作。 已知设备失效,停止和设备的通信,或从上层软件中移除。 | 支持 |
热交换 (Hot Swap) |
热拔出动作后又进行了热添加动作。 通常是进行失效设备的替换。 | 支持 |
意外热移除 (Surprise Hot Removal ) |
当系统还在使用 PCIe SSD 时,设备被突然拔出,这时可能还有 IO的通信,这种操作不推荐使用。
通常是操作失误导致,例如移除了错误的设备。PBlaze5 提供定 位功能,通过发送 locate 指令,可以点亮 LED 对需要移除的 SSD 进行定位。
|
支持
(不建议用户使用意外热移除操作,下文将进行具体解释) |
成熟的热插拔技术首先需要保障操作系统不会崩溃或者死机;其次,PCIe SSD 对于已经确认接收的 I/O 数据不会因为热插拔而导致数据丢失;最后在进行热插拔实验后,PCIe SSD设备能够正常工作。
需要指出的是,热插拔操作涉及环节众多,用户需要依照正确的流程进行操作才可以最大限度的避免各类风险,保障业务连续和数据完整性。下面就从热插拔的原理入手介绍这一技术以及相关的注意事项。
PCIe Capabilities 寄存器提供了热插拔相关配置和状态信息。在 PBlaze5 PCIe SSD接入系统后,可通过 lspci –t 查看 其对应的 PCIe 卡槽信息,下文中
需要指出的是,热插拔事件可以由 BIOS(ACPI)处理,也可以由操作系统处理,Memblaze 推荐由操作系统处理的方式,如果 BIOS 中有 ACPI hot-plug 选项,请选择否。此外,相对于 Linux 原生驱动,Memblaze 提供的驱动进一步完善对 hotplug 的支持,推荐使用。
检查 Linux Kernel 是否编译 hotplug driver,确认 linux 内核编译配置文件设置以下项:
CONFIG_HOTPLUG_PCI_PCIE=y
CONFIG_HOTPLUG_PCI=y
CONFIG_HOTPLUG_PCI_ACPI=y
检查 Memblaze 驱动是否加载成功,使用如下命令查看 NVMe 驱动版本
#cat /sys/module/nvme/version
注:如果不使用 Memblaze 驱动,在 Linux 系统下,需要将内核升级至 3.14 以上保证原生 NVMe 驱动对热插拔的支持。
#lspci –s -vvv | grep –i hotplug
SltCap: AttnBtn+ PwrCtrl+ MRL-
AttnInd+ PwrInd+ HotPlug+ Surprise+
如上述命令返回的消息中包含 Hotplug+和 Surprise+信息,则证明该槽位支持热插拔功能。可以看到,该卡槽还配备电源控制等功能。下面则进一步介绍了PCIe 槽热插拔功能的细节:
[9.137143] pciehp 0000:00:03.1:pcie04: Slot #8 AttnBtn+ AttnInd+ PwrInd+ PwrCtrl+ MRL- Interlock- NoCompl- LLActRep+
[10.136681] pciehp 0000:00:03.1:pcie04: service driver pciehp loaded
获取 slot 的 Capabilities 信息,如下命令返回 Hex 值,bit值为1表示具备相应能力。
其中:bit 1(Power Control),bit 5(Hotplug Surprise),bit 6(Hotplug Capable)。
#setpci -s
CAP_EXP+0x14.b
#setpci -s CAP_EXP+0x18.w
Data Link Layer State Changed Enable 位控制槽位在检测到链路状态发生变化时是否发送中断。
#echo 0 >
/sys/bus/pci/slots//power
等待系统移除设备(可通过 lsblk 等命令查看)后再执行手动拔盘操作
热插拔需要U.2接口PCIe SSD、操作系统、服务器的通力配合,Memblaze为了确保PBlaze5在进行热插拔操作时最大限度的规避风险,对主流操作系统以及服务器做了大量的热插拔测试。这篇文章介绍的基本原理以及热插拔操作的流程等内容之外,还有诸如热插拔操作需要保持一定时间间隔等注意事项。这部分内容我们将在后续的文章进行详细的介绍。