init_cfs_rq 做了哪些事情
时间: 2023-08-13 12:04:36 浏览: 59
根据我所了解到的信息,"init_cfs_rq" 是 Linux 内核中调度器部分的函数,其作用是初始化一个 cfs_rq 结构体,该结构体用于跟踪一组任务(task)的调度情况。在调用 "init_cfs_rq" 函数时,会初始化该结构体的各个字段,如 min_vruntime、curr、load 等,并将其加入到调度器的红黑树中。这样,就可以在进程调度时使用 cfs_rq 结构体中的信息来进行调度策略的决策。
相关问题
void init_cfs_rq(struct cfs_rq *cfs_rq) { cfs_rq->tasks_timeline = RB_ROOT_CACHED; cfs_rq->min_vruntime = (u64)(-(1LL << 20)); #ifndef CONFIG_64BIT cfs_rq->min_vruntime_copy = cfs_rq->min_vruntime; #endif #ifdef CONFIG_SMP raw_spin_lock_init(&cfs_rq->removed.lock); #endif }
这是一个函数,用于初始化 CFS(Completely Fair Scheduler)调度器的运行队列(cfs_rq)。它的具体作用如下:
1. 将 tasks_timeline 属性初始化为一个空的红黑树,这个红黑树用于按照每个任务的虚拟运行时间(vruntime)进行排序,以实现公平调度。
2. 将 min_vruntime 属性初始化为一个较小的值,这个值是一个 64 位整数,表示虚拟运行时间的最小值。这是为了避免出现负数的情况,因为虚拟运行时间是一个无符号数。
3. 如果不是 64 位系统,还会将 min_vruntime_copy 属性设置为 min_vruntime,用于备份。
4. 如果是多核系统,还会初始化 removed 属性的锁,这个锁用于保护运行队列中被移除的任务。
5. 函数没有返回值,它只是初始化了 cfs_rq 结构体中的一些属性。
linux内核 leaf_cfs_rq_list
`leaf_cfs_rq_list` 是 Linux 内核中 Completely Fair Scheduler (CFS) 调度器中的一种数据结构,用于存储每个 CPU 上的任务队列。CFS 是 Linux 内核中的默认调度器,其主要目的是保证任务的公平性,即对于 CPU 资源的分配是公平的。`leaf_cfs_rq_list` 存储的是 CFS 中“叶子”调度实体的队列,即那些没有子调度器的调度实体,例如进程、线程等。每个 CPU 都有自己的 `leaf_cfs_rq_list`。在 CFS 调度器中,任务队列的调度是基于进程的虚拟运行时间,即进程在 CPU 上运行的时间片。