我有一个Linux系统,在这个系统中,我们使用cgroup创建了两个cpu_exclusive cpusets A和B,并将所有用户线程和所有未绑定内核线程迁移到一个附属于cpuset的cgroup中,运行在cpuset中的东西具有不同的调度策略和不同的优先级,在cpuset中运行的线程比cpuset中的内核多很多。
还有一些非常活跃的进程附加到cpuset中,其中跨这些进程的用户线程的总数从未超过cpuset中唯一可用的核数。目的是保护在cpuset中运行的这些重要任务不受计算机上其他活动的影响,并尽量减少处理延迟。
在这样的设置中,运行在cpuset中的用户线程的调度策略/优先级是否有任何可观察的效果?不同的说法是:将B cpuset线程的调度策略从默认的SCHED_OTHER更改为SCHED_FIFO或SCHED_RR是否会带来任何好的或坏的后果?
答案似乎应该是“否”,因为调度程序应该能够将运行在cpuset中的每个线程分配给它自己的专用核心,所以没有什么可以优先排序或调度的,所以B cpuset线程的策略和相对优先级并不重要。另一方面,还有绑定内核线程和“调度程序域”方面需要担心,而且可能还有其他我没有考虑过的事情。
在过度配置的独占cpuset中运行的线程的调度策略和优先级在任何实际意义上重要吗?
发布于 2012-09-23 18:19:58
对于需要缓存持久性的CPU密集型作业,所使用的时间片段将非常重要,除非您将特定的核心锁定到每个PID。在某些情况下,可以使用调度器策略SCHED_BATCH增加时间片,并将性能提高到300%,同时降低交互响应。小时间片的相反效果发生在SCHED_RR中(这将降低吞吐量,但提高实时响应能力)。
您可以使用调度工具将集合B中所有PID的特定PID策略设置为单个命令。它还可以用于将特定的PID锁定到特定的核心,这将是最佳的解决方案,因为缓存持久性不再依赖于时间片,但是这需要更多的努力,因为您必须为每个PID运行一个单独的调度工具命令。
发布于 2012-03-02 23:07:15
如果每个进程都有自己的核心,那么就没有优先级约束。
但是,如果您安排了一个流程,每15分钟运行一次需要30分钟,那么您将开始需要优先排序,因为流程将开始重叠。
然而,没有“最佳”调度策略。
它们真的取决于你想要达到的目标。但在一开始,我会把它留给默认的SCHED_OTHER,并观察一段时间,然后再尝试更专业的东西。
https://unix.stackexchange.com/questions/32499
复制相似问题