Messages in this thread | | | Date | Mon, 31 Aug 2015 14:51:39 +0200 | From | Oleg Nesterov <> | Subject | Re: [PATCH] task_work: remove fifo ordering guarantee |
| |
On 08/31, Ingo Molnar wrote: > > * Oleg Nesterov <oleg@redhat.com> wrote: > > > On 08/29, Ingo Molnar wrote: > > > > > > So I'm wondering, is there any strong reason why we couldn't use a double linked > > > list and still do FIFO and remove that silly linear list walking hack? > > > > This will obviously enlarge callback_head, and it is often embedded. > > But this is minor. > > > > If we use a double linked list we can't do task_work_add() lockless. > > So we will need another spinlock_t in task_struct. We can't use pi_lock. > > The fact that the O(N) overhead was measured in real apps to be in the > milliseconds IMHO weakens cycle-level concerns about also having a spinlock next > to the list head. (There's no additional cacheline bouncing concerns with the > spinlock: the head of a LIFO list is essentially a bouncing cacheline.)
I agree. I just tried to explain that we need a bit more changes than just s/callback_head/list_head/ in task_struct.
And. The fact that this O(N) overhead was measured means that we have more overhead with offload-fput-to-exit_task_work which would be nice to remove as well.
Oleg.
| |