mirror of
https://git.proxmox.com/git/mirror_lxc
synced 2025-08-10 18:47:32 +00:00
Merge pull request #931 from n-eiling/pageserver-support
c/r: support for the criu pageserver
This commit is contained in:
commit
442ad5c61c
@ -82,6 +82,10 @@ struct criu_opts {
|
||||
* different) on the target host. NULL if lxc.console = "none".
|
||||
*/
|
||||
char *console_name;
|
||||
|
||||
/* Address and port where a criu pageserver is listening */
|
||||
char *pageserver_address;
|
||||
char *pageserver_port;
|
||||
};
|
||||
|
||||
static int load_tty_major_minor(char *directory, char *output, int len)
|
||||
@ -156,6 +160,10 @@ static void exec_criu(struct criu_opts *opts)
|
||||
if (opts->predump_dir)
|
||||
static_args += 2;
|
||||
|
||||
/* --page-server --address <address> --port <port> */
|
||||
if (opts->pageserver_address && opts->pageserver_port)
|
||||
static_args += 5;
|
||||
|
||||
/* --leave-running (only for final dump) */
|
||||
if (strcmp(opts->action, "dump") == 0 && !opts->stop)
|
||||
static_args++;
|
||||
@ -272,6 +280,14 @@ static void exec_criu(struct criu_opts *opts)
|
||||
DECLARE_ARG(opts->predump_dir);
|
||||
}
|
||||
|
||||
if (opts->pageserver_address && opts->pageserver_port) {
|
||||
DECLARE_ARG("--page-server");
|
||||
DECLARE_ARG("--address");
|
||||
DECLARE_ARG(opts->pageserver_address);
|
||||
DECLARE_ARG("--port");
|
||||
DECLARE_ARG(opts->pageserver_port);
|
||||
}
|
||||
|
||||
/* only for final dump */
|
||||
if (strcmp(opts->action, "dump") == 0 && !opts->stop)
|
||||
DECLARE_ARG("--leave-running");
|
||||
@ -814,7 +830,8 @@ static int save_tty_major_minor(char *directory, struct lxc_container *c, char *
|
||||
|
||||
/* do one of either predump or a regular dump */
|
||||
static bool do_dump(struct lxc_container *c, char *mode, char *directory,
|
||||
bool stop, bool verbose, char *predump_dir)
|
||||
bool stop, bool verbose, char *predump_dir,
|
||||
char *pageserver_address, char *pageserver_port)
|
||||
{
|
||||
pid_t pid;
|
||||
|
||||
@ -840,6 +857,8 @@ static bool do_dump(struct lxc_container *c, char *mode, char *directory,
|
||||
os.verbose = verbose;
|
||||
os.predump_dir = predump_dir;
|
||||
os.console_name = c->lxc_conf->console.path;
|
||||
os.pageserver_address = pageserver_address;
|
||||
os.pageserver_port = pageserver_port;
|
||||
|
||||
if (save_tty_major_minor(directory, c, os.tty_id, sizeof(os.tty_id)) < 0)
|
||||
exit(1);
|
||||
@ -872,12 +891,12 @@ static bool do_dump(struct lxc_container *c, char *mode, char *directory,
|
||||
}
|
||||
}
|
||||
|
||||
bool __criu_pre_dump(struct lxc_container *c, char *directory, bool verbose, char *predump_dir)
|
||||
bool __criu_pre_dump(struct lxc_container *c, char *directory, bool verbose, char *predump_dir, char *pageserver_address, char *pageserver_port)
|
||||
{
|
||||
return do_dump(c, "pre-dump", directory, false, verbose, predump_dir);
|
||||
return do_dump(c, "pre-dump", directory, false, verbose, predump_dir, pageserver_address, pageserver_port);
|
||||
}
|
||||
|
||||
bool __criu_dump(struct lxc_container *c, char *directory, bool stop, bool verbose, char *predump_dir)
|
||||
bool __criu_dump(struct lxc_container *c, char *directory, bool stop, bool verbose, char *predump_dir, char *pageserver_address, char *pageserver_port)
|
||||
{
|
||||
char path[PATH_MAX];
|
||||
int ret;
|
||||
@ -891,7 +910,7 @@ bool __criu_dump(struct lxc_container *c, char *directory, bool stop, bool verbo
|
||||
return false;
|
||||
}
|
||||
|
||||
return do_dump(c, "dump", directory, stop, verbose, predump_dir);
|
||||
return do_dump(c, "dump", directory, stop, verbose, predump_dir, pageserver_address, pageserver_port);
|
||||
}
|
||||
|
||||
bool __criu_restore(struct lxc_container *c, char *directory, bool verbose)
|
||||
|
@ -27,8 +27,8 @@
|
||||
|
||||
#include <lxc/lxccontainer.h>
|
||||
|
||||
bool __criu_pre_dump(struct lxc_container *c, char *directory, bool verbose, char *predump_dir);
|
||||
bool __criu_dump(struct lxc_container *c, char *directory, bool stop, bool verbose, char *predump_dir);
|
||||
bool __criu_pre_dump(struct lxc_container *c, char *directory, bool verbose, char *predump_dir, char *pageserver_address, char *pageserver_port);
|
||||
bool __criu_dump(struct lxc_container *c, char *directory, bool stop, bool verbose, char *predump_dir, char *pageserver_address, char *pageserver_port);
|
||||
bool __criu_restore(struct lxc_container *c, char *directory, bool verbose);
|
||||
|
||||
#endif
|
||||
|
@ -3955,10 +3955,10 @@ static int do_lxcapi_migrate(struct lxc_container *c, unsigned int cmd,
|
||||
|
||||
switch (cmd) {
|
||||
case MIGRATE_PRE_DUMP:
|
||||
ret = !__criu_pre_dump(c, opts->directory, opts->verbose, opts->predump_dir);
|
||||
ret = !__criu_pre_dump(c, opts->directory, opts->verbose, opts->predump_dir, opts->pageserver_address, opts->pageserver_port);
|
||||
break;
|
||||
case MIGRATE_DUMP:
|
||||
ret = !__criu_dump(c, opts->directory, opts->stop, opts->verbose, opts->predump_dir);
|
||||
ret = !__criu_dump(c, opts->directory, opts->stop, opts->verbose, opts->predump_dir, opts->pageserver_address, opts->pageserver_port);
|
||||
break;
|
||||
case MIGRATE_RESTORE:
|
||||
ret = !__criu_restore(c, opts->directory, opts->verbose);
|
||||
|
@ -882,6 +882,8 @@ struct migrate_opts {
|
||||
|
||||
bool stop; /* stop the container after dump? */
|
||||
char *predump_dir; /* relative to directory above */
|
||||
char *pageserver_address; /* where should memory pages be send? */
|
||||
char *pageserver_port;
|
||||
};
|
||||
|
||||
/*!
|
||||
|
Loading…
Reference in New Issue
Block a user