scale_rt_power解析

来源:互联网 发布:美工刀具磨刀生产设备 编辑:程序博客网 时间:2024/06/09 20:59

该函数用于计算指定CPU上可用于完全公平调度的CPU POWER统计值。

比如把整个CPU的Power 看为 SCHED_LOAD_SCALE,

该CPU上用于运行实时进程平均时间为rq->rt_avg.

那么可用于完全公平调度的时间就为 available = total - rq->avg.

然后 ( available / total ) * SCHED_LOAD_SCALE就是该CPU可用于运行非实时进程的Power值。

unsigned long scale_rt_power(int cpu)

{
    struct rq *rq = cpu_rq(cpu);
    u64 total, available;

    sched_avg_update(rq);

    total = sched_avg_period() + (rq->clock - rq->age_stamp);
    available = total - rq->rt_avg;

    if (unlikely((s64)total < SCHED_LOAD_SCALE))
        total = SCHED_LOAD_SCALE;

    total >>= SCHED_LOAD_SHIFT;

    return div_u64(available, total);

}


0 0
原创粉丝点击