Re: [RFC][PATCH 0/3] sched: User Managed Concurrency Groups
From: Peter Zijlstra <peterz@infradead.org>
Date: 2021-12-15 10:45:18
Also in:
linux-api, lkml
From: Peter Zijlstra <peterz@infradead.org>
Date: 2021-12-15 10:45:18
Also in:
linux-api, lkml
On Tue, Dec 14, 2021 at 07:46:25PM -0800, Peter Oskolkov wrote:
Anyway, I'll test your patchset over the next week or so and let you know if anything really needed is missing (other than waking an idle server if there is one on a worker wakeup; this piece is definitely needed).
Right, so the problem I'm having is that a single idle server ptr like before can trivially miss waking annother idle server. Suppose: umcg::idle_server_tid_ptr Then the enqueue_and_wake() thing from the last patch would: idle_server_tid = xchg((pid_t __user *)self->idle_server_tid_ptr, 0); to consume the tid, and then use that to enqueue and wake. But what if a second wakeup happens right after that? There might be a second idle server, but we'll never find it, because userspace hasn't had time to update the field again. Alternatively, we do a linked list of servers, but then every such wakeup needs to iterate the whole list, looking for one that has UMCG_TF_IDLE set, or something like that, but that lookup is bad for performance. So I'm really not sure what way to go yet.