linux - CFS 调度程序 : change vruntime of task to slow it down

标签 linux linux-kernel scheduling

我想针对特定进程 ID(将在运行时由 sysctl 或/proc 文件系统定义)vruntime(任务运行的时间量和红色索引)修改 cfs cfs 的黑树)被人为扩充,因此 cfs 认为该进程已经运行了很长时间,而实际上它已经运行了一半时间..

我想达到这样的目标,即必须使用通常每个 CPU 使用 50% 的相同进程,并让它们使用例如 10% 和 90%...

想法?直接去编辑vruntime的话红黑树就乱了,sched_entity中的task的vruntime应该用什么函数来调整呢?

最佳答案

你不需要在内核中这样做。(你的最终目标不是欺骗cfs)。 如果我理解,您需要使特定进程以较低的 CPU 使用率运行。

  1. 您可以启动具有较低调度优先级的特定进程。

    nice -n 10 your_process 参数

    您可以输入“man nice”以获取更多信息

  2. 如果可以更改特定进程的代码,可以在代码中使用nice()。您也可以输入 man 2 nice 以获取更多信息

  3. 可以使用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/

相关文章:

c++ - 寻找集成 Qt4 和 v4l2 库的示例代码

linux - md5deep ubuntu 安装 - 找不到命令

linux - 中断处理和用户空间通知

algorithm - 安排以不同的速率向消费者发送消息

algorithm - 测试 CPU 调度

linux - 在 Docker 中为 Linux 主机预留 CPU 和内存

linux - 结构中的 jboss fuse 6.2.1 mq

multithreading - 为什么只有当 preempt_count == 0 时内核抢占才是安全的?

linux-kernel - linux 内核等待队列 - printk 未显示在消息日志中

c - FCFS vs SJF vs RR