1、概述
check_preempt_tick的作用是根据当前进程已经运行的时间,判断是否需要将进程thread info结构体的flag通过resched_curr设置为TIF_NEED_RESCHED。这样在执行完本次时钟中断后(即从handle irq返回后),根据需要进行重新调度。
2、对该函数的理解
此函数共有4个返回的地方,从前到后依次说明:
(1)运行超时了,设置TIF_NEED_RESCHED。
实际运行时间大于理论运行时间,即delta_exec> ideal_runtime。
(2)在(1)不成立时,实际运行时间不大于理论运行时间,但是实际运行时间小于系统最小的运行时间,不设置TIF_NEED_RESCHED。
即delta_exec < sysctl_sched_min_granularity
(3)在(1)(2)不成立时,cfs_rq中没有比当前进程vruntime更小的进程
即if (delta < 0),我认为这里写成小于等于号更合适。
(4)在(1)(2)(3)不成立时,cfs_rq 中有比当前进程的vruntime更小的进程(有高优先级的进程),两个vruntime的差值如果大于当前进程的理论运行时间,设置