哪个内核函数管理平衡linux CFS的RB树?

时间:2018-03-22 20:55:28

标签: linux linux-kernel kernel scheduler cfs

据我所知,到目前为止,Linux CFS的调度实体是由RB树内的虚拟运行时(vruntime)索引的。

调度程序通过调用vruntime函数定期更新此update_curr,这基本上会增加当前正在运行的实体的vruntime值。

我不明白的是调度程序如何保持RB树始终排序良好。 update_curr函数增加了vruntime的值,但似乎没有检查实体是否应该移回RB树的右侧。哪个功能执行此检查?

2 个答案:

答案 0 :(得分:0)

update_curr不仅会增加vruntime的值,还会调用account_cfs_rq_runtime,而resched_curr最终会调用{{1}}来修复RB树(最终)

答案 1 :(得分:0)

虽然艾哈迈德关于update_curr是正确的,但我仍然感到困惑的是,在更新vruntime和最终调用resched_curr之间树可能不平衡。事实上,事实证明,当前安排的任务不是树的一部分

从调用set_next_entity(cfs_rq_of(se), se);时调用的pick_next_task_fair中的树中删除它。因此,树始终是平衡的,执行平衡的唯一功能是enqueue_entitydequeue_entity