Documentation/admin-guide/pm/intel_idle.rst

Source file repositories/reference/linux-study-clean/Documentation/admin-guide/pm/intel_idle.rst

File Facts

System
Linux kernel
Corpus path
Documentation/admin-guide/pm/intel_idle.rst
Extension
.rst
Size
18354 bytes
Lines
328
Domain
Support Tooling And Documentation
Bucket
Documentation
Inferred role
Support Tooling And Documentation: documentation
Status
atlas-only

Why This File Exists

Repository support layer: documentation, build tooling, samples, user-space helper tools, generated initramfs support, licenses, and validation utilities.

Dependency Surface

Detected Declarations

Annotated Snippet

.. SPDX-License-Identifier: GPL-2.0
.. include:: <isonum.txt>

==============================================
``intel_idle`` CPU Idle Time Management Driver
==============================================

:Copyright: |copy| 2020 Intel Corporation

:Author: Rafael J. Wysocki <rafael.j.wysocki@intel.com>


General Information
===================

``intel_idle`` is a part of the
:doc:`CPU idle time management subsystem <cpuidle>` in the Linux kernel
(``CPUIdle``).  It is the default CPU idle time management driver for the
Nehalem and later generations of Intel processors, but the level of support for
a particular processor model in it depends on whether or not it recognizes that
processor model and may also depend on information coming from the platform
firmware.  [To understand ``intel_idle`` it is necessary to know how ``CPUIdle``
works in general, so this is the time to get familiar with
Documentation/admin-guide/pm/cpuidle.rst if you have not done that yet.]

``intel_idle`` uses the ``MWAIT`` instruction to inform the processor that the
logical CPU executing it is idle and so it may be possible to put some of the
processor's functional blocks into low-power states.  That instruction takes two
arguments (passed in the ``EAX`` and ``ECX`` registers of the target CPU), the
first of which, referred to as a *hint*, can be used by the processor to
determine what can be done (for details refer to Intel Software Developer’s
Manual [1]_).  Accordingly, ``intel_idle`` refuses to work with processors in
which the support for the ``MWAIT`` instruction has been disabled (for example,
via the platform firmware configuration menu) or which do not support that
instruction at all.

``intel_idle`` is not modular, so it cannot be unloaded, which means that the
only way to pass early-configuration-time parameters to it is via the kernel
command line.

Sysfs Interface
===============

The ``intel_idle`` driver exposes the following ``sysfs`` attributes in
``/sys/devices/system/cpu/cpuidle/``:

``intel_c1_demotion``
	Enable or disable C1 demotion for all CPUs in the system. This file is
	only exposed on platforms that support the C1 demotion feature and where
	it was tested. Value 0 means that C1 demotion is disabled, value 1 means
	that it is enabled. Write 0 or 1 to disable or enable C1 demotion for
	all CPUs.

	The C1 demotion feature involves the platform firmware demoting deep
	C-state requests from the OS (e.g., C6 requests) to C1. The idea is that
	firmware monitors CPU wake-up rate, and if it is higher than a
	platform-specific threshold, the firmware demotes deep C-state requests
	to C1. For example, Linux requests C6, but firmware noticed too many
	wake-ups per second, and it keeps the CPU in C1. When the CPU stays in
	C1 long enough, the platform promotes it back to C6. This may improve
	some workloads' performance, but it may also increase power consumption.

.. _intel-idle-enumeration-of-states:

Enumeration of Idle States
==========================

Each ``MWAIT`` hint value is interpreted by the processor as a license to
reconfigure itself in a certain way in order to save energy.  The processor
configurations (with reduced power draw) resulting from that are referred to

Annotation

Implementation Notes