Re: RFC: NFS trunking (multiple TCP connections for a mount

From: Navdeep Parhar <np_at_freebsd.org>
Date: Tue, 29 Jun 2021 03:40:44 UTC
On Mon, Jun 28, 2021 at 5:23 PM Rick Macklem <rmacklem@uoguelph.ca> wrote:
>
> The Linux NFS client now has a mount option "nconnect",
> which specifies that multiple TCP connections be created
> for an NFS mount, where RPCs are done on the connections,
> in a round robin fashion. (Alternating between the two TCP
> connections for the case of nconnect=2.)
>
> The Linux man page says:
> nconnect=n
>               When using a connection oriented protocol such as TCP, it
>               may sometimes be advantageous to set up multiple
>               connections between the client and server. For instance,
>               if your clients and/or servers are equipped with multiple
>               network interface cards (NICs), using multiple connections
>               to spread the load may improve overall performance.  In
>               such cases, the nconnect option allows the user to specify
>               the number of connections that should be established
>               between the client and server up to a limit of 16.
>
> I don't understand how multiple TCP connections to the same
> server IP address will distribute the load across multiple network
> interfaces?
> I thought that lagg would have handled this?
>
> I could easily implement this, but I only have low end hardware
> to test on, so I doubt that I will see any performance improvement.

Pretty much all modern NICs are multiqueue and multiple connections will
distribute load across CPUs even without any lagg.  I think an nconnect
like option would be quite useful for NFS over high bandwidth links as
it's a lot easier to saturate the pipe using multiple connections than a
single one.

Regards,
Navdeep