cfs调度算法有两部分组成.
1 虚拟时间(Vruntime)
2 平均负载 (内核3.8开始加入)
虚拟时间主要是根据优先级调度算法的优先级确定进程可分配的时间片资源.而平均负载则考虑了进程的行为(主要着眼于进程过去对cpu的使用)
首先介绍Vruntime
1 静态优先级, 进程的nice值是由应用程序自己指定的,默认是0 , 内核会转化为静态优先级,nice越大静态优先级越低,范围是-20-19
2 权重越大则能获取的cpu资源越多,系统中维护一张nice值对应的权重的表,通过查表的方式计算进程的权重,权重只与nice值有关
公式:
delta_exec*nice_0_weight
vruntime= -------------------------------------
weight
vruntime表示虚拟运行时间, nice_0_weight表示nice值为0时候的权重,delta_exec表示实际运行时间.weight表示进程的权重
可见虚拟时钟只与权重有关,当实际运行时间相同时,权重越大则花费的虚拟时钟越少.
cfs调度器抛弃了以前固定时间片和固定调度周期的算法, 而是采用进程权重的比来重新量化和计算实际运行的时间. 另外引入虚拟时钟概念,每个进程的虚拟时间是实际运行时间相对于NICE值为0的权重比例值. 进程格子按照不同的速率比在物理时钟节拍内前进 . NICE值越小的进程优先级高权重大,齐虚拟时间跑的越慢,反之 NICE值越大,虚拟时间跑的越快.
网友评论