[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <Pine.LNX.4.64.0702051147100.14453@alien.or.mcafeemobile.com>
Date: Mon, 5 Feb 2007 12:10:02 -0800 (PST)
From: Davide Libenzi <davidel@...ilserver.org>
To: Zach Brown <zach.brown@...cle.com>
cc: Ingo Molnar <mingo@...e.hu>,
Linus Torvalds <torvalds@...ux-foundation.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
linux-aio@...ck.org, Suparna Bhattacharya <suparna@...ibm.com>,
Benjamin LaHaise <bcrl@...ck.org>
Subject: Re: [PATCH 2 of 4] Introduce i386 fibril scheduling
On Mon, 5 Feb 2007, Zach Brown wrote:
> > The "result" of one async operation is basically a cookie and a result
> > code. Eight or sixteen bytes at most.
>
> s/basically/minimally/
>
> Well, yeah. The patches I sent had:
>
> struct asys_completion {
> long return_code;
> unsigned long cookie;
> };
>
> That's as stupid as it gets.
No, that's *really* it ;)
The cookie you pass, and the return code of the syscall.
If there other data transfered? Sure, but that data transfered during the
syscall processing, and handled by the syscall (filling up a sys_read
buffer just for example).
> > IMO, before going wacko designing
> > complex shared userspace-kernel result buffers, I think it'd be better
> > measuring the worth-value of the thing ;)
>
> Obviously, yes.
>
> The potential win is to be able to have one place to wait for collection from
> multiple sources. Some of them might want more data per event. They can
> always indirect out via a cookie pointer, sure, but at insanely high message
> rates (10gige small messages) one might not want that.
Did I miss something? The async() syscall will allow (with few
restrictions) to execute whatever syscall in an async fashion. An syscall
returns a result code (long). Plus, you need to pass back the
userspace-provided cookie of course. A cookie is very likely a direct
pointer to the userspace session the async syscall applies to, so a
"(my_session *) results[i].cookie" will bring you directly on topic.
Collection of multiple sources? What do you mean? What's wrong with:
int async_wait(struct asys_completion *results, int nresults);
Is saving an 8/16 bytes double copy worth going wacko in designing shared
userspace/kernel buffers, when the syscall that lays behind an
asys_completion is prolly touching KBs of RAM during its execution?
- Davide
-
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