Hao*_*hen 5 linux runtime scheduler
所以当一个任务用完它的时间片后,它会被重新插入到红黑树中。如果任务之前休眠了很长时间,导致与runqueue中的其他任务相比vruntime非常小,那么它将作为红黑树中最左边的节点被重复插入,对吗?因此它总是会被选择作为下一个要运行的任务?我检查了core.c和fair.c中的源代码,我没有看到这个任务应该让给其他任务的任何地方。虽然在函数 pick_next_entity() 中,我确实看到了一些任务,例如 cfs_rq->next、cfs_rq->last 或等等,它们可能具有更高的运行优先级,但我认为这不是阻止任务非常小的正确位置vruntime 占用处理器时间太长,对吗?有人有线索吗?谢谢,
我找到了答案。\n当任务从运行队列中出队时,这将被称为\xef\xbc\x9a\nse->vruntime -= cfs_rq->min_vruntime\n当任务再次入队到运行队列时,这将被称为: \nse->vruntime += cfs_rq->min_vruntime\n所以实际上任务休眠时只会存储 vruntime 的偏移量,当任务唤醒时会再次添加偏移量。
\n| 归档时间: |
|
| 查看次数: |
1149 次 |
| 最近记录: |