Thread (1 message) 1 message, 1 author, 2014-09-22

Re: Getting ready for IO extensions, v3

From: Zach Brown <hidden>
Date: 2014-09-22 21:19:24

On Fri, Sep 19, 2014 at 05:46:34PM -0700, Darrick J. Wong wrote:
Hi everyone,

I've been working (albeit slowly) on the userspace IO extension interface that
I talked about last April[1].  The mechanism of attaching various attributes
(which so far have been mandatory ones) to IO requests has been messy, since it
requires me to design an interface for both the extensions I have in mind as
well as a generic way to pass extensions into the kernel from userland.

Is this the appropriate forum to talk about API design in Linux?  It seems that
way to me based on the list archives, but then I'm new at this, and would like
to discuss the design before sending full patches (again).

So far I've defined this structure:

/* IO extension flags */
#define IO_EXT_PI	(1)	/* protection info (checksums, etc) */
#define IO_EXT_REPLICA	(0x2)	/* replica */
#define IO_EXT_ALL	(IO_EXT_PI | IO_EXT_REPLICA)
Do we have more examples?  It's hard to make a strong case for the need
for variadic io syscalls with only a handful of optional arguments.

Completion timestamps?  priorities?  cgroup annotation?  (Haha, how
about a flag for a "trim" IO instead of having to do a stupid sync
ioctl).  I suppose the leading question is: what can the bio interface
do that userspace can't?
The glaring downsides of this approach of course is that we waste memory on
fields that might not be turned on, we have to find a sane way to handle the
ie_has flags, and fields cannot be removed from the structure.  I don't know of
a good way to design around those problems without greatly increasing the
complexity of the data structure (a generic dictionary would work but ye gods
that's horrifying), so I was wondering if any of you could suggest something
better?
Maybe it'd just be easier to punt and re-use one of the N type/payload
interfaces.  sendmsg() and netlink are the big ones, right?  I think the
important thing is to translate them to internal kernel interfaces as
high up as possible so that the optional arg parsing is not pushed down
the stack.
 
- z
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help