162306a36Sopenharmony_ci.. SPDX-License-Identifier: GPL-2.0
262306a36Sopenharmony_ci
362306a36Sopenharmony_ci==================================================
462306a36Sopenharmony_ciCollaborative Processor Performance Control (CPPC)
562306a36Sopenharmony_ci==================================================
662306a36Sopenharmony_ci
762306a36Sopenharmony_ci.. _cppc_sysfs:
862306a36Sopenharmony_ci
962306a36Sopenharmony_ciCPPC
1062306a36Sopenharmony_ci====
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ciCPPC defined in the ACPI spec describes a mechanism for the OS to manage the
1362306a36Sopenharmony_ciperformance of a logical processor on a contiguous and abstract performance
1462306a36Sopenharmony_ciscale. CPPC exposes a set of registers to describe abstract performance scale,
1562306a36Sopenharmony_cito request performance levels and to measure per-cpu delivered performance.
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ciFor more details on CPPC please refer to the ACPI specification at:
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_cihttp://uefi.org/specifications
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciSome of the CPPC registers are exposed via sysfs under::
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci  /sys/devices/system/cpu/cpuX/acpi_cppc/
2462306a36Sopenharmony_ci
2562306a36Sopenharmony_cifor each cpu X::
2662306a36Sopenharmony_ci
2762306a36Sopenharmony_ci  $ ls -lR  /sys/devices/system/cpu/cpu0/acpi_cppc/
2862306a36Sopenharmony_ci  /sys/devices/system/cpu/cpu0/acpi_cppc/:
2962306a36Sopenharmony_ci  total 0
3062306a36Sopenharmony_ci  -r--r--r-- 1 root root 65536 Mar  5 19:38 feedback_ctrs
3162306a36Sopenharmony_ci  -r--r--r-- 1 root root 65536 Mar  5 19:38 highest_perf
3262306a36Sopenharmony_ci  -r--r--r-- 1 root root 65536 Mar  5 19:38 lowest_freq
3362306a36Sopenharmony_ci  -r--r--r-- 1 root root 65536 Mar  5 19:38 lowest_nonlinear_perf
3462306a36Sopenharmony_ci  -r--r--r-- 1 root root 65536 Mar  5 19:38 lowest_perf
3562306a36Sopenharmony_ci  -r--r--r-- 1 root root 65536 Mar  5 19:38 nominal_freq
3662306a36Sopenharmony_ci  -r--r--r-- 1 root root 65536 Mar  5 19:38 nominal_perf
3762306a36Sopenharmony_ci  -r--r--r-- 1 root root 65536 Mar  5 19:38 reference_perf
3862306a36Sopenharmony_ci  -r--r--r-- 1 root root 65536 Mar  5 19:38 wraparound_time
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_ci* highest_perf : Highest performance of this processor (abstract scale).
4162306a36Sopenharmony_ci* nominal_perf : Highest sustained performance of this processor
4262306a36Sopenharmony_ci  (abstract scale).
4362306a36Sopenharmony_ci* lowest_nonlinear_perf : Lowest performance of this processor with nonlinear
4462306a36Sopenharmony_ci  power savings (abstract scale).
4562306a36Sopenharmony_ci* lowest_perf : Lowest performance of this processor (abstract scale).
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_ci* lowest_freq : CPU frequency corresponding to lowest_perf (in MHz).
4862306a36Sopenharmony_ci* nominal_freq : CPU frequency corresponding to nominal_perf (in MHz).
4962306a36Sopenharmony_ci  The above frequencies should only be used to report processor performance in
5062306a36Sopenharmony_ci  frequency instead of abstract scale. These values should not be used for any
5162306a36Sopenharmony_ci  functional decisions.
5262306a36Sopenharmony_ci
5362306a36Sopenharmony_ci* feedback_ctrs : Includes both Reference and delivered performance counter.
5462306a36Sopenharmony_ci  Reference counter ticks up proportional to processor's reference performance.
5562306a36Sopenharmony_ci  Delivered counter ticks up proportional to processor's delivered performance.
5662306a36Sopenharmony_ci* wraparound_time: Minimum time for the feedback counters to wraparound
5762306a36Sopenharmony_ci  (seconds).
5862306a36Sopenharmony_ci* reference_perf : Performance level at which reference performance counter
5962306a36Sopenharmony_ci  accumulates (abstract scale).
6062306a36Sopenharmony_ci
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ciComputing Average Delivered Performance
6362306a36Sopenharmony_ci=======================================
6462306a36Sopenharmony_ci
6562306a36Sopenharmony_ciBelow describes the steps to compute the average performance delivered by
6662306a36Sopenharmony_citaking two different snapshots of feedback counters at time T1 and T2.
6762306a36Sopenharmony_ci
6862306a36Sopenharmony_ci  T1: Read feedback_ctrs as fbc_t1
6962306a36Sopenharmony_ci      Wait or run some workload
7062306a36Sopenharmony_ci
7162306a36Sopenharmony_ci  T2: Read feedback_ctrs as fbc_t2
7262306a36Sopenharmony_ci
7362306a36Sopenharmony_ci::
7462306a36Sopenharmony_ci
7562306a36Sopenharmony_ci  delivered_counter_delta = fbc_t2[del] - fbc_t1[del]
7662306a36Sopenharmony_ci  reference_counter_delta = fbc_t2[ref] - fbc_t1[ref]
7762306a36Sopenharmony_ci
7862306a36Sopenharmony_ci  delivered_perf = (refernce_perf x delivered_counter_delta) / reference_counter_delta
79