
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; }