Linux Kernel Utilization Clamping简介

随着linux内核调度技术的不断演进,目前存在多个调度类(stop、deadline、rt、cfs、idle)以满足不同性质和要求的任务(task)的调度需求。对于用户空间来说,完全公平调度器(CFS)和实时调度器(RT)是绝大多数任务所使用的,但是基于POSIX Priority算法不足以支撑关于选核和调频的调度器特性。关于任务的性质、性能/功耗需求用户空间拥有足够的信息,那么若将用户空间关于任务的信息传递给内核任务调度器,则能够更好的帮忙调度器进行任务的调度。Utilization Clamping(uclamp)便是这样一种机制。

一、Utilization Clamping(uclamp

Utilization翻译过来是利用率、使用率的意思,存在CPU Utilization和Task Utilization两个维度的跟踪信号。CPU Utilization用于指示CPU的繁忙程度,内核调度器使用此信号驱动CPU频率的调整(schedutil governor生效时);Task Utilization用于指示一个task对CPU的使用量,表明一个task是“大”还是“小”,此信号可以辅助内核调度器进行选核操作。但是用PELT负载跟踪算法得到的task util与用户空间期望有时候会出现分裂,比如对于控制线程或UI线程,PELT计算出的util可能较小,认为是“小”task,而用户空间则希望调度器将控制线程或UI线程看作“大”task,以便被调度到高性能核运行在高频点上使任务更快更及时的完成处理。同样地,对于某些长时间运行的后台task,eg:日志记录,PELT计算出的task util可能很大,认为是“大”task,但是对于用户空间来说,此类task对于完成时间要求并不高,并不希望被当作“大”task,以利于节省系统功耗和缓解发热。

 

uclamp提供了一种用户空间对于task util进行限制的机制,通过该机制用户空间可以将task util钳制在[util_min, util_max]范围内,而cpu util则由处于其运行队列上的task的uclamp值决定。通过将util_min设置为一个较大值,使得一个task看起来像一个“大”任务,使CPU运行在高性能状态,加速任务的处理,提升系统的性能表现;对于一些后台任务,通过将util_max设置为较小值,使其看起来像一个“小”任务,使CPU运行在高能效状态,以节省系统的功耗。

二、schedtune  VS  uclamp

Android Kernel 5.4以前,存在一个schedtune feature,也提供了与uclamp类似的功能。

schedtune与uclamp都是由ARM公司的Patrick Bellasi主导开发,uclamp作为schedtune的替代方案,弥补了schedtune种种不足,使得uclamp最终合入mainline kernel。

三、软件架构

用户空间进程管理服务将相关task的util clamp值通过适当接口传递到内核空间,调度器基于用户空间提供的信息通过schedutil驱动频率的调整,也可以基于该信息为task选择适当的core。

四、软件实现

五、用户空间接口

  • system-wide API

proc/sys/kernel/sched_util_clamp_min

proc/sys/kernel/sched_util_clamp_max

全局设置值,用于限制per-task_group值和per-task值,使之不超过全局设置值,取值范围0 - SCHED_CAPACITY_SCALE。

 

  • cgroup based API

cpu.uclamp.max

cpu.uclamp.min

基于cgroup实现的per-task group值,实现对相同性能/功耗需求的一组task的控制,该设置值会限制组内各个任务的per-task值。取值范围0.00 - 100.00,格式为两位小数精度的百分比值。

 

  • per-task API

通过sched_setattr系统调用,每个任务都可以自主的设置各自的uclamp_min和uclamp_max,以满足自身的性能/功耗需求,但是该设置值会受制于cgroup设置值和系统全局设置值,取值范围0 - SCHED_CAPACITY_SCALE。

六、桶化算法

对于一个cpu来说,其运行队列rq上可能同时存在几个task(running/runnable),那么如何计算cpu的util_min和util_max则非常关键。uclmap使用桶化算法实现这种计算。

将[0  SCHED_CAPACITY_SCALE]划分为UCLAMP_BUCKETS个区间,每个区间看作一个桶,桶具有两个成员value、tasks,

存在UCLAMP_MIN、UCLAMP_MAX两个桶集合,rq上所有task的uclamp_min值放入UCLAMP_MIN桶集合、uclam_max值放入UCLAMP_MAX桶集合。多个任务位于同一个桶内,桶的值按最大值聚合原则,即由uclamp值最大的task决定。桶与桶之间同样按最大值聚合原则,即cpu的uclamp值由value值最大的桶决定。这样可以保证高性能任务其性能需求始终能够得到满足。

七、总结

用户通过uclamp机制可以向内核调度器提供task相关信息辅助调度器更好的执行调度任务,使得对频率的调整更加合理、对核心的选择更加贴合任务的性质,最终使得整个系统在性能和功耗上均能实现收益。

<think>嗯,用户问的是PERF_RES_C2PS_UCLAMP_SIMPLE_POLICY_DOWN_MARGIN是什么意思。首先,我需要分解这个术语的各个部分,看看有没有线索。 PERF_RES可能代表Performance Resource,常见于性能资源管理相关的代码中。C2PS可能是一个缩写,比如C-State到P-State的转换?或者可能与某些特定平台或框架相关,比如Linux内核中的CPU调度或电源管理模块。 UCLAMP指的是utilization clamping,这是Linux内核中的一种机制,用于限制任务或CPU的利用率,确保它们在一定的范围内运行。这可能与任务调度有关,特别是在控制CPU频率或电源管理策略时。 SIMPLE_POLICY说明这可能是一种简单的策略,相对于更复杂的策略而言。DOWN_MARGIN可能涉及到向下调整时的余量或边界值,用来防止过于频繁或激进的调整,保持系统稳定性。 综合来看,这个术语可能是Linux内核中与utilization clamping相关的性能资源管理参数,用于控制向下调整策略时的余量设置。具体来说,可能在调整CPU频率或任务分配时,用这个参数来设定一个安全边界,避免系统性能波动过大。 需要进一步确认这个参数在内核中的具体位置和用途。可能涉及到调度器或电源管理子系统,比如在调节CPU运行状态时,根据工作负载调整频率,而DOWN_MARGIN就是用来设置向下调整时的缓冲值,确保不会因为短暂的负载下降就立即降低频率,从而节省能源同时保持响应速度。 查阅相关内核文档或代码注释可能会有帮助。例如,在util_clamp的实现中,可能会有不同的策略,而SIMPLE_POLICY_DOWN_MARGIN就是其中一种策略的参数,用于控制何时降低限制值,确保系统不会过于敏感地响应负载变化。</think>PERF_RES_C2PS_UCLAMP_SIMPLE_POLICY_DOWN_MARGIN 是一个与 **Linux内核性能调度机制** 相关的参数,属于 `utilization clamping(利用率钳制)` 功能的组成部分。以下是逐步分析: --- ### 1. **术语分解** - **PERF_RES**: 可能代表 **Performance Resource**(性能资源),常见于内核性能管理模块。 - **C2PS**: 可能是 **C-state to P-state** 的缩写,涉及 CPU 电源状态(C-state为休眠状态,P-state为性能状态)的转换。 - **UCLAMP**: **Utilization Clamping**,Linux内核中用于限制任务或CPU的利用率(即对CPU使用率的上下限控制)。 - **SIMPLE_POLICY_DOWN_MARGIN**: 简单策略的“向下调整余量”。 --- ### 2. **核心功能** 该参数用于控制 **utilization clamping 的简单策略** 在 **降低资源分配时的缓冲值**: - **作用场景**: 当系统检测到任务的实际利用率低于设定的钳制值时,可能触发向下调整(如降低CPU频率或限制资源分配)。 - **DOWN_MARGIN**: 提供缓冲区间,防止因短期波动导致频繁调整,确保系统稳定性。 --- ### 3. **技术背景** - **Utilization Clamping**: - 通过 `sched_util_clamp_min` 和 `sched_util_clamp_max` 控制任务对CPU利用率的影响范围。 - 用于实时任务、能效优化等场景。 - **策略类型**: - `SIMPLE_POLICY` 是基础策略,可能直接根据余量阈值触发调整。 - `DOWN_MARGIN` 是向下调整时的保守阈值(例如:实际利用率需持续低于目标值一定比例才会触发降级)。 --- ### 4. **实际应用** - **代码示例**: 在Linux内核源码中,该参数可能出现在 `kernel/sched/` 目录下,与调度器或能源管理模块相关。 - **调优意义**: - 增大 `DOWN_MARGIN` 会减少资源降级频率(提高稳定性,可能牺牲能效)。 - 减小 `DOWN_MARGIN` 会更敏感地响应负载下降(提高能效,可能增加波动风险)。 --- ### 5. **总结** - **定义**: 一个控制 utilization clamping 策略在资源降级时缓冲阈值的参数。 - **用途**: 平衡系统稳定性与能效,避免因短期负载波动导致不必要的性能降级。 - **适用场景**: 适用于对实时性、能效敏感的嵌入式系统或数据中心服务器。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值