【问题标题】:Linux reserve a processor for a group of processes (dynamically)Linux为一组进程保留一个处理器(动态)
【发布时间】:2011-07-25 12:24:40
【问题描述】:

有没有办法将处理器排除在正常调度之外?

也就是说,使用sched_setaffinity 我可以指示线程应该在哪个处理器上运行,但我正在寻找相反的类型。也就是说,我想从正常调度中排除给定的处理器,这样只有已经显式调度的进程才能在那里运行。

我也知道,在启动过程中,我可以限制 init 进程使用的处理器,从而限制所有继承进程。然而,我希望有一个比这更动态的解决方案——我可以在启动后进行更改。


请注意,我希望调度线程,而不仅仅是高级进程(这在某些情况下可能会有所不同)。

【问题讨论】:

  • 我认为可以通过cpusets 执行此操作,但我目前无法对此进行测试
  • 我也看到了 cpuset。它周围似乎没有 C 级包装器(而且我的系统上没有启用它,我必须弄清楚)。
  • 为什么有些人投票结束这个问题?

标签: linux linux-kernel scheduled-tasks


【解决方案1】:

cgroups,或者具体来说,cgroups 基础架构的 cpuset 部分是在 Linux 中执行此操作的方式。请参阅http://www.kernel.org/doc/Documentation/cgroups/cpusets.txt 中的第 1.4 节“专有 cpuset”。

再一次,如果,正如你在评论中所说,你的系统没有启用 cpusets,那么你就不走运了。

另外,您所要求的可能有点不正统;也许如果您要解释您实际想要达到的目标,人们就能为您指出替代解决方案。

【讨论】:

  • 我发现 cpuset 在我的系统上运行良好。我只是对它是一个文件系统感到困惑。
  • 在最基本的情况下,我只是想让一个实时线程驻留在一个处理器上,并且没有其他线程/进程在该处理器上执行。
  • @edA:传统的解决方案是使用 SCHED_RR 或 SCHED_FIFO 运行实时线程,确保实时线程永远不会被另一个线程抢占(除非它是另一个实时线程当然优先级更高)。
  • 我知道。问题是我们只想为与 RT 线程相关的事情保留该 CPU 上的缓存——因为 RT 线程有很多等待时间,CPU 通常可以使用。这也有助于其他线程防止它们被踢出并转移到另一个系统。 (是的,我们关心的是亚微秒级延迟)
  • 啊,我怀疑是这样的。但是,无论如何,这将如何工作,因为即使使用 PREEMPT_RT 补丁(或其他一些硬实时操作系统),IIRC 的中断延迟也是开启的几十微秒的量级??
猜你喜欢
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 2020-12-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多