使用cgroups编写作业调度程序

使用cgroups编写作业调度程序

cron 的一个问题是,如果有更多的作业可以在某个时间合理运行,cron 不会关心:无论如何它都会愉快地生成作业,从而导致所有作业的性能不佳。

假设我想编写一个类似 cron 的调度程序,但它将生成限制为机器实际可以处理的内容。当前无法处理的作业将被推迟并重试。

例如,假设有 10 个作业每 5 分钟运行一次。实际上,机器一次只能处理 5 个。比如说,在 11:05,它不会生成所有 10 个作业,而是只生成 5 个作业。但是,每隔几秒,它就会查看 CPU 负载是否下降(因为原来的 5 个作业中的一些已经完成)。如果是这样,它将产生一些先前推迟的工作。它将重复此操作,直到所有本应在 11:05 运行的作业都已运行;或者或者,对于在下一个实例运行之前无法运行的作业(在本例中为 11:10),将不会运行(跳过)。

如果我想约束全部如果此类作业使用的 CPU 不超过 50%,那么使用 cgroup 似乎是实现此目的的一种方法。

问题: 有没有办法查询当前cgroup CPU容量有多少被使用?例如,如果调度程序生成了 5 个作业,而这 5 个作业总共只使用了 50% 中的 80%,那么调度程序可能会再生成至少一个作业,因为 50% 中的 20% 当前被浪费了。

相关内容