|
| 1 | +.. SPDX-License-Identifier: GPL-2.0 |
| 2 | +.. include:: <isonum.txt> |
| 3 | + |
| 4 | +============================== |
| 5 | +Intel Uncore Frequency Scaling |
| 6 | +============================== |
| 7 | + |
| 8 | +:Copyright: |copy| 2022 Intel Corporation |
| 9 | + |
| 10 | +:Author: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com> |
| 11 | + |
| 12 | +Introduction |
| 13 | +------------ |
| 14 | + |
| 15 | +The uncore can consume significant amount of power in Intel's Xeon servers based |
| 16 | +on the workload characteristics. To optimize the total power and improve overall |
| 17 | +performance, SoCs have internal algorithms for scaling uncore frequency. These |
| 18 | +algorithms monitor workload usage of uncore and set a desirable frequency. |
| 19 | + |
| 20 | +It is possible that users have different expectations of uncore performance and |
| 21 | +want to have control over it. The objective is similar to allowing users to set |
| 22 | +the scaling min/max frequencies via cpufreq sysfs to improve CPU performance. |
| 23 | +Users may have some latency sensitive workloads where they do not want any |
| 24 | +change to uncore frequency. Also, users may have workloads which require |
| 25 | +different core and uncore performance at distinct phases and they may want to |
| 26 | +use both cpufreq and the uncore scaling interface to distribute power and |
| 27 | +improve overall performance. |
| 28 | + |
| 29 | +Sysfs Interface |
| 30 | +--------------- |
| 31 | + |
| 32 | +To control uncore frequency, a sysfs interface is provided in the directory: |
| 33 | +`/sys/devices/system/cpu/intel_uncore_frequency/`. |
| 34 | + |
| 35 | +There is one directory for each package and die combination as the scope of |
| 36 | +uncore scaling control is per die in multiple die/package SoCs or per |
| 37 | +package for single die per package SoCs. The name represents the |
| 38 | +scope of control. For example: 'package_00_die_00' is for package id 0 and |
| 39 | +die 0. |
| 40 | + |
| 41 | +Each package_*_die_* contains the following attributes: |
| 42 | + |
| 43 | +``initial_max_freq_khz`` |
| 44 | + Out of reset, this attribute represent the maximum possible frequency. |
| 45 | + This is a read-only attribute. If users adjust max_freq_khz, |
| 46 | + they can always go back to maximum using the value from this attribute. |
| 47 | + |
| 48 | +``initial_min_freq_khz`` |
| 49 | + Out of reset, this attribute represent the minimum possible frequency. |
| 50 | + This is a read-only attribute. If users adjust min_freq_khz, |
| 51 | + they can always go back to minimum using the value from this attribute. |
| 52 | + |
| 53 | +``max_freq_khz`` |
| 54 | + This attribute is used to set the maximum uncore frequency. |
| 55 | + |
| 56 | +``min_freq_khz`` |
| 57 | + This attribute is used to set the minimum uncore frequency. |
| 58 | + |
| 59 | +``current_freq_khz`` |
| 60 | + This attribute is used to get the current uncore frequency. |
0 commit comments