この質問で概説されている理由で、IRQ SMPアフィニティを変更したいと思います: CPU0はeth1割り込みでいっぱいです
しかし、できません— Input/output error
に書き込もうとすると、/proc/irq/*/smp_affinity
が表示されます。
この件については、HOWTOを教えてください。 (/proc/irq/*/
に関する正式なリファレンスもクールです。)
ゴーリーの詳細:
これは、UbuntuベースのXen XCPホスト内のVM(PV domU))であることに注意してください。
$ uname -a Linux MYHOST 2.6.38-15-virtual#59-Ubuntu SMP Fri Apr 27 16:40:18 UTC 2012 i686 i686 i386 GNU/Linux $ lsb_release -a 使用可能なLSBモジュールはありません。 ディストリビューターID:Ubuntu 説明:Ubuntu 11.04 リリース:11.04 コード名:natty $ Sudo cat/proc/irq/*/smp_affinity 01 01 01 01 01 80 80 80 80 80 80 40 40 40 40 40 40 20 20 20 20 20 20 10 10 10 10 10 10 08 08 08 08 08 08 04 04 04 04 04 04 02 02 02 02 02 02 01 01 01 01 01 01
更新。エラーの詳細:
$ N = $(grep -c processor /proc/cpuinfo) $ echo $ N 8 $ printf%x $( (2 ** N-1)) ff $ printf%x $((2 ** N-1))| Sudo tee /proc/irq/*/smp_affinity fftee:/proc/irq/288/smp_affinity:入力/出力エラー tee:/ proc/irq/289/smp_affinity:入力/出力エラー ティー:/ proc/irq/290/smp_affinity:入出力エラー ティー:/ proc/irq/291/smp_affinity:入出力エラー ティー:/ proc/irq/292/smp_affinity:入力/出力エラー tee:/ proc/irq/293/smp_affinity:入力/出力エラー tee:/ proc/irq/294/smp_affinity:入力/出力エラー tee:/ proc/irq/295/smp_affinity:入出力エラー tee:/ proc/irq/296/smp_affinity:入出力エラー tee:/ proc/irq/297/smp_affinity:入力/出力エラー tee:/ proc/irq/298/smp_affinity:入力/出力エラー tee:/ proc/irq/299/smp_affinity:入力/出力エラー tee:/ proc/irq/300/smp_affinity:入出力エラー tee:/ proc/irq/301/smp_affinity:入出力エラー tee:/ proc/irq/302/smp_affinity:入力/出力エラー tee:/ proc/irq/303/smp_affinity:入力/出力エラー tee:/ proc/ir q/304/smp_affinity:入出力エラー tee:/ proc/irq/305/smp_affinity:入出力エラー tee:/ proc/irq/306/smp_affinity:入出力エラー ティー:/ proc/irq/307/smp_affinity:入出力エラー ティー:/ proc/irq/308/smp_affinity:入出力エラー ティー:/ proc/irq/309/smp_affinity:入出力エラー tee:/ proc/irq/310/smp_affinity:入出力エラー tee:/ proc/irq/311/smp_affinity:入出力エラー ティー:/ proc/irq/312/smp_affinity:入出力エラー ティー:/ proc/irq/313/smp_affinity:入出力エラー ティー:/ proc/irq/314/smp_affinity:入力/出力エラー tee:/ proc/irq/315/smp_affinity:入力/出力エラー tee:/ proc/irq/316/smp_affinity:入力/出力エラー tee:/ proc/irq/317/smp_affinity:入力/出力エラー tee:/ proc/irq/318/smp_affinity:入力/出力エラー tee:/ proc/irq/319/smp_affinity:入出力エラー ティー:/ proc/irq/320/smp_affinity:入出力エラー ティー:/ proc/irq/321/smp_affinity:入出力エラー tee:/ proc/irq/322/smp_affinity:入出力エラー tee:/ proc/irq/323/smp_affinity:入出力エラー tee:/ proc/irq/324/smp_affinity:入出力エラー tee:/ proc/irq/325/smp_affinity:入出力エラー tee:/ proc/irq/326/smp_affinity:入出力エラー ティー:/ proc/irq/327/smp_affinity:入出力エラー ティー:/ proc/irq/328/smp_affinity:入出力error tee:/ proc/irq/329/smp_affinity:入出力エラー tee:/ proc/irq/330/smp_affinity:入出力エラー tee:/ proc/irq/331/smp_affinity:入出力エラー tee:/ proc/irq/332/smp_affinity:入出力エラー tee:/ proc/irq/333/smp_affinity:入出力エラー tee:/ proc/irq/334/smp_affinity:入力/出力エラー tee:/ proc/irq/335/smp_affinity:入力/出力エラー
更新。irqbalance
が実行されています:
[。
特にネットワークイベントを処理するために、割り込みを別のCPUに移動してもパフォーマンスが向上するとは思いません。
ネットワークコードを特定のCPUに保持できなくなるため、逆のことが起こります。
ネットワークインターフェイスでパケットのドロップが発生しない限り、これは多くのパケットを処理するネットワークではごく普通の動作です。
割り込みの数を減らす必要があります-割り込みを移動しても効果がありません(逆に、概要を説明しようとしました)。
次の2つの解決策が考えられます。
更新2012-12-17:信頼できるリンクを要求したので-私は一般的な質問をしようとしました 仮想化を使用しない場合 =-これは、一般的なVM制限に達しているケースの1つだと思います。質問に対する回答の1つには、仮想化の代わりにコンテナーを使用するという別のアプローチが含まれています。
これが役に立てば幸い...
Linuxのソースコードには Documentation/IRQ-affinity.txt
というファイルがあります。
/proc/irq/IRQ#/smp_affinity specifies which target CPUs are permitted
for a given IRQ source. It's a bitmask of allowed CPUs. It's not allowed
to turn off all CPUs, and if an IRQ controller does not support IRQ
affinity then the value will not change from the default 0xffffffff.
ここでの落とし穴は、ビットマスクが16進数であるということです。したがって、CPUがN個ある場合、
N=$(grep -c processor /proc/cpuinfo)
n個のCPUがある場合、すべてのCPUに対してすべてのIRQを有効にします。
printf %x $((2**N-1)) | Sudo tee /proc/irq/*/smp_affinity
カーネル3.0以降 には smp_affinity_list
というファイルがあります。このファイルは、CPUまたはCPU範囲のコンマ区切りリストを取ります。有効な例:0
、2,3,5-7
、0-7
。前のコマンドは次と同等です。
echo 0-$((N-1)) | Sudo tee /proc/irq/*/smp_affinity_list
しかし、アフィニティ構成が機能しない理由について、信頼できる回答が必要です。誰もが可能だと思い込んでいるのではないかと心配ですが、私にはできません。
この特定の質問について(Xenがこの回答に影響を与えるかどうかはわかりません)、現在この割り込み用のハンドラーがインストールされているデバイスドライバーがない場合は、Input/output error
メッセージが表示されます。
たとえば、ドライバーが「105」にハンドラーをインストールすると、ディレクトリ/proc/irq/105
が作成され、特にsmp_affinity
が含まれます。これで、smp_affinity
に書き込むことができます。デバイスを閉じると、ディレクトリはsmp_affinity
のままになりますが、書き込むことはできなくなります。 (open
、またはドライバーで最終的にrequest_irq
を呼び出すものを介して)デバイスを開き、ファイルに書き込むことができます。 RHEL/SL 6でのみテストされています。
デバイスが現在開いているかどうかわからない場合は、ディレクトリを確認してください。開いている場合は、デバイス名が含まれます。