From: Shrikanth Hegde <sshegde@linux.ibm.com>
To: Thomas Gleixner <tglx@kernel.org>, LKML <linux-kernel@vger.kernel.org>
Cc: x86@kernel.org, Michael Kelley <mhklinux@outlook.com>,
Dmitry Ilvokhin <d@ilvokhin.com>, Radu Rendec <radu@rendec.net>,
Jan Kiszka <jan.kiszka@siemens.com>,
Kieran Bingham <kbingham@kernel.org>,
Florian Fainelli <florian.fainelli@broadcom.com>,
Marc Zyngier <maz@kernel.org>
Subject: Re: [patch V6 00/16] Improve /proc/interrupts further
Date: Thu, 21 May 2026 20:18:46 +0530 [thread overview]
Message-ID: <a7e167f0-22e7-4c0e-85f9-294d0a9e3a22@linux.ibm.com> (raw)
In-Reply-To: <87jysxw65f.ffs@tglx>
On 5/21/26 1:23 PM, Thomas Gleixner wrote:
>>> Shrikanth!
>
> On Thu, May 21 2026 at 10:04, Shrikanth Hegde wrote:
>> On 5/20/26 8:57 PM, Thomas Gleixner wrote:
>>> Can you redirect it to /dev/null instead to take the file operations out
>>> of the picture?
>>
>> Yes. Did "perf stat -r 1000 cat /proc/interrupts > /dev/null".
>> It shows better improvement with the series compared to file write.
>
> Unsurprisingly :)
>
>>>> 0.000490211 +- 0.000000992 seconds time elapsed ( +- 0.20% ) <<< 3-4% improvements.
>>>
>>> Again IPC drops ....
>>
>> Yes. IPC dropping is consistent. I see the same trend in (PATCH 1/16) in the series.
>> Copying that snippet below.
>>
>> Before:
>> 8,932,242 instructions # 1.66 insn per cycle ( +- 0.34% )
>> After:
>> 7,020,982 instructions # 1.30 insn per cycle ( +- 0.52% )
>>
>> So it might be common pattern across archs. Maybe perf stat subsystem is slow
>> enough it doesn't shows the aboslute benefit.
>
> The problem is that the overhead of starting and tearing down 'cat' is
> accounted as well. That's constant, obviously.
>
> But for the use cases like irqbalanced or similar things, there is no
> startup/teardown cost involved. The process is up and running and they
> care about the actual read performance.
>
true.
> It's clearly to observe by comparing the perf data with the read loop
> timing data:
>
> Base line v6
> Perf 3072.21 us 1564.40 us
> Loop 1310.36 us 209.90 us
>
> It doesn't add up completely, but the trend is there. And you can trick
> perf to reveal the startup/teardown overhead it by comparing:
>
> perf stat -r 1000 head -q -c -0 /proc/interrupts >/dev/null
> perf stat -r 1000 head -q -c 0 /proc/interrupts >/dev/null
>
Tried it, but doesn't affect much.
>> In addition, I ran "perf stat -a -r 1000 cat /proc/interrupts > /dev/null"
>> It is now 10x slower. IPC is same with series And improvement vanishes.
>> So heavier the infra testing it, gains are getting minimal i guess.
>
> As often :)
>
>> But i don't see any regression.
>>
>> As you said in the cover-letter, the micro loops you ran maybe the best way to evaluate it.
>> If you have the code in shareable form, I can give it a try.
>
> See below. I thought I would come around some day to actually use perf
> directly in the test program, but that never happened due to
> -ENOTIME.
>
> Thanks,
>
> tglx
> ---
> #include <fcntl.h>
> #include <math.h>
> #include <stdio.h>
> #include <time.h>
> #include <unistd.h>
>
> static char buf[1024*1024];
>
> #define NSECS_PER_SEC (1000L * 1000L * 1000L)
>
> #define LOOPS 1000
>
> static float td[LOOPS];
>
> int main(int argc, char *argv[])
> {
> int fd = open("/proc/interrupts", O_RDONLY);
> long tsum = 0, rs = 0;
>
> for (int i = 0; i < LOOPS; i++) {
> long r;
>
> do {
> r = read(fd, buf, sizeof(buf));
> } while (r);
> lseek(fd, 0, 0);
> }
>
> for (int i = 0; i < LOOPS; i++) {
> struct timespec t0, t1;
> unsigned long delta;
> long r;
>
> clock_gettime(CLOCK_MONOTONIC, &t0);
> do {
> r = read(fd, buf, sizeof(buf));
> rs += r;
> } while (r);
> clock_gettime(CLOCK_MONOTONIC, &t1);
>
> delta = t1.tv_nsec + t1.tv_sec * NSECS_PER_SEC;
> delta -= t0.tv_nsec + t0.tv_sec * NSECS_PER_SEC;
> tsum += delta;
> td[i] = delta * 1.0;
>
> lseek(fd, 0, 0);
> }
>
> float mean = tsum / LOOPS;
> float calc = 0;
>
> for (int i = 0; i < LOOPS; i++) {
> float tmp = td[i] - mean;
>
> calc += tmp * tmp;
> }
>
> calc /= LOOPS;
>
> float std = sqrt(calc * 1.0);
>
> printf("%lu %lu %5.3f\n", tsum / LOOPS, rs / LOOPS, (std / mean) * 100.0);
> return 0;
> }
This shows real benefits indeed.
base v6 v6+ppc_hack
101us 65us 57us
So doing a proper powerpc fix indeed would make sense.
I think it is going to be similar. Let me go and read your
series again.
For the genirq bits of the series, consider the tag if applicable
Tested-by: Shrikanth Hegde <sshegde@linux.ibm.com>
next prev parent reply other threads:[~2026-05-21 14:49 UTC|newest]
Thread overview: 47+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-17 20:01 Thomas Gleixner
2026-05-17 20:01 ` [patch V6 01/16] x86/irq: Optimize interrupts decimals printing Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Dmitry Ilvokhin
2026-05-17 20:01 ` [patch V6 02/16] genirq/proc: Avoid formatting zero counts in /proc/interrupts Thomas Gleixner
2026-05-19 21:24 ` Shrikanth Hegde
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-17 20:01 ` [patch V6 03/16] genirq/proc: Utilize irq_desc::tot_count to avoid evaluation Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-17 20:01 ` [patch V6 04/16] x86/irq: Make irqstats array based Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-30 9:36 ` [patch V6 04/16] " Dan Carpenter
2026-05-17 20:01 ` [patch V6 05/16] x86/irq: Suppress unlikely interrupt stats by default Thomas Gleixner
2026-05-21 15:52 ` Shrikanth Hegde
2026-05-21 20:46 ` Thomas Gleixner
2026-05-23 17:48 ` Shrikanth Hegde
2026-05-24 12:37 ` Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-17 20:01 ` [patch V6 06/16] x86/irq: Move IOAPIC misrouted and PIC/APIC error counts into irq_stats Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-17 20:02 ` [patch V6 07/16] scripts/gdb: Update x86 interrupts to the array based storage Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-17 20:02 ` [patch V6 08/16] genirq: Expose nr_irqs in core code Thomas Gleixner
2026-05-19 21:29 ` Shrikanth Hegde
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-17 20:02 ` [patch V6 09/16] genirq/manage: Make NMI cleanup RT safe Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-17 20:02 ` [patch V6 10/16] genirq: Cache the condition for /proc/interrupts exposure Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-17 20:02 ` [patch V6 11/16] genirq: Calculate precision only when required Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-17 20:02 ` [patch V6 12/16] genirq/proc: Increase default interrupt number precision to four Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-17 20:02 ` [patch V6 13/16] genirq: Add rcuref count to struct irq_desc Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-17 20:02 ` [patch V6 14/16] genirq: Expose irq_find_desc_at_or_after() in core code Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-17 20:02 ` [patch V6 15/16] genirq/proc: Runtime size the chip name Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-17 20:02 ` [patch V6 16/16] genirq/proc: Speed up /proc/interrupts iteration Thomas Gleixner
2026-05-26 14:22 ` [tip: irq/core] " tip-bot2 for Thomas Gleixner
2026-05-18 3:54 ` [patch V6 00/16] Improve /proc/interrupts further mhklkml
2026-05-19 21:18 ` Shrikanth Hegde
2026-05-20 15:27 ` Thomas Gleixner
2026-05-21 4:34 ` Shrikanth Hegde
2026-05-21 7:53 ` Thomas Gleixner
2026-05-21 14:48 ` Shrikanth Hegde [this message]
2026-05-21 21:07 ` Thomas Gleixner
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=a7e167f0-22e7-4c0e-85f9-294d0a9e3a22@linux.ibm.com \
--to=sshegde@linux.ibm.com \
--cc=d@ilvokhin.com \
--cc=florian.fainelli@broadcom.com \
--cc=jan.kiszka@siemens.com \
--cc=kbingham@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=maz@kernel.org \
--cc=mhklinux@outlook.com \
--cc=radu@rendec.net \
--cc=tglx@kernel.org \
--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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
Powered by JetHome