Re: [PATCH] timers: Exclude isolated cpus from timer migation

Frederic Weisbecker
2025-04-11T22:57:05Z

Le Fri, Apr 11, 2025 at 03:02:11PM +0200, Gabriele Monaco a écrit :
>
>
> On Fri, 2025-04-11 at 13:31 +0200, Frederic Weisbecker wrote:
> > Le Fri, Apr 11, 2025 at 09:08:35AM +0200, Gabriele Monaco a écrit :
> > > Mmh, my patch is in fact allowing isolated cores to still migrate
> > > everything if they go offline.
> >
> > Sure that doesn't change.
> >
> > >
> > > However I don't think housekeeping CPUs can execute remote timers
> > > on
> > > isolated ones.
> >
> > I'm confused, a CPU can't execute something on another CPU (except
> > with
> > an IPI). But:
> >
> > Before your patch, a housekeeping or isolated CPU can pull timers
> > from
> > any other CPU and execute them on its behalf.
> >
> > After your patch, a housekeeping CPU can only pull timers from other
> > housekeeping CPUs. And isolated CPUs each execute their own global
> > timers.
> >
>
> Right, the way I said it doesn't really make sense.
>
> What I mean is: why wouldn't a housekeeping CPU pull global timers from
> an isolated one?
>
> We want to prevent the other way around, but I think housekeeping
> should be encouraged to pull timers from isolated CPUs, even if those
> are not idle.
>
> I see only preventing isolated CPUs from pulling remote timers may play
> bad with the algorithm since they'd register in the hierarchy but just
> not pull timers.
> (This simpler approach works in our scenario though)
>
> The idea in my patch could mostly work, but I'd explicitly let
> housekeeping CPUs pull timers from isolated (while of course not doing
> it for offline ones).
>
> Does it make sense to you?

If you want housekeeping CPUs to pull timers from isolated ones, then you
need isolated CPUs to eventually be part of the hierarchy (be "available"),
because they would need to propagate their global timers up to the top.

If they propagate their global timers then they must play the whole hierarchy
game and be ready to pull the timers from any other CPUs.

Because if they propagate their timers, they must also propagate their
idle state to synchronize with the whole hierarchy and know if there is
a non-idle housekeeping CPU to take care of their timers. And if they propagate
their (non) idle state, the isolated CPUs also declare themselves as available
to handle other's timers.

And working around that would be very nasty.

--
Frederic Weisbecker
SUSE Labs