[PATCH] c/r: Add UTS support (v4)

Oren Laadan orenl at cs.columbia.edu
Fri Mar 20 13:48:28 PDT 2009



Dave Hansen wrote:
> On Fri, 2009-03-20 at 15:34 -0400, Oren Laadan wrote:
>> 3) In checkpoint, for each task we'll do:
>>         if (nsproxy seen first time) {
>>                 alloc nsproxy_objref
>>                 for each ns in nsproxy {
>>                         if (ns seen first time) {
>>                                 alloc ns_objref
>>                                 save state of ns
>>                         } else {
>>                                 save existing ns_objref
>>                         }
>>                 }
>>         } else {
>>                 save existing nsproxy_objref
>>         }
> 
> The problem with this is that the nsproxy is in no way, shape, or form
> exposed to userspace.  It is wholly an internal implementation detail.
> 
> Take out all the nsproxy bits you have above, and do this for each task:
> 
>>                for each ns in nsproxy {
>>                         if (ns seen first time) {
>>                                 alloc ns_objref
>>                                 save state of ns
>>                         } else {
>>                                 save existing ns_objref
>>                         }
>>                 }
> 
> And it will still _function_ *exactly* the same.  It won't be quite as
> cache or space compact, but that's fine.
> 
> If you're worried about this extra space or cache impact, it can be
> fixed up at restart with:
> 
> 	if (nsproxy_equal(tsk->nsproxy, parent->nsproxy)) {
> 		get_nsproxy(parent->nsproxy);
> 		put_nsproxy(tsk->nsproxy);
> 		tsk->nsproxy = parent->nsproxy;
> 	}
> 
> Voila.  It won't be perfect.  If the parent doesn't work we could also
> try the siblings.  

Yup.

Does that scale well with many (1000's) of tasks ?

(The motivation to expose 'nsproxy_objref' to user space was to allow
user-space to decide on a sequence of clones/unshared that will create
an equivalent process tree with space-efficient nsproxy's).

Perhaps instead of nsproxy_equal() we could use an 'nsproxy_objref'
to know a-priori that it is common, and save the "compare-and-swap"
phase altogether.

Oren.


More information about the Containers mailing list