
irqbalance --debug
次のように表示されます。
Package 0: Core 0, 2, 4, 6, 8, 10, 12, 14
Package 1: Core 1, 3, 5, 7, 9, 11, 13
ネットワーク アプリケーションを実行すると、IRQ はパッケージ 1 によって処理されているように見えますが、smp_affinity
NIC の IRQ はパッケージ 0 にあります。
- 設定
irqbalance
を上書きしますか?smp_affinity
irqbalance
IRQ の処理に使用するパッケージをどのように決定しますか?
答え1
特に大きなプログラムではないので、ソースを確認するそれは良い考えだと思った。
設定
irqbalance
を上書きしますか?smp_affinity
答えはノーだと思います。むしろ、ファイルシステム
smp_affinity
から設定を読み取っているのがはっきりとわかります。/proc
activate.c
:sprintf(buf, "/proc/irq/%i/smp_affinity", info->irq); file = fopen(buf, "r"); if (!file) return 1; if (getline(&line, &size, file)==0) { free(line); fclose(file); return 1; } cpumask_parse_user(line, strlen(line), current_mask);
irqbalance
IRQ の処理に使用するパッケージをどのように決定しますか?もちろん、これが の全体的なポイントなので
irqbalance
、以下は過度に単純化されたものになる可能性があります。しかし、私が読んだところによると、関連する機能は
placement.c
という関数でfind_best_object_for_irq()
、 が を呼び出しますfind_best_object()
。重要なラインはここ:
asign = place.least_irqs ? place.least_irqs : place.best;
これは、IRQ が現在割り当てられている IRQ が最も少ない場所 (パッケージなど) に割り当てられていること、またはそうでない場合は「最適な」場所 (ここで「最適」とは負荷が最も低い場所) に割り当てられていることを示しているようです。
newload = d->load; if (newload < best->best_cost) { best->best = d; best->best_cost = newload; best->least_irqs = NULL; }