进程调度杂项汇总

1. sched class与sched policy的对应关系

完全公平调度:SCHED_NORMAL SCHED_BATCH
实时进程调度:SCHED_FIFO SCHED_RR
空闲调度:SCHED_IDLE
Deadline调度: SCHED_DEADLINE

//kernel/sched/sched.h
static inline int idle_policy(int policy)
{
    return policy == SCHED_IDLE;
}
static inline int fair_policy(int policy)
{
    return policy == SCHED_NORMAL || policy == SCHED_BATCH;
}

static inline int rt_policy(int policy)
{
    return policy == SCHED_FIFO || policy == SCHED_RR;
}

static inline int dl_policy(int policy)
{
    return policy == SCHED_DEADLINE;
}

5.10 内核上,SCHED_NORMAL 和 SCHED_BATCH 几乎没有区别,整个内核的检索,只有 yield_task_fair() 中若是 SCHED_BATCH 类型的就不更新rq时钟,也不调用 update_curr()。

5.4 内核上,检索 SCHED_IDLE 发现其也没有什么用。

应该起作用的主要是 p->sched_class

 

2. 5.4内核上SCHED_BATCH 与 SCHED_NORMAL 的区别

(1) CPU在热插拔的时候,只有current是SCHED_NORMAL策略才允许切为RT线程

cpu_up //kernel/cpu.c 传参 (cpu, CPUHP_ONLINE)
write_cpuhp_target
    do_cpu_up //kernel/cpu.c
        switch_to_rt_policy //kernel/cpu.c
            if (policy == SCHED_BATCH || policy == SCHED_IDLE || policy == SCHED_DEADLINE) //这些调度策略是不允许切为RT调度类的
                    return -EPERM;
            if (policy == SCHED_FIFO || policy == SCHED_RR)
                    return 1;
            sched_setscheduler_nocheck(current, SCHED_FIFO, &param); //只剩下SCHED_NORMAL了

(2) 当任务主动放弃CPU时,若是 SCHED_BATCH 则不更新rq时钟和当前任务的时间统计(包含虚拟时间)。

fair_sched_class.yield_to_task
    yield_to_task_fair //fair.c
    fair_sched_class.yield_task //fair.c
        yield_task_fair //fair.c
            if (curr->policy != SCHED_BATCH)
                update_curr(cfs_rq);

 

3. cpu_clock(i) 获取的CPU时间,单位ns,CPU0的要比其它CPU的大100多倍。

/*
    while (i < CPU_NUM) {
        seq_printf(m, "%llu ", cpu_clock(i));
        i++;
    }
//CPUn+1 - CPUn:
1660272816947540     18864659493969         18864659494281     18864659494541     18864659494802     18864659495010     18864659495219     18864659495427     18864659495635 
                    -1641408157453570     312             260             261             208             209             208             208 
*/

 

posted on 2021-01-01 23:07  Hello-World3  阅读(167)  评论(0编辑  收藏  举报

导航