mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-09-06 02:50:43 +00:00
61 lines
2.3 KiB
ReStructuredText
61 lines
2.3 KiB
ReStructuredText
![]() |
.. SPDX-License-Identifier: GPL-2.0
|
||
|
.. include:: <isonum.txt>
|
||
|
|
||
|
==============================
|
||
|
Intel Uncore Frequency Scaling
|
||
|
==============================
|
||
|
|
||
|
:Copyright: |copy| 2022 Intel Corporation
|
||
|
|
||
|
:Author: Srinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
|
||
|
|
||
|
Introduction
|
||
|
------------
|
||
|
|
||
|
The uncore can consume significant amount of power in Intel's Xeon servers based
|
||
|
on the workload characteristics. To optimize the total power and improve overall
|
||
|
performance, SoCs have internal algorithms for scaling uncore frequency. These
|
||
|
algorithms monitor workload usage of uncore and set a desirable frequency.
|
||
|
|
||
|
It is possible that users have different expectations of uncore performance and
|
||
|
want to have control over it. The objective is similar to allowing users to set
|
||
|
the scaling min/max frequencies via cpufreq sysfs to improve CPU performance.
|
||
|
Users may have some latency sensitive workloads where they do not want any
|
||
|
change to uncore frequency. Also, users may have workloads which require
|
||
|
different core and uncore performance at distinct phases and they may want to
|
||
|
use both cpufreq and the uncore scaling interface to distribute power and
|
||
|
improve overall performance.
|
||
|
|
||
|
Sysfs Interface
|
||
|
---------------
|
||
|
|
||
|
To control uncore frequency, a sysfs interface is provided in the directory:
|
||
|
`/sys/devices/system/cpu/intel_uncore_frequency/`.
|
||
|
|
||
|
There is one directory for each package and die combination as the scope of
|
||
|
uncore scaling control is per die in multiple die/package SoCs or per
|
||
|
package for single die per package SoCs. The name represents the
|
||
|
scope of control. For example: 'package_00_die_00' is for package id 0 and
|
||
|
die 0.
|
||
|
|
||
|
Each package_*_die_* contains the following attributes:
|
||
|
|
||
|
``initial_max_freq_khz``
|
||
|
Out of reset, this attribute represent the maximum possible frequency.
|
||
|
This is a read-only attribute. If users adjust max_freq_khz,
|
||
|
they can always go back to maximum using the value from this attribute.
|
||
|
|
||
|
``initial_min_freq_khz``
|
||
|
Out of reset, this attribute represent the minimum possible frequency.
|
||
|
This is a read-only attribute. If users adjust min_freq_khz,
|
||
|
they can always go back to minimum using the value from this attribute.
|
||
|
|
||
|
``max_freq_khz``
|
||
|
This attribute is used to set the maximum uncore frequency.
|
||
|
|
||
|
``min_freq_khz``
|
||
|
This attribute is used to set the minimum uncore frequency.
|
||
|
|
||
|
``current_freq_khz``
|
||
|
This attribute is used to get the current uncore frequency.
|