Qualcomm Linux(QCS6490/QCS5430) 性能指南(五)

自定义配置

自定义是一个涉及系统各个方面的微调过程,这可以显著影响系统的整体性能和功耗。

可以微调的领域包括 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 文件,设备的功耗和性能将受到影响。在更改任何节点之前,确保验证其对所有相关使用案例的影响。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值