
irqbalance --debug
mostra o seguinte:
Package 0: Core 0, 2, 4, 6, 8, 10, 12, 14
Package 1: Core 1, 3, 5, 7, 9, 11, 13
Quando executo aplicativos de rede, parece que os IRQs estão sendo tratados pelo pacote 1, porém o smp_affinity
da NIC está no pacote 0.
- Substitui
irqbalance
asmp_affinity
configuração? - Como
irqbalance
decidir qual pacote usar para lidar com IRQs?
Responder1
Não é um programa particularmente grande, então apenasverificando as fontespareceu uma boa ideia.
Substitui
irqbalance
asmp_affinity
configuração?Eu acredito que a resposta é não. Na verdade, você pode vê-lo claramente lendo a
smp_affinity
configuração do/proc
sistema de arquivos emactivate.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);
Como
irqbalance
decidir qual pacote usar para lidar com IRQs?É claro que esse é o ponto principal de
irqbalance
, então o que se segue provavelmente será uma simplificação excessiva.Mas pela minha leitura, a função relevante está em
placement.c
em uma função chamadafind_best_object_for_irq()
, que por sua vez chamafind_best_object()
.A linha crítica parece seraqui:
asign = place.least_irqs ? place.least_irqs : place.best;
O que parece indicar que o IRQ é atribuído ao local (por exemplo, pacote) que atualmente possui o menor número de IRQs atribuídos; ou se não, para o "melhor" local, onde "melhor" é o que tiver a menor carga:
newload = d->load; if (newload < best->best_cost) { best->best = d; best->best_cost = newload; best->least_irqs = NULL; }