Commit a6fd1614 authored by Yafang Shao's avatar Yafang Shao Committed by Peter Zijlstra
Browse files

sched, psi: Don't account irq time if sched_clock_irqtime is disabled



sched_clock_irqtime may be disabled due to the clock source. When disabled,
irq_time_read() won't change over time, so there is nothing to account. We
can save iterating the whole hierarchy on every tick and context switch.

Signed-off-by: default avatarYafang Shao <laoar.shao@gmail.com>
Signed-off-by: default avatarYafang Shao <laoar.shao@gmail.com>
Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Reviewed-by: default avatarMichal Koutný <mkoutny@suse.com>
Acked-by: default avatarJohannes Weiner <hannes@cmpxchg.org>
Link: https://lore.kernel.org/r/20250103022409.2544-4-laoar.shao@gmail.com
parent 763a744e
Loading
Loading
Loading
Loading
+6 −1
Original line number Diff line number Diff line
@@ -998,7 +998,7 @@ void psi_account_irqtime(struct rq *rq, struct task_struct *curr, struct task_st
	s64 delta;
	u64 irq;

	if (static_branch_likely(&psi_disabled))
	if (static_branch_likely(&psi_disabled) || !irqtime_enabled())
		return;

	if (!curr->pid)
@@ -1240,6 +1240,11 @@ int psi_show(struct seq_file *m, struct psi_group *group, enum psi_res res)
	if (static_branch_likely(&psi_disabled))
		return -EOPNOTSUPP;

#ifdef CONFIG_IRQ_TIME_ACCOUNTING
	if (!irqtime_enabled() && res == PSI_IRQ)
		return -EOPNOTSUPP;
#endif

	/* Update averages before reporting them */
	mutex_lock(&group->avgs_lock);
	now = sched_clock();