硬件层面理解热插拔
PRSNT1#和PRSNT2#信号与PCIe设备的热插拔相关。在基于PCIe总线的Add-in 卡中,PRSNT1#
和PRSNT2#信号直接相连,而在处理器主板中,PRSNT1#信号接地,而PRSNT2#信号通过上
拉电阻接为高。
不同的处理器系统处理PCIe 设备热拔插的过程并不相同,在一个实际的处理器系统中,热拔插
设备的实现也远比图4-3 中的示例复杂得多。值得注意的是,在实现热拔插功能时,Add-in Card
需要使用“长短针”结构。
如图4-3 所示,PRSNT1#和PRSNT2#信号使用的金手指长度是其他信号的一半。因此当PCIe
设备插入插槽时,PRSNT1#和PRSNT2#信号在其他金手指与PCIe 插槽完全接触,并经过一段
延时后,才能与插槽完全接触;当PCIe 设备从PCIe 插槽中拔出时,这两个信号首先与PCIe
插槽断连,再经过一段延时后,其他信号才能与插槽断连。系统软件可以使用这段延时,进行
一些热拔插处理。
Add-In卡插入
当Add-In 卡没有插入时,处理器主板的PRSNT2#信号由上拉电阻接为高,而当
Add-In 卡插入时主板的PRSNT2#信号将与PRSNT1#信号通过Add-In 卡连通,此时PRSNT2#
信号为低。处理器主板的热插拔控制逻辑将捕获这个“低电平”,得知Add-In 卡已经插入,从
而触发系统软件进行相应地处理。
Add-In卡拔出
Add-In 卡拔出的工作机制与插入类似。当Add-in 卡连接在处理器主板时,处理器主板的
PRSNT2#信号为低,当Add-In 卡拔出后,处理器主板的PRSNT2#信号为高。处理器主板的热
插拔控制逻辑将捕获这个“高电平”,得知Add-In 卡已经被拔出,从而触发系统软件进行相应
地处理。
热插拔软硬件要素
Attention indicator黄灯
VMD enable的话是BIOS能控制vpp,VMD disable的话OS那边要接管控制硬盘的VPP逻辑
Power Indicator绿灯
Manually-perated Retention Latch
MRL Sensor
Electromechanical Interlock
Attention Button
Software User Interface
Slot Numbering
Power Controller
热插拔相关寄存器
详细解释请看PCIe spec 6.7Hotplug章节
Slot Capabilities Register (Offset 14h)
Slot Control Register (Offset 18h)
Slot Status Register (Offset 1Ah)
热插拔种类
热插拔分为两种,分别是暴力式热插拔和通知式热插拔
暴利式热插拔
暴利式热插拔:在暴利式热插拔中,PCIe设备可以直接插入或拔出,而系统不会给出任何提示或通知。这意味着设备的插入或拔出不会触发系统的自动检测和配置过程。这种方式的优点是操作简单,不需要系统干预,但缺点是可能会导致系统崩溃或数据丢失,因为系统无法预测设备的添加或移除,也无法进行相应的处理
暴力式add
这里是不支持DPC和presence detect
暴力式remove
通知式热插拔
通知式热插拔:在通知式热插拔中,PCIe设备的插入或拔出会触发系统的自动检测和配置过程,并给出相应的提示或通知。系统会识别新插入的设备,并进行必要的驱动程序加载和资源分配。这种方式的优点是可以保证系统的稳定性和数据完整性,因为系统能够正确地处理设备的添加或移除,但缺点是需要系统进行干预,操作相对繁琐。
拔盘小建议
拔盘时,建议优先使用正常热移除(Orderly Hot Removal),介绍如下:
停止当前和待移除设备相关的进程(如可能访问设备的数据库等)
Umount 与该设备相关的文件系统
向系统发出移除设备信号:
#echo 0 >/sys/bus/pci/slots/<SSD_SLOT_NUM>/power
SSD_SLOT_NUM 是待移除设备对应的 PCIe 卡槽编号,可通过 lspci 命令获得
等待系统移除设备(可通过 lsblk 等命令查看)后再执行手动拔盘操作
参考文章:
PCIe热插拔:通知试热插拔&暴力热插拔-CSDN博客
PCIe Spec 5.0