自定义配置
自定义是一个涉及系统各个方面的微调过程,这可以显著影响系统的整体性能和功耗。
可以微调的领域包括 CPU 调度器、CPU 频率调节器、DVFS 调节器、perflock 和内存。建议在进行任何调整之前,通过广泛的性能和功耗分析,深入了解这些方面。
注意:任何自定义都可能会影响设备的功耗和性能。因此,在进行任何自定义之前,务必验证其对所有相关使用案例的影响。
自定义 CPU 调度器
您可以自定义 CPU 调度器的功能,例如 PELT 和 UCLAMP 调度器。
有关这些功能的更多信息,请参阅 CPU 调度器。
运行时调整 PELT 半衰期
PELT 半衰期是指 PELT 信号从零开始达到 50% 负载所需的时间。默认情况下,内核值设置为 32 毫秒,这意味着调度器需要 32 毫秒来识别任务负载为 50%。
选择较低的值会导致 PELT 加速时间更快,从而加快信号稳定和准确表示任务需求所需的时间。然而,这也相应地减少了衰减时间。
可以通过修改 layers/meta-qti-bsp/conf/machine/qcm6490.conf 源代码中的以下内核命令行参数来配置 PELT 乘数:
kernel.sched_pelt_multiplier=[1, 2, 4] # 默认值: 1(半衰期 32 毫秒),2(半衰期 16 毫秒),4(半衰期 8 毫秒)
有关 PELT 半衰期的更多信息,请参阅 sched/pelt: Change PELT halflife at runtime。
UCLAMP
UCLAMP 是一种调度器功能,允许用户空间管理任务的性能需求。
它是一种提示机制,帮助调度器了解任务的性能需求和限制,从而辅助调度器做出明智的决策。
当使用 schedutil CPU 频率调节器时,UCLAMP 还会影响 CPU 频率的选择。UCLAMP 的值范围是从 0 到 1024。
以下参数可以为 UCLAMP 自定义:
-
sched_util_clamp_min
此参数设置单个任务和任务组的最低可接受性能水平,确保任务在低需求期间也能获得足够的资源以有效运行。任何请求的 uclamp.min 值都不能超过 sched_util_clamp_min。
对于调度器:它作为 PELT 信号的下限,跟踪任务的利用率。
对于 CPU 频率:它指示调节器选择可以满足任务性能需求的频率,从而确保响应速度和效率。
高通调校的值是 1024。你可以通过以下命令设置此参数:
echo 1024 > /proc/sys/kernel/sched_util_clamp_min -
sched_util_clamp_max
此参数设置单个任务和任务组的最高可接受性能水平。它确保任务不会消耗过多资源,防止资源争用和系统不稳定。任何请求的 uclamp.max
值都不能超过 sched_util_clamp_max。
对于调度器:它作为 PELT 信号的上限,跟踪任务的利用率。
对于 CPU 频率:如果任务需求超出可用频率,调节器可能会调整频率以防止过多的功耗。
高通调校的值是 1024。你可以通过以下命令设置此参数:
echo 1024 > /proc/sys/kernel/sched_util_clamp_max -
sched_util_clamp_min_rt_default
默认情况下,RT 任务总是以最高频率和最高 CPU 容量运行。此参数允许在使用 UCLAMP 时更改 RT 任务的默认行为。
它使得可以调整 RT 任务的最佳值,在提供良好性能的同时不将其推向最大性能点。这满足了系统需求而不消耗过多功率并始终运行在最大性能点。高通调校的值是 128。
你可以通过以下命令设置此参数:
echo 128 > /proc/sys/kernel/sched_util_clamp_min_rt_default
有关 UCLAMP 的更多信息,请参阅 UCLAMP 文档。
自定义 CPU 频率调节器
您可以使用 scaling_governor 设置 CPU 调节器频率,以增强 CPU 性能。
命令 | 目的 |
---|---|
echo performance > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor echo performance > /sys/devices/system/cpu/cpufreq/policy4/scaling_governor echo performance > /sys/devices/system/cpu/cpufreq/policy7/scaling_governor | 设置 CPU 调节器以增强系统性能。 |
cat /sys/devices/system/cpu/cpufreq/policy0/scaling_governor cat /sys/devices/system/cpu/cpufreq/policy4/scaling_governor cat /sys/devices/system/cpu/cpufreq/policy7/scaling_governor | 验证 CPU 频率调节器。 |
echo schedutil > /sys/devices/system/cpu/cpufreq/policy0/scaling_governor echo schedutil > /sys/devices/system/cpu/cpufreq/policy4/scaling_governor echo schedutil > /sys/devices/system/cpu/cpufreq/policy7/scaling_governor | 将 CPU 频率调节器设置为 schedutil。 |
echo 1000 > /sys/devices/system/cpu/cpufreq/policyX/schedutil/rate_limit_us | 自定义 rate_limit_us。 policyX 中的 X 值对应集群 0、4 和 7。 这是 schedutil 调控器参数。它包含以微秒为单位的值。调控器在评估负载一次后,会等待 rate_limit_us 时间以重新评估负载。高通调整后的值为 1000。 |
自定义 DVFS 调节器
你可以使用 DTSI 文件根据你的功耗和性能需求自定义静态映射 DVFS 调节器和 BWMON 调节器。
自定义静态映射 DVFS 调节器
你可以从 kernel_platform/kernel/arch/arm64/boot/dts/qcom/sc7280.dtsi 文件中根据功耗和性能需求自定义 CPU 频率与 L3/DDR 频率之间的映射。
在 DTSI 文件中,每个 CPU 节点都有一个 operating-points-v2 = <&cpux_opp_table> 条目,其中 cpux_opp_table 保存了 CPU 频率与 L3 和 DDR 频率之间的静态映射。
例如,以下条目表示 CPU 0 的频率在 300 MHz 运行:
cpu0_opp_300mhz: opp-300000000 {
opp-hz = /bits/ 64 <300000000>.
pp-peak-kBps = <800000 9600000>.
};
当 CPU 0 以 300 MHz 运行时,它执行以下操作:
- 将 L3 设置为 9600000,即 9600000 / w(=32) = 300000,对应于 300 MHz
- 将 DDR 设置为 800000,即 800000 / w(=4) = 200000,对应于 200 MHz
在此示例中,w 表示你可以在一个周期内写入的字节数。
- 对于 L3,此值为 32,这意味着每个周期一次事务,每次事务 32 字节。
- 对于双通道 DDR,此值为 4。每个通道可以在每个周期执行两个事务(因为它是 DDR 内存),每个事务为 2 字节。
有关操作性能点框架的更多信息,请参阅 通用 OPP 绑定。
这些表中的 DDR 值是按每个通道指定的。这意味着映射是 CPU 频率与每个内存控制器通道带宽之间的映射。
注意:如果更改这些 .dtsi 文件,设备的功耗和性能将受到影响。在更改任何节点之前,确保验证其对所有相关使用案例的影响。