2011-05-25 82 views
2

我有一台运行Linux 2.6.x的4核机器。该机器是单宿(即,具有1个NIC)。Linux网络堆栈是否在多核机器上并行运行?

在这台机器上,我运行4个进程(或者1个进程中的4个线程),它们执行网络中4个不同主机的网络I/O。

问题:这4个网络I/O线程能够并行运行吗?我能否假定TCP/IP堆栈(包括NIC设备驱动程序)是可以利用多个核心完全并行运行的并发代码?在它们的网络I/O的任何阶段,这些线程是否会阻止尝试获取TCP/IP堆栈中的某些共享资源,从而导致部分堆栈 - 因此导致4个应用程序级别的线程处于顶部 - 部分顺序和不完全平行?

+1

添加多个NIC(或具有多个端口的单个NIC)可能会更好,因为您可以将每个端口/ IRQ绑定到不同的CPU。 – Marcin 2011-05-25 11:33:39

+0

感谢您的提示。 +1。 – Harry 2011-05-29 08:01:43

回答

0

是的,所有4个线程都会执行网络IO(自Linux 2.4起大内核锁定结束)。

你会注意到在64核心的机器上的争用,就像本文分析的那样(使用Linux 2.6.35):https://www.usenix.org/legacy/events/osdi10/tech/full_papers/Boyd-Wickizer.pdf,但只有4核心和更新的内核,可能你没有注意到任何争用。 PS:即使您的芯片组或网卡仅向CPU 0发送中断,数据包接收也会分发到所有内核,因为它是在可分配给任何处理器的软件中断中完成的。您可以使用cat/proc/interrupts来查看网络硬件中断是否分布在所有内核中。

相关问题