应用程序性能和中断亲和性

引用RedHat性能调优指南

3.3.7。 设置中断关联

中断请求具有相关的亲和属性smp_affinity,该属性定义将处理中断请求的处理器。 要提高应用程序性能,请将中断关联和进程关联分配给同一个处理器或同一内核上的处理器。 这允许指定的中断和应用程序线程共享caching行。

我有一个应用程序接收和处理大量的UDP数据。 如果我想缩短UDP数据包到达应用程序和完成数据包处理之间的时间,我应该为接收数据包和应用程序的NIC分配相同的亲和力吗? 或者我应该给他们不同的亲和力? 我觉得上面提到的前者有这样的说法,但是我会认为后者可能会更有益处。

任何帮助将是伟大的。

谢谢

虽然只有定向的基准testing才能真正回答您的问题,但最安全的方法是在同一CPU /插槽上运行IRQ和应用程序,但在不同的内核上运行。 以这种方式,可用的CPU功率被最大化,同时,所有最近的服务器中通用的L3caching能够实现IRQ和应用程序之间的快速数据共享。

如果您真的有兴趣降低数据包接收和处理之间的延迟,则应该调整以太网适配器的数据包缓冲区和IRQ合并设置。

你可以使用非常好的ethtool来做到这一点:

  • ethtool -c给你一个默认数据包合并设置的概述,而ethtool -C允许你改变它们。
  • ethtool -g显示环形缓冲区设置,而ethtool -G可以改变它们。