服务器可靠性、可用性和可维护性(RAS)已经成为商务活动中不可或缺的因素,同时,随着RAS承诺正常可用工作时间接近99.999%,即“5个9”,运行中更换或添加元件已经变得很关键。PCI Express(PCIe)作为一串行通信接口标准而被引入到PC和服务器环境,此后,该标准发挥了引导作用,如今发展为服务器互连领域选择的协议之一。这些服务器上的PCIe插槽要求为快速热插拔这一点变得极为重要,这在下一代设计中显然也很重要。要使服务器系统维持在“高可用性”,热插拔功能非常关键。
热插拔功能的基本目的是,允许电路板和外壳进行有序地活插拔,而不影响系统的运行。维修或更换有故障器件时通常要这么做,因为要安排好服务器停机时间以更换或者安装外设卡通常很难,当然也不是不可能。具有以这种方式插入或更换I/O设备的能力可避免系统停机或者至少可将系统停机时间缩到最短。该技术也可用于为系统的重新配置而增加新功能。膝上型电脑用户也需要热插拔能力来更换有I/O功能的卡,如装在对接站的硬驱和通信口。
PCI规范2.1原来未计划提供热插拔应用功能,但是后来在1997年,推出了PCI热插拔规范1.0,定义了基本的平台、附加卡和软件要求。不过,在解释和执行规范方面,却给系统开发者和系统用户预留了很大的灵活性。另外,未定义软件可见寄存器组。2001年,推出了一套新规范:PCI标准热插拔控制器(SHPC)1.0和PCI热插拔1.1。这些规范更严格了用户接口,并定义了标准寄存器组,极大地提高了热插拔软件开发的兼容性。
然而,由于PCI是多点共享总线,用反射波开关,所以硬件有局限性。总线不隔离而插入器件是不可能的。要解决这一问题,有两种可能的选择:依靠平台实现可插入要求,即热插拔,或依靠附加卡实现可插入的要求,即热交换。
两种方法都有缺点,可采用一些创新性的方法,如在卡插入系统前,对PCI引脚预加电,来避免如产生假信号这样的问题,以保持数据的完整性。标准的PCI连接器引脚长度相同,因此热交换环境下,附加卡的加电顺序无法达到。为引脚?错方案的“紧凑型PCI”定义了一组新的连接器。这样绝大多数限制解除了,但是因为PCI是并行总线,性能成了一个瓶颈。总线工作的频率取决于总线负载,总线上器件越多,总线速度就越慢。最后,由于PCI总线具有共享的特点,经受不住元件故障,这是因为总线上任何不稳定的行为都会使总线上所有器件无法通信。
PCI Express一开始就设计为具有热插拔功能。同样,热插拔寄存器也是PCIe功能的构成部分,使操作系统具有标准的热插拔硬件寄存器接口,该接口可通过PCIe总线的配置接入来存取。PCI Express也通过定义基本架构水平的硬件要求的热插拔功能,而定义了一个标准的使用模型。有了热插拔控制的固有支持,就能使创新的服务器模块形状在加电状态下就可插入或拔掉,不用打开机箱。
在基于PCIe的服务器系统中,热插拔插槽既可由芯片组也可由开关的下游口提供。由于PCIe是点对点总线,根组件端口数有限,通常要有开关,以进行插槽扩展和创建。对软件而言,这些开关表现为PCI-PCI桥,每个完成热插拔插槽的口在桥结构的空间都有各自的热插拔寄存器组。这些寄存器向软件报告有无已定义的热插拔机制,包含电源控制、插槽指示器以及卡插入/移去、闭锁打开/闭合和注意按钮摁下的标志。把中断上行数据流发送给根组件,以此来通知软件。通知选项是实现依赖型。
PCIe开关开发者采用了两种方法提供热插拔支持,选择片上(图1)或者选择片外SHPC支持。第一种方法是把控制器逻辑和信令接口嵌入在开关中,器件和插槽功能寄存器也在开关中实现。在片外SHPC方案中,没有信令接口,要求系统硬件设计师在电路板上加上附加电路,通过FPGA或支持I2C的I/O扩展器来模拟热插拔控制器。这样会增加材料成本,增大电路板空间,同时增加设计的复杂性。PLX技术PCIe开关就是一个片上SHPC方案的例子,所有需要的热插拔状态寄存器都集成在片上,同时也给出了热插拔方案要求的所有信号。PLX开关支持3~8个热插拔功能口,样充分降低了实现需要SHPC功能的系统的成本和复杂性。
PCI Express热插拔软件支持功能取决于3个基本因素:固件支持、器件驱动器支持和操作系统支持。这3个因素都必须支持热插拔规范,以使系统能完成附加卡插入和拔出。
在上电自测试(POST)期间,加电时,固件创建和加载某些程序和表格。这些程序和表格的实现在“高级配置与电源接口固件规范”中已作了定义。固件也负责配置操作系统的系统地址空间。固件将系统地址划分为许多专用区域,包括用于系统存储器、系统I/O和PCI配置空间的区域,这些都是PCI器件要求的。固件地址映射通过操作系统支配这些映射的使用。
当把PCIe端点插入PCIe开关插槽时,开关产生激活中断,如“出现检测改变的中断”。根组件把中断传给总线驱动器、Windows即插即用(PnP)管理程序和Windows电源管理程序。Windows PnP管理程序依次请求PCI总线驱动器重新列举PCI总线器件,这可能导致资源重新分配。当发现新设备时,给相应驱动器加载,然后初始化该设备并准备处理I/O(如图2所示)。
所有在Windows 2000和Windows XP上的热插拔事件,如插入、弹出和拔出都可能通过ACPI 1.0b处理。Windows XP支持一种附加对象,是在ACPI 2.0(the _HPP object)中引入的。这些操作系统仅限在单个总线段分配资源,在运行时不能重新分配资源((I/O和存储器孔)。因此,桥或开关的插入要求为开关及开关后设备分配多级资源。
只有当预分配的资源足够供给新设备时,操作系统才能正确启动器件。如果要分配的资源不够,特别是如果插入一个桥时,操作系统通常不能在运行时间重新配置PCI-PCI桥,以处理设备资源要求。
“固件ACPI规范3.0”通过提供支持操作系统能力(_OSC)方法和设备特定方法(_DSM)来解决此问题。_OSC方法是一种机制,用来定义硬件的父子依存关系,把这些关系传送给操作系统,而_DSM是一种可选的ACPI控制方法,能实现专用器件控制功能并允许OS忽略PCI设备引导配置。
Windows Vista是一种能发现PCI Express的OS,支持多级重平衡。多级重平衡能根据其后设备的资源要求来动态调节PCI桥窗口的大小。像_DSM这样的方法允许平台固件高负荷地为Windows XP和Server 2003引导配置设备,而给Windows Vista提供了忽略引导配置资源的自由,因此资源分配的灵活性更大。这样能使操作系统重新定位和/或扩展PCI桥资源窗口,以适应设备要求,否则这将是不可能,这是由于引导设备要求的限制引起的。因为Windows Vista中的多级重平衡代码不再受必须维持系统引导配置资源的限制,所以运行更有效。
总之,PCIe在事务处理、数据链接和物理层方面具有很大的弹性,加之其点对点的特性,有助于基于PCIe的设计避免单点故障。所有这些特点,加上PCIe固有的在硬件和OS级支持热插拔的特性,所有这些都表明PCIe正在进入RAS的新纪元。