On Wed, 28 Feb 2007, Linus Torvalds wrote: > On Wed, 28 Feb 2007, Davide Libenzi wrote: > > > > At this point, given how threadlets can be easily/effectively dispatched > > from userspace, I'd argue the presence of either single/parallel or syslet > > submission altogether. Threadlets allows you to code chains *way* more > > naturally than syslets, and since they basically are like functions calls > > in the fast path, they can be used even for single/parallel submissions. > > Well, I agree, except for one thing: > - user space execution is *inherently* more expensive. > > Why? Stack. Stack. Stack. > > If you support threadlets with user space code, it means that you need a > separate user-space stack for each threadlet. That's a potentially *big* > cost to bear, both from a setup standpoint and from simply a memory > allocation standpoint.
Right, point taken. > In short - the only thing I *don't* think is a great idea are those linked > lists of atoms. I still think it's a pretty horrible interface, and I > still don't think it really buys us very much. The only way it would buy > us a lot is to change the linked lists dynamically (ie add new events at > the end while old events are still executing), but quite frankly, that > just makes the whole interface *even*worse* and just makes me have > debugging nightmares (I'm also not even convinced it really would help > us: we might avoid some costs of adding new events, but it would only > avoid them for serial execution, and if the whole point of this is to > execute things in parallel, that's a stupid thing to do). > > So I would repeat my call for getting rid of the atoms, and instead just > do a "single submission" at a time. Do the linking by running a threadlet > that has user space code (and the stack overhead), which is MUCH more > flexible. And do nonlinked single system calls without *either* atoms *or* > a user-space stack footprint. Here we very much agree. The way I'd like it: struct async_syscall { unsigned long nr_sysc; unsigned long params[8]; long result; }; int async_exec(struct async_syscall *a, int n); or: int async_exec(struct async_syscall **a, int n); At this point I'm ok even with the userspace ring buffer, returning back pointers to "struct async_syscall". - Davide - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to [EMAIL PROTECTED] More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/