[lxc-devel] [PATCH] c/r: use freezer to seize tasks

Tycho Andersen tycho.andersen at canonical.com
Sat Nov 7 00:26:43 UTC 2015


Instead of relying on the old ptrace loop, we should instead put all the
tasks in the container into the freezer. This will stop them all at the
same time, preventing fork bombs from causing criu to infinite loop (and is
also simply a lot faster).

Note that this uses --freeze-cgroup which isn't in criu 1.7, so it should
only go into master.

Signed-off-by: Tycho Andersen <tycho.andersen at canonical.com>
---
 src/lxc/criu.c | 24 +++++++++++++++++++++---
 1 file changed, 21 insertions(+), 3 deletions(-)

diff --git a/src/lxc/criu.c b/src/lxc/criu.c
index 7ee6cbe..695a763 100644
--- a/src/lxc/criu.c
+++ b/src/lxc/criu.c
@@ -37,6 +37,7 @@
 #include "bdev.h"
 #include "cgroup.h"
 #include "conf.h"
+#include "commands.h"
 #include "criu.h"
 #include "log.h"
 #include "lxc.h"
@@ -64,8 +65,8 @@ void exec_criu(struct criu_opts *opts)
 	 * +1 for final NULL */
 
 	if (strcmp(opts->action, "dump") == 0) {
-		/* -t pid */
-		static_args += 2;
+		/* -t pid --freeze-cgroup /lxc/ct */
+		static_args += 4;
 
 		/* --leave-running */
 		if (!opts->stop)
@@ -133,13 +134,30 @@ void exec_criu(struct criu_opts *opts)
 		DECLARE_ARG("-vvvvvv");
 
 	if (strcmp(opts->action, "dump") == 0) {
-		char pid[32];
+		char pid[32], *freezer_relative;
 
 		if (sprintf(pid, "%d", opts->c->init_pid(opts->c)) < 0)
 			goto err;
 
+
 		DECLARE_ARG("-t");
 		DECLARE_ARG(pid);
+
+		freezer_relative = lxc_cmd_get_cgroup_path(opts->c->name,
+							   opts->c->config_path,
+							   "freezer");
+		if (!freezer_relative) {
+			ERROR("failed getting freezer path");
+			goto err;
+		}
+
+		ret = snprintf(log, sizeof(log), "/sys/fs/cgroup/freezer/%s", freezer_relative);
+		if (ret < 0 || ret >= sizeof(log))
+			goto err;
+
+		DECLARE_ARG("--freeze-cgroup");
+		DECLARE_ARG(log);
+
 		if (!opts->stop)
 			DECLARE_ARG("--leave-running");
 	} else if (strcmp(opts->action, "restore") == 0) {
-- 
2.6.2



More information about the lxc-devel mailing list