netdev.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH linux-next] net: record times of netdev_budget exhausted
@ 2022-12-03  8:12 yang.yang29
  2022-12-03 10:06 ` kernel test robot
                   ` (3 more replies)
  0 siblings, 4 replies; 16+ messages in thread
From: yang.yang29 @ 2022-12-03  8:12 UTC (permalink / raw)
  To: davem, edumazet, kuba
  Cc: pabeni, bigeasy, imagedong, kuniyu, petrm, liu3101, wujianguo,
	netdev, linux-kernel

From: Yang Yang <yang.yang29@zte.com>

A long time ago time_squeeze was used to only record netdev_budget
exhausted[1]. Then we added netdev_budget_usecs to enable softirq
tuning[2]. And when polling elapsed netdev_budget_usecs, it's also
record by time_squeeze.
For tuning netdev_budget and netdev_budget_usecs respectively, we'd
better distinguish netdev_budget exhausted from netdev_budget_usecs
elapsed, so add a new recorder to record netdev_budget exhausted.

[1] commit 1da177e4c3f4("Linux-2.6.12-rc2")
[2] commit 7acf8a1e8a28("Replace 2 jiffies with sysctl netdev_budget_usecs to enable softirq tuning")

Signed-off-by: Yang Yang <yang.yang29@zte.com>
---
 include/linux/netdevice.h |  1 +
 net/core/dev.c            | 11 +++++++----
 net/core/net-procfs.c     |  5 +++--
 3 files changed, 11 insertions(+), 6 deletions(-)

diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 5aa35c58c342..a77719b956a6 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -3135,6 +3135,7 @@ struct softnet_data {
 	/* stats */
 	unsigned int		processed;
 	unsigned int		time_squeeze;
+	unsigned int		budget_exhaust;
 #ifdef CONFIG_RPS
 	struct softnet_data	*rps_ipi_list;
 #endif
diff --git a/net/core/dev.c b/net/core/dev.c
index 7627c475d991..42ae2dc62661 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -6663,11 +6663,14 @@ static __latent_entropy void net_rx_action(struct softirq_action *h)
 		budget -= napi_poll(n, &repoll);

 		/* If softirq window is exhausted then punt.
-		 * Allow this to run for 2 jiffies since which will allow
-		 * an average latency of 1.5/HZ.
+		 * The window is controlled by time and packet budget.
+		 * See Documentation/admin-guide/sysctl/net.rst for details.
 		 */
-		if (unlikely(budget <= 0 ||
-			     time_after_eq(jiffies, time_limit))) {
+		if (unlikely(budget <= 0)) {
+			sd->budget_exhaust++;
+			break;
+		}
+		if (unlikely(time_after_eq(jiffies, time_limit))) {
 			sd->time_squeeze++;
 			break;
 		}
diff --git a/net/core/net-procfs.c b/net/core/net-procfs.c
index 1ec23bf8b05c..e09e245125f0 100644
--- a/net/core/net-procfs.c
+++ b/net/core/net-procfs.c
@@ -169,12 +169,13 @@ static int softnet_seq_show(struct seq_file *seq, void *v)
 	 * mapping the data a specific CPU
 	 */
 	seq_printf(seq,
-		   "%08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x\n",
+		   "%08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x %08x\n",
 		   sd->processed, sd->dropped, sd->time_squeeze, 0,
 		   0, 0, 0, 0, /* was fastroute */
 		   0,	/* was cpu_collision */
 		   sd->received_rps, flow_limit_count,
-		   softnet_backlog_len(sd), (int)seq->index);
+		   softnet_backlog_len(sd), (int)seq->index
+		   sd->budget_exhaust);
 	return 0;
 }

-- 
2.15.2

^ permalink raw reply related	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2022-12-08  1:42 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2022-12-03  8:12 [PATCH linux-next] net: record times of netdev_budget exhausted yang.yang29
2022-12-03 10:06 ` kernel test robot
2022-12-03 16:50 ` kernel test robot
2022-12-03 16:50 ` kernel test robot
2022-12-06  1:53 ` Jakub Kicinski
2022-12-06  2:35   ` yang.yang29
2022-12-06  2:47     ` Jakub Kicinski
2022-12-07  7:27       ` yang.yang29
2022-12-07  7:58         ` Eric Dumazet
2022-12-07  8:17           ` yang.yang29
2022-12-07 23:28             ` Jakub Kicinski
2022-12-07 12:30           ` yang.yang29
2022-12-07 23:32             ` Jakub Kicinski
2022-12-08  1:12               ` yang.yang29
2022-12-08  1:23                 ` Jakub Kicinski
2022-12-08  1:42                   ` yang.yang29

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).