]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: add /proc/sys/net/core/txq_reselection_ms control
authorEric Dumazet <edumazet@google.com>
Mon, 13 Oct 2025 15:22:33 +0000 (15:22 +0000)
committerJakub Kicinski <kuba@kernel.org>
Wed, 15 Oct 2025 16:04:21 +0000 (09:04 -0700)
Add a new sysctl to control how often a queue reselection
can happen even if a flow has a persistent queue of skbs
in a Qdisc or NIC queue.

A value of zero means the feature is disabled.

Default is 1000 (1 second).

This sysctl is used in the following patch.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Reviewed-by: Neal Cardwell <ncardwell@google.com>
Reviewed-by: Kuniyuki Iwashima <kuniyu@google.com>
Link: https://patch.msgid.link/20251013152234.842065-4-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Documentation/admin-guide/sysctl/net.rst
include/net/netns/core.h
net/core/net_namespace.c
net/core/sysctl_net_core.c

index 2ef50828aff16b01baf32f5ded9b75a6e699b184..40749b3cd356973b9990add5dfdc87bb18711e2d 100644 (file)
@@ -406,6 +406,23 @@ to SOCK_TXREHASH_DEFAULT (i. e. not overridden by setsockopt).
 If set to 1 (default), hash rethink is performed on listening socket.
 If set to 0, hash rethink is not performed.
 
+txq_reselection_ms
+------------------
+
+Controls how often (in ms) a busy connected flow can select another tx queue.
+
+A resection is desirable when/if user thread has migrated and XPS
+would select a different queue. Same can occur without XPS
+if the flow hash has changed.
+
+But switching txq can introduce reorders, especially if the
+old queue is under high pressure. Modern TCP stacks deal
+well with reorders if they happen not too often.
+
+To disable this feature, set the value to 0.
+
+Default : 1000
+
 gro_normal_batch
 ----------------
 
index 9b36f0ff0c200c9cf89753f2c78a3ee0fe5256b7..cb9c3e4cd7385016de3ac87dac65411d54bd093b 100644 (file)
@@ -13,6 +13,7 @@ struct netns_core {
        struct ctl_table_header *sysctl_hdr;
 
        int     sysctl_somaxconn;
+       int     sysctl_txq_reselection;
        int     sysctl_optmem_max;
        u8      sysctl_txrehash;
        u8      sysctl_tstamp_allow_data;
index b0e0f22d7b213c522c2b83a5fcbcabb43e72cd11..adcfef55a66f1691cb76d954af32334e532864bb 100644 (file)
@@ -395,6 +395,7 @@ static __net_init void preinit_net_sysctl(struct net *net)
        net->core.sysctl_optmem_max = 128 * 1024;
        net->core.sysctl_txrehash = SOCK_TXREHASH_ENABLED;
        net->core.sysctl_tstamp_allow_data = 1;
+       net->core.sysctl_txq_reselection = msecs_to_jiffies(1000);
 }
 
 /* init code that must occur even if setup_net() is not called. */
index 8cf04b57ade1e0bf61ad4ac219ab4eccf638658a..f79137826d7f9d653e2e22d8f42e23bec08e083c 100644 (file)
@@ -667,6 +667,13 @@ static struct ctl_table netns_core_table[] = {
                .extra2         = SYSCTL_ONE,
                .proc_handler   = proc_dou8vec_minmax,
        },
+       {
+               .procname       = "txq_reselection_ms",
+               .data           = &init_net.core.sysctl_txq_reselection,
+               .maxlen         = sizeof(int),
+               .mode           = 0644,
+               .proc_handler   = proc_dointvec_ms_jiffies,
+       },
        {
                .procname       = "tstamp_allow_data",
                .data           = &init_net.core.sysctl_tstamp_allow_data,