设置中断关联性和处理线程关联性到同一个核心是一个好习惯吗?

时间:2018-02-07 09:05:24

标签: performance networking linux-kernel interrupt

我试图了解irq亲和力及其对系统性能的影响。

我经历了why-interrupt-affinity-with-multiple-cores-is-not-such-a-good-thing,并了解到NIC irq亲和力应设置为处理网络数据的核心以外的其他核心,因为处理不会被传入的irq中断。

我对此表示怀疑,因为如果我们使用不同的内核来处理来自irq核心的数据,那么在尝试从内核检索网络数据时,我们将获得更多的缓存未命中。所以我实际上相信通过将irq affinity设置为处理传入数据的线程的相同核心,可以提高性能,因为缓存丢失较少。

我想提出一些验证码,但在我提出任何结果之前,我错过了什么吗?

2 个答案:

答案 0 :(得分:1)

IRQ亲和力是一把双刃剑。根据我的经验,它可以提高性能,但仅限于具有预定义工作负载的非常特定的配置。就您的问题而言,(仅考虑RX路径)通常在NIC卡中断其中一个核心时,在大多数情况下,中断处理程序将做很多事情,除了触发机制(下半部分,tasklet,内核线程或网络堆栈线程)在其他一些上下文中处理传入的数据包。如果相同的数据包处理内核正在处理中断(ISR处理程序没有做太多),则由于上下文切换而限制了一些缓存优势,并且可能会增加缓存未命中。影响多大,取决于其他因素的多样性。

在NIC驱动程序中,核心的关联性与每个RX队列对齐[将每个RX队列处理分隔在不同的核心之间],这提供了更多的性能优势。

答案 1 :(得分:0)

控制中断相关性可能很少有有用的应用程序。很少有人会想到这种冲刺。

  • 隔离内核-防止将I / O负载分散到关键任务CPU内核或RT优先级专用的内核上(计划的softirq可能会饿死这些内核)
  • 通过在多处理器系统的相关NUMA上保留中断,提高系统性能-吞吐量和延迟-
  • CPU效率-例如专用于CPU的NIC通道及其对单个应用程序的中断将使该CPU占用更多资源,而对于繁忙流量的用例则要多30%。 这可能需要进行流量控制,以使传入流量成为该通道的目标。 注意:不使用亲和力的应用程序似乎可以提供更高的吞吐量,但会将负载分散到许多内核上。得益于缓存的局部性和上下文切换的预防。
  • 延迟-如上设置应用程序将使延迟减半(在现代系统上从8us减少到4us)