Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 30 Sep 2025 17:14:47 GMT
From:      Michael Tuexen <tuexen@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 6e4b811009d6 - main - vtnet: disable hardware TCP LRO by default
Message-ID:  <202509301714.58UHElqv055416@gitrepo.freebsd.org>

next in thread | raw e-mail | index | archive | help
The branch main has been updated by tuexen:

URL: https://cgit.FreeBSD.org/src/commit/?id=6e4b811009d63f33c59d51f28fd4a030ca90843e

commit 6e4b811009d63f33c59d51f28fd4a030ca90843e
Author:     Michael Tuexen <tuexen@FreeBSD.org>
AuthorDate: 2025-09-29 23:58:37 +0000
Commit:     Michael Tuexen <tuexen@FreeBSD.org>
CommitDate: 2025-09-30 00:03:49 +0000

    vtnet: disable hardware TCP LRO by default
    
    Hardware TCP LRO results in problems in settings with IP forwarding
    being enabled. In case of nodes without IP forwarding, using
    software LRO is also beneficial in general, since it can provide better
    information about what was received on the wire.
    Therefore, disable hardware TCP LRO by default.
    By tuning the loader tunable, this can be changed.
    
    PR:                     263229
    Reviewed by:            Timo Völker
    MFC after:              3 days
    Differential Revision:  https://reviews.freebsd.org/D52684
---
 share/man/man4/vtnet.4            | 22 +++++++++++++++++-----
 sys/dev/virtio/network/if_vtnet.c |  2 +-
 2 files changed, 18 insertions(+), 6 deletions(-)

diff --git a/share/man/man4/vtnet.4 b/share/man/man4/vtnet.4
index 636ce4cc9b60..fd41b36882a6 100644
--- a/share/man/man4/vtnet.4
+++ b/share/man/man4/vtnet.4
@@ -22,7 +22,7 @@
 .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
 .\" SUCH DAMAGE.
 .\"
-.Dd September 26, 2025
+.Dd September 30, 2025
 .Dt VTNET 4
 .Os
 .Sh NAME
@@ -54,6 +54,18 @@ TCP segmentation offload (TSO), TCP large receive offload (LRO),
 hardware VLAN tag stripping/insertion features, a multicast hash filter,
 as well as Jumbo Frames (up to 9216 bytes), which can be
 configured via the interface MTU setting.
+.Pp
+Two flavors of TCP LRO are supported:
+Hardware TCP LRO, which is performed by the host providing TCP segments larger
+than the MTU to the guest, and Software TCP LRO, which is performed by the
+network stack of the guest processing TCP segments in an optimized way.
+Only one flavour of TCP LRO should be used.
+Since hardware TCP LRO can have bad interactions with IP forwarding and
+software TCP LRO mitigates several drawbacks of hardware TCP LRO, the default
+setting is to disable hardware TCP LRO.
+See the loader tunable
+.Va hw.vtnet. Ns Ar X Ns Va .lro_disable .
+.Pp
 TCP/UDP receive checksum offload cannot be configured independently for IPv4
 and IPv6.
 Selecting an MTU larger than 1500 bytes with the
@@ -94,8 +106,8 @@ This tunable disables TCP segmentation offloading.
 The default value is 0.
 .It Va hw.vtnet.lro_disable
 .It Va hw.vtnet. Ns Ar X Ns Va .lro_disable
-This tunable disables large receive offload.
-The default value is 0.
+This tunable disables hardware TCP LRO.
+The default value is 1.
 .It Va hw.vtnet.mq_disable
 .It Va hw.vtnet. Ns Ar X Ns Va .mq_disable
 This tunable disables multiqueue.
@@ -119,11 +131,11 @@ This tunable sets the number of RX segments processed in one pass.
 The default value is 1024.
 .It Va hw.vtnet.lro_entry_count
 .It Va hw.vtnet. Ns Ar X Ns Va .lro_entry_count
-This tunable sets the software LRO entry count.
+This tunable sets the software TCP LRO entry count.
 The default value is 128, the minimum value is 8.
 .It Va hw.vtnet.lro_mbufq_depth
 .It Va hw.vtnet. Ns Ar X Ns Va .lro_mbufq_depth
-This tunable sets the depth of the software LRO mbuf queue.
+This tunable sets the depth of the software TCP LRO mbuf queue.
 The default value is 0.
 .It Va hw.vtnet.altq_disable
 This tunable disables ALTQ support, allowing the use of multiqueue instead.
diff --git a/sys/dev/virtio/network/if_vtnet.c b/sys/dev/virtio/network/if_vtnet.c
index 634ba0de2d55..471c6b3714b2 100644
--- a/sys/dev/virtio/network/if_vtnet.c
+++ b/sys/dev/virtio/network/if_vtnet.c
@@ -281,7 +281,7 @@ static int vtnet_tso_disable = 0;
 SYSCTL_INT(_hw_vtnet, OID_AUTO, tso_disable, CTLFLAG_RDTUN,
     &vtnet_tso_disable, 0, "Disables TSO");
 
-static int vtnet_lro_disable = 0;
+static int vtnet_lro_disable = 1;
 SYSCTL_INT(_hw_vtnet, OID_AUTO, lro_disable, CTLFLAG_RDTUN,
     &vtnet_lro_disable, 0, "Disables hardware LRO");
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202509301714.58UHElqv055416>