![应用程序性能和中断亲和性](https://linux22.com/image/659077/%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%80%A7%E8%83%BD%E5%92%8C%E4%B8%AD%E6%96%AD%E4%BA%B2%E5%92%8C%E6%80%A7.png)
3.3.7. 设置中断亲和性
中断请求具有关联的亲和性属性 smp_affinity,该属性定义将处理中断请求的处理器。为了提高应用程序性能,请将中断亲和性和进程亲和性分配给同一处理器或同一核心上的处理器。这允许指定的中断和应用程序线程共享缓存行。
我有一个接收和处理大量 UDP 数据的应用程序。如果我想缩短 UDP 数据包到达和应用程序完全处理数据包之间的时间,我是否应该为接收数据包的 NIC 和应用程序分配相同的亲和性?还是应该为它们分配不同的亲和性?我觉得上面的引言暗示了前者,但我认为后者可能更有益。
任何帮助都将非常有帮助。
谢谢
答案1
虽然只有定向基准测试才能真正回答您的问题,但最安全的做法是在同一个 CPU/插槽上,但在不同的内核上运行 IRQ 和应用程序。通过这种方式,可用的 CPU 能力得到最大化,同时,所有最新服务器中常见的 L3 缓存可实现 IRQ 和应用程序之间的快速数据共享。
如果您确实有兴趣降低数据包接收和处理之间的延迟,您应该调整以太网适配器的数据包缓冲区和 IRQ 合并设置。
您可以使用非常好的 ethtool 来做到这一点:
ethtool -c
为您提供默认数据包合并设置的概述,同时ethtool -C
允许您更改它们。ethtool -g
显示环形缓冲区设置,ethtool -G
您可以使用来更改它们。