From 72b139a5eca46d6860c70c9e78326e1ff05afbdd Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Aug 01 2017 03:42:51 +0000 Subject: import criu-2.12-2.el7 --- diff --git a/.criu.metadata b/.criu.metadata index b909fca..a7d72a4 100644 --- a/.criu.metadata +++ b/.criu.metadata @@ -1 +1 @@ -975b007ef8824c5a266af58085fca4f9266cd28d SOURCES/criu-2.3.tar.bz2 +daec5be3c57e7539137601bfad5026dc1a302754 SOURCES/criu-2.12.tar.bz2 diff --git a/.gitignore b/.gitignore index 054b213..bc9f047 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1 @@ -SOURCES/criu-2.3.tar.bz2 +SOURCES/criu-2.12.tar.bz2 diff --git a/SOURCES/0001-kerndat-Detect-if-we-have-guard-page-mangle-in-procf.patch b/SOURCES/0001-kerndat-Detect-if-we-have-guard-page-mangle-in-procf.patch new file mode 100644 index 0000000..09ebdb7 --- /dev/null +++ b/SOURCES/0001-kerndat-Detect-if-we-have-guard-page-mangle-in-procf.patch @@ -0,0 +1,127 @@ +From 8a4a164f3e33be9b2d28d54fe430e92f40626054 Mon Sep 17 00:00:00 2001 +From: Cyrill Gorcunov +Date: Mon, 26 Jun 2017 23:55:28 +0300 +Subject: [PATCH 1/2] kerndat: Detect if we have guard page mangle in procfs + output + +In vanilla kernel commit 1be7107fbe18eed3e319a6c3e83c78254b693acb +show_map_vma() no longer report PAGE_SIZE. Detect it with +simple test and remember in kdat settings. + +Suggested-by: Oleg Nesterov +Signed-off-by: Cyrill Gorcunov +Signed-off-by: Andrei Vagin +--- + criu/include/kerndat.h | 1 + + criu/kerndat.c | 76 ++++++++++++++++++++++++++++++++++++++++++++++++++ + 2 files changed, 77 insertions(+) + +diff --git a/criu/include/kerndat.h b/criu/include/kerndat.h +index ba8c10da7..891cbdd41 100644 +--- a/criu/include/kerndat.h ++++ b/criu/include/kerndat.h +@@ -44,6 +44,7 @@ struct kerndat_s { + unsigned int has_xtlocks; + unsigned long mmap_min_addr; + bool has_tcp_half_closed; ++ bool stack_guard_gap_hidden; + }; + + extern struct kerndat_s kdat; +diff --git a/criu/kerndat.c b/criu/kerndat.c +index 354fb672b..80ec58bcf 100644 +--- a/criu/kerndat.c ++++ b/criu/kerndat.c +@@ -563,6 +563,80 @@ int kerndat_tcp_repair(void) + return exit_code; + } + ++static int kerndat_detect_stack_guard_gap(void) ++{ ++ int num, ret = -1, detected = 0; ++ unsigned long start, end; ++ char r, w, x, s; ++ char buf[1024]; ++ FILE *maps; ++ void *mem; ++ ++ mem = mmap(NULL, (3ul << 20), PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS | MAP_GROWSDOWN, -1, 0); ++ if (mem == MAP_FAILED) { ++ pr_perror("Can't mmap stack area"); ++ return -1; ++ } ++ munmap(mem, (3ul << 20)); ++ ++ mem = mmap(mem + (2ul << 20), (1ul << 20), PROT_READ | PROT_WRITE, ++ MAP_PRIVATE | MAP_ANONYMOUS | MAP_FIXED | MAP_GROWSDOWN, -1, 0); ++ if (mem == MAP_FAILED) { ++ pr_perror("Can't mmap stack area"); ++ return -1; ++ } ++ ++ maps = fopen("/proc/self/maps", "r"); ++ if (maps == NULL) { ++ munmap(mem, 4096); ++ return -1; ++ } ++ ++ while (fgets(buf, sizeof(buf), maps)) { ++ num = sscanf(buf, "%lx-%lx %c%c%c%c", ++ &start, &end, &r, &w, &x, &s); ++ if (num < 6) { ++ pr_err("Can't parse: %s\n", buf); ++ goto err; ++ } ++ ++ /* ++ * When reading /proc/$pid/[s]maps the ++ * start/end addresses migh be cutted off ++ * with PAGE_SIZE on kernels prior 4.12 ++ * (see kernel commit 1be7107fbe18ee). ++ * ++ * Same time there was semi-complete ++ * patch released which hitted a number ++ * of repos (Ubuntu, Fedora) where instead ++ * of PAGE_SIZE the 1M gap is cutted off. ++ */ ++ if (start == (unsigned long)mem) { ++ kdat.stack_guard_gap_hidden = false; ++ detected = 1; ++ break; ++ } else if (start == ((unsigned long)mem + (1ul << 20))) { ++ pr_warn("Unsupported stack guard detected, confused but continue\n"); ++ kdat.stack_guard_gap_hidden = true; ++ detected = 1; ++ break; ++ } else if (start == ((unsigned long)mem + PAGE_SIZE)) { ++ kdat.stack_guard_gap_hidden = true; ++ detected = 1; ++ break; ++ } ++ } ++ ++ if (detected) ++ ret = 0; ++ ++err: ++ munmap(mem, (1ul << 20)); ++ fclose(maps); ++ return ret; ++} ++ + int kerndat_init(void) + { + int ret; +@@ -676,6 +750,8 @@ int kerndat_init(void) + ret = kerndat_iptables_has_xtlocks(); + if (!ret) + ret = kerndat_tcp_repair(); ++ if (!ret) ++ ret = kerndat_detect_stack_guard_gap(); + + kerndat_lsm(); + kerndat_mmap_min_addr(); +-- +2.13.0 + diff --git a/SOURCES/0002-mem-Don-t-assume-guard-page-is-returned-in-procfs-wi.patch b/SOURCES/0002-mem-Don-t-assume-guard-page-is-returned-in-procfs-wi.patch new file mode 100644 index 0000000..09cc160 --- /dev/null +++ b/SOURCES/0002-mem-Don-t-assume-guard-page-is-returned-in-procfs-wi.patch @@ -0,0 +1,115 @@ +From be37925cff8aaf43f14866bd0a60dca6068a8d97 Mon Sep 17 00:00:00 2001 +From: Cyrill Gorcunov +Date: Mon, 26 Jun 2017 23:55:29 +0300 +Subject: [PATCH 2/2] mem: Don't assume guard page is returned in procfs with + new kernels + +If the guard page is not reported in show_map_vma we should +not ajust vma address neither we should call unmap_guard_pages +in restorer. + +https://github.com/xemul/criu/issues/322 + +Signed-off-by: Cyrill Gorcunov +Signed-off-by: Andrei Vagin +--- + criu/include/mem.h | 2 ++ + criu/mem.c | 19 ++++++++++++++----- + criu/proc_parse.c | 3 ++- + 3 files changed, 18 insertions(+), 6 deletions(-) + +diff --git a/criu/include/mem.h b/criu/include/mem.h +index 2fae797c6..2fc8e1e0e 100644 +--- a/criu/include/mem.h ++++ b/criu/include/mem.h +@@ -9,11 +9,13 @@ struct parasite_ctl; + struct vm_area_list; + struct page_pipe; + struct pstree_item; ++struct vma_area; + + struct mem_dump_ctl { + bool pre_dump; + }; + ++extern bool vma_has_guard_gap_hidden(struct vma_area *vma); + extern bool page_in_parent(bool dirty); + extern int prepare_mm_pid(struct pstree_item *i); + extern int do_task_reset_dirty_track(int pid); +diff --git a/criu/mem.c b/criu/mem.c +index 2c4323d8c..cd41829b2 100644 +--- a/criu/mem.c ++++ b/criu/mem.c +@@ -499,7 +499,7 @@ int prepare_mm_pid(struct pstree_item *i) + + if (vma_area_is_private(vma, kdat.task_size)) { + ri->vmas.priv_size += vma_area_len(vma); +- if (vma->e->flags & MAP_GROWSDOWN) ++ if (vma_has_guard_gap_hidden(vma)) + ri->vmas.priv_size += PAGE_SIZE; + } + +@@ -634,7 +634,7 @@ static int premap_private_vma(struct pstree_item *t, struct vma_area *vma, void + * A grow-down VMA has a guard page, which protect a VMA below it. + * So one more page is mapped here to restore content of the first page + */ +- if (vma->e->flags & MAP_GROWSDOWN) { ++ if (vma_has_guard_gap_hidden(vma)) { + vma->e->start -= PAGE_SIZE; + if (paddr) + paddr -= PAGE_SIZE; +@@ -702,7 +702,7 @@ static int premap_private_vma(struct pstree_item *t, struct vma_area *vma, void + pr_debug("\tpremap %#016"PRIx64"-%#016"PRIx64" -> %016lx\n", + vma->e->start, vma->e->end, (unsigned long)addr); + +- if (vma->e->flags & MAP_GROWSDOWN) { /* Skip gurad page */ ++ if (vma_has_guard_gap_hidden(vma)) { /* Skip gurad page */ + vma->e->start += PAGE_SIZE; + vma->premmaped_addr += PAGE_SIZE; + } +@@ -1046,6 +1047,11 @@ out: + return ret; + } + ++bool vma_has_guard_gap_hidden(struct vma_area *vma) ++{ ++ return kdat.stack_guard_gap_hidden && (vma->e->flags & MAP_GROWSDOWN); ++} ++ + /* + * A gard page must be unmapped after restoring content and + * forking children to restore COW memory. +@@ -1055,6 +1061,9 @@ int unmap_guard_pages(struct pstree_item *t) + struct vma_area *vma; + struct list_head *vmas = &rsti(t)->vmas.h; + ++ if (!kdat.stack_guard_gap_hidden) ++ return 0; ++ + list_for_each_entry(vma, vmas, list) { + if (!vma_area_is_private(vma, kdat.task_size)) + continue; +diff --git a/criu/proc_parse.c b/criu/proc_parse.c +index f1237cf9f..5e36db540 100644 +--- a/criu/proc_parse.c ++++ b/criu/proc_parse.c +@@ -25,6 +25,7 @@ + #include "kerndat.h" + #include "vdso.h" + #include "vma.h" ++#include "mem.h" + #include "bfd.h" + #include "proc_parse.h" + #include "fdinfo.h" +@@ -637,7 +638,7 @@ static int vma_list_add(struct vma_area *vma_area, + } + + /* Add a guard page only if here is enough space for it */ +- if ((vma_area->e->flags & MAP_GROWSDOWN) && ++ if (vma_has_guard_gap_hidden(vma_area) && + *prev_end < vma_area->e->start) + vma_area->e->start -= PAGE_SIZE; /* Guard page */ + *prev_end = vma_area->e->end; +-- +2.13.0 + diff --git a/SOURCES/2fdef836a59938b169ca3c8f2c813b35258f1ed5.patch b/SOURCES/2fdef836a59938b169ca3c8f2c813b35258f1ed5.patch deleted file mode 100644 index 12abaa8..0000000 --- a/SOURCES/2fdef836a59938b169ca3c8f2c813b35258f1ed5.patch +++ /dev/null @@ -1,115 +0,0 @@ -From 2fdef836a59938b169ca3c8f2c813b35258f1ed5 Mon Sep 17 00:00:00 2001 -From: Adrian Reber -Date: Tue, 14 Jun 2016 10:13:00 +0300 -Subject: [PATCH] criu: add an option to skip in-flight connections - -Trying to migrate containers with tomcat and running ab as a test client -(ab -n 1000000 -c 20 http://url/to/test) criu sometimes exited with an -error if in-flight connections were detected. Criu can handle sockets -listening and with established connection. In-flight connections can -happen on sockets which do not yet have a full established connection -(SYN, SYN-ACK, and the last ACK is missing). - -This adds a new option to criu: - - --skip-in-flight this option skips in-flight TCP connections. - if TCP connections are found which are not yet completely - established, criu will ignore these connections in favor - of erroring out. - -With this option criu will skip sockets in this state and let's the client -handle the re-connection. - -Signed-off-by: Adrian Reber -Acked-by: Andrew Vagin -Signed-off-by: Pavel Emelyanov ---- - criu/crtools.c | 9 +++++++++ - criu/include/cr_options.h | 1 + - criu/include/sk-inet.h | 1 + - criu/sk-inet.c | 7 +++++++ - 4 files changed, 18 insertions(+) - -diff --git a/criu/crtools.c b/criu/crtools.c -index b527374..e7da5c7 100644 ---- a/criu/crtools.c -+++ b/criu/crtools.c -@@ -279,6 +279,7 @@ int main(int argc, char *argv[], char *envp[]) - { "extra", no_argument, 0, 1077 }, - { "experimental", no_argument, 0, 1078 }, - { "all", no_argument, 0, 1079 }, -+ { SK_INFLIGHT_PARAM, no_argument, 0, 1083 }, - { }, - }; - -@@ -583,6 +584,10 @@ int main(int argc, char *argv[], char *envp[]) - opts.check_extra_features = true; - opts.check_experimental_features = true; - break; -+ case 1083: -+ pr_msg("Will skip in-flight TCP connections\n"); -+ opts.tcp_skip_in_flight = true; -+ break; - case 'V': - pr_msg("Version: %s\n", CRIU_VERSION); - if (strcmp(CRIU_GITID, "0")) -@@ -791,6 +796,10 @@ int main(int argc, char *argv[], char *envp[]) - "* Special resources support:\n" - " -x|--" USK_EXT_PARAM "inode,.." " allow external unix connections (optionally can be assign socket's inode that allows one-sided dump)\n" - " --" SK_EST_PARAM " checkpoint/restore established TCP connections\n" -+" --" SK_INFLIGHT_PARAM " this option skips in-flight TCP connections.\n" -+" if TCP connections are found which are not yet completely\n" -+" established, criu will ignore these connections in favor\n" -+" of erroring out.\n" - " -r|--root PATH change the root filesystem (when run in mount namespace)\n" - " --evasive-devices use any path to a device file if the original one\n" - " is inaccessible\n" -diff --git a/criu/include/cr_options.h b/criu/include/cr_options.h -index 32c9d4f..bf9feee 100644 ---- a/criu/include/cr_options.h -+++ b/criu/include/cr_options.h -@@ -109,6 +109,7 @@ struct cr_options { - char *lsm_profile; - unsigned int timeout; - unsigned int empty_ns; -+ bool tcp_skip_in_flight; - }; - - extern struct cr_options opts; -diff --git a/criu/include/sk-inet.h b/criu/include/sk-inet.h -index 4707a6e..9d2bda6 100644 ---- a/criu/include/sk-inet.h -+++ b/criu/include/sk-inet.h -@@ -72,6 +72,7 @@ extern int dump_one_tcp(int sk, struct inet_sk_desc *sd); - extern int restore_one_tcp(int sk, struct inet_sk_info *si); - - #define SK_EST_PARAM "tcp-established" -+#define SK_INFLIGHT_PARAM "skip-in-flight" - - extern int check_tcp(void); - extern mutex_t *inet_get_reuseaddr_lock(struct inet_sk_info *ii); -diff --git a/criu/sk-inet.c b/criu/sk-inet.c -index 20c6535..dfcfae6 100644 ---- a/criu/sk-inet.c -+++ b/criu/sk-inet.c -@@ -144,6 +144,11 @@ static int can_dump_inet_sk(const struct inet_sk_desc *sk) - switch (sk->state) { - case TCP_LISTEN: - if (sk->rqlen != 0) { -+ if (opts.tcp_skip_in_flight) { -+ pr_info("Skipping in-flight connection (l) for %x\n", -+ sk->sd.ino); -+ break; -+ } - /* - * Currently the ICONS nla reports the conn - * requests for listen sockets. Need to pick -@@ -151,6 +156,8 @@ static int can_dump_inet_sk(const struct inet_sk_desc *sk) - */ - pr_err("In-flight connection (l) for %x\n", - sk->sd.ino); -+ pr_err("In-flight connections can be ignored with the" -+ "--%s option.\n", SK_INFLIGHT_PARAM); - return 0; - } - break; diff --git a/SOURCES/crit.1 b/SOURCES/crit.1 new file mode 100644 index 0000000..4ec17ac --- /dev/null +++ b/SOURCES/crit.1 @@ -0,0 +1,235 @@ +'\" t +.\" Title: crit +.\" Author: [see the "AUTHOR" section] +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 03/09/2017 +.\" Manual: CRIU Manual +.\" Source: criu 2.12 +.\" Language: English +.\" +.TH "CRIT" "1" "03/09/2017" "criu 2\&.12" "CRIU Manual" +.\" ----------------------------------------------------------------- +.\" * Define some portability stuff +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" http://bugs.debian.org/507673 +.\" http://lists.gnu.org/archive/html/groff/2009-02/msg00013.html +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.ie \n(.g .ds Aq \(aq +.el .ds Aq ' +.\" ----------------------------------------------------------------- +.\" * (re)Define some macros +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" toupper - uppercase a string (locale-aware) +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.de toupper +.tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ +\\$* +.tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz +.. +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" SH-xref - format a cross-reference to an SH section +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.de SH-xref +.ie n \{\ +.\} +.toupper \\$* +.el \{\ +\\$* +.\} +.. +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" SH - level-one heading that works better for non-TTY output +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.de1 SH +.\" put an extra blank line of space above the head in non-TTY output +.if t \{\ +.sp 1 +.\} +.sp \\n[PD]u +.nr an-level 1 +.set-an-margin +.nr an-prevailing-indent \\n[IN] +.fi +.in \\n[an-margin]u +.ti 0 +.HTML-TAG ".NH \\n[an-level]" +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +\." make the size of the head bigger +.ps +3 +.ft B +.ne (2v + 1u) +.ie n \{\ +.\" if n (TTY output), use uppercase +.toupper \\$* +.\} +.el \{\ +.nr an-break-flag 0 +.\" if not n (not TTY), use normal case (not uppercase) +\\$1 +.in \\n[an-margin]u +.ti 0 +.\" if not n (not TTY), put a border/line under subheading +.sp -.6 +\l'\n(.lu' +.\} +.. +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" SS - level-two heading that works better for non-TTY output +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.de1 SS +.sp \\n[PD]u +.nr an-level 1 +.set-an-margin +.nr an-prevailing-indent \\n[IN] +.fi +.in \\n[IN]u +.ti \\n[SN]u +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.ps \\n[PS-SS]u +\." make the size of the head bigger +.ps +2 +.ft B +.ne (2v + 1u) +.if \\n[.$] \&\\$* +.. +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" BB/EB - put background/screen (filled box) around block of text +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.de BB +.if t \{\ +.sp -.5 +.br +.in +2n +.ll -2n +.gcolor red +.di BX +.\} +.. +.de EB +.if t \{\ +.if "\\$2"adjust-for-leading-newline" \{\ +.sp -1 +.\} +.br +.di +.in +.ll +.gcolor +.nr BW \\n(.lu-\\n(.i +.nr BH \\n(dn+.5v +.ne \\n(BHu+.5v +.ie "\\$2"adjust-for-leading-newline" \{\ +\M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] +.\} +.el \{\ +\M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] +.\} +.in 0 +.sp -.5v +.nf +.BX +.in +.sp .5v +.fi +.\} +.. +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" BM/EM - put colored marker in margin next to block of text +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.de BM +.if t \{\ +.br +.ll -2n +.gcolor red +.di BX +.\} +.. +.de EM +.if t \{\ +.br +.di +.ll +.gcolor +.nr BH \\n(dn +.ne \\n(BHu +\M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[] +.in 0 +.nf +.BX +.in +.fi +.\} +.. +.\" ----------------------------------------------------------------- +.\" * set default formatting +.\" ----------------------------------------------------------------- +.\" ----------------------------------------------------------------- +.\" * MAIN CONTENT STARTS HERE * +.\" ----------------------------------------------------------------- +.SH "Name" +crit \- CRiu Image Tool +.SH "Synopsis" +.sp +\fBcrit\fR \fIdecode\fR [\-h] [\-i IN] [\-o OUT] [\-\-pretty] +.sp +\fBcrit\fR \fIencode\fR [\-h] [\-i IN] [\-o OUT] +.sp +\fBcrit\fR \fIinfo\fR [\-h] in +.sp +\fBcrit\fR \fIx\fR [\-h] dir {ps,fds,mems} +.sp +\fBcrit\fR \fIshow\fR [\-h] in +.SH "DESCRIPTION" +.sp +\fBcrit\fR is a feature\-rich replacement for existing \fBcriu\fR show\&. +.SH "ARGUMENTS" +.SS "Positional Arguments" +.PP +\fBdecode\fR +.RS 4 +convert +\fBcriu\fR +image from binary type JSON +.RE +.PP +\fBencode\fR +.RS 4 +convert +\fBcriu\fR +image from JSON type to binary +.RE +.PP +\fBinfo\fR +.RS 4 +show info about image +.RE +.PP +\fBx\fR +.RS 4 +explore image directory +.RE +.PP +\fBshow\fR +.RS 4 +convert +\fBcriu\fR +image from binary to human\-readable JSON +.RE +.SS "Optional Arguments" +.PP +\fB\-h\fR, \fB\-\-help\fR +.RS 4 +Print some help and exit +.RE +.SH "SEE ALSO" +.sp +criu(8) +.SH "AUTHOR" +.sp +The CRIU team diff --git a/SOURCES/criu.8 b/SOURCES/criu.8 index e621b62..5456233 100644 --- a/SOURCES/criu.8 +++ b/SOURCES/criu.8 @@ -1,13 +1,13 @@ '\" t .\" Title: criu .\" Author: [see the "AUTHOR" section] -.\" Generator: DocBook XSL Stylesheets v1.78.1 -.\" Date: 06/14/2016 +.\" Generator: DocBook XSL Stylesheets v1.79.1 +.\" Date: 03/09/2017 .\" Manual: CRIU Manual -.\" Source: criu 2.3 +.\" Source: criu 2.12 .\" Language: English .\" -.TH "CRIU" "8" "06/14/2016" "criu 2\&.3" "CRIU Manual" +.TH "CRIU" "8" "03/09/2017" "criu 2\&.12" "CRIU Manual" .\" ----------------------------------------------------------------- .\" * Define some portability stuff .\" ----------------------------------------------------------------- @@ -18,36 +18,184 @@ .ie \n(.g .ds Aq \(aq .el .ds Aq ' .\" ----------------------------------------------------------------- +.\" * (re)Define some macros +.\" ----------------------------------------------------------------- +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" toupper - uppercase a string (locale-aware) +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.de toupper +.tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ +\\$* +.tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz +.. +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" SH-xref - format a cross-reference to an SH section +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.de SH-xref +.ie n \{\ +.\} +.toupper \\$* +.el \{\ +\\$* +.\} +.. +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" SH - level-one heading that works better for non-TTY output +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.de1 SH +.\" put an extra blank line of space above the head in non-TTY output +.if t \{\ +.sp 1 +.\} +.sp \\n[PD]u +.nr an-level 1 +.set-an-margin +.nr an-prevailing-indent \\n[IN] +.fi +.in \\n[an-margin]u +.ti 0 +.HTML-TAG ".NH \\n[an-level]" +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +\." make the size of the head bigger +.ps +3 +.ft B +.ne (2v + 1u) +.ie n \{\ +.\" if n (TTY output), use uppercase +.toupper \\$* +.\} +.el \{\ +.nr an-break-flag 0 +.\" if not n (not TTY), use normal case (not uppercase) +\\$1 +.in \\n[an-margin]u +.ti 0 +.\" if not n (not TTY), put a border/line under subheading +.sp -.6 +\l'\n(.lu' +.\} +.. +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" SS - level-two heading that works better for non-TTY output +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.de1 SS +.sp \\n[PD]u +.nr an-level 1 +.set-an-margin +.nr an-prevailing-indent \\n[IN] +.fi +.in \\n[IN]u +.ti \\n[SN]u +.it 1 an-trap +.nr an-no-space-flag 1 +.nr an-break-flag 1 +.ps \\n[PS-SS]u +\." make the size of the head bigger +.ps +2 +.ft B +.ne (2v + 1u) +.if \\n[.$] \&\\$* +.. +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" BB/EB - put background/screen (filled box) around block of text +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.de BB +.if t \{\ +.sp -.5 +.br +.in +2n +.ll -2n +.gcolor red +.di BX +.\} +.. +.de EB +.if t \{\ +.if "\\$2"adjust-for-leading-newline" \{\ +.sp -1 +.\} +.br +.di +.in +.ll +.gcolor +.nr BW \\n(.lu-\\n(.i +.nr BH \\n(dn+.5v +.ne \\n(BHu+.5v +.ie "\\$2"adjust-for-leading-newline" \{\ +\M[\\$1]\h'1n'\v'+.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] +.\} +.el \{\ +\M[\\$1]\h'1n'\v'-.5v'\D'P \\n(BWu 0 0 \\n(BHu -\\n(BWu 0 0 -\\n(BHu'\M[] +.\} +.in 0 +.sp -.5v +.nf +.BX +.in +.sp .5v +.fi +.\} +.. +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.\" BM/EM - put colored marker in margin next to block of text +.\" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.de BM +.if t \{\ +.br +.ll -2n +.gcolor red +.di BX +.\} +.. +.de EM +.if t \{\ +.br +.di +.ll +.gcolor +.nr BH \\n(dn +.ne \\n(BHu +\M[\\$1]\D'P -.75n 0 0 \\n(BHu -(\\n[.i]u - \\n(INu - .75n) 0 0 -\\n(BHu'\M[] +.in 0 +.nf +.BX +.in +.fi +.\} +.. +.\" ----------------------------------------------------------------- .\" * set default formatting .\" ----------------------------------------------------------------- -.\" disable hyphenation -.nh -.\" disable justification (adjust text to left margin only) -.ad l .\" ----------------------------------------------------------------- .\" * MAIN CONTENT STARTS HERE * .\" ----------------------------------------------------------------- -.SH "NAME" +.SH "Name" criu \- checkpoint/restore in userspace -.SH "SYNOPSIS" +.SH "Synopsis" .sp -\fBcriu\fR \fI\fR [\fIoptions\fR] +\fBcriu\fR \fIcommand\fR [\fIoption\fR \&...] .SH "DESCRIPTION" .sp -\fBcriu\fR is a tool for checkpointing and restoring running applications\&. It does this by saving their state as a collection of files (see the \fIdump\fR command) and creating equivalent processes from those files (see the \fIrestore\fR command)\&. The restore operation can be performed at a later time, on a different system, or both\&. +\fBcriu\fR is a tool for checkpointing and restoring running applications\&. It does this by saving their state as a collection of files (see the \fBdump\fR command) and creating equivalent processes from those files (see the \fBrestore\fR command)\&. The restore operation can be performed at a later time, on a different system, or both\&. .SH "OPTIONS" -.sp -The options are depending on the \fI\fR \fBcriu\fR run with\&. .SS "Common options" .sp -Common options are applied to any \fI\fR\&. +Common options are applicable to any \fIcommand\fR\&. .PP -\fB\-v\fR[\fI\fR|\fBv\fR\&...] +\fB\-v\fR[\fBv\fR\&...] .RS 4 -Set logging level to -\fI\fR\&. The higer the level, the more output is produced\&. Either numeric values or multiple +Increase verbosity up from the default level\&. Multiple \fBv\fR -can be used\&. +can be used, each increasing verbosity by one level\&. +.RE +.PP +\fB\-v\fR\fInum\fR +.RS 4 +Set verbosity level to +\fInum\fR\&. The higher the level, the more output is produced\&. The following levels are available: .sp @@ -59,9 +207,20 @@ The following levels are available: .sp -1 .IP \(bu 2.3 .\} -\fB\-v1\fR, -\fB\-v\fR -only messages and errors; +\fB\-v0\fR +no output; +.RE +.sp +.RS 4 +.ie n \{\ +\h'-04'\(bu\h'+03'\c +.\} +.el \{\ +.sp -1 +.IP \(bu 2.3 +.\} +\fB\-v1\fR +only errors; .RE .sp .RS 4 @@ -72,9 +231,8 @@ only messages and errors; .sp -1 .IP \(bu 2.3 .\} -\fB\-v2\fR, -\fB\-vv\fR -also warnings (default level); +\fB\-v2\fR +above plus warnings (this is the default level); .RE .sp .RS 4 @@ -85,9 +243,8 @@ also warnings (default level); .sp -1 .IP \(bu 2.3 .\} -\fB\-v3\fR, -\fB\-vvv\fR -also information messages and timestamps; +\fB\-v3\fR +above plus information messages and timestamps; .RE .sp .RS 4 @@ -98,22 +255,21 @@ also information messages and timestamps; .sp -1 .IP \(bu 2.3 .\} -\fB\-v4\fR, -\fB\-vvvv\fR -lots of debug\&. +\fB\-v4\fR +above plus lots of debug\&. .RE .RE .PP -\fB\-\-pidfile\fR \fI\fR +\fB\-\-pidfile\fR \fIfile\fR .RS 4 Write root task, service or page\-server pid into a -\fI\fR\&. +\fIfile\fR\&. .RE .PP -\fB\-o\fR, \fB\-\-log\-file\fR \fI\fR +\fB\-o\fR, \fB\-\-log\-file\fR \fIfile\fR .RS 4 Write logging messages to -\fI\fR\&. +\fIfile\fR\&. .RE .PP \fB\-\-log\-pid\fR @@ -121,137 +277,107 @@ Write logging messages to Write separate logging files per each pid\&. .RE .PP -\fB\-D\fR, \fB\-\-images\-dir\fR \fI\fR +\fB\-\-display\-stats\fR +.RS 4 +During dump as well as during restore +\fBcriu\fR +collects information like the time required to dump or restore the process or the number of pages dumped or restored\&. This information is always written to the files +\fIstats\-dump\fR +and +\fIstats\-restore\fR +and can be easily displayed using +\fBcrit\fR\&. The option +\fB\-\-display\-stats\fR +additionally prints out this information on the console at the end of a dump or a restore\&. +.RE +.PP +\fB\-D\fR, \fB\-\-images\-dir\fR \fIpath\fR .RS 4 -Use path -\fI\fR -as a base directory where to look for dump files set\&. +Use +\fIpath\fR +as a base directory where to look for sets of image files\&. .RE .PP -\fB\-\-prev\-images\-dir\fR \fI\fR +\fB\-\-prev\-images\-dir\fR \fIpath\fR .RS 4 -Use path -\fI\fR -as a parent directory where to look for dump files set\&. This make sence in case of increment dumps\&. +Use +\fIpath\fR +as a parent directory where to look for sets of image files\&. This option makes sense in case of incremental dumps\&. .RE .PP -\fB\-W\fR, \fB\-\-work\-dir\fR \fI\fR +\fB\-W\fR, \fB\-\-work\-dir\fR \fIdir\fR .RS 4 Use directory -\fI\fR +\fIdir\fR for putting logs, pidfiles and statistics\&. If not specified, -\fI\fR +\fIpath\fR from \fB\-D\fR option is taken\&. .RE .PP -\fB\-\-close\fR \fI\fR +\fB\-\-close\fR \fIfd\fR .RS 4 -Close file with descriptor -\fI\fR -before any actions\&. +Close file descriptor +\fIfd\fR +before performing any actions\&. .RE .PP -\fB\-L\fR, \fB\-\-libdir\fR \fI\fR +\fB\-L\fR, \fB\-\-libdir\fR \fIpath\fR .RS 4 -Path to a plugins directory\&. +Path to plugins directory\&. .RE .PP -\fB\-\-action\-script\fR \fI