CFS调度器 和 CFS调度器类 有什么关系
CFS调度器类中 有两种 调度器策略 : SCHED_NORAML SCHED_BATCH , 这个和调度器有什么关系
CFS
完全公平调度
完全公平体现在 每个进程在一次调度间隔内的总的虚拟运行时间相等
一轮调度:
cfs中调度中一个进程最小运行时间是0.75ms
调度周期:在某个时间长度可以保证运行队列中的每个进程至少运行一次,我们把这个时间长度称为调度周期。也称为调度延迟,因为一个进程等待被调度的延迟时间是一个调度周期。
调度最小粒度:为了防止进程切换太频繁,进程被调度后应该至少运行一小段时间,我们把这个时间长度称为调度最小粒度。
调度周期的默认值是6毫秒,调度最小粒度的默认值是0.75毫秒
如果运行队列中的进程数量太多,导致把调度周期sysctl_sched_latency平分给进程时的时间片小于调度最小粒度,那么调度周期取“调度最小粒度 × 进程数量”
也就是说,
一轮调度时常 要大于等于 6毫秒
一个进程在一轮调度中的最小运行时间 >=0.75毫秒
进程的时间片(一轮调度中的总的实际运行时间) = 调度周期 × 进程的权重 / 运行队列中所有进程的权重总和
总的虚拟运行时间:
一次调度间隔的虚拟运行时间=实际运行时间*(NICE_0_LOAD/权重)
一个进程的总的虚拟运行时间 = 进程的时间片 × nice 0对应的权重 / 进程的权重
= 调度周期 × 进程的权重 / 运行队列中所有进程的权重总和 × nice 0对应的权重 / 进程的权重
= 调度周期 × nice 0对应的权重/运行队列中所有进程的权重总和
是个固定值
nice 值 可以 通过 sched_prio_to_weight 转换为 权重
总的虚拟运行时间要相等
当实际运行时间相同时,优先级高的相较于优先级低的 虚拟运行时间小
我们挑选虚拟运行时间小的来运行
当总的虚拟运行时间相等时,优先级大的实际运行时间要多