[CRIU] Re: [RFC 0/4] Bring ability to multiple c/r of a program
Pavel Emelyanov
xemul at parallels.com
Mon Jul 23 02:42:58 EDT 2012
On 07/23/2012 10:35 AM, Cyrill Gorcunov wrote:
> On Mon, Jul 23, 2012 at 10:26:20AM +0400, Pavel Emelyanov wrote:
>> On 07/23/2012 10:07 AM, Cyrill Gorcunov wrote:
>>> On Mon, Jul 23, 2012 at 07:21:28AM +0400, Pavel Emelyanov wrote:
>>>> On 07/20/2012 09:33 PM, Cyrill Gorcunov wrote:
>>>>> Guys, as you know we've a bit of problem c/r'ing program
>>>>> being previously checkpointed, such as
>>>>>
>>>>> - resident restorer code get accumulated over c/r sessions
>>>>
>>>> Yes, this is the problem.
>>>>
>>>>> - problem with zero-size VMA rest from clone() stack
>>>>
>>>> What is it?
>>>
>>> If we check out /prot/pid/maps of restored task we will find
>>> a vma with zero size. I found that this vma comes from our
>>> "stask" passed to clone() call. It seems libc has some additional
>>> reference to this vma and when we do munmap in restorer code the
>>> vma stays alive even after, but with zero size.
>>
>> Libc cannot reference VMA object in kernel. Need to find out why it's there.
>
> Yes, I've tried that at friday. Continue trying...
>
>>>> With this after restore we have only one vma left which looks like
>>>> tons of zero and several bytes of code. On 2nd restore we can just memcmp
>>>> this VMA and do not re-load it again if it matches.
>>>
>>> And how pray tell it's differ from uuid approach? :) We still to
>>> figure out in parasite dumper code that some particular vma remains
>>> from restorer and without _speacial_ markers injected into memory
>>> you simply can't be sure if you don't miss dumping valid code.
>>
>> My markers are not special, but the code we're about to inject.
>
> Again, Pavel, you're pointing "On 2nd restore we can just memcmp
> this VMA and do not re-load it again if it matches" this is bloody
> wrong. The user might have some previously checkpointer program
> running, then he recompiles the crtools and here are two variants
>
> 1) we write all this restorer code in assembly, which means we
> _always_ generate same code for all program versions
We _always_ generate the same code for the 2nd restorer for all program
versions.
> 2) we use C, thus crtools instructions might have been changed
> between builds
>
> in either way it's pretty fragile to "memcmp" over restorer blob
> for instructions match.
>
> With uuid approach crtools need to meet at least two conditions
> on restorer blob which can't be met without special construction
> of such vma area
>
> 1) VMA must be executable
> 2) VMA must _start_ with uuid and its sha1 hash
>
> these conditions will never met in real programs.
Please, prove.
> This makes me sure that uuid approach is a way better than complex two
> blobs scheme.
>
> Cyrill
> .
>
More information about the CRIU
mailing list