[CRIU] [PATCH v5 3/5] Try to include userfaultfd with criu (part 1)

Pavel Emelyanov xemul at virtuozzo.com
Wed Mar 16 07:32:36 PDT 2016


On 03/15/2016 07:22 PM, Adrian Reber wrote:
> On Tue, Mar 15, 2016 at 12:03:07PM +0300, Pavel Emelyanov wrote:
>>>>>>>>>>> +static void criu_init()
>>>>>>>>>>> +{
>>>>>>>>>>> +	/* TODO: return code checking */
>>>>>>>>>>> +	check_img_inventory();
>>>>>>>>>>> +	prepare_task_entries();
>>>>>>>>>>> +	prepare_pstree();
>>>>>>>>>>> +	collect_remaps_and_regfiles();
>>>>>>>>>>> +	prepare_shared_reg_files();
>>>>>>>>>>> +	prepare_remaps();
>>>>>>>>>>> +	prepare_mm_pid(root_item);
>>>>>>>>>>> +
>>>>>>>>>>> +	/* We found a PID */
>>>>>>>>>>> +	pr_debug("root_item->pid.virt %d\n", root_item->pid.virt);
>>>>>>>>>>> +	pr_debug("root_item->pid.real %d\n", root_item->pid.real);
>>>>>>>>>>> +}
>>>>>>>>>>
>>>>>>>>>> This portion should be really resolved before merging. All of the above
>>>>>>>>>> has nothing to do with the page_read, so please, find the reason for
>>>>>>>>>> page read engine non working due to absence of this. If you need help
>>>>>>>>>> with the code, just drop me an e-mail, I'll help.
> [...]
>> The second suggestion is to just open the mm.img file and pull the vma entries
>> into the lazy daemon. There's no such helper in criu code yet, so introducing
>> one would be required.
> 
> I tried to re-implement prepare_mm_pid() (which basically parses the
> mm.img file).What I currently have is
> 
> check_img_inventory();
> prepare_task_entries();
> prepare_pstree();
> collect_remaps_and_regfiles();
> ri = rsti(root_item);
> 
> and then parts of prepare_mm_pid() re-implemented manually to get the
> VMA entries. So most of the code is still there and it seems difficult
> to reduce the amount of common code used. The common code already has
> all the knowledge to correctly handle the files and read the protocol
> buffers with all necessary sanity checks.
> 
> It would probably help me to understand the situation if I knew why this
> common code should not be used. 

Common code can and should be used, but only the one that's really required.

In particular, the call to collect_remaps_and_regfiles() should not be
here as it picks up info about files, not memory.

Collecting pstree looks legit, since lazy pages daemon should know which
processes it serves.

Collecting task_entries doesn't seem relevant, since this thing is used to
synchronize process tree restore and lazy daemon doesn't do it.

Checking the inventory is ... harmless here I would say.

> With the implementation in my latest
> patch I am re-using the existing the CRIU infrastructure to access the
> mm.img correctly as a normal restore would do? It is not clear to me why
> I rather shouldn't use the existing code. Some clarification would be
> nice, thanks.
> 
> 		Adrian
> .
> 



More information about the CRIU mailing list