Enterprise Just Builder

Solution for Enterprise Software Architecture

ACPI

SPB 设备和驱动简介

现在有许多文章介绍 Windows 8 操作系统层级的功能。其中之一就是支持简单外设总线 (SPB) 连接的设备。SPB 总线具有低成本、低功耗、低速度的特点,经常用于连接如传感器之类的相对简单的外设。Windows 8 支持的 SPB 设备包括 I2C 和 SPI。之前这类设备受到 BIOS 的限制而很少使用。从 Windows 8 开始,支持这些设备则成为了主流。

如果你对 SPB 总线以及如何编写 SPB 设备驱动感兴趣,可以跟随本文1来深入探讨这些话题。

SPB 总线 — 拓扑和设备枚举
和 SCSI、 SATA 和 USB 总线一样,SPB 是协议式(protocol-based ) 总线。也就是说,有一个控制器会根据总线定义的规则使用正确的协议来请求开关总线。连接到协议式总线上的设备被称为客户端设备,简称客户端。如图1-1.

SPB 总线最让人困惑的地方是如何发现和枚举总线上的设备。 SPB 总线无法动态枚举,这意味着在运行时接上 SPB 总线的设备都无法被发现。那么 Windows PnP 过程如何侦测 SPB 客户端的呢?答案很简单:哪个 SPB 设备挂在哪条 SPB 总线,这些描述被静态添加到一个表中,作为 ACPI BIOS 一部分。所以,枚举 SPB 客户端是由 ACPI 驱动而不是 SPB 控制器驱动负责的。SPB 控制器是典型的背板总线(backplane-bus )类型的设备,总被 PCI 总线驱动所枚举。详细可以参考图1-2 和图1-3。

包含该描述的 ACPI 表格被称为差异系统描述符表(Differentiated System Descriptor Table)简称 DSDT。DSDT 通常由系统集成商(一般是 OEM ) 随 ROM 一起提供的。由于 SPB 设备通常都被永久集成在系统平台上 — 大部分被焊在主板上,所以无法动态枚举不会有任何问题。 少数情况下,SPB 设备可能会被动态地接上系统(比如平板电脑的 I2C 键盘),此时设备信息仍由 ACPI BIOS 提供并由 ACPI 驱动枚举。

>>> 阅读全文

 

, , , , ,

理解 ACPI (一) ACPI 简介及加电过程

在引入高级配置和电源接口 (ACPI — Advanced Configuration and Power Interface) 之前, 高级电源管理 (APM) BIOS 被广泛用于电源管理。在 APM 中,大部分的电源管理控制逻辑都驻留在 APM BIOS 代码中。支持 APM 的操作系统通过固定的 BIOS API 与 APM BIOS 进行通信,这些 API 提供了 BIOS 功能的基本访问。支持 APM 的操作系统必须定期轮询 APM 以处理 APM 相关事件。

APM 存在着以下三个缺陷: 首先,除非供应商提供专有程序,否则很多 APM 功能都要在操作系统启动前,进入 BIOS 菜单来配置,比如设置显示器关闭前的空闲时间。而且 APM 电源管理配置的具体策略是由 BIOS 供应商设定的,比如某 APM BIOS 的策略是在关闭显示器的同时降低 CPU 时钟频率或休眠网卡等设备,如果不想这么做,就必须修改 BIOS。 其次,APM 是 BIOS 级别的代码,运行在操作系统之外,因此开发和调试 APM 代码都十分困难,更糟糕的是用户只能通过重刷 ROM 的方式来解决 APM 的错误,而重刷 BIOS 相当危险,一旦发生错误,系统就再无法启动了。最后,由于 APM 是各个供应商专有的,为相同的功能而进行的重复开发投入是种巨大浪费。

不同于 APM 直接基于 BIOS 的管理方式,ACPI 中不再由 BIOS 代码来作出决策,而是通过操作系统内核来统一管理所有设备,从而解决了 APM 配置机制的局限性,换句话说,ACPI 允许操作系统直接对电源和散热进行管理,还允许系统硬件产生的 Hot-Plug 事件,让操作系统从用户的角度上直接支配即插即用设备。因而 ACPI 比其他机制更加灵活。

ACPI 主要提供下列功能:1

  • 系统电源管理(System power management):ACPI 提供了让系统作为一个整体进入或离开睡眠状态的机制,让设备唤醒系统。
  • 设备电源管理(Device power management):ACPI 表描述了电源信息(包括主板设备、设备电源状态以及设备所连接的电源层– Power Planes) 和让设备进入低功耗状态的控制信息,这样操作系统就可根据资源占用来控制设备进入低功耗状态。
  • 处理器电源管理(Processor power management):当操作系统处于空闲且非睡眠状态,可以通过 ACPI 提供的命令让处理器进入低功耗状态。
  • 设备和处理器性能管理(Device and processor performance management):操作系统在工作时可以根据 ACPI 的定义,让设备和处理器进入不同的性能状态
  • 配置/即插即用(Configuration/Plug and Play):ACPI 指定了用来枚举和配置主板设备的信息,这些信息按层次结构排列,当发生诸如 docking/undocking 之类的事件时,操作系统就可准确知道该事件影响了哪个设备。
  • 系统事件(System Event): ACPI 提供了通用的事件机制操作用于处理如散热、电源管理、坞站或设备的插拔等事件。
  • 电池管理(Battery management):兼容 ACPI 的电池设备需要具有智能电池子系统接口(Smart Battery subsystem interface)或者控制型电池接口(Control Method Battery interface),前者通过嵌入式控制器的接口控制,后者则完全由 AML 控制方法进行操控。
  • 温度管理(Thermal management):ACPI 允许 OEM 自由定义散热温度区间。
  • 嵌入式控制器(Embedded Controller):ACPI 提供了标准接口让操作系统和嵌入式控制器进行通讯。
  • SMBus 控制器(SMBus Controller): ACPI 提供了标准接口让操作系统和 SMBus 进行通讯。

当然为此操作系统内核中要添加额外的 ACPI 支持。支持 ACPI 的操作系统就可以叫做 OSPM (Operating System-directed configuration and Power Management) 。 支持 OSPM 的至少要求实现:

>>> 阅读全文

 

, , , ,

FreeBSD 的 ACPI 实现

几乎所有现代计算机系统的硬件都允许对电源使用进行管理、对系统温度进行监测,并将之维持在适当水平。由此一定水平的电源消耗就能带来最佳的性能。这对于使用电池的移动平台尤为重要,因为不必要的电源消耗会减少电池续航时间,在结束工作前,你就不得不重新充电。节电对桌面系统也同样重要,在系统空闲时关闭显示器、磁盘驱动器等设备显著可以降低能耗。1

不幸的是,在传统 PC 中, 用于电源及散热配置管理的大多数软件都与 BIOS 紧密相关。而且,除非受管的设备所连接的是即插即用总线(如 PCI),否则操作系统就很难便捷地检测、配置或管理设备。例如 ISA PnP 机制适用于枚举外置 ISA 卡设备而不是板载设备。而 PnP BIOS 则适用于枚举板载设备,但也很难扩展成通用方法。另外 PnP BIOS 是 16 位的,所以操作系统必须通过 16 位虚拟环境才能调用 PnP BIOS 的函数。

在引入高级配置和电源管理接口 (ACPI — Advanced Configuration and Power Management Interface) 前, 高级电源管理 (APM) BIOS 被广泛用于电源管理。在 APM 中,大部分的电源管理控制逻辑都驻留在 APM BIOS 代码中。支持 APM 的操作系统通过固定的 BIOS API 与 APM BIOS 进行通信,这些 API 提供了 BIOS 功能的基本访问。支持 APM 的操作系统必须定期对 APM 进行轮询以处理 APM 相关事件。APM BIOS 还可使用特殊系统管理中断,该中断对操作系统是不可见的。APM 提供了四种状态:运行、暂停、休眠和软关闭。

有三大因素制约着 APM 的使用。首先,除非供应商提供特殊的程序,否则很多 APM 功能都要在操作系统加载前通过供应商专有的 BIOS 菜单进行配置,比如设置关闭显示器前的系统空闲时间。此外,实施 APM 电源管理配置的具体策略是由 BIOS 供应商指定的。例如,某 APM BIOS 的策略是在关闭显示器的同时也降低 CPU 时钟频率或关闭网卡等设备,如果不修改 BIOS ,你就无法修改这一策略。

其次,APM 是 BIOS 级别代码,运行在操作系统的范围外。这使得开发和调试 APM 代码极其困难。而用户也只能通过烧写 ROM 的方式来解决 APM 的错误。重刷 BIOS 相当危险,因为一旦发生错误,系统就再无法使用了。

>>> 阅读全文

 

, , , , ,

Windows 开/关转换性能分析

简介
Windows 开/关转换(即启动、休眠、关机过程)的性能对用户体验是至关重要的,因为它提高了用户对计算机的感受程度,并提供一致的开/关机体验。

对于以下的用户场景,开/关机转换性能非常重要:

  • 用户将硬件和操作系统的启动时间作为主要的性能指标。
  • 系统更新可以保护 Windows 用户并及时引入新功能,但用户对漫长的更新和重新启动周期感到沮丧。过长的关机时间会让用户感到烦躁,并增加了系统管理员的服务时间。较长的关机时间,也对移动系统的可靠性产生不利影响,例如增加了因电力不足而意外关机的风险。
  • 移动用户希望他们的计算机的能迅速转换到睡眠状态。睡眠性能对保持数据的完整性是非常重要的。如果从休眠状态恢复的时间太长,用户将忽略睡眠功能,而是直接关闭计算机。

本文会详细介绍 Windows 的开/关转换,重点介绍每个转换阶段的性能漏洞,并展示了如何通过使用 Windows 性能工具包(WPT)识别和分析这些问题。性能分析往往是必要的,因为诸如应用程序、驱动程序、服务和设备等这些系统扩展,如果没有经过优化,都会对开/关转换时间产生负面影响。优化不良的系统扩展通常由下面原因导致:

  • 延迟
  • 缺乏并行
  • 过多的资源消耗

本文可以帮助用户大大减少开/关转换时间。我们将这些性能优化应用到了实验室的许多系统上,在一些系统中,启动到桌面的时间减少了将近50%。某些系统上,开机时间减少到 40 到 50 秒。但是转换过程中的驱动程序,服务,或应用程序的影响是各不同的,因此你的测试结果也不尽相同。

表1是某四台真实机器的 Windows 7 的启动时间。这一数据显示了从BIOS POST 结束后到 Post Boot 阶段(系统空闲状态)所经过时间。启动阶段在本文后面的“引导转换”一节中会进一步说明。

>>> 阅读全文

 

, , , , ,