代码拉取完成,页面将自动刷新
同步操作将从 src-openEuler/criu 强制同步,此操作会覆盖自 Fork 仓库以来所做的任何修改,且无法恢复!!!
确定后同步将在后台操作,完成时将刷新页面,请耐心等待。
From 5acbfc773177797d954645e40ba8f7ed94a55d60 Mon Sep 17 00:00:00 2001
From: Jingxian He <hejingxian@huawei.com>
Date: Tue, 30 Nov 2021 11:38:18 +0800
Subject: [PATCH 53/72] mm: add exec file mapping pin method
In order to improve criu dump and restore performance,
enable pin method for exec file mapping.
Signed-off-by: Jingxian He <hejingxian@huawei.com>
---
criu/config.c | 4 ++++
criu/crtools.c | 1 +
criu/include/cr_options.h | 1 +
criu/mem.c | 12 +++++++++++-
criu/pin-mem.c | 4 ++++
5 files changed, 21 insertions(+), 1 deletion(-)
diff --git a/criu/config.c b/criu/config.c
index fdbc5eb..c0358e5 100644
--- a/criu/config.c
+++ b/criu/config.c
@@ -710,6 +710,7 @@ int parse_options(int argc, char **argv, bool *usage_error, bool *has_exec_cmd,
{ "share-src-ports", required_argument, 0, 2001 },
{ "reserve-ports", required_argument, 0, 'P' },
BOOL_OPT("parallel", &opts.parallel),
+ { "exec-pin-start", required_argument, 0, 2002 },
{},
};
@@ -1051,6 +1052,9 @@ int parse_options(int argc, char **argv, bool *usage_error, bool *has_exec_cmd,
case 2001:
SET_CHAR_OPTS(share_src_ports, optarg);
break;
+ case 2002:
+ opts.exec_pin_start = atoi(optarg);
+ break;
case 'V':
pr_msg("Version: %s\n", CRIU_VERSION);
if (strcmp(CRIU_GITID, "0"))
diff --git a/criu/crtools.c b/criu/crtools.c
index c20b3b7..40e2d51 100644
--- a/criu/crtools.c
+++ b/criu/crtools.c
@@ -473,6 +473,7 @@ usage:
" --file-locks-repair Use repair mode to dump and restore file locks\n"
" --reserve-ports Reserve src ports in kernel\n"
" --parallel Collect smaps parallel to accellrate dumping speed\n"
+ " --exec-pin-start Exec file map's pin start index\n"
"\n"
"Check options:\n"
" Without options, \"criu check\" checks availability of absolutely required\n"
diff --git a/criu/include/cr_options.h b/criu/include/cr_options.h
index 6478d4d..a64e977 100644
--- a/criu/include/cr_options.h
+++ b/criu/include/cr_options.h
@@ -202,6 +202,7 @@ struct cr_options {
char *share_src_ports;
int reserve_ports;
int parallel;
+ int exec_pin_start;
};
extern struct cr_options opts;
diff --git a/criu/mem.c b/criu/mem.c
index b955d66..ccb6ae6 100644
--- a/criu/mem.c
+++ b/criu/mem.c
@@ -448,6 +448,7 @@ static int __parasite_dump_pages_seized(struct pstree_item *item, struct parasit
int possible_pid_reuse = 0;
bool has_parent;
int parent_predump_mode = -1;
+ int dump_iov;
pr_info("\n");
pr_info("Dumping pages (type: %d pid: %d)\n", CR_FD_PAGES, item->pid->real);
@@ -521,9 +522,18 @@ static int __parasite_dump_pages_seized(struct pstree_item *item, struct parasit
if (mdc->parent_ie)
parent_predump_mode = mdc->parent_ie->pre_dump_mode;
+ dump_iov = 0;
list_for_each_entry(vma_area, &vma_area_list->h, list) {
if (opts.pin_memory && should_pin_vmae(vma_area->e)) {
- continue;
+ if (opts.exec_pin_start
+ && vma_entry_is(vma_area->e, VMA_FILE_PRIVATE)
+ && ((vma_area->e->prot & PROT_WRITE)
+ || !(vma_area->e->prot & PROT_EXEC))) {
+ dump_iov += 1;
+ if (dump_iov > opts.exec_pin_start + 1)
+ continue;
+ } else
+ continue;
}
if (vma_entry_is(vma_area->e, VMA_AREA_ANON_INODE))
diff --git a/criu/pin-mem.c b/criu/pin-mem.c
index 96ca2c5..686217f 100644
--- a/criu/pin-mem.c
+++ b/criu/pin-mem.c
@@ -2,6 +2,7 @@
#include <stdbool.h>
#include <sys/ioctl.h>
+#include "cr_options.h"
#include "pstree.h"
#include "mem.h"
#include "vma.h"
@@ -30,6 +31,9 @@ bool should_pin_vmae(VmaEntry *vmae)
if (vma_entry_is(vmae, VMA_ANON_PRIVATE))
return true;
+ if (opts.exec_pin_start && vma_entry_is(vmae, VMA_FILE_PRIVATE))
+ return true;
+
return false;
}
--
2.34.1
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。