[CRIU] [PATCH] ns: Dump namespaces in parallel
Andrew Vagin
avagin at parallels.com
Tue Sep 23 02:36:29 PDT 2014
Acked-by: Andrew Vagin <avagin at parallels.com>
On Mon, Sep 22, 2014 at 04:28:52PM +0400, Pavel wrote:
> The main reason for this is -- dumping namespace has a lot of
> points when the process just waits for something. At the same
> time criu process wait for the ns dumper and doesn't dump
> others.
>
> The great example of waiting for something is setns syscall.
> Very often it calls synchronize_rcu() which can be quite long.
> Let other processes do smth useful while this.
>
> Signed-off-by: Pavel Emelyanov <xemul at parallels.com>
> ---
> namespaces.c | 14 +++++++++++---
> 1 file changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/namespaces.c b/namespaces.c
> index e73760c..d15f1ba 100644
> --- a/namespaces.c
> +++ b/namespaces.c
> @@ -459,7 +459,7 @@ int dump_namespaces(struct pstree_item *item, unsigned int ns_flags)
> {
> struct pid *ns_pid = &item->pid;
> struct ns_id *ns;
> - int pid, status;
> + int pid, nr = 0;
> int ret = 0;
>
> /*
> @@ -504,8 +504,14 @@ int dump_namespaces(struct pstree_item *item, unsigned int ns_flags)
> exit(ret);
> }
>
> - ret = waitpid(pid, &status, 0);
> - if (ret != pid) {
> + nr++;
> + }
> +
> + while (nr > 0) {
> + int status;
> +
> + ret = waitpid(-1, &status, 0);
> + if (ret < 0) {
> pr_perror("Can't wait ns dumper");
> return -1;
> }
> @@ -514,6 +520,8 @@ int dump_namespaces(struct pstree_item *item, unsigned int ns_flags)
> pr_err("Namespaces dumping finished with error %d\n", status);
> return -1;
> }
> +
> + nr--;
> }
>
> pr_info("Namespaces dump complete\n");
> --
> 1.8.4.2
>
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
More information about the CRIU
mailing list