我一直在读Linux Kernel Development,有些事情我还不太清楚--当一个中断被硬件触发时,决定运行中断处理逻辑的标准是什么?
我可以想象它总是在同一个CPU上引发IO请求,但是由于线程现在处于休眠状态,所以这样做并没有多大意义。
另一方面,可能存在需要引发的定时中断(例如,对于调度程序)。在SMP系统中,它们总是在相同的核心(例如,#0)上提升,还是几乎总是在任何核心上被提升?
它到底是怎么工作的?
谢谢
发布于 2019-06-18 15:28:23
在多处理器/多核系统上,您可能会发现名为irqbalance。它的工作是调整处理器间硬件中断的分布。
在启动时,当固件将系统的控制权交给内核时,最初只有一个CPU核心在运行。第一个核心(通常是核心#0,有时被称为"monarch / core“)在初始化系统和启动其他CPU核心之前,首先接管固件中的所有中断处理职责。因此,如果不采取任何措施来分配负载,最初启动系统的核心将完成所有中断处理任务。
https://www.kernel.org/doc/Documentation/IRQ-affinity.txt建议,在现代内核上,默认情况下,所有CPU内核都可以平等地处理IRQ。但这可能不是最佳解决方案,因为它可能导致使用频繁IRQ源的CPU缓存行的效率低下。irqbalance的工作就是解决这个问题。
irqbalance不是一个内核进程:它是一个独立的二进制/usr/sbin/irqbalance,既可以在一次启动模式下运行(即,作为引导过程的一部分调整中断的分布,并退出),也可以作为守护进程运行。不同的Linux发行版可以选择以不同的方式使用它,或者完全忽略它。它允许简单地通过更新用户空间二进制文件来测试和实现将IRQ分配给处理器的任意复杂策略。
它通过使用per /proc/irq/%i/smp_affinity文件来控制每个CPU可以处理哪些IRQ。如果您对细节感兴趣,的源代码。irqbalance:IRQ设置的实际分配发生在activate.c中。
https://unix.stackexchange.com/questions/516115
复制相似问题