From: Oren Laadan <orenl-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>
To: Sukadev Bhattiprolu
<sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org>
Cc: Containers
<containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org>
Subject: Re: [v10][PATCH] Implement clone_with_pids() syscall
Date: Mon, 02 Nov 2009 13:10:07 -0500 [thread overview]
Message-ID: <4AEF207F.3000904@librato.com> (raw)
In-Reply-To: <20091101204132.GA22116-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Hi,
What happened to eclone() or clonex() ?
('e' or 'x' for extended, and we extended it in a way so that
future extension need not require a new syscall).
Anything but clone_with_pids() ...
Otherwise, for patches 3 and 6:
Acked-by: Oren Laadan <orenl-eQaUEPhvms7ENvBUuze7eA@public.gmane.org>
Oren.
Sukadev Bhattiprolu wrote:
> [v10][PATCH 0/9] Implement clone_with_pids() system call
>
> To support application checkpoint/restart, a task must have the same pid it
> had when it was checkpointed. When containers are nested, the tasks within
> the containers exist in multiple pid namespaces and hence have multiple pids
> to specify during restart.
>
> This patchset implements a new system call, clone_with_pids() that lets a
> process specify the pids of the child process.
>
> Patches 1 through 6 are helper patches needed for choosing a pid for the
> child process.
>
> PATCH 8 defines a prototype of the new system call. PATCH 9 adds some
> documentation on the new system call, some/all of which will eventually
> go into a man page.
>
> Changelog[v10-rc1]:
> - [Linus Torvalds] Use PTREGSCALL() implementation for clone rather
> than the generic system call
> - Rename clone3() to clone_with_pids()
> - Update Documentation/clone_with_pids() to show example usage with
> the PTREGSCALL implementation.
>
> Changelog[v9]:
> - [Pavel Emelyanov] Drop the patch that made 'pid_max' a property
> of struct pid_namespace
> - [Roland McGrath, H. Peter Anvin and earlier on, Serge Hallyn] To
> avoid inadvertent truncation clone_flags, preserve the first
> parameter of clone3() as 'u32 clone_flags' and specify newer
> flags in clone_args.flags_high (PATCH 8/9 and PATCH 9/9)
> - [Eric Biederman] Generalize alloc_pidmap() code to simplify and
> remove duplication (see PATCH 3/9].
>
> Changelog[v8]:
> - [Oren Laadan, Louis Rilling, KOSAKI Motohiro]
> The name 'clone2()' is in use - renamed new syscall to clone3().
> - [Oren Laadan] ->parent_tidptr and ->child_tidptr need to be 64bit.
> - [Oren Laadan] Ensure that unused fields/flags in clone_struct are 0.
> (Added [PATCH 7/10] to the patchset).
>
> Changelog[v7]:
> - [Peter Zijlstra, Arnd Bergmann]
> Group the arguments to clone2() into a 'struct clone_arg' to
> workaround the issue of exceeding 6 arguments to the system call.
> Also define clone-flags as u64 to allow additional clone-flags.
>
> Changelog[v6]:
> - [Nathan Lynch, Arnd Bergmann, H. Peter Anvin, Linus Torvalds]
> Change 'pid_set.pids' to 'pid_t pids[]' so sizeof(struct pid_set) is
> constant across architectures (Patches 7, 8).
> - (Nathan Lynch) Change pid_set.num_pids to unsigned and remove
> 'unum_pids < 0' check (Patches 7,8)
> - (Pavel Machek) New patch (Patch 9) to add some documentation.
>
> Changelog[v5]:
> - Make 'pid_max' a property of pid_ns (Integrated Serge Hallyn's patch
> into this set)
> - (Eric Biederman): Avoid the new function, set_pidmap() - added
> couple of checks on 'target_pid' in alloc_pidmap() itself.
>
> === IMPORTANT NOTE:
>
> clone() system call has another limitation - all but one, available bits in
> clone-flags are in use and if more new clone-flags are needed, we will need
> a variant of the clone() system call.
>
> It appears to make sense to try and extend this new system call to address
> this limitation as well. The requirements of a new clone system call could
> then be summarized as:
>
> - do everything clone() does today, and
> - give application an ability to choose pids for the child process
> in all ancestor pid namespaces, and
> - allow more clone_flags
>
> Contstraints:
>
> - system-calls are restricted to 6 parameters and clone() already
> takes 5 parameters, any extension to clone() interface would require
> one or more copy_from_user(). (Not sure if copy_from_user() of ~40
> bytes would have a significant impact on performance of clone()).
>
> Based on these requirements and constraints, we explored a couple of system
> call interfaces (in earlier versions of this patchset). Based on input from
> Arnd Bergmann and others, the new interface of the system call is:
>
> struct clone_args {
> u64 clone_flags_high;
> u64 child_stack_base;
> u64 child_stack_size;
> u64 parent_tid_ptr;
> u64 child_tid_ptr;
> u32 nr_pids;
> u32 clone_args_size;
> u64 reserved1;
> };
>
> sys_clone_with_pids(u32 flags_low, struct clone_args *cargs,
> pid_t *pids)
>
> Details of the struct clone_args and the usage are explained in the
> documentation (PATCH 9/9).
>
> NOTE:
> While this patchset enables support for more clone-flags, actual
> implementation for additional clone-flags is best implemented as
> a separate patchset (PATCH 8/9 identifies some TODOs)
>
> Signed-off-by: Sukadev Bhattiprolu <sukadev-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
>
> _______________________________________________
> Containers mailing list
> Containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org
> https://lists.linux-foundation.org/mailman/listinfo/containers
next prev parent reply other threads:[~2009-11-02 18:10 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-01 20:41 [v10][PATCH] Implement clone_with_pids() syscall Sukadev Bhattiprolu
[not found] ` <20091101204132.GA22116-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-11-01 20:42 ` [v10][PATCH 1/9] Factor out code to allocate pidmap page Sukadev Bhattiprolu
2009-11-01 20:43 ` [v10][PATCH 2/9] Have alloc_pidmap() return actual error code Sukadev Bhattiprolu
2009-11-01 20:44 ` [v10][PATCH 3/9] Define set_pidmap() function Sukadev Bhattiprolu
2009-11-01 20:44 ` [v10][PATCH 4/9] Add target_pids parameter to alloc_pid() Sukadev Bhattiprolu
2009-11-01 20:44 ` [v10][PATCH 5/9] Add target_pids parameter to copy_process() Sukadev Bhattiprolu
2009-11-01 20:45 ` [v10][PATCH 6/9] Check invalid clone flags Sukadev Bhattiprolu
2009-11-01 20:45 ` [v10][PATCH 7/9] Define do_fork_with_pids() Sukadev Bhattiprolu
2009-11-01 20:45 ` [v10][PATCH 8/9] Define clone_with_pids() syscall Sukadev Bhattiprolu
[not found] ` <20091101204548.GG23168-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-11-02 18:09 ` Oren Laadan
[not found] ` <4AEF2077.5080107-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>
2009-11-03 6:44 ` Sukadev Bhattiprolu
[not found] ` <20091103064454.GA22483-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2009-11-03 8:46 ` Arnd Bergmann
2009-11-03 16:16 ` Dave Hansen
2009-11-03 17:16 ` Sukadev Bhattiprolu
2009-11-04 0:32 ` Sukadev Bhattiprolu
2009-11-01 20:46 ` [v10][PATCH 9/9] Document " Sukadev Bhattiprolu
2009-11-02 18:10 ` Oren Laadan [this message]
[not found] ` <4AEF207F.3000904-RdfvBDnrOixBDgjK7y7TUQ@public.gmane.org>
2009-11-02 20:17 ` [v10][PATCH] Implement " Sukadev Bhattiprolu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4AEF207F.3000904@librato.com \
--to=orenl-rdfvbdnroixbdgjk7y7tuq@public.gmane.org \
--cc=containers-cunTk1MwBs9QetFLy7KEm3xJsTq8ys+cHZ5vskTnxNA@public.gmane.org \
--cc=sukadev-23VcF4HTsmIX0ybBhKVfKdBPR1lH4CV8@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox