2021-06-24 08:34:04

by Jisheng Zhang

[permalink] [raw]
Subject: [PATCH v2] timer: Use static_branch_likely() for timers_nohz_active

The static key timers_nohz_active is likely to be true, so use
static_branch_likely() to reflect this fact.

Per include/linux/jump_label.h:

* type\branch| likely (1) | unlikely (0)
* -----------+-----------------------+------------------
* | |
* true (1) | ... | ...
* | NOP | JMP L
* | <br-stmts> | 1: ...
* | L: ... |
* | |
* | | L: <br-stmts>
* | | jmp 1b
* | |
* -----------+-----------------------+------------------

This could improve the finally generated code a bit for the most likely
scenario, I.E save two "jmp" instructions.

Signed-off-by: Jisheng Zhang <[email protected]>
---
Since v1:
- update the commit msg to avoid confusing and add some descriptions about
where's the improvement from.

kernel/time/timer.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/time/timer.c b/kernel/time/timer.c
index d111adf4a0cb..40d4fe7fa207 100644
--- a/kernel/time/timer.c
+++ b/kernel/time/timer.c
@@ -265,7 +265,7 @@ int timer_migration_handler(struct ctl_table *table, int write,

static inline bool is_timers_nohz_active(void)
{
- return static_branch_unlikely(&timers_nohz_active);
+ return static_branch_likely(&timers_nohz_active);
}
#else
static inline bool is_timers_nohz_active(void) { return false; }
--
2.31.0


2021-08-10 16:47:32

by Thomas Gleixner

[permalink] [raw]
Subject: Re: [PATCH v2] timer: Use static_branch_likely() for timers_nohz_active

Jisheng,

On Thu, Jun 24 2021 at 16:32, Jisheng Zhang wrote:

> The static key timers_nohz_active is likely to be true, so use
> static_branch_likely() to reflect this fact.

you still lack any justification for your statement that NOHZ active is
likely.

It might be likely for your system, but is this true in general?

Thanks,

tglx

2021-08-20 10:21:08

by Jisheng Zhang

[permalink] [raw]
Subject: Re: [PATCH v2] timer: Use static_branch_likely() for timers_nohz_active

On Tue, 10 Aug 2021 18:00:16 +0200 Thomas Gleixner wrote:

>
>
> Jisheng,

Hi Thomas,

>
> On Thu, Jun 24 2021 at 16:32, Jisheng Zhang wrote:
>
> > The static key timers_nohz_active is likely to be true, so use
> > static_branch_likely() to reflect this fact.
>
> you still lack any justification for your statement that NOHZ active is
> likely.

This patch only affects NO_HZ_COMMON=y code path which is enabled if either
NO_HZ_IDLE or NO_HZ_FULL = y.
Per my understanding, when the system has oneshot tick device, NOHZ active
is likely true. After going through drivers/clocksource/*, I found there are
about 86 drivers, 69(occupies 80%) of which support CLOCK_EVT_FEAT_ONESHOT.
Then I browsed apic, hpet and xen timer source code in x86 directory, they
all support oneshot feature.

I'm not sure whether I misunderstood the code or not.

Thanks

>
> It might be likely for your system, but is this true in general?
>