net: move netdev_budget and netdev_budget to net_hotdata
authorEric Dumazet <edumazet@google.com>
Wed, 6 Mar 2024 16:00:15 +0000 (16:00 +0000)
committerJakub Kicinski <kuba@kernel.org>
Fri, 8 Mar 2024 05:12:41 +0000 (21:12 -0800)
netdev_budget and netdev_budget are used in rx path (net_rx_action())

Move them into net_hotdata for better cache locality.

Signed-off-by: Eric Dumazet <edumazet@google.com>
Acked-by: Soheil Hassas Yeganeh <soheil@google.com>
Reviewed-by: David Ahern <dsahern@kernel.org>
Link: https://lore.kernel.org/r/20240306160031.874438-3-edumazet@google.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
include/net/hotdata.h
net/core/dev.c
net/core/dev.h
net/core/hotdata.c
net/core/sysctl_net_core.c

index 6ed32e4..7217022 100644 (file)
@@ -8,6 +8,8 @@
 struct net_hotdata {
        struct list_head        offload_base;
        int                     gro_normal_batch;
+       int                     netdev_budget;
+       int                     netdev_budget_usecs;
 };
 
 extern struct net_hotdata net_hotdata;
index bf933ee..9ccb486 100644 (file)
@@ -4410,9 +4410,6 @@ EXPORT_SYMBOL(netdev_max_backlog);
 
 int netdev_tstamp_prequeue __read_mostly = 1;
 unsigned int sysctl_skb_defer_max __read_mostly = 64;
-int netdev_budget __read_mostly = 300;
-/* Must be at least 2 jiffes to guarantee 1 jiffy timeout */
-unsigned int __read_mostly netdev_budget_usecs = 2 * USEC_PER_SEC / HZ;
 int weight_p __read_mostly = 64;           /* old backlog weight */
 int dev_weight_rx_bias __read_mostly = 1;  /* bias for backlog weight */
 int dev_weight_tx_bias __read_mostly = 1;  /* bias for output_queue quota */
@@ -6790,8 +6787,8 @@ static __latent_entropy void net_rx_action(struct softirq_action *h)
 {
        struct softnet_data *sd = this_cpu_ptr(&softnet_data);
        unsigned long time_limit = jiffies +
-               usecs_to_jiffies(READ_ONCE(netdev_budget_usecs));
-       int budget = READ_ONCE(netdev_budget);
+               usecs_to_jiffies(READ_ONCE(net_hotdata.netdev_budget_usecs));
+       int budget = READ_ONCE(net_hotdata.netdev_budget);
        LIST_HEAD(list);
        LIST_HEAD(repoll);
 
index 4589226..9a61705 100644 (file)
@@ -38,8 +38,6 @@ int dev_addr_init(struct net_device *dev);
 void dev_addr_check(struct net_device *dev);
 
 /* sysctls not referred to from outside net/core/ */
-extern int             netdev_budget;
-extern unsigned int    netdev_budget_usecs;
 extern unsigned int    sysctl_skb_defer_max;
 extern int             netdev_tstamp_prequeue;
 extern int             netdev_unregister_timeout_secs;
index abb8ad1..907d691 100644 (file)
@@ -1,9 +1,15 @@
 // SPDX-License-Identifier: GPL-2.0-or-later
 #include <net/hotdata.h>
 #include <linux/cache.h>
+#include <linux/jiffies.h>
 #include <linux/list.h>
 
+
 struct net_hotdata net_hotdata __cacheline_aligned = {
        .offload_base = LIST_HEAD_INIT(net_hotdata.offload_base),
        .gro_normal_batch = 8,
+
+       .netdev_budget = 300,
+       /* Must be at least 2 jiffes to guarantee 1 jiffy timeout */
+       .netdev_budget_usecs = 2 * USEC_PER_SEC / HZ,
 };
index 0eb1242..a9c2d79 100644 (file)
@@ -577,7 +577,7 @@ static struct ctl_table net_core_table[] = {
 #endif
        {
                .procname       = "netdev_budget",
-               .data           = &netdev_budget,
+               .data           = &net_hotdata.netdev_budget,
                .maxlen         = sizeof(int),
                .mode           = 0644,
                .proc_handler   = proc_dointvec
@@ -600,7 +600,7 @@ static struct ctl_table net_core_table[] = {
        },
        {
                .procname       = "netdev_budget_usecs",
-               .data           = &netdev_budget_usecs,
+               .data           = &net_hotdata.netdev_budget_usecs,
                .maxlen         = sizeof(unsigned int),
                .mode           = 0644,
                .proc_handler   = proc_dointvec_minmax,