14. 用于在 Intel 硬件上进行调度的硬件反馈接口¶
14.1. 概述¶
Intel 在 Intel 64 和 IA-32 架构软件开发人员手册 (Intel SDM) 第 3 卷第 14.6 节 [1] 中描述了硬件反馈接口 (HFI)。
HFI 为操作系统提供系统中每个 CPU 的性能和能效能力数据。 Linux 可以使用来自 HFI 的信息来影响任务放置决策。
14.2. 硬件反馈接口¶
硬件反馈接口向操作系统提供有关系统中每个 CPU 的性能和能效的信息。 每个功能都以无量纲量给出,范围为 [0-255]。 较高的值表示较高的能力。 能效和性能在单独的功能中报告。 尽管在某些系统上这两个指标可能相关,但在 Intel SDM 中它们被指定为独立功能。
这些功能可能会因系统运行状况的变化或外部因素的作用而在运行时发生变化。 这些功能更新的速率特定于每个处理器型号。 在某些型号上,功能在启动时设置,并且永远不会更改。 在其他型号上,功能可能每几十毫秒更改一次。 例如,可以使用远程机制来降低散热设计功耗。 这种变化可以反映在 HFI 中。 同样,如果由于过热需要节流系统,则 HFI 可能会反映特定 CPU 上的性能降低。
内核或用户空间策略守护程序可以使用这些功能来修改任务放置决策。 例如,如果给定逻辑处理器的性能或能量功能变为零,则表明硬件建议操作系统不要出于性能或能效原因在该处理器上调度任何任务。
14.3. Linux 的实现细节¶
处理热事件中断的基础结构有两个部分。 在 CPU 本地 APIC 的本地向量表中,存在一个用于热监视器寄存器的寄存器。 此寄存器控制在热监视器生成中断时如何将中断传递到 CPU。 更多详细信息可以在 Intel SDM 第 3 卷第 10.5 节 [1] 中找到。
热监视器可以生成每个 CPU 或每个封装的中断。 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 的速率受到限制。