我正在运行一个测试程序,它生成大量线程和异步 I/O。我在 /proc/interrupts 中看到这些中断的数量非常多,程序无法扩展超过某个点,因为 CPU 的软中断处理已 100% 饱和。
根据:http://www.kernel.org/doc/man-pages/online/pages/man5/proc.5.htmlCAL 代表“远程函数调用中断”,但这就是我在谷歌上可以找到的所有信息。那么...这是什么意思?我为我的 I/O 适配器卡分配了 smp_affinity,这些适配器卡不是占用大量 CAL 中断的 CPU。这是否表明我的程序正在以不正确的 SMP 亲和力运行?
答案1
远程函数调用中断属于以下家族处理器间中断,即由一个处理器发送到系统中任何其他处理器的中断信号,并且不通过 IRQ 线传递,而是直接作为连接所有 CPU 的本地 APIC 的总线上的消息传递。
远程函数调用中断通常发送到除发送方之外的所有处理器,强制这些处理器运行发送方传递的函数。在 Linux x86 内核下:
相应的中断处理程序被命名为调用函数中断()。
中断通常是通过smp_call_function()设施功能。
典型用例包括关闭时停止所有 cpu、校准时钟、刷新 TLB……以及更多的。
当然,不同的 smp-affinity 设置可以间接影响 TLB 刷新的数量,但因为这种影响是间接的,并且因为 TLB 的刷新不是函数调用中断的唯一原因,所以不应该首先单独使用它们的速率来判断效率或亲和力设置。
smp-affinity 设置的相关性的第一个判断是上下文切换的次数。越低越好。