web-dev-qa-db-ja.com

XenXCP内のUbuntuPV domUでIRQのSMPアフィニティを変更するにはどうすればよいですか?

この質問で概説されている理由で、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が実行されています:

[。
3

特にネットワークイベントを処理するために、割り込みを別のCPUに移動してもパフォーマンスが向上するとは思いません。

ネットワークコードを特定のCPUに保持できなくなるため、逆のことが起こります。

ネットワークインターフェイスでパケットのドロップが発生しない限り、これは多くのパケットを処理するネットワークではごく普通の動作です。

割り込みの数を減らす必要があります-割り込みを移動しても効果がありません(逆に、概要を説明しようとしました)。

次の2つの解決策が考えられます。

  • 割り込みの数を減らすには、MTUサイズを大きくしてください
  • DomUのvCPU 0をDom0の専用CPUにPINで固定します(他のVMまたはDom0では使用されません)。

更新2012-12-17:信頼できるリンクを要求したので-私は一般的な質問をしようとしました 仮想化を使用しない場合 =-これは、一般的なVM制限に達しているケースの1つだと思います。質問に対する回答の1つには、仮想化の代わりにコンテナーを使用するという別のアプローチが含まれています。

これが役に立てば幸い...

3
Nils

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範囲のコンマ区切りリストを取ります。有効な例:02,3,5-70-7。前のコマンドは次と同等です。

echo 0-$((N-1)) | Sudo tee /proc/irq/*/smp_affinity_list
7
chutz

しかし、アフィニティ構成が機能しない理由について、信頼できる回答が必要です。誰もが可能だと思い込んでいるのではないかと心配ですが、私にはできません。

この特定の質問について(Xenがこの回答に影響を与えるかどうかはわかりません)、現在この割り込み用のハンドラーがインストールされているデバイスドライバーがない場合は、Input/output errorメッセージが表示されます。

たとえば、ドライバーが「105」にハンドラーをインストールすると、ディレクトリ/proc/irq/105が作成され、特にsmp_affinityが含まれます。これで、smp_affinityに書き込むことができます。デバイスを閉じると、ディレクトリはsmp_affinityのままになりますが、書き込むことはできなくなります。 (open、またはドライバーで最終的にrequest_irqを呼び出すものを介して)デバイスを開き、ファイルに書き込むことができます。 RHEL/SL 6でのみテストされています。

デバイスが現在開いているかどうかわからない場合は、ディレクトリを確認してください。開いている場合は、デバイス名が含まれます。

0
EML