[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <45C02E74.2050401@yahoo.com.au>
Date: Wed, 31 Jan 2007 16:51:48 +1100
From: Nick Piggin <nickpiggin@...oo.com.au>
To: unlisted-recipients:; (no To-header on input)
CC: Linus Torvalds <torvalds@...ux-foundation.org>,
Benjamin Herrenschmidt <benh@...nel.crashing.org>,
Zach Brown <zach.brown@...cle.com>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
linux-aio@...ck.org, Suparna Bhattacharya <suparna@...ibm.com>,
Benjamin LaHaise <bcrl@...ck.org>, Ingo Molnar <mingo@...e.hu>
Subject: Re: [PATCH 0 of 4] Generic AIO by scheduling stacks
Nick Piggin wrote:
> Linus Torvalds wrote:
>
>>
>> On Wed, 31 Jan 2007, Benjamin Herrenschmidt wrote:
>>
>>
>>>> - We would now have some measure of task_struct concurrency. Read
>>>> that twice,
>>>> it's scary. As two fibrils execute and block in turn they'll each be
>>>> referencing current->. It means that we need to audit task_struct
>>>> to make sure
>>>> that paths can handle racing as its scheduled away. The current
>>>> implementation
>>>> *does not* let preemption trigger a fibril switch. So one only has
>>>> to worry
>>>> about racing with voluntary scheduling of the fibril paths. This
>>>> can mean
>>>> moving some task_struct members under an accessor that hides them in
>>>> a struct
>>>> in task_struct so they're switched along with the fibril. I think
>>>> this is a
>>>> manageable burden.
>>>
>>>
>>> That's the one scaring me in fact ... Maybe it will end up being an easy
>>> one but I don't feel too comfortable...
>>
>>
>>
>> We actually have almost zero "interesting" data in the task-struct.
>>
>> All the real meat of a task has long since been split up into
>> structures that can be shared for threading anyway (ie
>> signal/files/mm/etc).
>>
>> Which is why I'm personally very comfy with just re-using task_struct
>> as-is.
>>
>> NOTE! This is with the understanding that we *never* do any
>> preemption. The whole point of the microthreading as far as I'm
>> concerned is exactly that it is cooperative. It's not preemptive, and
>> it's emphatically *not* concurrent (ie you'd never have two fibrils
>> running at the same time on separate CPU's).
>
>
> So using stacks to hold state is (IMO) the logical choice to do async
> syscalls, especially once you have a look at some of the other AIO
> stuff going around.
>
> I always thought that the AIO people didn't do this because they wanted
> to avoid context switch overhead.
>
> So now if we introduce the context switch overhead back, why do we need
> just another scheduling primitive? What's so bad about using threads? The
> upside is that almost everything is already there and working, and also
> they don't have any of these preemption or concurrency restrictions.
In other words, while I share the appreciation for this clever trick of
using cooperative switching between these little thriblets, I don't
actually feel it is very elegant to then have to change the kernel so
much in order to handle them.
I would be fascinated to see where such a big advantage comes from using
these rather than threads. Maybe we can then improve threads not to suck
so much and everybody wins.
--
SUSE Labs, Novell Inc.
Send instant messages to your online friends http://au.messenger.yahoo.com
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists