感谢您花时间阅读我的问题。我将继续进行一些假设,所以如果我说的事实不正确,请纠正我。
在函数pick_next_task_fair()
中,通常要选择的下一个任务组是包含与min_vruntime
值关联的任务的任务组。cfs_rq
我想改为手动干预,并将所需的任务组放在它所属的最左侧,只是为了探索它的效果。
所以我的主要问题是:
- 可以只修改任务组的 CPU 份额吗?相同的标准是否也适用于 cgroup?
- 如果修改 CPU 份额不会使我达到我想要的目标,我需要做什么?
到目前为止,对于第二个问题,我有以下步骤:
- 识别感兴趣的任务组的调度实体,以及它所属的 CFS_RQ。
- 将该任务组的值更改为
min_vruntime
低于 CFS RQ 中当前最低值的值。- 将其插入 CFS_RQ 的最左侧
- 再次运行 __schedule()。
但我真的不知道我可以使用的工具。我熟悉内核模块和 eBPF,但仅限于数据收集、跟踪和修改网络流量领域。不确定他们如何(甚至是否)可以修改内核数据结构。
如果我必须修改调度程序,那就这样吧 xD。但我以前从未这样做过,所以我不知道从哪里开始,也不知道我需要修改多少个文件。
非常感谢我能得到的任何输入!再次感谢您的宝贵时间。