[CRIU] [PATCH 4/5] kdat: Cache kdat object into /run/criu.kdat (v2)

Adrian Reber adrian at lisas.de
Wed Apr 26 23:11:26 PDT 2017


On Thu, Apr 27, 2017 at 08:37:09AM +0300, Mike Rapoport wrote:
> On Wed, Apr 26, 2017 at 04:37:34PM +0300, Pavel Emelyanov wrote:
> > Doing kerndat checks on every criu start is way too slow. We
> > need some way to speed this checks up on a particular box.
> > 
> > As suggested by Andre, Dima and Mike let's try to keep the
> > collected kdat bits into some tmpfs file. Keeping it on
> > tmpfs would invaludate this cache on every machine reboot.
> > 
> > There have been many suggestions how to generate this file,
> > my proposal is to create it once the kdat object is filled
> > by criu, w/o any explicit command. Optionally we can add
> > 'criu kdat --save|--drop' actions to manage this file.
> > 
> > v2:
> > * don't ignore return code of write() (some glibcs complain)
> > * unlink tmp file in case rename failed
> > 
> > Signed-off-by: Pavel Emelyanov <xemul at virtuozzo.com>
> > ---
> >  criu/include/kerndat.h |  6 ++++
> >  criu/include/magic.h   |  7 +++++
> >  criu/kerndat.c         | 85 +++++++++++++++++++++++++++++++++++++++++++++++++-
> >  3 files changed, 97 insertions(+), 1 deletion(-)
> > 
> > diff --git a/criu/include/kerndat.h b/criu/include/kerndat.h
> > index 6b621c6..b1722eb 100644
> > --- a/criu/include/kerndat.h
> > +++ b/criu/include/kerndat.h
> > @@ -29,6 +29,12 @@ enum loginuid_func {
> >  };
> > 
> >  struct kerndat_s {
> > +	/*
> > +	 * XXX: This structure is written AS IS into a tmpfs file,
> > +	 * so any changes in it should result in changed KDAT_MAGIC
> > +	 * value to avoid loading of bad kdat bits.
> > +	 */
> > +	u32 magic;
> >  	dev_t shmem_dev;
> >  	int last_cap;
> >  	u64 zero_page_pfn;
> > diff --git a/criu/include/magic.h b/criu/include/magic.h
> > index 059d005..2297930 100644
> > --- a/criu/include/magic.h
> > +++ b/criu/include/magic.h
> > @@ -116,4 +116,11 @@
> >  #define STATS_MAGIC		0x57093306 /* Ostashkov */
> >  #define IRMAP_CACHE_MAGIC	0x57004059 /* Ivanovo */
> > 
> > +/*
> > + * Magic for kerndat_s structure. When changing, keep the
> > + * old magics to avoid magic re-use.
> > + */
> > +
> > +#define KDAT_MAGIC_1		0x57023458 /* Torzhok */
> > +
> >  #endif /* __CR_MAGIC_H__ */
> > diff --git a/criu/kerndat.c b/criu/kerndat.c
> > index 87a7b62..3aca1e4 100644
> > --- a/criu/kerndat.c
> > +++ b/criu/kerndat.c
> > @@ -650,10 +650,93 @@ close:
> >  	bclose(&f);
> >  	return ret;
> >  }
> > +
> > +#define KERNDAT_CACHE_FILE	"/run/criu.kdat"
> > +#define KERNDAT_CACHE_FILE_TMP	"/run/.criu.kdat"
> 
> What about running criu as non-root user?

Could the location be Makefile dependent? For Fedora I would rather put
the file in /run/criu/criu.kdat and create the directory via tmpfiles.d?

		Adrian


More information about the CRIU mailing list