[CRIU] [PATCH 3/7] Merging splice and read modes of pre-dump

Abhishek Dubey dubeyabhishek777 at gmail.com
Wed Aug 21 02:06:58 MSK 2019


Invoke appropriate pre-dump algorithm,
as per --pre-dump-mode option supplied.

Default pre-dump mode is: splice

Signed-off-by: Abhishek Dubey <dubeyabhishek777 at gmail.com>
---
 criu/cr-dump.c            | 13 +++++++++++--
 criu/include/cr_options.h |  5 +++++
 criu/include/mem.h        |  2 +-
 3 files changed, 17 insertions(+), 3 deletions(-)

diff --git a/criu/cr-dump.c b/criu/cr-dump.c
index e070b8b..9baf7cf 100644
--- a/criu/cr-dump.c
+++ b/criu/cr-dump.c
@@ -1189,7 +1189,9 @@ static int pre_dump_one_task(struct pstree_item *item, InventoryEntry *parent_ie
 
 	item->pid->ns[0].virt = misc.pid;
 
-	mdc.pre_dump = true;
+	mdc.pre_dump = (opts.pre_dump_mode == PRE_DUMP_READ) ?
+						  PRE_DUMP_READ
+						: PRE_DUMP_SPLICE;
 	mdc.lazy = false;
 	mdc.stat = NULL;
 	mdc.parent_ie = parent_ie;
@@ -1513,7 +1515,14 @@ static int cr_pre_dump_finish(int status)
 			goto err;
 
 		mem_pp = dmpi(item)->mem_pp;
-		ret = page_xfer_dump_pages(&xfer, mem_pp);
+
+		if (opts.pre_dump_mode == PRE_DUMP_READ) {
+			timing_stop(TIME_MEMWRITE);
+			ret = page_xfer_predump_pages(item->pid->real,
+							&xfer, mem_pp);
+		}
+		else
+			ret = page_xfer_dump_pages(&xfer, mem_pp);
 
 		xfer.close(&xfer);
 
diff --git a/criu/include/cr_options.h b/criu/include/cr_options.h
index c519c74..6b84e31 100644
--- a/criu/include/cr_options.h
+++ b/criu/include/cr_options.h
@@ -39,6 +39,11 @@ struct cg_root_opt {
 };
 
 /*
+ * Pre-dump variants
+ */
+#define PRE_DUMP_SPLICE	1		/* Pre-dump using parasite */
+#define PRE_DUMP_READ		2		/* Pre-dump using process_vm_readv syscall */
+/*
  * Cgroup management options.
  */
 #define CG_MODE_IGNORE		(0u << 0)	/* Zero is important here */
diff --git a/criu/include/mem.h b/criu/include/mem.h
index 251cb1a..74c2803 100644
--- a/criu/include/mem.h
+++ b/criu/include/mem.h
@@ -15,7 +15,7 @@ struct pstree_item;
 struct vma_area;
 
 struct mem_dump_ctl {
-	bool			pre_dump;
+	int			pre_dump;
 	bool			lazy;
 	struct proc_pid_stat	*stat;
 	InventoryEntry		*parent_ie;
-- 
2.7.4



More information about the CRIU mailing list