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