2

我有一台 16 核的 Linux 机器。

// uname -a
Linux lndbxdev01 2.6.24.7-108.el5rt #1 SMP PREEMPT RT 
Mon Mar 23 10:58:10 EDT 2009 x86_64 x86_64 x86_64 GNU/Linux

// OS detail
Red Hat Enterprise Linux Server release 5.3 (Tikanga)

我想安排进程亲和性,以便 1 个 CPU 完全专用于 1 个进程。

当我说完全专用时,我的意思是我真的想将任何其他正在运行的守护进程IRQ-nnnn, rpciod/nn等绑定到所有可用的 CPU,除了我的进程感兴趣的那个。(在我的操作系统上,我可以数出大约 500 个进程)。

  1. 这样做是安全的还是我应该关心让它们中的一些在它们当前运行的 CPU 上?
  2. 如果我至少绑定 IRQ,性能会更好吗?

由于这些连接到经常触发的中断,因此它们会导致频繁的进程上下文切换,因为内核必须调用它们。

我期待以下好处:

  1. 因为会有一个进程运行一个 CPU,所以根本不会有进程上下文切换。
  2. 在该 CPU 上分配给我的进程的时间片将增加,因此它会在进程上下文切换(如果有)之前运行更长时间。

亲切的问候 AFG

4

1 回答 1

1

我想 cpusets 可以帮助你克服这个问题。您可以为其中一个 CPU 定义一个独占的 cpuset,并将进程绑定到该特定的 cpuset。

http://www.kernel.org/doc/man-pages/online/pages/man7/cpuset.7.html

您可能会发现 cset 有用:

http://code.google.com/p/cpuset/

如果您不愿意使用它们中的任何一个,那么您需要编写自己的 c 代码来安排特定 cpu 上的进程(使用 sched_setaffinity)并禁用该特定 cpu 上的所有中断。

我希望它有所帮助。

于 2012-04-22T22:19:42.070 回答