14. 用于 Intel 硬件调度的硬件反馈接口

14.1. 概述

Intel 已在《Intel 64 和 IA-32 架构软件开发者手册》(Intel SDM) 第 3 卷第 14.6 节中描述了硬件反馈接口 (HFI) [1]

HFI 为操作系统提供了系统中每个 CPU 的性能和能效能力数据。Linux 可以利用来自 HFI 的信息来影响任务放置决策。

14.2. 硬件反馈接口

硬件反馈接口向操作系统提供有关系统中每个 CPU 的性能和能效的信息。每种能力以 [0-255] 范围内的无量纲数值表示。数值越高,表示能力越强。能效和性能作为独立的能力进行报告。尽管在某些系统上这两个指标可能相关,但在 Intel SDM 中它们被指定为独立的能力。

这些能力可能会因系统运行条件的变化或外部因素的作用而在运行时发生变化。这些能力的更新速率因处理器型号而异。在某些型号上,能力在启动时设置且从不更改。在其他型号上,能力可能每几十毫秒就会发生变化。例如,可以使用远程机制来降低热设计功耗 (TDP)。这种变化可以反映在 HFI 中。同样,如果系统由于过热需要进行节流,HFI 可能会反映特定 CPU 的性能下降。

内核或用户空间策略守护进程可以使用这些能力来修改任务放置决策。例如,如果某个逻辑处理器的性能或能效能力变为零,则表明硬件建议操作系统出于性能或能效原因,不要在该处理器上调度任何任务。

14.3. Linux 的实现细节

处理热事件中断的基础设施由两部分组成。在 CPU 本地 APIC 的本地向量表中,存在一个热监控寄存器。该寄存器控制当热监控器产生中断时,中断如何传递给 CPU。更多详细信息可在《Intel SDM》第 3 卷第 10.5 节中找到 [1]

热监控器可以按 CPU 或按封装(package)生成中断。HFI 生成封装级中断。此监控器通过一组机器特定寄存器进行配置和初始化。具体来说,HFI 中断和状态分别通过 IA32_PACKAGE_THERM_INTERRUPT 和 IA32_PACKAGE_THERM_STATUS 寄存器中的指定位进行控制。每个封装存在一个 HFI 表。更多详细信息可在《Intel SDM》第 3 卷第 14.9 节中找到 [1]

硬件在更新 HFI 表并准备好供操作系统使用后,会发出 HFI 中断。CPU 通过本地 APIC 本地向量表中的热条目接收此类中断。

在处理此类中断时,HFI 驱动程序会解析更新后的表,并使用热通知框架将更新中继到用户空间。鉴于每秒可能有很多次 HFI 更新,中继到用户空间的更新会以 CONFIG_HZ 个时钟滴答 (jiffies) 的速率进行节流。

14.4. 参考文献