NFS サーバーに接続してデータを書き込むクライアントがあります。これは、プロセスと同じ数の TCP 接続を作成するマルチプロセス アプリケーションです。問題は、1 つのプロセスを試すと、書き込み時にソケットがほとんどブロックされないことです (つまり、poll() は一時停止しません)。プロセス数を 8 以上に増やすと、約 30% の確率で、各ソケットで poll() によってブロックされることに気付きます。独立した送信/受信バッファを持つ複数の TCP ストリームを使用する目的ではないので、このようにブロックするべきではありませんか? 複数のストリームが互いに干渉しているのはなぜですか? リンクは飽和には程遠いです (iperf でテスト済み)。
これに関する私の考えでは、NFS サーバーは TCP 接続ごとにソケットを作成し、独自の受信バッファーを持つことになります。プロセスごとに個別の TCP ソケットを作成していることはわかっているため、独自の送信バッファーが必要です。リンクを飽和させていないのに、ソケットがブロックされているのはなぜですか?