认识和使用热插拔的正确姿势 您所在的位置:网站首页 ngff支持热插拔吗 认识和使用热插拔的正确姿势

认识和使用热插拔的正确姿势

2024-01-14 03:56| 来源: 网络整理| 查看: 265

热插拔功能是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 引脚 PRSNT2#能够随着外接设备的接入和拔出得到不同的电平,从而触发热插拔事件, 如下图。PCIe3.0 协议规定了多个热插拔事件和热插拔支持功能,如 Attention Button,电源控制(Power Control) 等,各类服务器对热插拔的支持也不相同。最基础的,热插拔卡槽需要具备产生 Presence Status Change 事件的能力。

PCIe Capabilities 寄存器提供了热插拔相关配置和状态信息。在 PBlaze5 PCIe SSD接入系统后,可通过 lspci –t 查看 其对应的 PCIe 卡槽信息,下文中均表示的是热插拔测试中与 PBlaze5 对应的 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 驱动对热插拔的支持。

确认PCIe 槽是否支持热插拔 依照上面介绍的基本原理,在进行热插拔操作之前,用户需要检查对应槽位是否具备热插拔功能,通过以下命令可以得知是否支持热插拔:

#lspci –s -vvv | grep –i hotplug SltCap: AttnBtn+ PwrCtrl+ MRL- AttnInd+ PwrInd+ HotPlug+ Surprise+

如上述命令返回的消息中包含 Hotplug+和 Surprise+信息,则证明该槽位支持热插拔功能。可以看到,该卡槽还配备电源控制等功能。下面则进一步介绍了PCIe 槽热插拔功能的细节:

检查对应槽位上是否注册了 Hot-plug service,如下信息(通过 dmesg 命令获取)显示了 slot #8 加载了pciehp driver

[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 获取 Slot 控制寄存器信息,确定 bit3(Presence Detect Changed Enable),bit5(Hotplug Interrupt Enable) 和 bit12(Data Link Layer State Changed Enable)设置为 1.

#setpci -s CAP_EXP+0x18.w Presence Detect Changed Enable 位控制槽位在检测到外接设备接入或拔出时是否发送中断。

Data Link Layer State Changed Enable 位控制槽位在检测到链路状态发生变化时是否发送中断。

不建议意外热移除是有道理的!谨慎操作永不为过! 意外热移除(Surprise Hot-plug)是一种比较有风险的操作。即使在测试充分和支持良好的平台上,也会有对系统产生负面影响的风险,比如对有 I/O 访问的设备进行拔盘操作,会使得存储在系统缓存中的 I/O 数据丢失,这种操作一方面触发上层应用处理这类错误,另一方面, Linux 自带的 NVMe 驱动会出现 hung 住等问题。 所以拔盘时,建议优先使用正常热移除(Orderly Hot Removal),介绍如下: 停止当前和待移除设备相关的进程(如可能访问设备的数据库等) Umount 与该设备相关的文件系统 向系统发出移除设备信号:

#echo 0 > /sys/bus/pci/slots//power SSD_SLOT_NUM 是待移除设备对应的 PCIe 卡槽编号,可通过 lspci 命令获得

等待系统移除设备(可通过 lsblk 等命令查看)后再执行手动拔盘操作 热插拔需要U.2接口PCIe SSD、操作系统、服务器的通力配合,Memblaze为了确保PBlaze5在进行热插拔操作时最大限度的规避风险,对主流操作系统以及服务器做了大量的热插拔测试。这篇文章介绍的基本原理以及热插拔操作的流程等内容之外,还有诸如热插拔操作需要保持一定时间间隔等注意事项。这部分内容我们将在后续的文章进行详细的介绍。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有