
irqbalance --debug
zeigt folgendes:
Package 0: Core 0, 2, 4, 6, 8, 10, 12, 14
Package 1: Core 1, 3, 5, 7, 9, 11, 13
Wenn ich Netzwerkanwendungen ausführe, scheint es, als würden IRQs von Paket 1 behandelt, der smp_affinity
für die Netzwerkkarte liegt jedoch in Paket 0.
- Wird die Konfiguration
irqbalance
überschriebensmp_affinity
? - Wie wird
irqbalance
entschieden, welches Paket zur Handhabung von IRQs verwendet wird?
Antwort1
Es ist kein besonders großes Programm, alsoÜberprüfung der Quellenschien eine gute Idee zu sein.
Wird die Konfiguration
irqbalance
überschriebensmp_affinity
?Ich glaube, die Antwort ist nein. Wenn überhaupt, können Sie deutlich sehen, dass es die
smp_affinity
Einstellungen aus dem/proc
Dateisystem liest inactivate.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);
Wie wird
irqbalance
entschieden, welches Paket zur Handhabung von IRQs verwendet wird?Dies ist natürlich der springende Punkt von
irqbalance
, daher handelt es sich bei dem Folgenden wahrscheinlich um eine übermäßige Vereinfachung.Aber nach meiner Lektüre ist die relevante Funktion in
placement.c
in einer Funktion namensfind_best_object_for_irq()
, die wiederum aufruftfind_best_object()
.Die kritische Linie scheint zu seinHier:
asign = place.least_irqs ? place.least_irqs : place.best;
Dies würde darauf hindeuten, dass der IRQ dem Ort (z. B. Paket) zugewiesen wird, dem derzeit die wenigsten IRQs zugewiesen sind. Andernfalls wird er dem „besten“ Ort zugewiesen, wobei „am besten“ der Ort mit der geringsten Auslastung ist:
newload = d->load; if (newload < best->best_cost) { best->best = d; best->best_cost = newload; best->least_irqs = NULL; }