首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

PCI热插拔标准过程

PCI热插拔标准过程

五 PCIE板卡热插拔的标准过程热插拔PCI板卡可以使用提示按钮或用户界面来进行,下面我们介绍使用用户界面来启动热插入和热拔出的操作过程,以及Fedora C4T2下所采用的方式。
设备的热插入
1. 操作员安装卡,闭合插槽保护锁,保护锁感应器通知热插拔控制器把连接信号接通到插槽。
2. 然后,操作员通知热插拔服务程序:卡已经被安装并可以激活。软件提示用户对此进行确认。
3. 在操作员请求连接后,热插拔服务程序向控制着热插拔控制器的热插拔系统驱动程序下达命令,闪烁插槽的电源指示灯,提示操作员此时不可以拔动适配卡。
4. 在热插拔软件对此请求进行确认期间内,电源指示灯继续闪烁。注意此时软件可能会拒绝这个安装请求(例如,安全策略此刻禁止插槽被激活)。另外,如果请求没有生效,软件拒绝请求并对热插拔控制器发出命令关闭电源指示灯。规范建议软件通过一条消息通知操作员请求被拒绝的原因。
5. 如果请求被确认,热插拔服务程序对热插拔系统驱动发出请求,为插槽加电。
6. 加电后,软件发出命令完全打开电源指示灯。
7. 当link training完成后,操作系统指示平台配置程序赋予适配卡必需的资源,来配置适配卡的功能。
8. 操作系统为PCI Express设备中的功能寻找恰当的驱动程序,并加载之。
9. 接着系统调用驱动程序的初始化入口,并执行驱动的初始化代码。这些代码完成设备的设置,并填写设备的PCI 配置命令寄存器的相关标志位来激活设备。
热移出设备1. 操作员通过指定适配卡所在物理插槽号码来初始化移出请求。
2. 软件弹出窗口要求操作员确认请求。注意,此时电源指示灯保持开启状态。
3. 操作员确认请求后,热插拔服务程序向热插拔系统驱动发出请求,要求热插拔控制器闪烁电源指示灯。注意此时软件可能会拒绝这个移出请求(例如,适配卡目前正被关键系统功能所使用)。另外,如果请求没有被确认,软件将拒绝请求并对热插拔控制器发出命令,重新开启电源指示灯。规范建议软件通过一条消息通知操作员请求被拒绝的原因。
4. 如果请求被确认,热插拔服务程序将命令适配卡的设备驱动保持静默,也就是说驱动一方面必须停止向适配卡发出请求,另一方面必须完成或者终止所有已经发出的请求,并禁止适配卡产生新的事务(包括中断)。
5. 软件发出命令,通过在插槽所连接的根端口或交换端口中的链接控制寄存器禁掉适配卡的链接。这使得链接两侧的端口均被禁止。
6. 软件指示热插拔控制器禁掉插槽。
7. 成功切断电源后,软件发出关闭电源指示灯命令。指示灯熄灭后,操作员可以开始安全地从插槽移出适配卡。打开插槽安全锁,热插拔控制器从插槽上撤除所有的信号(例如SMBus 和Vaux),此时卡可以被移出。
8. 操作系统释放内存空间,I/O空间,中断线等曾经属于该设备的系统资源。
Fedora下所采用热插拔实现的方式如果在最近一次编译中选择了PCI Express 热插拔功能,而且驱动是以模块方式存在,那么,可以在命令行下键入以下内容:
modprobe pciehp
如果驱动成功,则可以在/sys/bus/pci/slots/下面发现以可热插拔插槽编号命名的目录,进入相关目录,可以进行下一步操作。
echo 1 >power开启某个插槽上的电源 ,进行热插入
echo 0 >power关闭某个插槽上的电源,执行热拔出
若不能加载pciehp驱动,一般是由于硬件不支持或者固件缺少OSHP方法或ACPI _OSC方法之一。


六 linux2.6.12中PCIE驱动模型的变化在linux2.6.10中,Linux驱动程序模型要求物理设备被单独的驱动程序独占访问。 PCI Express端口是一个拥有许多独立功能的PCI-PCI桥设备,作为一个简洁的方案,每个功能要分别实现其自己的驱动程序,但是这样造成了多个驱动程序在唯一的PCI-PCI桥设备中出现竞争的状况。也就是说,虽然PCI Express提供了如Power Management (PME)、 Advanced Error Reporting (AER)、 Hot-Plug (HP) 和Virtual Channel (VC) access等多种功能,但是如果某个PCI Express端口的native hotplug 驱动程序加载后,它就会独占这个PCI-PCI桥的端口,内核就不能再于其上加载其他功能的驱动程序了。为解决这个问题,在Linux内核版本2.6.12中,PCI Express的热插拔又有所改变,提出了PCI Express 端口总线驱动程序(PCI Express Port Bus Driver)的概念。
在实现上,PCI Express 端口总线驱动程序管理主板上的所有PCI Express 端口,并且把所有提供的服务请求发送到对应的服务驱动程序上。其优点概括如下:
  • 允许多个服务驱动程序在一个PCI-PCI桥端口设备上同步运行。
  • 允许各个服务驱动程序相互不受干扰地独立实现。
  • 允许一个服务驱动程序在多个PCI-PCI桥端口设备上运行。
  • 管理PCI-PCI桥端口设备资源并分发它们到发出请求的服务驱动程序。
例如,在注册热插拔驱动程序时,不再使用pci_register_driver直接向系统注册,而是使用int pcie_port_service_register(struct pcie_port_service_driver *new) 向端口总线驱动程序注册;在注销热插拔驱动程序时,不再使用pci_unregister_driver直接向系统注销,而是使用void pcie_port_service_unregister(struct pcie_port_service_driver *new)来向端口总线驱动程序注销;而端口总线驱动程序是直接注册注销到系统的。
目前,PCI Express 端口总线驱动程序模型还在发展演变中。


七 评估与总结根据可用性理论,系统的可用度可以使用下列公式来计算:
在高负荷运转的服务器上,商用可靠性的元件的故障更换并非小概率事件,对于更换故障元件和升级配件这样的事件,没有热插拔支持的系统必须停机断电进行处理,而具备热插拔支持的系统则仅仅需要很少的软件切换和拔插时间开销。从上面的公式我们可以看出,MTTR值越小,系统的可用性就越高。我们定义了一个比例因子V,V= MTTRnoHP/MTTRHP,根据业界经验,V的取值一般在10-100之间。描述可用性的一种常用的方法是使用"9"。如三个 9 表示 99.9% 的可用性,它表示一年大约有 8.5 小时的服务中断期。四个 9 (99.99%) 是更高一级的可用性,表示一年大约有 1 小时的服务中断期。根据可用度公式计算,在单个元件可靠度不变的情况下,Linux操作系统对PCI Express热插拔的支持,可以使服务器系统的外设相关可用性跃升一个等级(1个9),同时,PCI Express热插拔技术使得在线更换和升级PCI Express外设板卡成为可能,这使系统获得了良好的可扩展性。
综上所述,本文讨论了PCI Express热插拔所涉及的软件因素,分析了linux2.6.10的PCI Express插槽热插拔功能PCIEHP子系统,并对热插拔支持在提高服务器系统外设相关可用性的作用进行了定量的分析。 为了继续提高操作系统可用性和可扩展性支持能力,Linux PCI Express hotplug以下方面还有待发展:继续完善热插拔架构的开放性,以提供完整统一的接口供驱动开发人员编写其他设备的热插拔支持模块;在插槽热插拔之外,提供对Server IO Module(SIOM)热插拔的支持;完善热替换和热升级技术。这些问题都是非常具有挑战性的。
返回列表