我在 RHEL 6 服务器上有两个 NIC。它们都设置为 1GB/秒全双工。第一个 NIC 有很多小的(< 100 字节)TCP 套接字写入。第二个 NIC 用于接收 50 MB/秒的 TCP 输入流,其中延迟至关重要。
在这种设置中,第一个 NIC 会对第二个 NIC 的延迟产生不利影响吗?
答案1
这取决于 NIC 的类型。如果它们都是依赖 CPU 进行处理的“软 NIC”,那么确实可能会产生影响,因为您浪费了 CPU 时间。如果它们位于具有 2 个端口的卡上,并且该卡只有一个处理器用于它们两个,同样也会对它们产生影响。真正好的双接口 NIC 每个端口都有一个处理器,可以避免这种影响,但由于不了解更多信息,我无法肯定地说。
答案2
理论上是可行的,但由于数据速率如此之低,因此不太可能测量。NIC 向一个或多个处理器发送中断,可以配置操作系统以限制将这些 IRQ 路由到特定核心。因此,如果一个核心正在处理所有 IRQ,那么来自一个 NIC 的大量中断将延迟来自另一个 NIC 的中断的处理。
在实际层面上,四路以太网卡可以实现整个卡的 IRQ 节流、共享和合并,从而减少大数据速率的影响。但是要意识到,对于非常高的数据速率,即 10GigE 网络和每秒数百万个数据包,这些都是问题。
这里有一篇文章介绍了 IRQ 路由如何帮助一家公司提高性能:
http://www.kernel.org/doc/Documentation/IRQ-affinity.txt
http://lserinol.blogspot.com/2009/02/irq-affinity-in-linux.html