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にバインドしたいという意味です。(私のOSでは、約500のプロセスを数えることができます)。

  1. そうすることで安全ですか、それとも現在実行中の CPU でそれらの一部を使用できるようにする必要がありますか?
  2. 少なくとも IRQ をバインドすると、パフォーマンスは向上しますか?

これらは頻繁にトリガーされる割り込みに接続されているため、カーネルがそれらを呼び出さなければならないため、頻繁なプロセス コンテキスト スイッチが発生します。

以下のメリットを期待しています。

  1. 1 つの CPU を実行する 1 つのプロセスが存在するため、プロセス コンテキストの切り替えはまったくありません。
  2. その CPU 上のプロセスに割り当てられたタイム スライスが増加するため、プロセス コンテキスト スイッチ (存在する場合) の前により長く実行されます。

敬具AFG

4

1 に答える 1

1

cpusetsはこの問題を克服するのに役立つと思います。CPUの1つに専用のCPUセットを定義し、プロセスをその特定のCPUセットにバインドできます。

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

あなたはcsetが役に立つと思うかもしれません:

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

それらのいずれかを使用したくない場合は、特定のCPUでプロセスをスケジュールし(sched_setaffinityを使用)、その特定のCPUですべての割り込みを無効にする独自のcコードを作成する必要があります。

お役に立てば幸いです。

于 2012-04-22T22:19:42.070 に答える