Skip to main content
Qualcomm® Linux 内核支持标准的 Linux 调度器解决方案。内核使用调度器根据 CPU 能耗为任务放置选择合适的 CPU。 调度器决定进程的运行顺序。调度器从每个 CPU 的运行队列(runqueue)中运行进程。 内核基线支持标准的 Linux 调度器解决方案。内核使用能耗感知调度(EAS)根据 CPU 能耗为任务放置选择合适的 CPU。 EAS 覆盖了完全公平调度器(CFS)的任务唤醒均衡代码。在具有非对称 CPU 拓扑的系统中,它使用 CPU 的能耗模型(EM)和逐实体负载跟踪(PELT)信号,在唤醒均衡期间选择能效最优的目标 CPU。 有关基础调度器文档,请参阅 Scheduler

了解 CPU 拓扑和 EAS

Qualcomm SoC 具有异构 CPU 拓扑,以 EAS 中使用的 CPU 算力(capacity)指标加以区分。 EAS 使用_算力_的概念来区分具有不同计算能力的 CPU。CPU 的算力表示其以最高频率运行时相对于系统中最强 CPU 所能完成的工作量。算力值以 1024 为范围进行归一化(最强大的 CPU/集群配置为 1024)。 EAS 根据 CPU 节点中指定的 Dhrystone 每秒百万指令数(DMIPS)值以及集群支持的最大频率来构建集群的算力。 以下是 CPU 拓扑和算力的 sysfs 节点: 表:CPU 拓扑和算力 有关调度器如何使用 CPU 算力的更多信息,请参阅 Capacity Aware Scheduling

更改默认 CPU 频率调节器

CPU 频率调节器可以在运行时更改,也可以在构建编译期间静态设置。
  1. Kconfig 配置:要设置 CPU 频率调节器,请在内核 defconfig 文件中启用相应的驱动。 要将 PERFORMANCE 调节器设置为默认的 CPU 频率调节器,请在 defconfig 文件中设置 CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y
  2. 内核命令行:要覆盖内核配置选项,请在 SoC 特定机器包含文件中的 kas 基础配置文件 ci/base.ymlKERNEL_CMDLINE_EXTRA 中,向内核命令行添加 cpufreq.default_governor=performance 参数。 例如,在 meta-qcom/conf/machine/include/qcom-<SoC>.inc 文件中设置合适的 CPU 频率调节器。

配置 SchedUtil 调节器

SchedUtil CPU 频率调节器是 Qualcomm Linux 内核中的默认调节器。SchedUtil 根据 CPU 利用率预测最优工作点(OPP),保持频率请求与能耗预测之间的一致性。 SchedUtil CPU 频率调节器与 EAS 绑定,它尝试预测所有 CPU 接下来将运行在哪个 OPP,以估算其能耗。 有关更多信息,请参阅 SchedUtil

配置利用率钳制(UCLAMP)

利用率钳制是一项调度器特性,允许用户空间管理任务的性能需求。 要执行钳制,请配置以下参数:
  • UCLAMP_MIN:如果设置为任何 > 0 的值,则任务需求始终大于或等于该值。如果实际任务需求大于该值,则使用实际需求信号;但如果实际任务需求低于该值,则将 UCLAMP_MIN 报告为任务需求。
  • UCLAMP_MAX:如果设置为任何 > 0 的值,则任务需求始终小于或等于该值。如果实际任务需求小于该值,则使用实际需求信号;但如果实际任务需求大于该值,则将 UCLAMP_MAX 报告为任务需求。
UCLAMP_MAX > UCLAMP_MIN
使用 UCLAMP 影响调度器的任务放置决策。 在异构系统上,调度器使用任务需求或利用率信号(PELT 信号)将任务分类为小任务或大任务。基于任务分类的输入,调度器选择小核(较低算力)或大核(较高算力)CPU 进行任务放置,这可能会对功耗产生影响。 例如,将不重要的(琐碎/后台/日常维护)任务钳制到较低值(较低的 UCLAMP_MAX),以促使调度器将任务放置在小核集群上。同样,将重要/前台/活跃任务钳制到较高值(较高的 UCLAMP_MIN),以促使调度器将任务放置在大核集群上。 UCLAMP 还允许调度器控制频率引导。 为满足任务的快速升频需求,请将任务钳制到较高的需求(UCLAMP_MIN)值。较高的钳制有助于提升集群频率,以满足任务的性能需求。 UCLAMP 操作允许从用户空间对任务/任务组进行性能管理。 UCLAMP 允许放置任务或任务组,并允许提供性能提示或约束。该机制用于影响调度器的放置决策或影响集群的频率引导。 有关更多信息,请参阅 UCLAMP;有关接口和配置,请参阅 Utilization Clamping