Linux Kernel Energy Aware Scheduling深度工程实践——从Energy Model到Schedutil协同优化

一、从CFS Fairness到Energy Pareto:调度范式的演进

在Linux 4.7之前,CFS(Completely Fair Scheduler)的select_task_rq_fair()在选择目标CPU时,只考虑缓存亲和性和负载均衡,完全不关心能耗。当系统存在不对称拓扑时(如big.LITTLE、多Die),CFS可能把一个高负载性能的小核塞满,而大核却在空转——这在移动设备和数据中心都是不可接受的。

HMP(Heterogeneous Multi-Processing)通过cpu_capacity对CPU分类,用up_threshold/down_threshold做启发式迁移,但它本质上是"反应式"的。EAS(Energy Aware Scheduling)的目标是:在不违反性能约束的前提下,找到能耗最优的放置决策。

// kernel/sched/fair.c - 核心入口
static int
find_energy_efficient_cpu(struct task_struct *p, int prev_cpu)
{
    unsigned long prev_cap = 0, best_energy = ULONG_MAX;
    struct root_domain *rd = cpu_rq(smp_processor_id())->rd;
    int cpu, best_cpu = prev_cpu;
    
    // 遍历 prev_cpu所在pd内所有CPU
    for_each_cpu_and(cpu, perf_domain_span(pd), sched_domain_span(sd)) {
        // 估算如果把p放在此CPU的能量增量
        energy = estimate_energy(pd, p, prev_cpu, cpu);
        if (energy                        
                    
点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部