定制 CPU 调度器
您可以定制 CPU 调度器的功能,例如利用率钳制(UCLAMP 或 util clamp)调度器。 更多信息请参见了解 CPU 调度器。UCLAMP
UCLAMP 是一项调度器功能,允许用户空间管理任务的性能需求。 它是一种提示机制,帮助调度器了解任务的性能需求和限制,从而协助调度器做出明智的决策。 当使用schedutil CPU 频率调节器时,UCLAMP 决定 CPU 频率的选择。UCLAMP 值的范围为 0 到 1024。
可以为 UCLAMP 定制以下参数:
sched_util_clamp_min:此参数为单个任务和任务组设置最低可接受的性能水平,确保任务即使在低需求时期也能获得足够的资源来运行。任务请求的任何uclamp.min值都不能超过sched_util_clamp_min。- 对于调度器,它充当跟踪任务使用情况的按实体负载跟踪(PELT)信号的下限。
- 对于 CPU 频率,它指示调节器选择能够满足任务性能需求的频率,从而确保响应性和效率。Qualcomm 调优值为 1024。要设置此参数,请在设备上运行以下命令:
sched_util_clamp_max:此参数为单个任务和任务组设置最高可接受的性能水平。它确保任务不会消耗过多资源,从而防止资源争用和系统不稳定。任务请求的任何uclamp.max值都不能超过sched_util_clamp_max。- 对于调度器,它充当跟踪任务使用情况的 PELT 信号的上限。
- 对于 CPU 频率,如果任务需求超过可用频率,调节器可能会调整频率以防止功耗过高。Qualcomm 调优值为 1024。要设置此参数,请在设备上运行以下命令:
sched_util_clamp_min_rt_default:默认情况下,实时(RT)任务始终以最高频率和最高 CPU 能力运行。此参数允许您在使用 UCLAMP 时更改 RT 任务的默认行为。它允许为 RT 任务调优最佳值,在不将其推至最大性能点的情况下提供良好的性能。这种行为可以满足系统需求,而无需一直消耗功率并运行在最大性能点。Qualcomm 调优值为 128。要设置此参数,请在设备上运行以下命令:
定制 CPU 频率调节器
您可以使用scaling_governor 节点配置 CPU 频率调节器以增强 CPU 性能。
包含
policy7 的命令在 QCS5430 FP1 上不受支持。- Qualcomm Linux Performance Guide - Addendum for Qualcomm Dragonwing IQ-9075
- Qualcomm Linux Performance Guide - Addendum for Qualcomm Dragonwing IQ-8275
下表中指定的命令应在设备上运行。
下表中指定的命令应在设备上运行。
定制 DVFS 调节器
您可以根据设备的功耗和性能需求,使用 DTSI 文件定制静态映射 DVFS 调节器和带宽监控(BWMON)调节器。定制静态映射 DVFS 调节器
您可以根据功耗和性能需求,在源代码的arch/arm64/boot/dts/qcom/<target>.dtsi 文件中定制 CPU 频率与 L3/DDR 频率之间的映射。
在 DTSI 文件中,每个 CPU 节点都有一个 operating-points-v2 = <&cpux_opp_table> 条目,其中 cpux_opp_table 保存了 CPU 频率与 L3 及 DDR 频率之间的静态映射。
例如,以下条目表示 CPU 0 频率运行在 300 MHz:
- 向 L3 投票 9600000,即 9600000/w(其中 w = 32)= 300,000,对应 300 MHz
- 向 DDR 投票 800000,即 800000/w(其中 w = 4)= 200,00,对应 200 MHz
- 对于 L3,该值为 32,即每个周期一次事务,每次事务 32 字节。
- 对于双通道 DDR,该值为 4。每个通道每个周期可执行两次事务(因为它是 DDR 内存),每次事务为 2 字节。
定制 BWMON 调节器
您可以根据功耗和性能需求,在源代码的arch/arm64/boot/dts/qcom/<target>.dtsi 文件中,为末级缓存控制器(LLCC)和 DDR 投票定制 bwmon_opp_table。
以下代码示例包含 DDR 频率级别和 LLCC 频率级别,每个级别都会根据流量转换为对 LLCC 和 DDR 的投票。
以下 DTSI 条目根据 LLCC 到 DDR 之间的 CPU 流量向 DDR 投票,对应 200 MHz。在此示例中,800000/w(其中 w = 4)等于 200000:
- 对于 DDR,该值为 4。每个通道每个周期可执行两次事务(DDR 内存),每次事务为 2 字节。
- 对于 LLCC,该值为 16。
使用扩展定制 URM
URM 扩展承载 Qualcomm 芯片组特定的配置和用例特定的定制。这些扩展支持在运行时集成额外的配置和扩展模块,从而在不修改核心 URM 实现的情况下实现灵活的调优和策略定制。定制按应用调优
针对 Qualcomm 特定芯片组的按应用调优定义在userspace-resource-manager-extensions/Configs/PerApp.yaml 中。
以下示例代码展示了针对 GST 和 cyclic test 应用的按应用调优用法:
userspace-resource-manager-extensions/Configs/<target-specific> 中。
定制信号设置
针对 Qualcomm 特定芯片组的信号配置定义在userspace-resource-manager-extensions/Configs/SignalsConfig.yaml 配置文件中。
以下示例代码展示了应用启动时信号设置的用法:
SignalsConfig.yaml 文件位于 userspace-resource-manager-extensions/Configs/<target-specific> 下,会覆盖通用的信号调优。
定制资源配置
针对通用 Qualcomm 特定芯片组的资源配置定义在userspace-resource-manager-extensions/Configs/ResourcesConfig.yaml 中。
以下示例代码展示了资源配置的定制:
ResourcesConfig.yaml 文件位于 userspace-resource-manager-extensions/Configs/<target-specific> 下,会覆盖通用的资源配置。
定制初始化配置
针对所有通用 Qualcomm 特定芯片组的初始化配置定义在userspace-resource-manager-extensions/Configs/InitConfig.yaml 中。
以下示例展示了如何定制初始化配置:
InitConfig.yaml 文件位于 e-manager-extensions/Configs/<target-specific> 下。
使用自定义插件和资源扩展 URM
URM 提供了一个扩展框架,支持集成自定义资源和插件,以满足平台或用例特定的需求。 例如,以下代码段注册了自定义资源,如0x00800000(调节器更改资源)和 0x00800002(工作队列亲和性资源)。它还实现了一个扩展,用于优化 cyclictest 应用的信号处理。
定制内存
您可以使用 Kswapd 管理虚拟内存,使用水位线(watermark)调节系统内存,并通过内存 carveout 为特定子系统定义内存区域。Kswapd
Kswapd 是管理虚拟内存的内核线程。当系统空闲内存不足时,Kswapd 会被激活,通过从文件缓存中识别使用频率较低的页并将其移动到交换空间(ZRAM)来回收内存。 Kswapd 执行以下操作:- 监控系统的内存使用情况
- 在后台执行交换活动,以维持最佳的空闲内存水平

图:使用 Kswapd 时的 CPU 使用率与性能对比
水位线(Watermark)
水位线是设置在内存参数上的阈值或限制,有助于调节系统内存的分配和使用。 表:水位线参数
更多信息请参见 Documentation for /proc/sys/vm/。
内存 carveout
内存 carveout 是指内核无法寻址的特定内存区域,称为 no-map 区域。调制解调器、摄像头、aDSP、cDSP 以及 Qualcomm® 可信执行环境(TEE)/TrustZone(TZ)等特定子系统独占使用这些区域,因此 Linux 内核无法访问它们。 这些 carveout 定义在源代码的arch/arm64/boot/dts/qcom/<target>.dtsi 中。
它们属于 reserved-memory 节点,并且可以进行配置。
以下代码展示了 cDSP、摄像头、调制解调器和 QTEE/TrustZone(TZ)子系统的 no-map 区域:
0x8b800000是调制解调器区域的基地址。0xf600000是调制解调器区域的大小,即 246 MB。- 添加
status = disabled可使该区域可供 Linux 内核使用。
0x1c00000)减小到 20 MB(0x1400000):
修改前:

