定制 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 上不受支持。下表中指定的命令应在设备上运行。
下表中指定的命令应在设备上运行。
表:为 Dragonwing IQ-9075 定制 CPU 频率调速器的命令
表:为 Dragonwing IQ-8275 定制 CPU 频率调速器的命令
定制 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)调节系统内存,并通过内存划出区(memory carveout)为特定子系统定义内存区域。Kswapd
Kswapd 是管理虚拟内存的内核线程。当系统可用内存不足时,Kswapd 会被激活,通过从文件缓存中识别不常用的页面并将其移动到交换空间(ZRAM)来回收内存。 Kswapd 执行以下操作:- 监控系统的内存使用情况
- 在后台执行交换活动,以保持最佳的可用内存水平

图:使用 Kswapd 时的 CPU 使用率与性能对比
水位线(Watermark)
水位线是对内存参数设置的阈值或限制,有助于调节系统内存的分配和使用。 表:水位线参数
有关更多信息,请参阅 Documentation for /proc/sys/vm/。
内存划出区(Memory carveout)
内存划出区是指内核无法寻址的特定内存区域,称为 no-map 区域。特定子系统(例如调制解调器、摄像头、aDSP、cDSP 和 Qualcomm® 可信执行环境(TEE)/TrustZone(TZ))独占使用这些区域,因此 Linux 内核无法访问它们。 这些划出区在源代码的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):
之前:

