gpt4 book ai didi

network-programming - Linux 网络堆栈是否在多核机器上并行运行?

转载 作者:可可西里 更新时间:2023-11-01 02:43:59 24 4
gpt4 key购买 nike

我有一台运行 Linux 2.6.x 的 4 核机器。该机器是单宿主机(即具有 1 个 NIC)。

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

问题:这4个网络I/O线程可以并行运行吗?我可以假设 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 查看网络硬件中断是否分布在所有内核上。

关于network-programming - Linux 网络堆栈是否在多核机器上并行运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6123391/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com