All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Dubov <alex.dubov@gmail.com>
To: linux-kernel@vger.kernel.org
Cc: alex.dubov@gmail.com
Subject: Minimal effort/low overhead file descriptor duplication over Posix.1b s
Date: Tue,  2 Dec 2014 15:35:17 +1100	[thread overview]
Message-ID: <1417494919-4577-1-git-send-email-oakad@yahoo.com> (raw)

A common requirement in parallel processing applications (relied upon by
popular network servers, databases and various other applications) is to
pass open file descriptors between processes. Historically, several mechanisms
existed to support this requirement, such as those provided by "cmsg" facility
of unix domain sockets or special operations on named pipes (on Android this
can also be achieved using "binder" facility).

Unfortunately, using facilities like Unix domain sockets to merely pass file
descriptors between "worker" processes is unnecessarily difficult, due to
the following common consideration:

1. Domain sockets and named pipes are persistent objects. Applications must
manage their lifetime and devise unambiguous access schemes in case multiple
application instances are to be run within the same OS instance. Usually, they
would also require a writable file system to be mounted.

2. Interaction with domain sockets and named pipes requires a sizable,
non-trivial and error-prone code on the application side, especially in
cases where multiple worker types started by multiple application instances
must coexist within the same OS instance.

3. Domain sockets and pipes require creation of complex kernel-side set-ups,
whereupon, in many cases, the only information ever passed by the application
over those channels are file descriptors (it is usual for the major part of the
application's shared state to be established through other mechanisms,
like shared memory). In some cases, applications are forced to send meaningless
rubbish over the domain socket merely to "push" the associated "cmsg" carrying
the file descriptor through.

Present patch introduces exceptionally easy to use, low latency and low
overhead mechanism for transferring file descriptors between cooperating
processes:

    int sendfd(pid_t pid, int sig, int fd)

Given a target process pid, the sendfd() syscall will create a duplicate
file descriptor in a target task's (referred by pid) file table pointing to
the file references by descriptor fd. Then, it will attempt to notify the
target task by issuing a Posix.1b real-time signal (sig), carrying the new
file descriptor as integer payload. If real-time signal can not be enqueued
at the destination signal queue, the newly created file descriptor will be
promptly closed.

It is believed, that proposed sendfd() syscall, together with recently
accepted "memfd" facility may greatly simplify development of parallel
processing applications, by eliminating the need to rely on tricky and
possibly insecure approaches involving domain sockets and such.


             reply	other threads:[~2014-12-02  4:35 UTC|newest]

Thread overview: 28+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-12-02  4:35 Alex Dubov [this message]
2014-12-02  4:35 ` [PATCH 1/2] fs: introduce sendfd() syscall Alex Dubov
2014-12-02 12:50   ` Eric Dumazet
2014-12-02 14:47     ` Alex Dubov
2014-12-02 15:33       ` Eric Dumazet
2014-12-02 16:23         ` Alex Dubov
2014-12-02 16:42           ` Eric Dumazet
2014-12-03  2:11             ` Alex Dubov
2014-12-03  6:48               ` Eric Dumazet
2014-12-02 17:00   ` Al Viro
2014-12-03  2:22     ` Alex Dubov
2014-12-03  3:40       ` Al Viro
2014-12-03  4:14         ` Alex Dubov
2014-12-03  6:50       ` Eric Dumazet
2014-12-03  8:08         ` Richard Cochran
2014-12-03  8:17           ` Richard Weinberger
2014-12-03 10:41             ` Richard Cochran
2014-12-03 14:08               ` Alex Dubov
2014-12-05 13:37               ` One Thousand Gnomes
2014-12-02  4:35 ` [PATCH 2/2] fs: Wire up sendfd() syscall (all architectures) Alex Dubov
2014-12-02  8:01   ` Geert Uytterhoeven
2014-12-02  8:31     ` Alex Dubov
2014-12-02 11:42     ` Michal Simek
2014-12-02 14:31       ` Alex Dubov
2014-12-02 14:38         ` Geert Uytterhoeven
2014-12-02 15:26 ` Minimal effort/low overhead file descriptor duplication over Posix.1b s Jonathan Corbet
2014-12-02 16:15   ` Alex Dubov
2014-12-17 13:11 ` Kevin Easton

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=1417494919-4577-1-git-send-email-oakad@yahoo.com \
    --to=alex.dubov@gmail.com \
    --cc=linux-kernel@vger.kernel.org \
    /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.