Sukadev Bhattiprolu wrote:
> Couple of nits and couple of not-so minor comments 
> 
> Oren Laadan [or...@cs.columbia.edu] wrote:
> | From 7162fef93ee3d9fd30a457dd7b0c7ad0200d5bcb Mon Sep 17 00:00:00 2001
> | From: Oren Laadan <or...@cs.columbia.edu>
> | Date: Mon, 30 Mar 2009 15:06:13 -0400
> | Subject: [PATCH 15/29] Restart multiple processes
> | 
> | Restarting of multiple processes expects all restarting tasks to call
> | sys_restart(). Once inside the system call, each task will restart
> | itself at the same order that they were saved. The internals of the
> | syscall will take care of in-kernel synchronization bewteen tasks.
> | 

[...]

> |  
> |  struct cr_ctx {
> |     int crid;               /* unique checkpoint id */
> | @@ -31,8 +34,7 @@ struct cr_ctx {
> |     void *hbuf;             /* temporary buffer for headers */
> |     int hpos;               /* position in headers buffer */
> |  
> | -   struct task_struct **tasks_arr; /* array of all tasks in container */
> | -   int tasks_nr;                   /* size of tasks array */
> | +   atomic_t refcount;
> |  
> |     struct cr_objhash *objhash;     /* hash for shared objects */
> |  
> | @@ -40,6 +42,19 @@ struct cr_ctx {
> |     struct list_head pgarr_pool;    /* pool of empty page arrays chain */
> |  
> |     struct path fs_mnt;     /* container root (FIXME) */
> | +
> | +   /* [multi-process checkpoint] */
> | +   struct task_struct **tasks_arr; /* array of all tasks [checkpoint] */
> | +   int tasks_nr;                   /* size of tasks array */
> | +
> | +   /* [multi-process restart] */
> | +   struct cr_hdr_pids *pids_arr;   /* array of all pids [restart] */
> | +   int pids_nr;                    /* size of pids array */
> 
> Nit: Since we already have a pid_nr() that refers to something different,
> can we call this 'nr_pids' (and nr_tasks above)  like mm_context->nr_threads ?
> Of course, there is no convention, so its easy to argue the other way.

Ok.

> 
> Secondly, isn't pids_nr same as tasks_nr ? If so do we need both ?

As the comment says: one is used exclusively for checkpoint and the
other exclusively for restart.
So we don't strictly need both. I thought that for readability of it's
useful to have @pids_nr (ok, @nr_pids ...) when dealing with a @pids_arr,
and a @tasks_nr (ok .. @nr_tasks ...) when dealing with @tasks_arr.

> 
> Or is this intended to address the issue of multiple pid_nr values that a
> task in a nested container can have ? If so, pids_nr is > tasks_nr and that
> brings up two comments :-)

Ugh. This topic is TBD.

> 
> First, mktree.c and cr_next_task() are using 'ctx->pids_nr' to determine how
> many tasks to start. If we are talking about nested containers, pids_nr
> will be greater than tasks_nr so, mktree and cr_next_task() should be
> use 'ctx->tasks_nr' to determine how many tasks to create. Also if
> checkpointing a nested container we should view the multiple nested pid
> values a process as an attribute of the task and maybe save them in
> cr_write_task() rather than in cr_write_tree().

Lol .. who's talking about nested containers ?   ;)

(seriously: I'm not considering that now; my gut feeling is that it may
be useful to do pid_ns in userspace, like task creation - and in that
case it makes sense to keep it in cr_write_tree(). then again, I have
not looked at it in depth).

> 
> My second comment is more an orthogonal question. Suppose init_pid_ns = level
>  0 and we have a container that is nested at level 3.  If we checkpoint just
> this container, we would want to be able to restore this container at any 
> level
> 0 right ?

True. Do you see any limitation in the current code that prevents this ?

> 
> | +   int pids_pos;                   /* position pids array */
> | +   pid_t pids_active;              /* pid of (next) active task */
> 
> Do we need both pids_pos and pids_active in the ctx ? Can pids_active
> just be a local variable in cr_next_task() and cr_wait_task() ?
> IOW, isn't this always true
> 
>       pids_arr[pids_pos] == pids_active

Ok.

Oren.

> 
> | +   atomic_t tasks_count;           /* sync of tasks: used to coordinate */
> 
> Name is a bit confusing with 'tasks_nr', but the comment helps and I can't
> think of a better name.
> 
> | +   struct completion complete;     /* container root and other tasks on */
> | +   wait_queue_head_t waitq;        /* start, end, and restart ordering */
> |  };
> 
> Sukadev
> 
_______________________________________________
Containers mailing list
contain...@lists.linux-foundation.org
https://lists.linux-foundation.org/mailman/listinfo/containers

_______________________________________________
Devel mailing list
Devel@openvz.org
https://openvz.org/mailman/listinfo/devel

Reply via email to