linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Adrian Reber <areber@redhat.com>
To: Christian Brauner <christian.brauner@ubuntu.com>,
	Eric Biederman <ebiederm@xmission.com>,
	Pavel Emelyanov <ovzxemul@gmail.com>,
	Oleg Nesterov <oleg@redhat.com>,
	Dmitry Safonov <0x7f454c46@gmail.com>,
	Andrei Vagin <avagin@gmail.com>
Cc: linux-kernel@vger.kernel.org, Mike Rapoport <rppt@linux.ibm.com>,
	Radostin Stoyanov <rstoyanov1@gmail.com>,
	Adrian Reber <areber@redhat.com>,
	Michael Kerrisk <mtk.manpages@gmail.com>,
	Arnd Bergmann <arnd@arndb.de>,
	Cyrill Gorcunov <gorcunov@openvz.org>,
	Thomas Gleixner <tglx@linutronix.de>
Subject: clone3: allow creation of time namespace with offset
Date: Tue, 17 Mar 2020 09:30:40 +0100	[thread overview]
Message-ID: <20200317083043.226593-1-areber@redhat.com> (raw)

This is an attempt to add time namespace support to clone3(). I am not
really sure which way clone3() should handle time namespaces. The time
namespace through /proc cannot be used with clone3() because the offsets
for the time namespace need to be written before a process has been
created in that time namespace. This means it is necessary to somehow
tell clone3() the offsets for the clocks.

The time namespace offers the possibility to set offsets for
CLOCK_MONOTONIC and CLOCK_BOOTTIME. My first approach was to extend
'struct clone_args` with '__aligned_u64 monotonic_offset' and
'__aligned_u64 boottime_offset'. The problem with this approach was that
it was not possible to set nanoseconds for the clocks in the time
namespace.

One of the motivations for clone3() with CLONE_NEWTIME was to enable
CRIU to restore a process in a time namespace with the corresponding
offsets. And although the nanosecond value can probably never be
restored to the same value it had during checkpointing, because the
clock keeps on running between CRIU pausing all processes and CRIU
actually reading the value of the clocks, the nanosecond value is still
necessary for CRIU to not restore a process where the clock jumps back
due to CRIU restoring it with a nanonsecond value that is too small.

Requiring nanoseconds as well as seconds for two clocks during clone3()
means that it would require 4 additional members to 'struct clone_args':

        __aligned_u64 tls;
        __aligned_u64 set_tid;
        __aligned_u64 set_tid_size;
+       __aligned_u64 boottime_offset_seconds;
+       __aligned_u64 boottime_offset_nanoseconds;
+       __aligned_u64 monotonic_offset_seconds;
+       __aligned_u64 monotonic_offset_nanoseconds;
 };

To avoid four additional members to 'struct clone_args' this patchset
uses another approach:

        __aligned_u64 tls;
        __aligned_u64 set_tid;
        __aligned_u64 set_tid_size;
+       __aligned_u64 timens_offset;
+       __aligned_u64 timens_offset_size;
 };

timens_offset is a pointer to an array just as previously done with
set_tid and timens_offset_size is the size of the array.

The timens_offset array is expected to contain a struct like this:

struct set_timens_offset {
       int clockid;
       struct timespec val;
};

This way it is possible to pass the information of multiple clocks with
seconds and nanonseconds to clone3().

To me this seems the better approach, but I am not totally convinced
that it is the right thing. If there are other ideas how to pass two
clock offsets with seconds and nanonseconds to clone3() I would be happy
to hear other ideas.

		Adrian



             reply	other threads:[~2020-03-17  8:32 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2020-03-17  8:30 Adrian Reber [this message]
2020-03-17  8:30 ` [PATCH 1/4] ns: prepare time namespace for clone3() Adrian Reber
2020-03-18 10:57   ` Cyrill Gorcunov
2020-03-18 11:17     ` Christian Brauner
2020-03-18 11:28       ` Cyrill Gorcunov
2020-03-18 11:57         ` Christian Brauner
2020-03-18 11:58           ` Christian Brauner
2020-03-18 12:07             ` Cyrill Gorcunov
2020-03-17  8:30 ` [PATCH 2/4] clone3: allow creation of time namespace with offset Adrian Reber
2020-03-18 12:13   ` Christian Brauner
2020-03-17  8:30 ` [PATCH 3/4] clone3: align structs and comments Adrian Reber
2020-03-17  8:30 ` [PATCH 4/4] selftests: add clone3() in time namespace test Adrian Reber
2020-03-17  8:41 ` clone3: allow creation of time namespace with offset Christian Brauner
2020-03-17  8:43   ` Christian Brauner
2020-03-17  9:40 ` Michael Kerrisk (man-pages)
2020-03-17 14:23   ` Aleksa Sarai
2020-03-17 16:09     ` Christian Brauner
2020-03-18 10:18 ` Arnd Bergmann
2020-03-19  8:11   ` Adrian Reber
2020-03-19  8:16     ` Arnd Bergmann
2020-03-19 10:29       ` Christian Brauner
2020-03-20 18:33         ` Andrei Vagin
2020-03-24 16:09           ` Christian Brauner
2020-03-24 16:25             ` Adrian Reber
2020-03-24 17:56               ` Christian Brauner
2020-03-25  7:58                 ` Adrian Reber
2020-03-25 11:26                   ` Christian Brauner
2020-04-01 11:40                     ` Michael Kerrisk (man-pages)
2020-04-01 11:46                       ` Christian Brauner
2020-04-01 12:15                         ` Michael Kerrisk (man-pages)
2020-05-29 12:26 ` Michael Kerrisk (man-pages)
2020-05-29 15:10   ` Adrian Reber
2020-05-29 15:13     ` Christian Brauner

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=20200317083043.226593-1-areber@redhat.com \
    --to=areber@redhat.com \
    --cc=0x7f454c46@gmail.com \
    --cc=arnd@arndb.de \
    --cc=avagin@gmail.com \
    --cc=christian.brauner@ubuntu.com \
    --cc=ebiederm@xmission.com \
    --cc=gorcunov@openvz.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=mtk.manpages@gmail.com \
    --cc=oleg@redhat.com \
    --cc=ovzxemul@gmail.com \
    --cc=rppt@linux.ibm.com \
    --cc=rstoyanov1@gmail.com \
    --cc=tglx@linutronix.de \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).