From: Adrian Reber <areber@redhat.com>
To: Arnd Bergmann <arnd@arndb.de>
Cc: 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>,
"linux-kernel@vger.kernel.org" <linux-kernel@vger.kernel.org>,
Mike Rapoport <rppt@linux.ibm.com>,
Radostin Stoyanov <rstoyanov1@gmail.com>,
Michael Kerrisk <mtk.manpages@gmail.com>,
Cyrill Gorcunov <gorcunov@openvz.org>,
Thomas Gleixner <tglx@linutronix.de>,
Aleksa Sarai <cyphar@cyphar.com>,
Linux API <linux-api@vger.kernel.org>
Subject: Re: clone3: allow creation of time namespace with offset
Date: Thu, 19 Mar 2020 09:11:37 +0100 [thread overview]
Message-ID: <20200319081137.GC223854@dcbz.redhat.com> (raw)
In-Reply-To: <CAK8P3a2-qQhpRdF0+iVrpp=vEvgwtndQL89CUm_QzoW2QYX1Jw@mail.gmail.com>
On Wed, Mar 18, 2020 at 11:18:53AM +0100, Arnd Bergmann wrote:
> On Tue, Mar 17, 2020 at 9:32 AM Adrian Reber <areber@redhat.com> wrote:
> >
> > 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;
> > };
>
> Wouldn't it be sufficient to have the two nanosecond values, rather
> than both seconds and nanoseconds? With 64-bit nanoseconds
> you can represent several hundred years, and these would
> always start at zero during boot.
I like this. Just using nanoseconds will make it easier and should
indeed be enough.
> Regardless of this, I think you need a signed offset, not unsigned.
Right, that was just a quick test at some point.
Christian and I have also been discussing this a bit and Christian
prefers a pointer to a struct. Maybe something like this:
__aligned_u64 tls;
__aligned_u64 set_tid;
__aligned_u64 set_tid_size;
+ __aligned_u64 timens_offset;
};
With Arnd's idea of only using nanoseconds, timens_offset would then
contain something like this:
struct timens_offset {
__aligned_s64 monotonic_offset_ns;
__aligned_s64 boottime_offset_ns;
};
I kind of prefer adding boottime and monotonic directly to struct clone_args
__aligned_u64 tls;
__aligned_u64 set_tid;
__aligned_u64 set_tid_size;
+ __aligned_s64 monotonic_offset_ns;
+ __aligned_s64 boottime_offset_ns;
};
But setting the time namespace offset is probably something which does
not happen very often while using clone3(), so maybe the pointer to a
struct approach is better.
I will resend the patches using the pointer to a struct approach if
there are no other ideas how to do this.
Adrian
next prev parent reply other threads:[~2020-03-19 8:11 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-03-17 8:30 clone3: allow creation of time namespace with offset Adrian Reber
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 [this message]
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=20200319081137.GC223854@dcbz.redhat.com \
--to=areber@redhat.com \
--cc=0x7f454c46@gmail.com \
--cc=arnd@arndb.de \
--cc=avagin@gmail.com \
--cc=christian.brauner@ubuntu.com \
--cc=cyphar@cyphar.com \
--cc=ebiederm@xmission.com \
--cc=gorcunov@openvz.org \
--cc=linux-api@vger.kernel.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 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.