了解 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 频率调节器可以在运行时更改,也可以在构建编译期间静态设置。- Kconfig 配置:要设置 CPU 频率调节器,请在内核 defconfiguration 文件中启用相应的驱动。
要将
PERFORMANCE调节器设置为默认的 CPU 频率调节器,请在 defconfiguration 文件中设置CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE=y。 - 内核命令行:要覆盖内核配置选项,请在 SoC 专属 machine 包含文件中的 kas 基础配置文件
ci/base.yml的KERNEL_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_MAX),以促使调度器将这些任务放置在小核集群上。类似地,将重要/前台/活跃任务钳制到较高的值(较高的 UCLAMP_MIN),以促使调度器将这些任务放置在大核集群上。
UCLAMP 还允许调度器控制频率引导。
为了满足任务的快速频率提升需求,请将任务钳制到较高的需求(UCLAMP_MIN)值。较高的钳制有助于提升集群的频率,以满足任务的性能需求。
UCLAMP 操作允许从用户空间对任务/任务组进行性能管理。
UCLAMP 允许放置任务或任务组,并允许性能提示或约束。此机制用于影响调度器的放置决策或影响集群的频率引导。
有关更多信息,请参阅 UCLAMP;有关接口和配置,请参阅 Utilization Clamping。
以实时优先级运行用户空间任务
必须先于所有SCHED_OTHER(CFS)任务运行的任务使用 POSIX 实时策略之一。两种策略都以 1–99 范围内的固定优先级运行(99 为最高),并且都会抢占所有 CFS 任务:
表:实时调度策略
标准 Qualcomm Linux 内核即支持实时策略。
PREEMPT_RT 内核不会增加新的策略;它只是降低 RT 任务在变为可运行状态后被调度的延迟。有关更多信息,请参阅 RT 内核基础。从命令行设置策略
使用util-linux 软件包中的 chrt 来启动新任务或更改正在运行的任务的策略。
-
以优先级 80 的
SCHED_FIFO策略启动一条命令: -
更改正在运行的线程的策略。当目标是多线程进程中的某个线程时,请使用线程 ID(TID),而不是进程 ID:
-
确认已应用的策略和优先级:
chrt 与 taskset 结合使用:
从应用程序设置策略
在调用线程上调用sched_setscheduler(),以便在时间关键型工作开始之前应用优先级:
pthread 的应用程序,请在创建线程之前设置属性,使线程以正确的优先级启动:
CAP_SYS_NICE 能力。可以以 root 身份运行进程,或者向二进制文件授予该能力:

