Thread (78 messages) 78 messages, 6 authors, 2009-08-04

Re: [RFC v17][PATCH 22/60] c/r: external checkpoint of a task other than ourself

From: Oren Laadan <hidden>
Date: 2009-07-23 14:14:29
Also in: linux-mm, lkml


Serge E. Hallyn wrote:
Quoting Oren Laadan (orenl@librato.com):
quoted
Serge E. Hallyn wrote:
quoted
Quoting Oren Laadan (orenl@librato.com):
quoted
Now we can do "external" checkpoint, i.e. act on another task.
...
quoted
 long do_checkpoint(struct ckpt_ctx *ctx, pid_t pid)
 {
 	long ret;

+	ret = init_checkpoint_ctx(ctx, pid);
+	if (ret < 0)
+		return ret;
+
+	if (ctx->root_freezer) {
+		ret = cgroup_freezer_begin_checkpoint(ctx->root_freezer);
+		if (ret < 0)
+			return ret;
+	}
Self-checkpoint of a task in root freezer is now denied, though.

Was that intentional?
Yes.

"root freezer" is an arbitrary task in the checkpoint subtree or
container. It is used to verify that all checkpointed tasks - except
for current, if doing self-checkpoint - belong to the same freezer
group.

Since current is busy calling checkpoint(2), and since we only permit
checkpoint of (cgroup-) frozen tasks, then - by definition - it cannot
possibly belong to the same group. If it did, it would itself be frozen
like its fellows and unable to call checkpoint(2).
So then you're saying that regular self-checkpoint no longer works,
but the documentation still shows self.c and claims it should just
work.
I'm unsure why you say that self-checkpoint no longer works ?
In fact, I just double checked that it does.

Self-checkpoint has two immediate use-cases:

1) Single process that checkpoints itself - ctx->root_freezer remains
NULL, which causes cgroup_freezer_begin_checkpoint() to be skipped.

2) Process P that belongs to a hierarchy (subtree or container), and
P calls checkpoint(2) to checkpoint the hierarchy.
For this to work, all other processes in the hierarchy must be frozen.
Therefore, they also belong to a freezer cgroup (perhaps more than one -
but that is not permitted).
In this case, ctx->root will point to a process from the freezer cgroup,
and the code tests all other processes (excluding P, which is current)
to confirm that they belong to the same freezer cgroup.
P itself can not possibly belong to it, otherwise it would have been
frozen and not executing the checkpoint(2) syscall.

IOW, for case 2 to work, one must arrange for all tasks in the target
hierarchy, except for P (- current, the checkpointer), to belong to
a single freezer cgroup, and for that cgroup to be frozen.
quoted
quoted
Self-checkpoint of a task in root freezer is now denied, though.
Maybe I didn't really understand what you meant by that, and by
"root freezer" ?
Mind you I prefer this as it is more consistent, but I thought it
was something you wanted to support.
Self-checkpoint simply allows a process to checkpoint itself (and
perhaps additional processes too). I never quite understood why you
view it as a source of inconsistency ...

Nevertheless, it still works.

Oren.

--
To unsubscribe, send a message with 'unsubscribe linux-mm' in
the body to majordomo@kvack.org.  For more info on Linux MM,
see: http://www.linux-mm.org/ .
Don't email: <a href=mailto:"dont@kvack.org"> email@kvack.org </a>
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help