示例、要求和诊断
本主题提供热管理问题的示例,并讨论要求和诊断方法。
示例
以下示例说明如何解决典型的热管理问题。
皮肤温度传感器
为确保用户始终受到保护,监测皮肤温度至关重要。 如果皮肤温度太高,以致无法安全处理,系统应立即采取措施关闭系统。 这些温度传感器还可以向热区域提供输入,以限制使温度读数升高的设备。
以下框图显示了包含三个设备和两个热区域的示例系统布局。
在此示例中,温度传感器 1 (TS1) 和温度传感器 2 (TS2) 按策略定位在设备使皮肤接受最大温度的位置。 可以在设备 1、2 和 3 的顶部各安装一个温度传感器。 这些设备传感器旨在单独限制每个设备。 通常,皮肤传感器的用途是检测设备表面温度,检测到的值是系统上多个设备的聚合值。 尽管每个设备产生的热量可能大于这些温度传感器检测到的值,但这些设备综合产生的热量往往会在这些传感器位置积累。
TS1 定位在设备 2 和设备 3 的中间。 因此,以 TS1 为输入的热区域控制着设备 2 和 3。 当 TS1 温度较高时,热区域会限制设备 2 和 3。 同理,当 TS2 温度较高时,热区域会限制所有三个设备。
在此示例中,传感器定位在与它们所监视的设备等距的位置。 TS1 定位在设备 2 和设备 3 的中间,TS2 定位在与设备 1、2 和 3 等距的位置。 如果每个设备以相同的方式径向散热,则来自每个设备的热量对其传感器上的温度读数的贡献相同。
渐进式热限制
在给定一组热常数(_TC1 和 _TC2)的情况下,热区域的被动限制百分比具有特定的特征:曲线变化的速度,以及热区域为远离跳变点而保持的限制激进程度。 在某些情况下,热区域的行为可能需要改变。 例如,当温度较低时,限制百分比可以降低激进程度。 但是当温度接近跳变点时,限制行为可能需要更激进。 如果是这样,可以使用渐进式热限制将不同的限制行为应用于一组设备。 可通过两种方式实现渐进式热限制:
- 在运行时期间动态更改热区域的常数,或
- 使用具有不同常数和跳变点的两个热区域。
更新区域的常数
对于任何热区域,都可以随时使用 Notify(thermal_zone, 0x81)
来更新热常数。
具有不同跳变点的区域
一个热区域中不能有多个热传感器。 但是,共享同一温度传感器的多个热区域经常用于实现渐进式热限制行为。 一个热区域开始在低温下适度限制性能,而另一个热区域开始在高温下激进地限制性能。
在以下框图中,管理相同设备的两个热区域使用同一温度传感器来实现渐进式热限制。 在此示例中,温度传感器定位在电池充电器和监视器背光灯附近,以便可为控制这两个设备的热区域提供输入。
上图中显示的两个热区域可定义如下:
Thermal Zone 1 { _PSV = 80C Thermal Throttling Devices: Monitor Driver Battery Driver } Thermal Zone 2 { _PSV = 90C Thermal Throttling Devices: Monitor Driver Battery Driver }
电流相关的限制
如果电池驱动程序需要根据温度和电流进行限制,则热管理器中的 ACPI 算法不再具备此能力,因为它无法将电流考虑在内。 若要替代此算法,必须提供包含自定义算法的策略驱动程序,并将此驱动程序加载到热区域的驱动程序堆栈顶层。 此策略驱动程序将温度传感器和电流传感器都视为输入,并根据自定义算法得出热策略。 请注意,此热策略必须在热区域硬件的能力范围内运行。 该策略将发送到热管理器,后者将更新日志和热区域。 然后,热区域通过散热接口向电池驱动程序发送请求。
以下框图显示了一个控制电池设备温度和电流的策略驱动程序。 该策略驱动程序实现一种自定义算法来取代热管理器的算法。 与热管理器的算法不同,该自定义算法同时考虑温度和电流。
热管理要求
硬件要求
热管理适当的硬件设计需要考虑以下几点:
所有系统均符合适用的消费型电子产品安全性行业标准(例如 IEC 62368)。
硬件必须具有可关闭系统或阻止启动的故障安全温度跳变点。
传感器硬件必须精确到 +/- 2oC。
传感器硬件不得要求通过软件轮询来确定是否超过阈值温度。
在工作时,对系统显示器的热限制不得导致其亮度低于 100 尼特。
在以下任一情况下,不会限制电池充电:
- 系统处于空闲状态且环境温度低于 35oC,或
- 在任何条件下环境温度低于 25oC。
新式待机电脑的 HCK 测试要求
无论处理器体系结构和外形规格如何,所有新式待机电脑都必须满足特定的热要求。 将在 HCK 中测试以下要求:
- 所有新式待机电脑必须至少有一个热区域。
- 每个热区域必须报告传感器的实际温度。
- 必须至少为一个热区域定义临界关机温度。 Intel 动态平台和热框架 (DPTF) 除外。
- 所有带风扇的新式待机电脑必须将风扇活动公开给操作系统。
- 风扇需要随时将其活动通知给操作系统,包括在新式待机状态下的空闲复原期间。 目前,这些通知不会导致操作系统执行任何操作。 这些通知的主要用途是用于诊断和遥测。 风扇通知可与现有的跟踪工具(包括 Windows 性能分析器)集成。 系统设计人员可以使用这些工具来优化平台设计。
- 所有带风扇的新式待机电脑必须在新式待机状态(系统“睡眠”状态)下保持风扇关闭。
- 此处的 HCK 测试将运行一个真实的新式待机工作负载,该工作负载不应导致风扇打开。 在转换到新式待机期间,允许风扇保持打开最长 30 秒(从显示器关闭时开始算起)。
有关 HCK 测试的详细信息,请参阅检查热区域。
若要运行 HCK 测试,请执行以下操作:
首先,输入以下命令以安装按钮驱动程序:
>>Button.exe -i
若要对带风扇的电脑运行所有热测试,请输入以下命令:
>>RunCheckTz.cmd all
若要对不带风扇的电脑运行所有热测试,请输入以下命令:
>>RunCheckTz.cmd nofan all
热管理解决方案
基于 ACPI 的 Window 热框架是针对所有系统建议的热管理解决方案。 其主要优势包括使用自带工具轻松诊断热问题的能力,以及在现场收集重要遥测数据的能力。
不过,如果其他解决方案满足上述要求,则也能接受使用它们来替代 Windows 热框架。 核心芯片和 SoC 供应商可能拥有自己的与 Windows 兼容并受其支持的专属热解决方案 - 例如,适用于 x86 处理器的基于 Intel 动态平台和热框架 (DPTF) 的实现,以及 ARM 上的 PEP 实现。
诊断
为了帮助系统设计人员诊断和评估系统热行为,Windows 提供了以下自带工具和独立工具。
事件日志
Windows 在事件日志中记录重要的热信息。 此信息可用于快速会审任何运行 Windows 8 或更高版本的电脑上的热状况,而无需使用其他跟踪或工具。 下表提供了完整列表。
Channel | Source | ID | 事件说明 |
---|---|---|---|
Windows 日志\系统 | 内核电源 | 125 | 正在枚举的 ACPI 热区域。
Windows 在启动期间将记录每个热区域的此事件。 |
Windows 日志\系统 | 内核电源 | 86 | 系统因发生关键热事件而关机。
在发生临界关机后,Windows 将记录此事件。 此事件可用于诊断是否发生了热临界关机,并识别导致关机的热区域。 |
应用程序和服务日志\Microsoft\Windows\Kernel-Power\Thermal-Operational | 内核电源 | 114 | 某个热区域已激活或解除被动散热。
当激活和解除热限制时,Windows 将记录此事件。 此事件可用于确认是否发生了热限制以及在哪些区域发生。 在会审性能问题时,此事件非常有用。 |
关键事件通知
在发生热状况导致的临界关机或休眠事件时,必须将该事件通知给操作系统,以便可以在系统事件日志中记录该事件。 发生这种情况时,可通过两种方式通知操作系统:
使用 ACPI 热区域 _CRT 或 _HOT 方法自动正确记录关键热事件。 除了定义 _CRT 或 _HOT 值之外,不需要其他操作。
对于所有其他热解决方案,驱动程序可使用 Procpowr.h 头文件中定义的以下热事件接口:
#define THERMAL_EVENT_VERSION 1 typedef struct _THERMAL_EVENT { ULONG Version; ULONG Size; ULONG Type; ULONG Temperature; ULONG TripPointTemperature; LPWSTR Initiator; } THERMAL_EVENT, *PTHERMAL_EVENT; #if (NTDDI_VERSION >= NTDDI_WINBLUE) DWORD PowerReportThermalEvent ( _In_ PTHERMAL_EVENT Event ); #endif
PowerReportThermalEvent 例程将热事件通知给操作系统,以便可以在系统事件日志中记录该事件。 在调用 PowerReportThermalEvent 之前,驱动程序将 THERMAL_EVENT 结构的成员设置为以下值。
- 版本
THERMAL_EVENT_VERSION
- 大小
sizeof(THERMAL_EVENT)
- 类型
Ntpoapi.h 中的 THERMAL_EVENT_XXX 值之一。
- 温度
传感器在超过跳变点之后的温度,以开氏度的十分之一计(如果未知,则为零)。
- TripPointTemperature
跳变点的温度,以开氏度的十分之一计(如果未知,则为零)。
- Initiator
指向以 NULL 结尾的宽字符串的指针,该字符串用于标识已超过阈值的传感器。
The following thermal event types are defined in the Ntpoapi.h header file:
```
// // Thermal event types // #define THERMAL_EVENT_SHUTDOWN 0 #define THERMAL_EVENT_HIBERNATE 1 #define THERMAL_EVENT_UNSPECIFIED 0xffffffff
```
Hardware platforms should use the thermal event interface only if thermal solutions other than Windows thermal management framework are used. This interface allows the operating system to gather information when a critical shutdown occurs due to thermal reasons.
性能计数器
性能计数器提供有关系统热行为的实时信息。 将轮询每个热区域的以下三项数据。
热区域信息 |
---|
|
只会按请求轮询此信息 — 例如,应 Windows 性能监视器或 typeperf 命令行工具的请求。
有关性能计数器的一般详细信息,请参阅性能计数器。
性能监视器
性能监视器是用于轮询和可视化信息的一个内置应用程序。 性能监视器是一个非常强大的工具,可以比较不同系统热设计的热状况。 以下两个示例屏幕截图显示了在 Internet Explorer 中运行鱼缸演示应用时性能监视器的工作情况。 在第一个屏幕截图中,性能监视器显示了三个热区域的温度随时间升高。
在第二个屏幕截图中,性能监视器报告了当前限制百分比、温度和限制原因。
有关详细信息,请参阅 使用性能监视器。
Windows Performance Analyzer (WPA)
Windows 提供用于软件跟踪和分析的 Windows 性能工具包 (WPT) 作为 ADK 的一部分。 在 WPT 内部,系统设计人员可以使用 Windows 性能分析器 (WPA) 来可视化软件跟踪和分析热行为。 有关如何安装和使用 WPA 的详细信息,请参阅 Windows 性能分析器 (WPA)。
提供程序
包含“Microsoft-Windows-Kernel-ACPI”用于记录温度、热区域活动和风扇活动的事件。
包含“Microsoft-Windows-Thermal-Polling”用于启用每个热区域的温度轮询。 如果不包含此提供程序,则只有在温度超过被动和/或主动跳变点时才会报告温度。 可以通过在提供程序中指定一个标志来控制轮询周期。
标志 | 轮询周期 |
---|---|
无 | 1 秒 |
0x1 | 1 秒 |
0x2 | 5 秒 |
0x4 | 30 秒 |
0x8 | 5 分钟 |
0x10 | 30 分钟 |
处理器实用工具
在深入分析热限制数据之前,最好是反复检查处理器实用工具信息,以确保处理器实用工具模式与工作负载应使用的模式一致。 若要确认工作负载是否正确设置,请执行以下步骤:
- 使用 WPA 工具打开 ETL 文件。
- 在“Graph 浏览器”中,依次选择“电源”、“处理器实用工具”。
- 将“图形类型”更改为“堆叠折线图”。
以下屏幕截图显示了“处理器实用工具”图形。
热区域限制百分比
当热区域受限制时,软件跟踪文件已记录所有热限制百分比变化、温度变化和散热策略变化。 若要查看跟踪文件中的信息,请执行以下步骤:
- 使用 WPA 工具打开 ETL 文件。
- 在“Graph 浏览器”中,依次选择“电源”、“热区域设备限制”。
- 可以通过“应用筛选”选择所需的设备。
以下屏幕截图显示了“热区域设备限制”图形和筛选选项。
热区域温度
使用性能计数器信息还可以在不激活限制的情况下监视系统温度。 执行以下步骤:
- 在捕获跟踪的同时启用所需的提供程序。
- 确保仍在轮询性能计数器(性能监视器仍在运行)。 有关详细信息,请参阅性能计数器。
- 使用 WPA 工具打开 ETL 文件。
- 在“Graph 浏览器”中,依次选择“电源”、“按热区域列出的温度(K)”。
- 应会看到每个热区域在不同时间的温度。
以下屏幕截图显示了五个热区域在不同时间的温度的图形。