Le Thu, Apr 10, 2025 at 04:46:06PM +0200, Thomas Gleixner a écrit :In some of the actual customer use cases that I have seen, both "nohz_full" and "isolcpus" are set to the same set of CPUs to achieve maximum isolation. isolcpus have domain and managed_irq that are not covered by nohz_full. As isolcpus=nohz has been extended to be equivalent to nohz_full, users can now just use "isolcpus" to achieve that maximum CPU isolation.
On Thu, Apr 10 2025 at 16:20, Frederic Weisbecker wrote:Fair point.
Le Thu, Apr 10, 2025 at 03:56:02PM +0200, Gabriele Monaco a écrit :Which is true for the remote enqueue path too. But you inflict the
On Thu, 2025-04-10 at 15:27 +0200, Frederic Weisbecker wrote:That's the "easy" part.
But how do we handle global timers that have been initialized andI need to sketch a bit more the solution but the rough idea is:
queued from
isolated CPUs?
1. isolated CPUs don't pull remote timers
2. isolated CPUs ignore their global timers and let others pull themThis will always involve added overhead because you may need to wake up
perhaps with some more logic to avoid it expiring
a CPU upon enqueueing a global timer to make sure it will be handled.
At least when all other CPUs are idle.
handling of this muck into the generic enqueue path as you have to turn
a 'global' timer into a remote timer right in the hot path.
When you enqueue it in the regular way on the 'global' list, then youIf you're referring to nohz_full, it's not a problem there because
can delegate the expiry to a remote CPU on return to user, no?
it's already considered as an idle CPU.
But for isolcpus alone that notification is necessary. I'm not sure
if return to user is the best place. I hear that some kernel threads
can spend a lot of time doing things...
But to begin with, is this all really necessary for isolcpus users?