[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