Linux网络堆栈可以在多核计算机上并行运行吗?

| 我有一台运行Linux 2.6.x的4核计算机。该计算机是单宿主的(即具有1个NIC)。 在这台机器上,我运行4个进程(或1个进程中有4个线程),它们从网络上的4个不同主机进行网络I / O。 问题:网络I / O的这4个线程是否可以并行运行?我是否可以假设TCP / IP堆栈(包括NIC设备驱动程序)都是可以利用多个内核完全并行运行的并发代码?在网络I / O的任何阶段,这些线程是否都会阻止尝试获取TCP / IP堆栈中的某些共享资源,从而导致部分堆栈-从而使位于顶部的4个应用程序级线程部分顺序的而不是完全并行的?     
已邀请:
是的,所有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来查看网络硬件中断是否正在所有内核中分配。     

要回复问题请先登录注册