2011-05-25 30 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來查看網絡硬件中斷是否分佈在所有內核中。

相關問題