
irqbalance --debug
muestra lo siguiente:
Package 0: Core 0, 2, 4, 6, 8, 10, 12, 14
Package 1: Core 1, 3, 5, 7, 9, 11, 13
Cuando ejecuto aplicaciones de red, parece que las IRQ las maneja el paquete 1, sin embargo, la smp_affinity
de la NIC está en el paquete 0.
- ¿
irqbalance
Anulasmp_affinity
la configuración? - ¿Cómo se
irqbalance
decide qué paquete utilizar para manejar las IRQ?
Respuesta1
No es un programa particularmente grande, así que simplementecomprobando las fuentesParecía una buena idea.
¿
irqbalance
Anulasmp_affinity
la configuración?Creo que la respuesta es no. En todo caso, puede verlo claramente leyendo la
smp_affinity
configuración del/proc
sistema de archivos enactivate.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);
¿Cómo se
irqbalance
decide qué paquete utilizar para manejar las IRQ?Por supuesto, este es el objetivo de
irqbalance
, por lo que lo que sigue probablemente sea una simplificación excesiva.Pero según mi lectura, la función relevante está en
placement.c
en una función llamadafind_best_object_for_irq()
, que a su vez llamafind_best_object()
.La línea crítica parece seraquí:
asign = place.least_irqs ? place.least_irqs : place.best;
Lo que parecería indicar que la IRQ está asignada a ese lugar (por ejemplo, paquete) que actualmente tiene la menor cantidad de IRQ asignadas; o si no, al "mejor" lugar, donde "mejor" es lo que tenga menor carga:
newload = d->load; if (newload < best->best_cost) { best->best = d; best->best_cost = newload; best->least_irqs = NULL; }