[CRIU] [RFD] (v)omitting vDSO PFN check in CRIU

Cyrill Gorcunov gorcunov at virtuozzo.com
Thu Jun 1 23:58:10 MSK 2017


On 06/01/2017 10:48 PM, Dmitry Safonov wrote:
> Hi guys, criu-ml, et al.
> 
> I want to hear your opinions on my proposed solution to a bug.
> 
> Currently, here we have:
> 1. During checkpointing criu searches vdso vma in dumpee.
>    It's done by looking into /proc/../maps during maps parsing.
> 2. Pre-v3.16 kernels lose "[vdso]" naming for vma if vdso was
>    mremap()'ed. Futhermore, such kernels may return "[vdso]"
>    name for non-vdso vma if such vma was placed on position,
>    from which vdso vma was moved with mremap().
>    That's because arch_vma_name() returns on pre-v3.16 kernels
>    hint "[vdso]" if vma.start_addr <= mm->context.vdso, where
>    mm->context.vdso was never updated.
> 3. To differ real vdso vma from other vmas, criu uses pagemap
>    for criu to find vdso's pfn and compares it with dumpee's.
>    If pfn for vma, which previously from /proc/../maps was
>    supposed to be vdso, differs from criu's vdso pfn,
>    such vma is considered to be mishinted and is dumped as
>    usual anonymous area.
> 
> It all worked good, till we added to vzkernel uname and time-monotonic
> virtualization: that virtualization results in uniq physical pages for
> vdso per-CT. That means that two processes in one CT1 will have the
> same physicall address for vdso, but process A from CT1 and process B
> from CT2 will have different physicall addresses for vdso.
> So, today with @ptikhomirov on Jenkins with vz7 we found that every
> process in a new UTS-ns gets during dump mishinted vdso address
> (as uts-ns vdso's pfn differ from init-uts-ns's vdso pfn).
> 
> Here is what I propose as a solution:
> o Add a kdat test, which tests if "[vdso]" hint stays after mremap() of
> vdso area.
> o Don't use checking of vdso's pfn during dumping if the hint stays.
> 
> @xemul, I know that you don't welcome checks for non-mainstream
> features, such as uname and gtod virtualization.
> But, I think this way will suit *both* ms and vz platforms.
> Reason, why it's good for ms criu version is that we will skip
> open(), read(), close() for pagemap per each dumpee (for all kernels
> newer than v3.16). That's a hole bunch of syscalls!
> 
> So, does the rework of vDSO PFN check to kdat test for "[vdso]" hint
> after mremap() sounds sane?
> Opinions?

Sounds ok to me as a first iteration. If @xemul won't mind I would try
this way and see how it goes. After all it'll sit in criu-dev for some
time so we could check if it worth the efforts.

> Other suggestions?
> 


-- 
    Cyrill


More information about the CRIU mailing list