Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 14 Feb 2025 15:10:56 GMT
From:      Mark Johnston <markj@FreeBSD.org>
To:        src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org
Subject:   git: 909e2d7b691f - main - gve: Disallow MTUs within a problematic range
Message-ID:  <202502141510.51EFAua5063288@gitrepo.freebsd.org>

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

URL: https://cgit.FreeBSD.org/src/commit/?id=909e2d7b691f7418a78b1289a51d3b6c46860a9b

commit 909e2d7b691f7418a78b1289a51d3b6c46860a9b
Author:     Jasper Tran O'Leary <jtranoleary@google.com>
AuthorDate: 2025-02-14 14:57:06 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2025-02-14 14:57:06 +0000

    gve: Disallow MTUs within a problematic range
    
    If hardware LRO is enabled with GVE, then setting the driver's MTU to a
    range of values around 8000 will cause dropped packets and drastically
    degraded performance. While this issue is being investigated, we need
    to prohibit the driver's MTU being set to a value within this range.
    
    Signed-off-by: Jasper Tran O'Leary <jtranoleary@google.com>
    
    Reviewed by:    delphij, markj
    MFC after:      2 weeks
    Differential Revision:  https://reviews.freebsd.org/D48971
---
 sys/dev/gve/gve_main.c | 15 +++++++++++++++
 1 file changed, 15 insertions(+)

diff --git a/sys/dev/gve/gve_main.c b/sys/dev/gve/gve_main.c
index 0e40656ca928..c726177c199c 100644
--- a/sys/dev/gve/gve_main.c
+++ b/sys/dev/gve/gve_main.c
@@ -196,6 +196,8 @@ static int
 gve_set_mtu(if_t ifp, uint32_t new_mtu)
 {
 	struct gve_priv *priv = if_getsoftc(ifp);
+	const uint32_t max_problem_range = 8227;
+	const uint32_t min_problem_range = 7822;
 	int err;
 
 	if ((new_mtu > priv->max_mtu) || (new_mtu < ETHERMIN)) {
@@ -204,6 +206,19 @@ gve_set_mtu(if_t ifp, uint32_t new_mtu)
 		return (EINVAL);
 	}
 
+	/*
+	 * When hardware LRO is enabled in DQ mode, MTUs within the range
+	 * [7822, 8227] trigger hardware issues which cause a drastic drop
+	 * in throughput.
+	 */
+	if (!gve_is_gqi(priv) && !gve_disable_hw_lro &&
+	    new_mtu >= min_problem_range && new_mtu <= max_problem_range) {
+		device_printf(priv->dev,
+		    "Cannot set to MTU to %d within the range [%d, %d] while hardware LRO is enabled\n",
+		    new_mtu, min_problem_range, max_problem_range);
+		return (EINVAL);
+	}
+
 	err = gve_adminq_set_mtu(priv, new_mtu);
 	if (err == 0) {
 		if (bootverbose)



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