多个TCP流相互干扰

时间:2013-05-14 16:37:11

标签: c sockets tcp

我有一个连接到NFS服务器并写入数据的客户端。它是一个多进程应用程序,可以创建与进程一样多的TCP连接。问题是,如果我尝试一个进程,写入时的套接字块很少(即poll()不会暂停)。如果我将进程数增加到8或更多,我发现自己在每个套接字上被poll()阻止了大约30%的时间。不是使用具有独立发送/接收缓冲区的多个TCP流的目的,所以它们不应该像这样阻塞?为什么有多个流相互干扰?链接远未饱和(使用iperf测试)。

我对此的想法是NFS服务器将为每个TCP连接创建一个套接字,并且它们将拥有自己的接收缓冲区。我知道我正在为每个进程创建单独的TCP套接字,因此它们应该有自己的发送缓冲区。如果我没有使链接饱和,为什么套接字会阻塞?

1 个答案:

答案 0 :(得分:2)

您假设网络具有无限带宽,并且服务器具有无限容量来为您发送的请求提供服务。在任何一种情况下都没有。线性增加TCP连接数并不会线性提高性能。只有一个网络;只有一台服务器;它只有这么多的CPU;它只有很多磁盘。网络迟早会填满,否则服务器会陷入困境,这将作为写入档位反射回来。