From: Ingo Molnar <mingo@elte.hu>
To: "Kevin O'Connor" <kevin@koconnor.net>
Cc: linux-kernel@vger.kernel.org,
Linus Torvalds <torvalds@linux-foundation.org>,
Arjan van de Ven <arjan@infradead.org>,
Christoph Hellwig <hch@infradead.org>,
Andrew Morton <akpm@zip.com.au>,
Alan Cox <alan@lxorguk.ukuu.org.uk>,
Ulrich Drepper <drepper@redhat.com>,
Zach Brown <zach.bro@NONE.mta.everyone.net>
Subject: Re: [patch 02/12] syslets: add syslet.h include file, user API/ABI definitions
Date: Thu, 1 Mar 2007 10:18:40 +0100 [thread overview]
Message-ID: <20070301091840.GA3313@elte.hu> (raw)
In-Reply-To: <20070301030533.GA26381@double.lan>
* Kevin O'Connor <kevin@koconnor.net> wrote:
> I'd like to propose a simpler userspace API for syslets. I believe
> this revised API is just as capable as yours (anything done purely in
> kernel space with the existing API can also be done with this one).
>
> An "atom" would look like:
>
> struct syslet_uatom {
> u32 nr;
> u64 ret_ptr;
> u64 next;
> u64 arg_nr;
> u64 args[6];
> };
>
> The sys_nr, ret_ptr, and next fields would be unchanged. The args
> array would directly store the arguments to the system call. To
> optimize the case where only a few arguments are necessary, an
> explicit argument count would be set in the arg_nr field.
i dont see the advantage of arg_nr - if the arguments are direct then
the best way is to just fetch them all, not to do testing upon arg_nr.
Furthermore, regarding the indirect pointers, they are quite essential
for some uses, see:
http://lkml.org/lkml/2007/2/28/292
> Of course, the above lacks the syscall return testing capabilities in
> your atoms. To obtain that capability, one could add a new syscall:
>
> long sys_syslet_helper(long flags, long *ptr, long inc, u64 new_next)
yes. But a 'flags' field is handy anyway, to signal things like
NOCOMPLETE or SYSLET_SYNC/SYSLET_ASYNC (a flags field is always useful
in such structures). So the condition testing comes 'for free' in
essence.
but ... as you can see it with sys_umem_add(), i like the addition of
helper syscalls - i just think that this particular one wouldnt be too
helpful.
> I would also change the event ring notification system. Instead of
> building that support into all syslets, one could introduce an "add to
> head" syscall specifically for that purpose. If done this way,
> userspace could arrange for this new sys_addtoring call to always be
> the last uatom executed in a syslet. This would make the support
> optional - those userspace applications that prefer to use a futex or
> signal as an event system could arrange to have those system calls as
> the last one in the chain instead. [...]
the problem is signals: a syslet has to return to user-space upon
signals or upon a stop condition. So to notify about the precise place
of stoppage, the notification ring is a 'built in' property.
(nevertheless, as i mentioned it in a prior mail, i'll create separate
ring syscalls, because they are useful for other stuff too.)
> For example, the open & stat case could be done with a chain like the
> following:
>
> atom1: &atom3->args[1] = sys_open(...)
> atom2: sys_syslet_helper(SYSLET_BRANCH_ON_NON_POSITIVE,
> &atom3->args[1], 0, atom4)
i dont see a huge conceptual difference between having the syslet helper
in flags versus having it in a separate syscall. Other than yours has
twice the number of atoms.
> It is also possible to use sys_syslet_helper to push a return value to
> multiple syslet parameters (for example, propagating an fd from open
> to multiple reads). For example:
>
> atom1: &atom3->args[1] = sys_open(...)
> atom2: &atom4->args[1] = sys_syslet_helper(0, &atom3->args[1], 0, 0)
> atom3: sys_read([arg1 filled in atom1], ...)
> atom4: sys_read([arg1 filled in atom2], ...)
try to do this in FIO. You'd have to create many extra atoms to push the
fd into the argument fields - instead of just sharing the variable.
Sharing is /good/. These 'simplifications' complicate the whole syslet
programming model down to being near unusable.
> Although this is a bit ugly, I must wonder how many times one would
> build chains complex enough to require it.
take a look at FIO.
Ingo
next prev parent reply other threads:[~2007-03-01 9:25 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-02-28 21:39 [patch 00/12] Syslets, Threadlets, generic AIO support, v5 Ingo Molnar
2007-02-28 21:41 ` [patch 01/12] syslets: add async.h include file, kernel-side API definitions Ingo Molnar
2007-02-28 21:41 ` [patch 02/12] syslets: add syslet.h include file, user API/ABI definitions Ingo Molnar
2007-03-01 3:05 ` Kevin O'Connor
2007-03-01 9:18 ` Ingo Molnar [this message]
2007-02-28 21:41 ` [patch 03/12] syslets: generic kernel bits Ingo Molnar
2007-02-28 21:41 ` [patch 04/12] syslets: core code Ingo Molnar
2007-02-28 21:41 ` [patch 05/12] syslets: core, documentation Ingo Molnar
2007-02-28 21:41 ` [patch 06/12] x86: split FPU state from task state Ingo Molnar
2007-02-28 21:42 ` [patch 07/12] syslets: x86, add create_async_thread() method Ingo Molnar
2007-02-28 21:42 ` [patch 08/12] syslets: x86, add move_user_context() method Ingo Molnar
2007-02-28 21:42 ` [patch 09/12] syslets: x86, mark async unsafe syscalls Ingo Molnar
2007-02-28 21:42 ` [patch 10/12] syslets: x86: enable ASYNC_SUPPORT Ingo Molnar
2007-02-28 21:42 ` [patch 11/12] syslets: x86, wire up the syslet system calls Ingo Molnar
2007-02-28 21:42 ` [patch 12/12] syslets: x86_64: add syslet/threadlet support Ingo Molnar
2007-03-01 9:36 ` [patch 00/12] Syslets, Threadlets, generic AIO support, v5 Stephen Rothwell
2007-03-07 20:10 ` Anton Blanchard
2007-03-13 7:05 ` Milton Miller
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20070301091840.GA3313@elte.hu \
--to=mingo@elte.hu \
--cc=akpm@zip.com.au \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=arjan@infradead.org \
--cc=drepper@redhat.com \
--cc=hch@infradead.org \
--cc=kevin@koconnor.net \
--cc=linux-kernel@vger.kernel.org \
--cc=torvalds@linux-foundation.org \
--cc=zach.bro@NONE.mta.everyone.net \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.