Messages in this thread Patch in this message |  | | Date | Sat, 3 Dec 2022 16:12:05 +0800 (CST) | From | <> | Subject | [PATCH linux-next] net: record times of netdev budget exhausted |
| |
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
|  |