我想针对特定进程 ID(将在运行时由 sysctl 或/proc 文件系统定义)vruntime(任务运行的时间量和红色索引)修改 cfs cfs 的黑树)被人为扩充,因此 cfs 认为该进程已经运行了很长时间,而实际上它已经运行了一半时间..
我想达到这样的目标,即必须使用通常每个 CPU 使用 50% 的相同进程,并让它们使用例如 10% 和 90%...
想法?直接去编辑vruntime的话红黑树就乱了,sched_entity中的task的vruntime应该用什么函数来调整呢?
最佳答案
你不需要在内核中这样做。(你的最终目标不是欺骗cfs)。 如果我理解,您需要使特定进程以较低的 CPU 使用率运行。
您可以启动具有较低调度优先级的特定进程。
nice -n 10 your_process 参数
您可以输入“man nice”以获取更多信息
如果可以更改特定进程的代码,可以在代码中使用
nice()
。您也可以输入man 2 nice
以获取更多信息可以使用cgroup/cpu来实现。
mount -t cgroup -ocpu cgroup/cgroup
然后使用它。
我建议第一个。
最后,如果您坚持使用内核,您可以尝试使用 __dequeue_entity() 使实体出列并更改 vruntime,然后使用 __enqueue_entity() 将其插入回来。这只是一个提示,可能是错误的,没有人喜欢suck hack,这不是我的答案。
关于linux - CFS 调度程序 : change vruntime of task to slow it down,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10815839/