[Devel] [PATCH] ve: add ability to set offset for monotonic time

Andrew Vagin avagin at virtuozzo.com
Mon Nov 30 08:05:46 PST 2015


On Mon, Nov 30, 2015 at 06:34:14PM +0300, Cyrill Gorcunov wrote:
> On Mon, Nov 30, 2015 at 07:16:08PM +0400, Andrew Vagin wrote:
> > Monotonic time can't be changed by users, can't go back and it starts with
> > zero when a kernel starts.
> > 
> > When we migrate a container on another host, we need to save consistancy
> > of monotonic time, so we have a per-ve offset.
> > 
> > This patch adds the ability to set this offset. When a container is
> > migrated, the value from ve.start_timespec on a source host should be
> > written in the same file on a destination host.
> > 
> > https://jira.sw.ru/browse/PSBM-41311?jql=text%20~%20%22of%20persia%22
> > 
> > Cc: Cyrill Gorcunov <gorcunov at openvz.org>
> > Signed-off-by: Andrew Vagin <avagin at openvz.org>
> > ---
> >  include/linux/ve.h    |    3 +++
> >  kernel/posix-timers.c |   41 +++++++++++++++++++++++++++++++++++++++++
> >  kernel/ve/ve.c        |   36 ++++++++++++++++++++++++++++++++++++
> >  3 files changed, 80 insertions(+), 0 deletions(-)
> > 
> > diff --git a/include/linux/ve.h b/include/linux/ve.h
> > index 86b95c3..5f972aa 100644
> > --- a/include/linux/ve.h
> > +++ b/include/linux/ve.h
> > @@ -222,6 +222,9 @@ extern struct tty_driver *vtty_console_driver(int *index);
> >  extern int vtty_open_master(envid_t veid, int idx);
> >  #endif /* CONFIG_TTY */
> >  
> > +extern int get_ve_monotonic_time(struct ve_struct *ve, struct timespec *tp);
> > +extern int set_ve_monotonic_time(struct ve_struct *ve, struct timespec *tp);
> > +
> >  #else	/* CONFIG_VE */
> > +
> > +int set_ve_monotonic_time(struct ve_struct *ve, struct timespec *tp)
> > +{
> > +	struct timespec kernel_tp;
> > +	struct k_clock *kc = clockid_to_kclock(CLOCK_MONOTONIC);
> > +	int error;
> > +
> 
> 	if (!ve_is_super(get_exec_env()))
> 		return -EPERM;
> 
> I've a few questions:
> 
>  - what about the rest of the clocks? Say CLOCK_BOOTTIME, CLOCK_MONOTONIC_RAW?

This offset affects all monotonic clocks:

#define clock_is_monotonic(which_clock) \
        ((which_clock) == CLOCK_MONOTONIC || \
         (which_clock) == CLOCK_MONOTONIC_RAW || \
         (which_clock) == CLOCK_MONOTONIC_COARSE)

Probably, we need to think about CLOCK_BOOTTIME, because it's monotonic
too, but it isn't about this patch.

>  - who is responsible to save and restore of the offsets, criu or libvzctl,
>    or maybe p.haul?

Any of these tool can handle this offset.

> 
> 	Cyrill


More information about the Devel mailing list