web-dev-qa-db-ja.com

ハードウェア割り込みの最小化

次のようなアーキテクチャを持つシステムで、変更されたLinuxカーネルをソフトリアルタイムOSとして使用しています。

a busy cat

CPU1とCPU2にはそれぞれ8つのコアがあります。最小のジッターで実行する必要がある4つのプロセスがあるので、これらのプロセスに対するハードウェア割り込みの影響を最小限に抑えるために(OSレベルとハードウェア構成レベルの両方で)何をすべきですか

これは私が今していることです:

  1. プロセスをCPU2の各1コアにバインドします。
  2. SAS2208コントローラーを無効にし、ブートディスクをC602PCHのSATAコントローラーにのみ接続します。

C602 PCHのほとんどの機能を無効にして、CPU1のハードウェア割り込みを減らすことができるようです。プロセスをCPU2に分離する場合(つまり、DIMM#1-1から#1へのリモートメモリアクセスがない場合)、これは不要です。 -4およびCPU1とCPU2間のプロセス間通信なし)?

3
elleciel

他のパフォーマンスチューニングと同様に、絶対的なルールはありません。その性質上、十分な資格で作成できるルールはいくつかありますが、ごくわずかです。だからそれを覚えておいてください。ハードウェア割り込みをどのように制御するかは、ワークロードの動作によって異なります。

あなたの質問のために、あなたはまた、割り込みがどこに送られるかを制御しなければなりません。常に何らかの割り込みが発生しますが、 IRQアフィニティを構成 でCPU1に送信し、CPU2をデータ処理に使用できるようにすることができます。パケットステアリングオプションでも同じことができます。

前に述べたように、絶対的なルールを与えるのは難しいですが、不要なハードウェア割り込みの数を減らすことは良いスタートですが IRQアフィニティとTX/RXアフィニティを試してみると利点も得られます 。また、特定のメトリックに固執せず、アプリケーション全体のパフォーマンスを監視することを忘れないことも重要です。

3
Bratchley