协作式处理器性能控制 (CPPC)¶
CPPC¶
ACPI 规范中定义的 CPPC 描述了一种机制,操作系统可以通过该机制在连续且抽象的性能量表上管理逻辑处理器的性能。CPPC 公开了一组寄存器,用于描述抽象性能量表、请求性能级别以及测量每个 CPU 提供的性能。
有关 CPPC 的更多详细信息,请参阅 ACPI 规范:
http://uefi.org/specifications
部分 CPPC 寄存器通过 sysfs 暴露在
/sys/devices/system/cpu/cpuX/acpi_cppc/
每个 CPU X 下
$ ls -lR /sys/devices/system/cpu/cpu0/acpi_cppc/
/sys/devices/system/cpu/cpu0/acpi_cppc/:
total 0
-r--r--r-- 1 root root 65536 Mar 5 19:38 feedback_ctrs
-r--r--r-- 1 root root 65536 Mar 5 19:38 highest_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 lowest_freq
-r--r--r-- 1 root root 65536 Mar 5 19:38 lowest_nonlinear_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 lowest_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 nominal_freq
-r--r--r-- 1 root root 65536 Mar 5 19:38 nominal_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 reference_perf
-r--r--r-- 1 root root 65536 Mar 5 19:38 wraparound_time
highest_perf : 此处理器的最高性能(抽象量表)。
nominal_perf : 此处理器的最高持续性能(抽象量表)。
lowest_nonlinear_perf : 此处理器具有非线性功耗节省的最低性能(抽象量表)。
lowest_perf : 此处理器的最低性能(抽象量表)。
lowest_freq : 对应 lowest_perf 的 CPU 频率(单位 MHz)。
nominal_freq : 对应 nominal_perf 的 CPU 频率(单位 MHz)。上述频率仅应用于以频率而非抽象量表报告处理器性能。这些值不应用于任何功能性决策。
feedback_ctrs : 包括参考性能计数器和已交付性能计数器。参考计数器按与处理器参考性能成比例的速度递增。已交付计数器按与处理器已交付性能成比例的速度递增。
wraparound_time: 反馈计数器回绕所需的最小时间(秒)。
reference_perf : 参考性能计数器累积时的性能级别(抽象量表)。
计算平均已交付性能¶
下面描述了在时间 T1 和 T2 拍摄两个不同的反馈计数器快照来计算平均已交付性能的步骤。
- T1: 将 feedback_ctrs 读取为 fbc_t1
等待或运行某些工作负载
T2: 将 feedback_ctrs 读取为 fbc_t2
delivered_counter_delta = fbc_t2[del] - fbc_t1[del]
reference_counter_delta = fbc_t2[ref] - fbc_t1[ref]
delivered_perf = (reference_perf x delivered_counter_delta) / reference_counter_delta