Hot-Plug(一)
从今天起,我们讨论一下有关于“热插拔”的话题。
为什么要有“热插拔”?
从历史上到目前,IT系统设备(PC、服务器、存储等等)中,对于RAS(Reliability,Availability,Serviceability,也就是:可靠性、可用性和可维护性)的要求变得越来越高。这也就是我们所谓的DFX设计相关内容。
系统怎么样才更可靠,可用性才更高?这是有专门的可靠性设计的,涉及太多的领域,我们不展开。常规的看,对于系统可能出现的问题和故障,需要做:故障检测、故障隔离、故障告警、故障恢复等等。
故障的检测可能会使用检测链路状况、器件状态等等,在PCIe领域,常见的是检测链路协商宽度、速率,检测AER寄存器等等。
故障的隔离主要的目的是让故障或即将故障失效的器件、部件从系统中隔离出去。比如把失效的PCIe卡从系统中移除,不再接管业务,避免故障扩散。
故障恢复的手段就更多样化了,有复位修复、上下电修复、备份冗余、故障时切换备机等等。比如把失效的PCIe设备重新上下电做修复,或者把业务切换到备用的卡上。或者更换故障PCIe卡,也就是我们常说的更换FRU(Field Replace Unit 现场可更换单元)
抱歉,做了比较长一段时间的可靠性工程师工作,貌似扯得有点远了。:)
网上很多的文章和书籍讲热插拔,都是讲的标准的热插拔,主要目的是为了现场快速更换PCIe设备。热插拔的基本目的是要让PCIe设备按照规定的顺序、原则,从系统中移除或插入到系统中来,并能正常的工作,且不影响系统的正常运行。事实上,PCIe“热插拔”的关键目的就是为前面面所提到的系统RAS服务的,是提升系统RAS能力的非常重要的手段!
热插拔有三个重要的功能:
- 在线替换发生故障的PCIe设备。不需要关闭、重启系统。
- 热插拔器件,系统及其他功能服务继续运行,不受影响。
- 热插拔PCIe设备的相关驱动/软件自动加载/卸载。
Spec中对于热插拔是这样定义的:
Hot-Plug |
Insertion and/or removal of a card into an active backplane or system board as defined in PCI Standard Hot-Plug Controller and Subsystem Specification, Revision. 1.0. No special card support is required. |
Hot swap |
Insertion and/or removal of a card into a passive backplane. The card must satisfy specific requirements to support Hot swap. |
注意,这里有两个相关概念,前面我们讲的热插拔,其实是广义的“热插拔”。这里的Hot-Plug,为了方便,我们叫做PCIe热插拔,也就是我们现在及后面将要讨论的内容。
Hot Swap,即热交换,也叫热切换,主要指的是CPCI(Compact PCI,紧凑型PCI)领域所使用的。关于 Hot Swap,CPCI有专门定义的一套规范,叫《CompactPCI® Hot Swap Specification》,也有中文版本,有兴趣的可以自行研究。
如无特别的指出,我们后续所说的热插拔都是指的是PCIe Hot-Plug。
顺便说一下:在PCI的年代,就已经提出了PCI的相关热插拔规范。2001年,PCI定义了PCI标准热插拔控制器(SHPC:PCI Standard Hot-plug Controller and Subsystem Specification)规范,PCIe沿用了这套规范。