All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mathieu Desnoyers <mathieu.desnoyers-vg+e7yoeK/dWk0Htik3J/w@public.gmane.org>
To: "Richard W.M. Jones" <rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Cc: linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org,
	Thomas Gleixner <tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org>,
	mingo-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	"H. Peter Anvin" <hpa-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>,
	Andrew Morton
	<akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>,
	luto-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org,
	viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn@public.gmane.org,
	zab-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	emunson-JqFfY2XvxFXQT0dZR+AlfA@public.gmane.org,
	"Paul E. McKenney"
	<paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>,
	Andrea Arcangeli
	<aarcange-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>,
	josh-iaAMLnmF4UmaiuxdJuQwMA@public.gmane.org,
	Pavel Emelyanov <xemul-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org>,
	sfr-3FnU+UHB4dNDw9hX6IcOSA@public.gmane.org,
	Milosz Tanski <milosz-B5zB6C1i6pkAvxtiuMwx3w@public.gmane.org>,
	rostedt <rostedt-nx8X9YLhiw1AfugRpC6u6w@public.gmane.org>,
	arnd-r2nGTMty4D4@public.gmane.org,
	ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org,
	gorcunov <gorcunov-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org>,
	iulia manda21
	<iulia.manda21-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>,
	dave hansen <dave.hansen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org>,
	mguzik-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org,
	adobriyan-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	Davidlohr Bueso <dave-h16yJtLeMjHk1uMJSBkQmQ@public.gmane.org>,
	linux-api <linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org>,
	gorcunov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org,
	fw-d32yF4oPJVt0XxTmqZlbVQ@public.gmane.org,
	Linus Torvalds
	<torvalds-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org>
Subject: Re: [PATCH v2 0/2] vfs: Define new syscall getumask.
Date: Wed, 13 Apr 2016 15:39:22 +0000 (UTC)	[thread overview]
Message-ID: <2143735451.55767.1460561962122.JavaMail.zimbra@efficios.com> (raw)
In-Reply-To: <1460552272-15985-1-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>

----- On Apr 13, 2016, at 8:57 AM, Richard W.M. Jones rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org wrote:

> v1 -> v2:
> 
> - Use current_umask() instead of current->fs->umask.
> 
> - Retested it.
> 
> ----------------------------------------------------------------------
> 
> It's not possible to read the process umask without also modifying it,
> which is what umask(2) does.  A library cannot read umask safely,
> especially if the main program might be multithreaded.
> 
> This patch series adds a trivial system call "getumask" which returns
> the umask of the current process.

In addition to this system call, we could extend a variation of my
thread_local_abi system call (https://lkml.org/lkml/2016/4/4/455)
(could be without features flags, or an entirely new system call
specifically for a umask cache) to register a "current umask" cache
located in a TLS area.

Basically, reading the current umask value would be a simple load from
a TLS variable. This could also allow quickly blocking and unblocking
signal delivery from user-space by storing a mask to this TLS area.

The kernel could then look into the signal mask in this TLS area whenever
it needs to deliver a signal (assuming this code path can take
user-space faults), in addition to the mask kept within the
task struct.

This "tls cache" idea could also apply to setting a CPU affinity to the
currently running CPU for short user-space critical sections.

The benefit here is to get _very_ fast operations on the thread umask
and cpu affinity.

Are those ideas too far-fetched ?

Thanks,

Mathieu

> 
> Another approach to this has been attempted before, adding something
> to /proc, although it didn't go anywhere.  See:
> 
>  http://comments.gmane.org/gmane.linux.kernel/1292109
> 
> Another way to solve this would be to add a thread-safe getumask to
> glibc.  Since glibc could own the mutex, this would permit libraries
> linked to this glibc to read umask safely.
> 
> I should also note that man-pages documents getumask(3), but no
> version of glibc has ever implemented it.
> 
> Typical test script:
> 
> #include <stdio.h>
> #include <stdlib.h>
> #include <linux/unistd.h>
> #include <sys/syscall.h>
> 
> int main(int argc, char *argv[])
> {
>  int r = syscall(329);
>  if (r == -1) {
>    perror("getumask");
>    exit(1);
>  }
>  printf("umask = %o\n", r);
>  exit(0);
> }
> 
> $ ./getumask
> umask = 22
> 
> Rich.

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com

WARNING: multiple messages have this Message-ID (diff)
From: Mathieu Desnoyers <mathieu.desnoyers@efficios.com>
To: "Richard W.M. Jones" <rjones@redhat.com>
Cc: linux-kernel@vger.kernel.org,
	Thomas Gleixner <tglx@linutronix.de>,
	mingo@redhat.com, "H. Peter Anvin" <hpa@zytor.com>,
	Andrew Morton <akpm@linux-foundation.org>,
	luto@kernel.org, viro@zeniv.linux.org.uk, zab@redhat.com,
	emunson@akamai.com,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
	Andrea Arcangeli <aarcange@redhat.com>,
	josh@joshtriplett.org, Pavel Emelyanov <xemul@parallels.com>,
	sfr@canb.auug.org.au, Milosz Tanski <milosz@adfin.com>,
	rostedt <rostedt@goodmis.org>,
	arnd@arndb.de, ebiederm@xmission.com,
	gorcunov <gorcunov@openvz.org>,
	iulia manda21 <iulia.manda21@gmail.com>,
	dave hansen <dave.hansen@linux.intel.com>,
	mguzik@redhat.com, adobriyan@gmail.com,
	Davidlohr Bueso <dave@stgolabs.net>,
	linux-api <linux-api@vger.kernel.org>,
	gorcunov@gmail.com, fw@deneb.enyo.de,
	Linus Torvalds <torvalds@linux-foundation.org>
Subject: Re: [PATCH v2 0/2] vfs: Define new syscall getumask.
Date: Wed, 13 Apr 2016 15:39:22 +0000 (UTC)	[thread overview]
Message-ID: <2143735451.55767.1460561962122.JavaMail.zimbra@efficios.com> (raw)
In-Reply-To: <1460552272-15985-1-git-send-email-rjones@redhat.com>

----- On Apr 13, 2016, at 8:57 AM, Richard W.M. Jones rjones@redhat.com wrote:

> v1 -> v2:
> 
> - Use current_umask() instead of current->fs->umask.
> 
> - Retested it.
> 
> ----------------------------------------------------------------------
> 
> It's not possible to read the process umask without also modifying it,
> which is what umask(2) does.  A library cannot read umask safely,
> especially if the main program might be multithreaded.
> 
> This patch series adds a trivial system call "getumask" which returns
> the umask of the current process.

In addition to this system call, we could extend a variation of my
thread_local_abi system call (https://lkml.org/lkml/2016/4/4/455)
(could be without features flags, or an entirely new system call
specifically for a umask cache) to register a "current umask" cache
located in a TLS area.

Basically, reading the current umask value would be a simple load from
a TLS variable. This could also allow quickly blocking and unblocking
signal delivery from user-space by storing a mask to this TLS area.

The kernel could then look into the signal mask in this TLS area whenever
it needs to deliver a signal (assuming this code path can take
user-space faults), in addition to the mask kept within the
task struct.

This "tls cache" idea could also apply to setting a CPU affinity to the
currently running CPU for short user-space critical sections.

The benefit here is to get _very_ fast operations on the thread umask
and cpu affinity.

Are those ideas too far-fetched ?

Thanks,

Mathieu

> 
> Another approach to this has been attempted before, adding something
> to /proc, although it didn't go anywhere.  See:
> 
>  http://comments.gmane.org/gmane.linux.kernel/1292109
> 
> Another way to solve this would be to add a thread-safe getumask to
> glibc.  Since glibc could own the mutex, this would permit libraries
> linked to this glibc to read umask safely.
> 
> I should also note that man-pages documents getumask(3), but no
> version of glibc has ever implemented it.
> 
> Typical test script:
> 
> #include <stdio.h>
> #include <stdlib.h>
> #include <linux/unistd.h>
> #include <sys/syscall.h>
> 
> int main(int argc, char *argv[])
> {
>  int r = syscall(329);
>  if (r == -1) {
>    perror("getumask");
>    exit(1);
>  }
>  printf("umask = %o\n", r);
>  exit(0);
> }
> 
> $ ./getumask
> umask = 22
> 
> Rich.

-- 
Mathieu Desnoyers
EfficiOS Inc.
http://www.efficios.com

  parent reply	other threads:[~2016-04-13 15:39 UTC|newest]

Thread overview: 51+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-04-13 12:57 [PATCH v2 0/2] vfs: Define new syscall getumask Richard W.M. Jones
2016-04-13 12:57 ` Richard W.M. Jones
2016-04-13 12:57 ` [PATCH v2 1/2] " Richard W.M. Jones
     [not found]   ` <1460552272-15985-2-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-04-13 13:20     ` Cyrill Gorcunov
2016-04-13 13:20       ` Cyrill Gorcunov
2016-04-13 13:57       ` Richard W.M. Jones
     [not found]         ` <20160413135708.GG11600-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-04-13 14:02           ` Christoph Hellwig
2016-04-13 14:02             ` Christoph Hellwig
2016-04-13 15:27           ` Mathieu Desnoyers
2016-04-13 15:27             ` Mathieu Desnoyers
     [not found] ` <1460552272-15985-1-git-send-email-rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2016-04-13 12:57   ` [PATCH v2 2/2] x86: Wire up new getumask system call on x86 Richard W.M. Jones
2016-04-13 12:57     ` Richard W.M. Jones
2016-04-13 13:59   ` [PATCH v2 0/2] vfs: Define new syscall getumask Greg KH
2016-04-13 13:59     ` Greg KH
2016-04-14  3:47     ` Steven Rostedt
2016-04-14 19:26       ` Greg KH
2016-04-13 15:39   ` Mathieu Desnoyers [this message]
2016-04-13 15:39     ` Mathieu Desnoyers
     [not found]     ` <2143735451.55767.1460561962122.JavaMail.zimbra-vg+e7yoeK/dWk0Htik3J/w@public.gmane.org>
2016-04-13 21:01       ` Mathieu Desnoyers
2016-04-13 21:01         ` Mathieu Desnoyers
     [not found]         ` <1736004700.56566.1460581285951.JavaMail.zimbra-vg+e7yoeK/dWk0Htik3J/w@public.gmane.org>
2016-04-14  2:13           ` Theodore Ts'o
2016-04-14  2:13             ` Theodore Ts'o
     [not found]             ` <20160414021348.GB16656-AKGzg7BKzIDYtjvyW6yDsg@public.gmane.org>
2016-04-18  0:38               ` H. Peter Anvin
2016-04-18  0:38                 ` H. Peter Anvin
     [not found]                 ` <57142C80.6070005-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>
2016-04-18  1:09                   ` Greg KH
2016-04-18  1:09                     ` Greg KH
     [not found]                     ` <20160418010925.GA7800-U8xfFu+wG4EAvxtiuMwx3w@public.gmane.org>
2016-04-18  2:02                       ` H. Peter Anvin
2016-04-18  2:02                         ` H. Peter Anvin
2016-04-18  2:12                       ` Josh Triplett
2016-04-18  2:12                         ` Josh Triplett
2016-04-18  2:15                         ` H. Peter Anvin
2016-04-18  2:15                           ` H. Peter Anvin
2016-04-18  2:37                           ` Josh Triplett
2016-04-18  2:37                             ` Josh Triplett
2016-04-18  3:00                             ` H. Peter Anvin
2016-04-18  3:00                               ` H. Peter Anvin
     [not found]                               ` <57144DE6.9050409-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>
2016-04-18 11:39                                 ` Theodore Ts'o
2016-04-18 11:39                                   ` Theodore Ts'o
2016-04-14 17:56           ` Andy Lutomirski
2016-04-14 17:56             ` Andy Lutomirski
2016-04-13 15:41   ` Colin Walters
2016-04-13 15:41     ` Colin Walters
     [not found]     ` <1460562105.353100.577697153.013DF466-2RFepEojUI2N1INw9kWLP6GC3tUn3ZHUQQ4Iyu8u01E@public.gmane.org>
2016-04-13 16:03       ` Richard W.M. Jones
2016-04-13 16:03         ` Richard W.M. Jones
2016-04-18  1:42       ` H. Peter Anvin
2016-04-18  1:42         ` H. Peter Anvin
     [not found]         ` <57143B74.3070302-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org>
2016-04-18  1:57           ` Josh Triplett
2016-04-18  1:57             ` Josh Triplett
2016-04-18  9:14             ` Richard W.M. Jones
2016-04-18  9:14               ` Richard W.M. Jones
2016-04-18 10:04               ` H. Peter Anvin

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=2143735451.55767.1460561962122.JavaMail.zimbra@efficios.com \
    --to=mathieu.desnoyers-vg+e7yoek/dwk0htik3j/w@public.gmane.org \
    --cc=aarcange-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=adobriyan-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=akpm-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
    --cc=arnd-r2nGTMty4D4@public.gmane.org \
    --cc=dave-h16yJtLeMjHk1uMJSBkQmQ@public.gmane.org \
    --cc=dave.hansen-VuQAYsv1563Yd54FQh9/CA@public.gmane.org \
    --cc=ebiederm-aS9lmoZGLiVWk0Htik3J/w@public.gmane.org \
    --cc=emunson-JqFfY2XvxFXQT0dZR+AlfA@public.gmane.org \
    --cc=fw-d32yF4oPJVt0XxTmqZlbVQ@public.gmane.org \
    --cc=gorcunov-GEFAQzZX7r8dnm+yROfE0A@public.gmane.org \
    --cc=gorcunov-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=hpa-YMNOUZJC4hwAvxtiuMwx3w@public.gmane.org \
    --cc=iulia.manda21-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org \
    --cc=josh-iaAMLnmF4UmaiuxdJuQwMA@public.gmane.org \
    --cc=linux-api-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org \
    --cc=luto-DgEjT+Ai2ygdnm+yROfE0A@public.gmane.org \
    --cc=mguzik-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=milosz-B5zB6C1i6pkAvxtiuMwx3w@public.gmane.org \
    --cc=mingo-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=paulmck-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org \
    --cc=rjones-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org \
    --cc=rostedt-nx8X9YLhiw1AfugRpC6u6w@public.gmane.org \
    --cc=sfr-3FnU+UHB4dNDw9hX6IcOSA@public.gmane.org \
    --cc=tglx-hfZtesqFncYOwBW4kG4KsQ@public.gmane.org \
    --cc=torvalds-de/tnXTf+JLsfHDXvbKv3WD2FQJk+8+b@public.gmane.org \
    --cc=viro-RmSDqhL/yNMiFSDQTTA3OLVCufUGDwFn@public.gmane.org \
    --cc=xemul-bzQdu9zFT3WakBO8gow8eQ@public.gmane.org \
    --cc=zab-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.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.