From: Boqun Feng <boqun.feng@gmail.com>
To: Yongliang Gao <leonylgao@gmail.com>
Cc: Neeraj.Upadhyay@amd.com, paulmck@kernel.org, frederic@kernel.org,
thunder.leizhen@huawei.com, frankjpliu@tencent.com,
kernelxing@tencent.com, rcu@vger.kernel.org,
linux-kernel@vger.kernel.org,
Yongliang Gao <leonylgao@tencent.com>,
kernel test robot <lkp@intel.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>,
x86@kernel.org, "H. Peter Anvin" <hpa@zytor.com>
Subject: Re: [PATCH v3] rcu/cpu_stall_cputime: fix the hardirq count for x86 architecture
Date: Sun, 16 Feb 2025 18:29:54 -0800 [thread overview]
Message-ID: <Z7KfIm9c4WCpm0wR@Mac.home> (raw)
In-Reply-To: <20250216084109.3109837-1-leonylgao@gmail.com>
Hi Yongliang,
On Sun, Feb 16, 2025 at 04:41:09PM +0800, Yongliang Gao wrote:
> From: Yongliang Gao <leonylgao@tencent.com>
>
> When counting the number of hardirqs in the x86 architecture,
> it is essential to add arch_irq_stat_cpu to ensure accuracy.
>
> For example, a CPU loop within the rcu_read_lock function.
>
> Before:
> [ 70.910184] rcu: INFO: rcu_preempt self-detected stall on CPU
> [ 70.910436] rcu: 3-....: (4999 ticks this GP) idle=***
> [ 70.910711] rcu: hardirqs softirqs csw/system
> [ 70.910870] rcu: number: 0 657 0
> [ 70.911024] rcu: cputime: 0 0 2498 ==> 2498(ms)
> [ 70.911278] rcu: (t=5001 jiffies g=3677 q=29 ncpus=8)
>
> After:
> [ 68.046132] rcu: INFO: rcu_preempt self-detected stall on CPU
> [ 68.046354] rcu: 2-....: (4999 ticks this GP) idle=***
> [ 68.046628] rcu: hardirqs softirqs csw/system
> [ 68.046793] rcu: number: 2498 663 0
> [ 68.046951] rcu: cputime: 0 0 2496 ==> 2496(ms)
> [ 68.047244] rcu: (t=5000 jiffies g=3825 q=4 ncpus=8)
>
> Fixes: be42f00b73a0 ("rcu: Add RCU stall diagnosis information")
> Reported-by: kernel test robot <lkp@intel.com>
> Closes: https://lore.kernel.org/oe-kbuild-all/202501090842.SfI6QPGS-lkp@intel.com/
> Signed-off-by: Yongliang Gao <leonylgao@tencent.com>
> Reviewed-by: Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>
>
Thank you for the patch, I have one minor question to x86 maintainers
(Cced): does it make sense to fold the sum of arch_irq_stat_cpu() into
kstat_cpu_irqs_sum()?
Regards,
Boqun
> ---
> Changes from v2:
> - Add Reviewed-by 'Neeraj Upadhyay' information
> - Link to v2: https://lore.kernel.org/all/20250109024652.1342595-1-leonylgao@gmail.com
> Changes from v1:
> - Fix compilation error when using arm64-allnoconfig/riscv-randconfig. [kernel test robot]
> - Link to v1: https://lore.kernel.org/r/20250108065716.2888148-1-leonylgao%40gmail.com
> ---
> ---
> kernel/rcu/tree.c | 10 +++++++---
> kernel/rcu/tree.h | 2 +-
> kernel/rcu/tree_stall.h | 4 ++--
> 3 files changed, 10 insertions(+), 6 deletions(-)
>
> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> index 475f31deed14..a0dab5923d03 100644
> --- a/kernel/rcu/tree.c
> +++ b/kernel/rcu/tree.c
> @@ -781,6 +781,10 @@ static int rcu_watching_snap_save(struct rcu_data *rdp)
> return 0;
> }
>
> +#ifndef arch_irq_stat_cpu
> +#define arch_irq_stat_cpu(cpu) 0
> +#endif
> +
> /*
> * Returns positive if the specified CPU has passed through a quiescent state
> * by virtue of being in or having passed through an dynticks idle state since
> @@ -916,9 +920,9 @@ static int rcu_watching_snap_recheck(struct rcu_data *rdp)
> rsrp->cputime_irq = kcpustat_field(kcsp, CPUTIME_IRQ, cpu);
> rsrp->cputime_softirq = kcpustat_field(kcsp, CPUTIME_SOFTIRQ, cpu);
> rsrp->cputime_system = kcpustat_field(kcsp, CPUTIME_SYSTEM, cpu);
> - rsrp->nr_hardirqs = kstat_cpu_irqs_sum(rdp->cpu);
> - rsrp->nr_softirqs = kstat_cpu_softirqs_sum(rdp->cpu);
> - rsrp->nr_csw = nr_context_switches_cpu(rdp->cpu);
> + rsrp->nr_hardirqs = kstat_cpu_irqs_sum(cpu) + arch_irq_stat_cpu(cpu);
> + rsrp->nr_softirqs = kstat_cpu_softirqs_sum(cpu);
> + rsrp->nr_csw = nr_context_switches_cpu(cpu);
> rsrp->jiffies = jiffies;
> rsrp->gp_seq = rdp->gp_seq;
> }
> diff --git a/kernel/rcu/tree.h b/kernel/rcu/tree.h
> index a9a811d9d7a3..1bba2225e744 100644
> --- a/kernel/rcu/tree.h
> +++ b/kernel/rcu/tree.h
> @@ -168,7 +168,7 @@ struct rcu_snap_record {
> u64 cputime_irq; /* Accumulated cputime of hard irqs */
> u64 cputime_softirq;/* Accumulated cputime of soft irqs */
> u64 cputime_system; /* Accumulated cputime of kernel tasks */
> - unsigned long nr_hardirqs; /* Accumulated number of hard irqs */
> + u64 nr_hardirqs; /* Accumulated number of hard irqs */
> unsigned int nr_softirqs; /* Accumulated number of soft irqs */
> unsigned long long nr_csw; /* Accumulated number of task switches */
> unsigned long jiffies; /* Track jiffies value */
> diff --git a/kernel/rcu/tree_stall.h b/kernel/rcu/tree_stall.h
> index 925fcdad5dea..56b21219442b 100644
> --- a/kernel/rcu/tree_stall.h
> +++ b/kernel/rcu/tree_stall.h
> @@ -435,8 +435,8 @@ static void print_cpu_stat_info(int cpu)
> rsr.cputime_system = kcpustat_field(kcsp, CPUTIME_SYSTEM, cpu);
>
> pr_err("\t hardirqs softirqs csw/system\n");
> - pr_err("\t number: %8ld %10d %12lld\n",
> - kstat_cpu_irqs_sum(cpu) - rsrp->nr_hardirqs,
> + pr_err("\t number: %8lld %10d %12lld\n",
> + kstat_cpu_irqs_sum(cpu) + arch_irq_stat_cpu(cpu) - rsrp->nr_hardirqs,
> kstat_cpu_softirqs_sum(cpu) - rsrp->nr_softirqs,
> nr_context_switches_cpu(cpu) - rsrp->nr_csw);
> pr_err("\tcputime: %8lld %10lld %12lld ==> %d(ms)\n",
> --
> 2.39.3
>
>
next prev parent reply other threads:[~2025-02-17 2:29 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-02-16 8:41 [PATCH v3] rcu/cpu_stall_cputime: fix the hardirq count for x86 architecture Yongliang Gao
2025-02-17 2:29 ` Boqun Feng [this message]
2025-03-05 16:43 ` Boqun Feng
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z7KfIm9c4WCpm0wR@Mac.home \
--to=boqun.feng@gmail.com \
--cc=Neeraj.Upadhyay@amd.com \
--cc=bp@alien8.de \
--cc=dave.hansen@linux.intel.com \
--cc=frankjpliu@tencent.com \
--cc=frederic@kernel.org \
--cc=hpa@zytor.com \
--cc=kernelxing@tencent.com \
--cc=leonylgao@gmail.com \
--cc=leonylgao@tencent.com \
--cc=linux-kernel@vger.kernel.org \
--cc=lkp@intel.com \
--cc=mingo@redhat.com \
--cc=paulmck@kernel.org \
--cc=rcu@vger.kernel.org \
--cc=tglx@linutronix.de \
--cc=thunder.leizhen@huawei.com \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.