Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 21 Jan 2003 19:04:29 -0800 (PST)
From:      Matthew Dillon <dillon@apollo.backplane.com>
To:        Peter Wemm <peter@wemm.org>
Cc:        Robert Watson <rwatson@FreeBSD.ORG>, phk@FreeBSD.ORG, "Alan L. Cox" <alc@imimic.com>, arch@FreeBSD.ORG
Subject:   Re: getsysfd() patch #1 (Re: Virtual memory question) 
Message-ID:  <200301220304.h0M34TMB099694@apollo.backplane.com>
References:   <20030121185208.A82EB2A7EA@canning.wemm.org>

next in thread | previous in thread | raw e-mail | index | archive | help
:> (1) shmfs.
:> 
:> 	mount -t shmfs foo /shmfs
:> 
:> 	Handle the implementation using vnodes and DTYPE_VNODE
:
:> (2) /dev/shm
:> 
:> 	Handle the implementation using cloning devices and device pager
:> 	magic.
:> 
:> (3) DTYPE_MEMFD
:> 
:> 	Handle the implementation using a special file descriptor type
:> 	creating using a special creation primitive (similar to kqueue,
:> 	pipe, etc). 
:> 
:> Of the three, (3) appears to be simplist to implement, (1) the most
:> complicated.  I'm probably not qualified to comment on (2), but have to
:> say that (3) would be the easiest to stick in MAC magic for :-).  But only
:> if (3) completely avoids the kitchensinkfd() approach.  From the API
:> perspective, you could easily hide any of these behind a memfd() library
:> call.
:
:(2) and (3) are not all that different, except that (2) requires another
:hack in the mmap syscall code to recognize and magically convert.
:(3) is cleaner but requires a more code to add the DTYPE_xxxFD stuff and
:affects more places in the kernel where we switch() on fd types.  I
:personally prefer (3) - which is what Matt has implemented, but could
:live with (2).  (1) is way more complicated than I want to think about
:especially if it goes near vnodes.
:
:What I'm objecting to though is the syscall that is wrapped around (3) in
:Matt's patch.  I'd rather use a seperate syscall for any new uses of the
:system (timers, whatever) rather than try and come up with a future proof
:uber-syscall.  What if down the track we discover that we could do
:something nifty and reuse part of this, but we need two configuration args
:to the syscall..  What then? getsysfd2(....)?   I'd rather that we just
:create the syscalls for the specific purpose that they're needed for.
:
:Cheers,
:-Peter
:--
:Peter Wemm - peter@wemm.org; peter@FreeBSD.org; peter@yahoo-inc.com

     I don't mind implementing (3) and making it MEMFD specific (not
     trying to make the syscall capable of more general purpose ops).

     I will note that (1) would be a step backwards rather then forwards,
     mainly because we already have a great security paradigm with the 
     normal filesystem and the normal filesystem already spans user-writable
     filespace (their home directory).  All it would take to support a
     memory-specific namespace rendezvous would be one additional field
     in the vnode structure (which IMHO is how FIFOs should have been
     implemented).  So, for example:

	fd = getmemfd(const char *path, off_t size)

	fd = getmemfd(NULL, size);
	fd = getmemfd("/var/db/blah.rendezvous", size);

	xfd = open("/var/db/blah.rendezvous", O_CREAT|O_TRUNC, 0666);
	fd = fgetmemfd(xfd, size);

    The memory descriptor 'fd' would not in any way be associated with the
    file's data space (i.e. the file's size is irrelevant), the file would
    simply act as a rendezvous.

					-Matt
					Matthew Dillon 
					<dillon@backplane.com>

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-arch" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200301220304.h0M34TMB099694>