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