0

根据我目前对 Linux CFS 的了解,调度实体由它们vruntime在 RB-tree 中的虚拟运行时 ( ) 进行索引。

vruntime调度程序通过调用update_curr基本上增加当前运行实体的 vruntime 值的函数来定期更新它。

我不明白的是调度程序如何使 RB-tree 始终井井有条。该update_curr函数增加了 的值,vruntime但似乎并未检查实体是否应移回 RB-tree 的右侧。哪个函数执行此检查?

4

2 回答 2

1

虽然 Ahmed 是对的update_curr,但我仍然对树在更新 vruntime 和最终调用resched_curr. 事实上,事实证明当前计划的任务不是树的一部分

它从set_next_entity(cfs_rq_of(se), se);调用时pick_next_task_fair被调用的树中删除。所以树总是平衡的,唯一执行平衡的函数是enqueue_entitydequeue_entity

于 2018-03-30T19:38:07.037 回答
0

update_curr 不仅增加了vruntime它的值,还调用account_cfs_rq_runtime了最终resched_curr会修复 RB-tree(最终)的调用

于 2018-03-23T07:51:02.923 回答