> ## 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、GPU 和内存

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

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

## **配置 CPU**

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

<Note>
  下表中的所有命令都必须在设备上运行。频率命令输出值的单位为 KHz。
</Note>

**表：CPU 配置命令（通用）**

将 `<policyX>` 替换为适用于您设备的 policy 编号。有关正确的 policy 编号，请参阅下方的**设备 CPU policy 参考**表。

| 命令 | 用途 |
| - | - |
| `cat /sys/devices/system/cpu/online` | 检查在线的 CPU 核心。 |
| `echo 1 > /sys/devices/system/cpu/cpu<N>/online` | 开启 CPU 核心 N（0 到 7）。 |
| `echo 0 > /sys/devices/system/cpu/cpu<N>/online` | 关闭 CPU 核心 N（0 到 7）。 |
| `cat /sys/devices/system/cpu/cpufreq/<policyX>/scaling_cur_freq` | 读取该集群的当前 CPU 频率。 |
| `cat /sys/devices/system/cpu/cpufreq/<policyX>/scaling_available_frequencies` | 读取该集群支持的 CPU 频率。 |
| `cat /sys/devices/system/cpu/cpufreq/<policyX>/scaling_min_freq` | 读取该集群的最小 CPU 频率。 |
| `echo <freq in KHz> > /sys/devices/system/cpu/cpufreq/<policyX>/scaling_min_freq` | 设置最小 CPU 频率。将 `<freq in KHz>` 替换为所需频率。 |
| `cat /sys/devices/system/cpu/cpufreq/<policyX>/scaling_max_freq` | 读取该集群的最大 CPU 频率。 |
| `echo <freq in KHz> > /sys/devices/system/cpu/cpufreq/<policyX>/scaling_max_freq` | 设置最大 CPU 频率。将 `<freq in KHz>` 替换为所需频率。 |
| `cat /sys/devices/system/cpu/cpufreq/<policyX>/stats/trans_table` | 检查该集群的 CPU 频率驻留情况。 |

<Note>
  要将 CPU 频率锁定在特定水平，请将 `scaling_min_freq` 和 `scaling_max_freq` 设置为相同的值。例如，要将 Silver 集群锁定在 1516800 KHz（≈1.5 GHz）：`echo 1516800 > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq` 和 `echo 1516800 > /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq`。
</Note>

**表：设备 CPU policy 参考**

| **设备** | **Policy 编号** | **备注** |
| - | - | - |
| QCS6490、QCS5430 FP2、FP2.5、FP3 | policy0（Silver）、policy4（Gold）、policy7（Prime） | QCS5430 FP1 不支持 `policy7` |
| Dragonwing IQ-615 | policy0（Silver）、policy6（Gold） | — |
| Dragonwing IQ-9075 | policy0（Gold）、policy4（Prime） | — |
| Dragonwing IQ-8275 | policy0（Silver）、policy2（Gold）、policy4（Prime） | — |

## **配置 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/blob/main/plugins/docs/08-post-boot-init-scripts.md)。

### **启用/禁用主动内存规整**

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

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

规整过程会持续进行，直到节点的得分降至低阈值以下。

主动规整的阈值如下：

* 低阈值 = 100 - 主动性
* 高阈值 = 低阈值 + 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)
