0

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

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

4

1 回答 1

2

您假设网络具有无限带宽,并且服务器具有无限容量来为您发送的请求提供服务。在任何一种情况下都不是。线性增加 TCP 连接的数量并不会线性增加性能。只有一个网络;只有一台服务器;它只有这么多 CPU;而且它只有这么多磁盘。网络迟早会填满,或者服务器会陷入瘫痪,这将作为写入停止反映给您。

于 2013-05-14T23:58:28.820 回答