Configure
在开始任何性能分析之前,调整设备的基本配置设置是至关重要的。这些设置对设备的性能有着重要影响。
注意: 如果修改了 CPU、GPU 和内存设置,设备的功耗和性能可能会受到影响。在进行任何修改之前,确保对所有相关的使用案例进行了影响验证。
配置 CPU
您可以使用以下指定的命令来检查和修改 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 cat /sys/devices/system/cpu/cpufreq/policy4/scaling_cur_freq cat /sys/devices/system/cpu/cpufreq/policy7/scaling_cur_freq | 读取CPU当前频率,单位为KHz。 |
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_available_frequencies cat /sys/devices/system/cpu/cpufreq/policy4/scaling_available_frequencies cat /sys/devices/system/cpu/cpufreq/policy7/scaling_available_frequencies | 读取CPU支持的频率,单位为KHz。 |
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq cat /sys/devices/system/cpu/cpufreq/policy4/scaling_min_freq cat /sys/devices/system/cpu/cpufreq/policy7/scaling_min_freq | 读取CPU的最低频率,单位为KHz。 |
echo > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq echo > /sys/devices/system/cpu/cpufreq/policy4/scaling_min_freq echo > /sys/devices/system/cpu/cpufreq/policy7/scaling_min_freq | 设置 CPU 的最小频率。将 替换为目标频率(以 KHz 为单位),然后运行命令。 |
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_max_freq cat /sys/devices/system/cpu/cpufreq/policy4/scaling_max_freq cat /sys/devices/system/cpu/cpufreq/policy7/scaling_max_freq | 要设置 CPU 的最大频率,请将 替换为目标频率(以 KHz 为单位),然后运行命令。 |
cat /sys/devices/system/cpu/cpufreq/policy0/stats/trans_table cat /sys/devices/system/cpu/cpufreq/policy4/stats/trans_table cat /sys/devices/system/cpu/cpufreq/policy7/stats/trans_table | 读取CPU默认频率,单位为KHz。 |
echo 1516800 > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq echo 1516800 > /sys/devices/system/cpu/cpufreq/policy0/scaling_min_freq | 要将 CPU 频率设置为所需的水平,scaling_min_freq 和 scaling_max_freq 都应设置为相同的频率。 |
配置GPU
您可以使用下表中指定的命令检查和修改 GPU 设置:
注意: 对于这些特定于 GPU 配置的命令,输出值的单位为 Hz。
命令 | 目的 |
---|---|
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 > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq | 设置 GPU 的最小频率。将 <GPU 频率(单位:Hz)> 替换为目标频率(单位:Hz)并运行该命令。 |
cat /sys/class/kgsl/kgsl-3d0/devfreq/max_freq | 读取GPU的最大频率。 |
echo /sys/class/kgsl/kgsl-3d0/devfreq/max_freq | 设置 GPU 的最大频率。将 <GPU 频率(单位:Hz)> 替换为目标频率(单位:Hz)并运行该命令。 |
cat /sys/class/kgsl/kgsl-3d0/gpu_busy_percentage | 读取 GPU 百分比利用率。 |
例如,要将 GPU 频率设置为 600000000 Hz,请运行以下命令: echo 600000000 > /sys/class/kgsl/kgsl-3d0/devfreq/min_freq echo 600000000 > /sys/class/kgsl/kgsl-3d0/devfreq/max_freq | 将 GPU 频率设置为所需的级别,min_freq 和 max_freq 都应设置为相同的频率级别。 |
cat /sys/class/kgsl/kgsl-3d0/max_pwrlevel cat /sys/class/kgsl/kgsl-3d0/min_pwrlevel | 读取 GPU 的功率级别。级别 0 映射到最大 GPU 时钟。级别越高,GPU 时钟越低。 |
echo 0 > /sys/class/kgsl/kgsl-3d0/min_pwrlevel | 将 GPU 频率设置为 FMAX。 |
配置内存
内存配置是一个关键过程,有助于节省内存,为进程腾出空间,并在物理内存达到极限时平衡现有数据在 RAM 中的分布。
设置 ZRAM 磁盘大小
ZRAM 是用于交换内存空间的 RAM 分区。它以压缩形式在 RAM 中存储不活跃的匿名页,以节省内存。
ZRAM 磁盘大小表示可以从 RAM 交换到 ZRAM 的最大内存量。
建议将 ZRAM 磁盘大小设置为 RAM 大小的一半。
例如,要将 ZRAM 磁盘大小设置为 1 GB(对于 2 GB 或更大的 RAM),运行以下命令:
swapoff /dev/zram0
echo 1 > /sys/block/zram0/reset
echo 1073741824 > /sys/block/zram0/disksize
mkswap /dev/zram0
swapon /dev/zram0
cat /proc/meminfo | grep -i "swap"
前述命令的输出如下:
SwapCached: 0 kB
SwapTotal: 1048572 kB
SwapFree: 1048572 kB
你可以在编译时通过修改源码路径 meta-qcom-hwe/tree/kirkstone/dynamic-layers/openembedded-layer/recipes-extended/zram/zram/ 中 zram-swap-init-update bash 脚本的 -s 参数值来配置 ZRAM 磁盘大小。
要在脚本中更改大小,请运行以下命令:
zramctl -a ${ZRAM_ALGORITHM} -s <size> $device
例如,要将 ZRAM 大小设置为 1 GB,运行以下命令:
zramctl -a ${ZRAM_ALGORITHM} -s 1048576KB $device
启用/禁用主动压缩
压缩是将所有自由内存空间以碎片形式收集到一个大内存块的过程。主动压缩决定了后台压缩的积极程度。它的值介于 0 到 100 之间,默认值设置为 20。
当节点的碎片得分超过高阈值时,其对应的 kcompactd 线程将启动主动压缩过程。
压缩过程将保持活动状态,直到节点的得分降至低于低阈值。
主动压缩的阈值如下:
- 低阈值 = 100 - 主动性
- 高阈值 = 低阈值 + 10%
例如,如果低阈值为 80,则高阈值将为 90。
要启用主动压缩,运行以下命令:
echo 20 > /proc/sys/vm/compaction_proactiveness
要禁用主动压缩(这也会关闭周期性的 kcompactd 唤醒),运行以下命令:
echo 0 > /proc/sys/vm/compaction_proactiveness
有关更多信息,请参阅 内核的主动压缩。
Swappiness
交换空间是一种类似于主内存或 RAM 的辅助存储。交换空间的主要参数是交换性。
此参数决定了内核交换守护程序(kswapd)相对于系统页缓存交换匿名内存的积极程度。
此参数的值介于 0 到 200 之间。增加值会增加匿名交换的数量。配置的值设置为 100,表示匿名内存和缓存内存被等量回收。
要调整交换性值,运行以下命令:
echo 100 > /proc/sys/vm/swappiness
有关内存参数的更多信息,请参阅 内核内存参数文档。