进程调度杂项汇总

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   Hello-World3  阅读(187)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
点击右上角即可分享
微信分享提示