Commit f9ed1f7c authored by David Wang's avatar David Wang Committed by Thomas Gleixner
Browse files

genirq/proc: Use seq_put_decimal_ull_width() for decimal values



seq_printf() is more expensive than seq_put_decimal_ull_width() due to the
format string parsing costs.

Profiling on a x86 8-core system indicates seq_printf() takes ~47% samples
of show_interrupts(). Replacing it with seq_put_decimal_ull_width() yields
almost 30% performance gain.

[ tglx: Massaged changelog and fixed up coding style ]

Signed-off-by: default avatarDavid Wang <00107082@163.com>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: https://lore.kernel.org/all/20241108160717.9547-1-00107082@163.com
parent 49a17639
Loading
Loading
Loading
Loading
+6 −3
Original line number Diff line number Diff line
@@ -496,8 +496,11 @@ int show_interrupts(struct seq_file *p, void *v)
		goto outsparse;

	seq_printf(p, "%*d:", prec, i);
	for_each_online_cpu(j)
		seq_printf(p, "%10u ", desc->kstat_irqs ? per_cpu(desc->kstat_irqs->cnt, j) : 0);
	for_each_online_cpu(j) {
		unsigned int cnt = desc->kstat_irqs ? per_cpu(desc->kstat_irqs->cnt, j) : 0;

		seq_put_decimal_ull_width(p, " ", cnt, 10);
	}

	raw_spin_lock_irqsave(&desc->lock, flags);
	if (desc->irq_data.chip) {