有三种情况需要为task选择cpu:刚创建的进程(fork),刚exec的进程(exec),刚被唤醒的进程(wakeup)他们都会调用select_task_rq,对于cfs,就是select_task_rq_fair。 staticintselect_task_rq_fair(structtask_struct *p,intprev_cpu,intwake_flags) {intsync = (wake_flags & WF_SYNC) && !(current->flags &P...
在任务被重新唤醒或者fork新建时,会通过select_task_rq_fair将任务进行balance,达到充分利用CPU的目的。下面是select_task_rq_fair()流程梳理 细节图编辑于 2023-06-11 07:17・IP 属地浙江 内容所属专栏 hello小崔的Linux 用博客记录linux学习、工作历程与心得体会 订阅专栏 ...
int(*select_task_rq)(structtask_struct*p,inttask_cpu,intsd_flag,intflags); 1. 源码路径 :linux-5.6.18\kernel\sched\sched.h#1729 ; 三、migrate_task_rq 函数 ( 将进程迁移到合适的 CPU 上 ) sched_class 调度类结构体 中的 migrate_task_rq 函数指针 , 指向...
void(*put_prev_task)(struct rq*rq,struct task_struct*p);void(*set_next_task)(struct rq*rq,struct task_struct*p,bool first); 源码路径 :linux-5.6.18\kernel\sched\sched.h#1724 ~ 1725 ; 二、select_task_rq 函数 ( 为进程选择 CPU ) sched_class调度类结构体 中的select_task_rq函数指针 ,...
[<ffffffff81058db1>] select_task_rq_fair+0x7a1/0x980 RSP:0018:ffff880038609d60 EFLAGS:00010006 RAX:0000000000300000 RBX:0000000000000c00 RCX:0000000000000000 RDX:0000000000000000 RSI:000000000000000f RDI:000000000000000f RBP: ffff880038609e30 R08: ffff880028210390 R09:0000000000000000 R10:0908000000000000 R11...
@@ -6077,48 +6085,51 @@ void __update_idle_core(struct rq *rq) * there are no idle cores left in the system; tracked through * sd_llc->shared->has_idle_cores and enabled through update_idle_core() above. */ static int select_idle_core(struct task_struct *p, struct sched_domain...
com/#eNqlVE1v4jAQ/SsjXwpSPhbYU5ZWrPgJu+oFc3CTAbxNbMt2sqoQ/33HdmCB9lCpyiEznjfz5j1H2RzZT2O...
com/#eNqlVE1v4jAQ/SsjXwpSPhbYU5ZWrPgJu+oFc3CTAbxNbMt2sqoQ/33HdmCB9lCpyiEznjfz5j1H2RzZT2O...