21. AMD 平台异构核心调度的硬件反馈接口

版权:

2025 Advanced Micro Devices, Inc. 保留所有权利。

作者:

Perry Yuan <perry.yuan@amd.com>

作者:

Mario Limonciello <mario.limonciello@amd.com>

21.1. 概述

AMD 异构核心实现由不止一个架构类别组成,CPU 由具有各种效率和功耗能力的内核组成:偏向性能的经典核心和能效优先的密集核心。因此,必须设计电源管理策略,以适应引入不同核心类型所带来的复杂性。异构系统也可以扩展到两个以上的架构类别。调度反馈机制的目的是向操作系统调度器实时提供信息,以便调度器能将线程引导至最佳核心。

AMD 异构架构的目标是通过将后台线程发送到密集核心、将高优先级线程发送到经典核心来获得功耗效益。从性能角度来看,将后台线程发送到密集核心可以释放功耗余量,并允许经典核心以最佳状态服务高负载线程。此外,密集核心面积优化的特性允许容纳更多的物理核心。这种提升的核心密度将对多线程性能产生积极的影响。

21.2. AMD 异构核心驱动程序

amd_hfi 驱动程序向操作系统提供系统中每个 CPU 的性能和能效能力数据。调度器可以使用来自 HFI 驱动程序的评级数据来做出任务放置决策。

21.3. 线程分类与评级表交互

线程分类用于在评级表中进行选择,该表描述了每个分类的能效和性能评级。

线程在运行时被分类到枚举的类别中。这些类别代表了可能受益于特殊调度行为的线程性能/功耗特征。下表描绘了一个线程分类的示例,以及基于给定线程类别应该将其调度到何处首选行为的示例。实时线程分类被操作系统消费,并用于告知调度器该线程应该被放置在何处。

21.3.1. 线程分类示例表

类别 ID

分类

首选调度行为

抢占优先级

计数器

0

默认值

高性能

最高

1

不可扩展

高能效

最低

PMCx1A1

2

I/O 密集型

高能效

最低

PMCx044

每次线程被换出时,硬件都会执行线程分类。不满足任何硬件指定标准的线程被归类为“默认”。

21.4. AMD 硬件反馈接口

硬件反馈接口向操作系统提供关于系统中每个 CPU 的性能和能效的信息。每个能力都以 [0-255] 范围内的无量纲数量给出。较高的性能值表示更高的性能能力,较高的能效值表示更高的效率。能效和性能在基于共享内存的评级表中作为单独的能力进行报告。

由于系统运行条件的变化或外部因素的影响,这些能力可能会在运行时发生变化。电源管理固件负责检测需要重新排序性能和能效评级的事件。表格更新相对较少发生,其时间尺度在数秒或更长。

以下事件会触发表格更新:
  • 热应力事件

  • 静音计算

  • 极低电池电量场景

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

21.5. Linux 的实现细节

线程调度的实现包括以下步骤:

  1. 使用默认的异构调度策略派生线程并将其调度到理想核心。

  2. 处理器对线程执行进行分析并分配一个枚举的分类 ID。该分类通过逻辑处理器范围的 MSR 传达给操作系统。

  3. 在线程上下文换出期间,操作系统消费驻留在逻辑处理器范围 MSR 中的工作负载(WL)分类。

  4. 在消费了 WL 分类之后、换入新线程之前,操作系统通过写入 MSR 来触发硬件清除其历史记录。

  5. 如果由于分类、评级表和处理器可用性等原因,线程不在其理想处理器上,操作系统将考虑将该线程调度到其理想处理器上(如果可用)。

21.6. 评级表

评级表是一个共享内存区域,用于传达系统中每个 CPU 的性能和能效能力。

评级表设计包括系统中每个 APIC ID 的评级,以及针对每个工作负载分类的性能和能效评级。

struct amd_shmem_info

AMD HFI 的共享内存表

定义:

struct amd_shmem_info {
    struct acpi_pcct_ext_pcc_shared_memory header;
    u32 version_number          :8, n_logical_processors    :8, n_capabilities          :8, table_update_context    :8;
    u32 n_bitmaps               :8, reserved                :24;
    u32 table_data[];
};

成员

header

包含签名、长度标志和命令的 PCCT 表头。

version_number

表格的版本号

n_logical_processors

逻辑处理器的数量

n_capabilities

评级维度数量(性能、能效等)

table_update_context

通过子空间发送的命令

n_bitmaps

用于枚举所有 APIC ID 的 32 位位图数量,这基于系统中枚举的最大 APIC ID

保留字段

24 位备用

table_data

已启用逻辑处理器的位图,后跟每个逻辑处理器的评级数据

21.7. 评级表更新

电源管理固件在更新评级表并准备好供操作系统消费后,会发出一个平台中断。CPU 接收到此类中断并从 PCCT 表提供的共享内存中读取新的评级表,然后 amd_hfi 驱动程序解析新表,为调度决策提供新的消费数据。