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

Linux 2.6.10内核下PCI Express Native热插拔框架的实现机制(4)

Linux 2.6.10内核下PCI Express Native热插拔框架的实现机制(4)

在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)热插拔的支持;完善热替换和热升级技术。这些问题都是非常具有挑战性的。
返回列表