[CRIU] [PATCH] scripts: Add ACT_PRE_RESUME stage

Cyrill Gorcunov gorcunov at virtuozzo.com
Tue Jan 10 05:18:17 PST 2017


On Tue, Jan 10, 2017 at 03:51:10PM +0300, Pavel Emelyanov wrote:
> On 01/09/2017 05:44 PM, Cyrill Gorcunov wrote:
> > The "post-sigreturn" action is when all tasks are restored
> > but not yet restarted sitting in frozen/seized state, right
> > after final rt-sigreturn call passed.
> > 
> > In vz7 this step is needed to tune up beancounters/cgroups
> > params from the script, in vanilla criu it useful as well.
> 
> We have POST_RESTORE hook. If it happens too early (why?) let's
> move it into proper place?

It happens early for vz7 case: we're inside veX and continue
manipulating with resources which can lead up to problems
with beancounters and memory limits. I suspect LXC and friends
won't hit this problem for now. We could move POST_RESTORE
hook to trigger later but this will break API I think, we simply
can't be sure that someone already is using this hook in this
particular place.

What about naming it as pre-resume?
---
From: Cyrill Gorcunov <gorcunov at openvz.org>
Subject: [PATCH] action-scripts: Add "pre-resume" stage

The main idea is to be able to operate with container
at the moment where its processess and resources are
already restored but the processes are not yet running,
ie just before we kick them.

Beside the need of tuning up beancounters (which is vz7
specific feature) this might be useful to make some
additional debug tests from the script.

Signed-off-by: Cyrill Gorcunov <gorcunov at openvz.org>
---
 criu/action-scripts.c         | 1 +
 criu/cr-restore.c             | 4 ++++
 criu/include/action-scripts.h | 1 +
 3 files changed, 6 insertions(+)

diff --git a/criu/action-scripts.c b/criu/action-scripts.c
index bfa1f827acb2..e3027bd2ea8a 100644
--- a/criu/action-scripts.c
+++ b/criu/action-scripts.c
@@ -23,6 +23,7 @@ static const char *action_names[ACT_MAX] = {
 	[ ACT_NET_UNLOCK ]	= "network-unlock",
 	[ ACT_SETUP_NS ]	= "setup-namespaces",
 	[ ACT_POST_SETUP_NS ]	= "post-setup-namespaces",
+	[ ACT_PRE_RESUME ]	= "pre-resume",
 	[ ACT_POST_RESUME ]	= "post-resume",
 };
 
diff --git a/criu/cr-restore.c b/criu/cr-restore.c
index 1c87c6ed3f5d..f326251ca82e 100644
--- a/criu/cr-restore.c
+++ b/criu/cr-restore.c
@@ -1962,6 +1962,10 @@ static int restore_root_task(struct pstree_item *init)
 	if (ret == 0)
 		finalize_restore();
 
+	ret = run_scripts(ACT_PRE_RESUME);
+	if (ret)
+		pr_err("Pre-resume script ret code %d\n", ret);
+
 skip_for_check:
 	if (restore_freezer_state())
 		pr_err("Unable to restore freezer state\n");
diff --git a/criu/include/action-scripts.h b/criu/include/action-scripts.h
index 2e3b25ea3b21..4421169fd9cc 100644
--- a/criu/include/action-scripts.h
+++ b/criu/include/action-scripts.h
@@ -11,6 +11,7 @@ enum script_actions {
 	ACT_SETUP_NS,
 	ACT_POST_SETUP_NS,
 	ACT_POST_RESUME,
+	ACT_PRE_RESUME,
 
 	ACT_MAX
 };
-- 
2.7.4



More information about the CRIU mailing list