> ## Documentation Index
> Fetch the complete documentation index at: https://dragonwingdocs-staging.qualcomm.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 管理 CPU 空闲电源状态以提高能效

CPU 空闲电源管理(即空闲电源管理)在设备空闲时使 CPU 核心保持在适当的睡眠状态,以高效利用能源。

## **CPU 睡眠状态**

CPU 核心支持多种睡眠状态。每种睡眠状态都有相关的进入和退出延迟以及不同的功耗水平。核心睡眠状态的选择取决于该核心多久之后需要再次执行任务。

每个 CPU 睡眠状态由一个 C-state 编号表示。每个 C-state 关联两个关键参数:

* 省电:选择更高的 C-state 时,CPU 的省电效果会增加,但会导致唤醒延迟增加。
* 唤醒延迟:这是 CPU 核心从睡眠状态转换到运行状态所需的时间。

例如,更深的睡眠状态(C4)具有更高的唤醒延迟和更低的功耗,如下图所示。

<img src="https://mintcdn.com/qualcomm-staging/uWQLnBcS9sxlZhgB/System/Power/media/k2c-perf/latencypowersaving_1.png?fit=max&auto=format&n=uWQLnBcS9sxlZhgB&q=85&s=e14f14d82e508dbd25d4588edb34d589" alt="功耗与延迟之间的权衡" width="640" height="560" data-path="System/Power/media/k2c-perf/latencypowersaving_1.png" />

**图:功耗与延迟之间的权衡**

> >

> > 使用以下命令查看 CPU 睡眠状态的延迟:

```text theme={null}
cat /sys/devices/system/cpu/cpu<X>/cpuidle/state<Y>/latency
```

**注意**

这里,`<X>` 表示核心 ID,范围为 0 到 7,`<Y>` 是 Linux 电源状态的索引(0、1、2)。下表定义了 Linux 电源状态。

您可以研究和配置睡眠状态,以调优应用程序,实现功耗和性能的平衡。

下表列出了支持的 CPU 睡眠状态及其关联的 C-state 编号:

**注意**

CPU 睡眠状态默认启用。

<Tabs>
  <Tab title="QCS6490/QCS5430">
    **表:QCS6490/QCS5430 支持的核心电源状态**

    | **CPU 睡眠状态** |                                             **描述**                                             | **Linux 电源状态** |
    | :----------: | :--------------------------------------------------------------------------------------------: | :------------: |
    |      C1      |   <ul><li>CPU 核心时钟域关闭</li><li>电源域 `VDD_APC0/ VDD_APC1` 开启</li><li>通用中断控制器(GIC)时钟开启</li></ul>   |   State0 (S0)  |
    |      C3      | <ul><li>CPU 核心时钟域关闭</li><li>核心电源塌陷,L1 和 L2 缓存被刷新</li><li>电源域 `VDD_APC0/ VDD_APC1` 开启</li></ul> |   State1 (S1)  |
    |      C4      |         <ul><li>C3 + Silver 集群的 PLL 关闭</li><li>C3+ Gold 和 Prime 集群的 PLL 电源域关闭</li></ul>        |   State2 (S2)  |
  </Tab>

  <Tab title="IQ-9075">
    **表:IQ-9075 支持的核心电源状态**

    | **CPU 睡眠状态** |                                       **描述**                                       | **Linux 电源状态** |
    | :----------: | :--------------------------------------------------------------------------------: | :------------: |
    |      C1      | <ul><li>CPU 核心时钟域关闭</li><li>电源域 `VDD_APC0/ VDD_APC1` 开启</li><li>GIC 时钟开启</li></ul> |   State0 (S0)  |
    |      C4      |   <ul><li>C3 + Silver 集群的 PLL 关闭</li><li>C3+ Gold 和 Prime 集群的 PLL 电源域关闭</li></ul>  |   State1 (S1)  |
  </Tab>

  <Tab title="IQ-8275">
    **表:IQ-8275 支持的核心电源状态**

    | **CPU 睡眠状态** |                                       **描述**                                       | **Linux 电源状态** |
    | :----------: | :--------------------------------------------------------------------------------: | :------------: |
    |      C1      | <ul><li>CPU 核心时钟域关闭</li><li>电源域 `VDD_APC0/ VDD_APC1` 开启</li><li>GIC 时钟开启</li></ul> |   State0 (S0)  |
    |      C4      |   <ul><li>C3 + Silver 集群的 PLL 关闭</li><li>C3+ Gold 和 Prime 集群的 PLL 电源域关闭</li></ul>  |   State1 (S1)  |
  </Tab>

  <Tab title="IQ-615">
    **表:IQ-615 支持的核心电源状态**

    | **CPU 睡眠状态** |                                             **描述**                                             | **Linux 电源状态** |
    | :----------: | :--------------------------------------------------------------------------------------------: | :------------: |
    |      C1      |       <ul><li>CPU 核心时钟域关闭</li><li>电源域 `VDD_APC0/ VDD_APC1` 开启</li><li>GIC 时钟开启</li></ul>       |   State0 (S0)  |
    |      C3      | <ul><li>CPU 核心时钟域关闭</li><li>核心电源塌陷,L1 和 L2 缓存被刷新</li><li>电源域 `VDD_APC0/ VDD_APC1` 开启</li></ul> |   State1 (S1)  |
    |      C4      |         <ul><li>C3 + Silver 集群的 PLL 关闭</li><li>C3+ Gold 和 Prime 集群的 PLL 电源域关闭</li></ul>        |   State2 (S2)  |
  </Tab>

  <Tab title="IQ-X7181">
    **表:IQ-X7181 支持的核心电源状态**

    | **CPU 睡眠状态** |                                         **描述**                                         | **Linux 电源状态** |
    | :----------: | :------------------------------------------------------------------------------------: | :------------: |
    |      C2      | <ul><li>CPU 核心处于时钟门控低功耗模式</li><li>电源域 `VDD_CLUSTERi_CX` 开启</li><li>i = 0,1,2</li></ul> |   State0 (S0)  |
    |      C4      |                      <ul><li>刷新 L1D + 保存 CPU 上下文 + 电源门控</li></ul>                      |   State1 (S1)  |
  </Tab>

  <Tab title="IQ-X5121">
    **表:IQ-X5121 支持的核心电源状态**

    | **CPU 睡眠状态** |                                        **描述**                                        | **Linux 电源状态** |
    | :----------: | :----------------------------------------------------------------------------------: | :------------: |
    |      C2      | <ul><li>CPU 核心处于时钟门控低功耗模式</li><li>电源域 `VDD_CLUSTERi_CX` 开启</li><li>i = 0,1</li></ul> |   State0 (S0)  |
    |      C4      |                     <ul><li>刷新 L1D + 保存 CPU 上下文 + 电源门控</li></ul>                     |   State1 (S1)  |
  </Tab>

  <Tab title="CQ-2390">
    **表:CQ-2390 支持的核心电源状态**

    | **CPU 睡眠状态** |                                        **描述**                                        | **Linux 电源状态** |
    | :----------: | :----------------------------------------------------------------------------------: | :------------: |
    |      C1      |       <ul><li>CPU 核心时钟域关闭</li><li>电源域 `VDD_APC0` 开启</li><li>GIC 时钟开启</li></ul>       |   State0 (S0)  |
    |      C3      | <ul><li>CPU 核心时钟域关闭</li><li>核心电源塌陷,L1 和 L2 缓存被刷新</li><li>电源域 `VDD_APC0` 开启</li></ul> |   State1 (S1)  |
    |      C4      |                    <ul><li>C3 + Silver 和 Gold 核心的 PLL 关闭</li></ul>                   |   State2 (S2)  |
  </Tab>

  <Tab title="IQ-X10">
    **表:IQ-X10 支持的核心电源状态**

    | **CPU 睡眠状态** |                                         **描述**                                         | **Linux 电源状态** |
    | :----------: | :------------------------------------------------------------------------------------: | :------------: |
    |      C2      | <ul><li>CPU 核心处于时钟门控低功耗模式</li><li>电源域 `VDD_CLUSTERi_CX` 开启</li><li>i = 0,1,2</li></ul> |   State0 (S0)  |
    |      C4      |                      <ul><li>刷新 L1D + 保存 CPU 上下文 + 电源门控</li></ul>                      |   State1 (S1)  |
  </Tab>
</Tabs>

## **启用和禁用低功耗管理状态**

下表列出了如何配置 CPU 睡眠状态:

**注意**

如果更改睡眠状态的配置,应检查对设备功耗的影响。

**表:启用/禁用 CPU 电源状态的命令**

<table>
  <thead>
    <tr>
      <th style={{ textAlign: "center" }}>CPU 睡眠状态</th>
      <th style={{ textAlign: "center" }}>描述</th>
      <th style={{ textAlign: "center" }}>Linux 电源状态</th>
    </tr>
  </thead>

  <tbody>
    <tr>
      <td rowSpan={2} style={{ textAlign: "center", verticalAlign: "middle" }}>S0</td>
      <td style={{ textAlign: "center" }}>禁用</td>
      <td><code>echo 0 > /sys/devices/system/cpu/cpuX/cpuidle/state0/disable</code></td>
    </tr>

    <tr>
      <td style={{ textAlign: "center" }}>启用</td>
      <td><code>echo 1 > /sys/devices/system/cpu/cpuX/cpuidle/state0/disable</code></td>
    </tr>

    <tr>
      <td rowSpan={2} style={{ textAlign: "center", verticalAlign: "middle" }}>S1</td>
      <td style={{ textAlign: "center" }}>禁用</td>
      <td><code>echo 0 > /sys/devices/system/cpu/cpuX/cpuidle/state1/disable</code></td>
    </tr>

    <tr>
      <td style={{ textAlign: "center" }}>启用</td>
      <td><code>echo 1 > /sys/devices/system/cpu/cpuX/cpuidle/state1/disable</code></td>
    </tr>

    <tr>
      <td rowSpan={2} style={{ textAlign: "center", verticalAlign: "middle" }}>S2</td>
      <td style={{ textAlign: "center" }}>禁用</td>
      <td><code>echo 0 > /sys/devices/system/cpu/cpuX/cpuidle/state2/disable</code></td>
    </tr>

    <tr>
      <td style={{ textAlign: "center" }}>启用</td>
      <td><code>echo 1 > /sys/devices/system/cpu/cpuX/cpuidle/state2/disable</code></td>
    </tr>
  </tbody>
</table>

**注意**

`<X>` 表示核心 ID,范围为 0 到 11。

## **验证 CPU 空闲统计信息**

要检查 CPU 核心睡眠状态的统计信息,请运行以下命令:

```text theme={null}
cat /sys/devices/system/cpu/cpu<X>/cpuidle/state<Y>/usage
```

这里,`<X>` 是核心 ID,范围为 0 到 7,`<Y>` 是 Linux 电源状态的索引(0、1 和 2)。

以下是输出示例:

```text theme={null}
cd /sys/devices/system/cpu

grep -r "" cpu\*/cpuidle/\*/usage

cpu0/cpuidle/state0/usage:97681

cpu0/cpuidle/state1/usage:95

cpu1/cpuidle/state0/usage:180055

cpu1/cpuidle/state1/usage:59
```

**注意**

`usage` 计数表示 `cpu<X>` 进入某个 Linux 电源状态的次数。

## **后续步骤**

* [监控挂起电源管理](monitor-suspend-power-management)
