我试图了解irq亲和力及其对系统性能的影响。
我经历了why-interrupt-affinity-with-multiple-cores-is-not-such-a-good-thing,并了解到NIC irq亲和力应设置为处理网络数据的核心以外的其他核心,因为处理不会被传入的irq中断。
我对此表示怀疑,因为如果我们使用不同的内核来处理来自irq核心的数据,那么在尝试从内核检索网络数据时,我们将获得更多的缓存未命中。所以我实际上相信通过将irq affinity设置为处理传入数据的线程的相同核心,可以提高性能,因为缓存丢失较少。
我想提出一些验证码,但在我提出任何结果之前,我错过了什么吗?
答案 0 :(得分:1)
IRQ亲和力是一把双刃剑。根据我的经验,它可以提高性能,但仅限于具有预定义工作负载的非常特定的配置。就您的问题而言,(仅考虑RX路径)通常在NIC卡中断其中一个核心时,在大多数情况下,中断处理程序将不做很多事情,除了触发机制(下半部分,tasklet,内核线程或网络堆栈线程)在其他一些上下文中处理传入的数据包。如果相同的数据包处理内核正在处理中断(ISR处理程序没有做太多),则由于上下文切换而限制了一些缓存优势,并且可能会增加缓存未命中。影响多大,取决于其他因素的多样性。
在NIC驱动程序中,核心的关联性与每个RX队列对齐[将每个RX队列处理分隔在不同的核心之间],这提供了更多的性能优势。
答案 1 :(得分:0)
控制中断相关性可能很少有有用的应用程序。很少有人会想到这种冲刺。