无竞争的cpuset中的线程的调度程序优先级和策略有什么影响(如果有)?


12

我有一个Linux系统,其中我们已使用cgroups创建两个cpu_exclusive cpusets A和B,并且已将所有用户线程和所有未绑定的内核线程迁移到连接到cpuset A的cgroup。在cpuset A中运行的事物具有不同的调度程序策略和不同的优先级,并且cpuset A中运行的线程比cpuset A中的内核多。

还有一些非常活跃的进程连接到cpuset B,这些进程中的用户线程总数永远不会超过cpuset B中专有的核心数量。目标是屏蔽在cpuset中运行的这些重要任务B从机器上的其他活动中最小化处理延迟。

在这样的设置中,在cpuset B中运行的用户线程的调度策略/优先级是否具有可观察到的效果?换句话说:将B个cpuset线程的调度策略从默认的SCHED_OTHER更改为SCHED_FIFO或SCHED_RR是否会产生好的或坏的后果?

似乎答案应该是“否”,因为调度程序应该能够将在cpuset B中运行的每个线程分配给自己的专用内核,因此没有什么要进行优先级排序或调度的,因此B的策略和相对优先级cpuset线程无关紧要。另一方面,还有绑定内核线程和“调度程序域”方面需要担心的方面,可能还有其他我没有考虑的方面。

在实际意义上,在超额配置的独占cpuset中运行的线程的调度策略和优先级是否重要?

Answers:


4

除非您将特定的内核锁定到每个PID,否则所使用的时间片将对需要缓存持久性的CPU密集型作业很重要。您可以使用调度程序策略SCHED_BATCH来增加时间片,并在某些情况下将性能提高多达300%,同时降低交互响应性。SCHED_RR会产生较小时间片的相反效果(这将减少吞吐量,但会增加实时响应能力)。

您可以使用schedtool通过单个命令为B组中的所有PID设置特定PID的策略。它也可以用于将特定的PID锁定到特定的内核,这是最佳的解决方案,因为高速缓存的持久性不再取决于时间片,但这需要更多的精力,因为您必须为每个PID运行单独的schedtool命令。


1

如果每个进程都有自己的核心,那么就没有优先级约束。

但是,如果您安排一个需要30分钟才能每15分钟运行一次的进程,则由于该进程将开始重叠,因此您将需要确定优先级。

但是,没有“最佳”调度策略。

它们确实取决于您要实现的目标。但是一开始,我会将其保留为默认值SCHED_OTHER,并观察一段时间,然后再尝试更多专业化的东西。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.