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

# 配置 CPU、GPU 和内存

在分析系统性能之前，必须先配置设备的基本设置。这些设置对设备的性能有着重要影响。您可以配置 CPU、GPU 和内存设置。

<Warning>
  任何配置更改都可能影响设备的功耗和性能。在进行任何修改之前，请确保在所有相关用例中验证其影响。
</Warning>

## **配置 CPU**

您可以使用下表中指定的命令检查和修改 CPU 配置：

<Note>
  下表中指定的命令应在设备上运行。这些命令输出值的单位为 KHz。
</Note>

<Note>
  包含 `policy7` 的命令在 QCS5430 FP1 上不受支持。
</Note>

要为 Qualcomm Dragonwing<sup>™</sup> IQ-9075 和 Qualcomm Dragonwing<sup>™</sup> IQ-8275 配置 CPU，请参见相应的附录：

* [Qualcomm Linux Performance Guide - Addendum for Qualcomm Dragonwing IQ-9075](https://docs.qualcomm.com/bundle/resource/topics/80-80023-10A/overview.html)
* [Qualcomm Linux Performance Guide - Addendum for Qualcomm Dragonwing IQ-8275](https://docs.qualcomm.com/bundle/resource/topics/80-80023-10B/overview.html)

**表：为 QCS6490、QCS5430 FP2、FP2.5、FP3 配置 CPU 的命令**

| 命令                                                                                                                                                                                                                                                                    | 用途                                                                            |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------- |
| `cat /sys/devices/system/cpu/online`                                                                                                                                                                                                                                  | 检查在线的 CPU 核心。                                                                 |
| `echo 1 > /sys/devices/system/cpu/cpuX/online`                                                                                                                                                                                                                        | 开启 CPU 核心。在 cpuX 中，X 表示核心编号，范围为 0 到 7。                                        |
| `echo 0 > /sys/devices/system/cpu/cpuX/online`                                                                                                                                                                                                                        | 关闭 CPU 核心。在 cpuX 中，X 表示核心编号，范围为 0 到 7。                                        |
| `cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq`<br />`cat /sys/devices/system/cpu/cpufreq/policy4/scaling_cur_freq`<br />`cat /sys/devices/system/cpu/cpufreq/policy7/scaling_cur_freq`                                                                | 读取当前 CPU 频率。                                                                  |
| `cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies`<br />`cat /sys/devices/system/cpu/cpufreq/policy4/scaling_available_frequencies`<br />`cat /sys/devices/system/cpu/cpufreq/policy7/scaling_available_frequencies`                         | 读取支持的 CPU 频率。                                                                 |
| `cat /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq`<br />`cat /sys/devices/system/cpu/cpufreq/policy4/scaling_min_freq`<br />`cat /sys/devices/system/cpu/cpufreq/policy7/scaling_min_freq`                                                                | 读取最小 CPU 频率。                                                                  |
| `echo <cpu freq in KHz> > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq`<br />`echo <cpu freq in KHz> > /sys/devices/system/cpu/cpufreq/policy4/scaling_min_freq`<br />`echo <cpu freq in KHz> > /sys/devices/system/cpu/cpufreq/policy7/scaling_min_freq` | 设置最小 CPU 频率。将 `<cpu freq in KHz>` 替换为所需频率后运行命令。                               |
| `cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq`<br />`cat /sys/devices/system/cpu/cpufreq/policy4/scaling_max_freq`<br />`cat /sys/devices/system/cpu/cpufreq/policy7/scaling_max_freq`                                                                | 读取最大 CPU 频率。                                                                  |
| `echo <cpu freq in KHz> > /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq`<br />`echo <cpu freq in KHz> > /sys/devices/system/cpu/cpufreq/policy4/scaling_max_freq`<br />`echo <cpu freq in KHz> > /sys/devices/system/cpu/cpufreq/policy7/scaling_max_freq` | 设置最大 CPU 频率。将 `<cpu freq in KHz>` 替换为所需频率后运行命令。                               |
| `cat /sys/devices/system/cpu/cpufreq/policy0/stats/trans_table`<br />`cat /sys/devices/system/cpu/cpufreq/policy4/stats/trans_table`<br />`cat /sys/devices/system/cpu/cpufreq/policy7/stats/trans_table`                                                             | 检查 CPU 驻留情况。                                                                  |
| 例如，要将 Silver 核心的 CPU 频率设置为 1.5 GHz，请运行以下命令：<br />`echo 1516800 > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq`<br />`echo 1516800 > /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq`                                                             | 设置 CPU 频率。将 `scaling_min_freq` 和 `scaling_max_freq` 设置为相同频率，以使 CPU 频率保持在所需水平。 |

您可以使用下表中指定的命令检查和修改 Qualcomm Dragonwing<sup>™</sup> IQ-615 的 CPU 配置：

**表：为 Dragonwing IQ-615 配置 CPU 的命令**

| 命令                                                                                                                                                                                                        | 用途                                                                  |
| --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------- |
| `cat /sys/devices/system/cpu/online`                                                                                                                                                                      | 检查在线的 CPU 核心。                                                       |
| `echo 1 > /sys/devices/system/cpu/cpuX/online`                                                                                                                                                            | 开启 CPU 核心。在 cpuX 中，X 表示核心编号，范围为 0 到 7。                              |
| `echo 0 > /sys/devices/system/cpu/cpuX/online`                                                                                                                                                            | 关闭 CPU 核心。在 cpuX 中，X 表示核心编号，范围为 0 到 7。                              |
| `cat /sys/devices/system/cpu/cpufreq/policy0/scaling_cur_freq`<br />`cat /sys/devices/system/cpu/cpufreq/policy6/scaling_cur_freq`                                                                        | 读取 CPU 的当前频率。                                                       |
| `cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies`<br />`cat /sys/devices/system/cpu/cpufreq/policy6/scaling_available_frequencies`                                              | 读取 CPU 支持的频率。                                                       |
| `cat /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq`<br />`cat /sys/devices/system/cpu/cpufreq/policy6/scaling_min_freq`                                                                        | 读取 CPU 的最小频率。                                                       |
| `echo <cpu freq in KHz> > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq`<br />`echo <cpu freq in KHz> > /sys/devices/system/cpu/cpufreq/policy6/scaling_min_freq`                              | 设置 CPU 的最小频率。将 `<cpu freq in KHz>` 替换为所需频率后运行命令。                    |
| `cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq`<br />`cat /sys/devices/system/cpu/cpufreq/policy6/scaling_max_freq`                                                                        | 读取 CPU 的最大频率。                                                       |
| `echo <cpu freq in KHz> > /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq`<br />`echo <cpu freq in KHz> > /sys/devices/system/cpu/cpufreq/policy6/scaling_max_freq`                              | 要设置 CPU 的最大频率，请将 `<cpu freq in KHz>` 替换为所需频率后运行命令。                  |
| `cat /sys/devices/system/cpu/cpufreq/policy0/stats/trans_table`<br />`cat /sys/devices/system/cpu/cpufreq/policy6/stats/trans_table`                                                                      | 检查 CPU 驻留情况。                                                        |
| 例如，要将 Silver 核心的 CPU 频率设置为 1.5 GHz，请运行以下命令：<br />`echo 1516800 > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq`<br />`echo 1516800 > /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq` | 要将 CPU 频率设置在所需水平，`scaling_min_freq` 和 `scaling_max_freq` 都应设置为相同频率。 |

## **配置 GPU**

您可以使用下表中指定的命令在设备上检查和修改 GPU 配置：

<Note>
  下表中指定的命令应在设备上运行。这些命令输出值的单位为 Hz。
</Note>

**表：配置 GPU 的命令**

| 命令                                                                                                                                                                        | 用途                                                     |
| ------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------ |
| `cat /sys/class/kgsl/kgsl-3d0/gpuclk`                                                                                                                                     | 读取当前 GPU 频率。                                           |
| `cat /sys/class/kgsl/kgsl-3d0/gpu_available_frequencies`                                                                                                                  | 读取支持的 GPU 频率。                                          |
| `cat /sys/class/kgsl/kgsl-3d0/devfreq/min_freq`                                                                                                                           | 读取最小 GPU 频率。                                           |
| `echo <GPU freq in Hz> > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq`                                                                                                       | 设置最小 GPU 频率。将 `<GPU freq in Hz>` 替换为所需频率（单位 Hz）后运行命令。  |
| `cat /sys/class/kgsl/kgsl-3d0/devfreq/max_freq`                                                                                                                           | 读取最大 GPU 频率。                                           |
| `echo <GPU freq in Hz> /sys/class/kgsl/kgsl-3d0/devfreq/max_freq`                                                                                                         | 设置最大 GPU 频率。将 `<GPU freq in Hz>` 替换为所需频率（单位 Hz）后运行命令。  |
| `cat /sys/class/kgsl/kgsl-3d0/gpu_busy_percentage`                                                                                                                        | 读取 GPU 使用率百分比。                                         |
| 例如，要将 GPU 频率设置为 600000000 Hz，请运行以下命令：<br />`echo 600000000 > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq`<br />`echo 600000000 > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq` | 将 GPU 频率设置在所需水平；`min_freq` 和 `max_freq` 都应设置为相同的频率水平。  |
| `cat /sys/class/kgsl/kgsl-3d0/max_pwrlevel`<br />`cat /sys/class/kgsl/kgsl-3d0/min_pwrlevel`                                                                              | 读取 GPU 功耗级别。功耗级别 0 对应最大 GPU 时钟频率。随着功耗级别值增大，GPU 时钟频率降低。 |
| `echo 0 > /sys/class/kgsl/kgsl-3d0/min_pwrlevel`                                                                                                                          | 将 GPU 频率设置为最大频率。                                       |

## **配置内存**

内存配置对于节省内存、为进程腾出空间以及在物理内存达到极限时平衡 RAM 中的现有数据至关重要。

### **设置 ZRAM 磁盘大小**

ZRAM 是用于交换内存空间的 RAM 分区。它将不活跃的匿名页以压缩形式存储在 RAM 中，以节省内存。

ZRAM 磁盘大小表示可从 RAM 交换到 ZRAM 的最大内存量。建议将 ZRAM 磁盘大小设置为 RAM 大小的一半。

在 Qualcomm<sup>®</sup> Linux<sup>®</sup> 构建中，ZRAM 默认已启用。默认情况下，通过 `post_boot_common.sh` 脚本中的 `/sys/block/zram*/mem_limit` 参数将 50% 的 RAM 配置为 ZRAM 内存限制。

要重新配置 ZRAM 内存限制，请修改设备上位于 `/etc/urm/initscripts/post_boot/` 的 `post_boot_common.sh` 脚本中的 `/sys/block/zram*/mem_limit` 参数值。

有关启动后脚本的更多信息，请参见 [Post-boot init scripts](https://github.com/qualcomm/userspace-resource-manager-extensions/blob/main/docs/08-post-boot-init-scripts.md)。

### **启用/禁用主动内存规整（proactive compaction）**

内存规整（compaction）是将所有碎片形式的空闲内存空间汇集成大内存块的过程。主动规整决定了后台执行内存规整的积极程度。它接受 0 到 100 之间的值，默认值为 20。

当节点的碎片化得分超过高阈值时，相应的 kcompactd 线程会启动主动规整过程。

规整过程会保持活跃，直到节点得分降至低阈值以下。

主动规整的阈值如下：

* 低阈值 = 100 - 主动性（proactiveness）
* 高阈值 = 低阈值 + 10%

例如，如果低阈值为 80，则高阈值为 90。

要启用主动规整，请在设备上运行以下命令：

```text theme={null}
echo 20 > /proc/sys/vm/compaction_proactiveness
```

要禁用主动规整（这也会关闭 kcompactd 的周期性唤醒），请在设备上运行以下命令：

```text theme={null}
echo 0 > /proc/sys/vm/compaction_proactiveness
```

更多信息请参见 [Proactive compaction for the kernel](https://lwn.net/Articles/817905/)。

### **Swappiness**

交换空间（swap space）是一种功能类似于主内存或 RAM 的二级存储。交换空间的主要参数是 swappiness。

* 该参数决定内核交换守护进程（kswapd）相对于系统页缓存换出[匿名内存](https://www.kernel.org/doc/html/latest/admin-guide/mm/concepts.html#anonymous-memory)的积极程度。
* 该参数可取 0 到 200 之间的值。增大该值会增加匿名内存的交换量。配置值为 100，表示匿名内存和缓存内存被同等回收。

要调整 swappiness 值，请在设备上运行以下命令：

```text theme={null}
echo 100 > /proc/sys/vm/swappiness
```

有关内存参数的更多信息，请参见 [Documentation for /proc/sys/vm/](https://www.kernel.org/doc/Documentation/admin-guide/sysctl/vm.rst)。

## **后续步骤**

* [针对性能调优进行定制](./customize-for-performance-tuning)
