Google Summer of Code 2019

From CRIU
Revision as of 20:30, 19 January 2020 by Radostin (talk | contribs) (Created page with "This page lists accepted projects that were completed during [https://summerofcode.withgoogle.com Google Summer of Code 2019]. For the list of ideas go Google Summer of Code...")
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

This page lists accepted projects that were completed during Google Summer of Code 2019. For the list of ideas go here.

Student final submissions[edit]

Abhishek Dubey - Optimize the pre-dump algorithm[edit]

Final report: https://dubeyabhishek.github.io/GSoC19CRIU/

Summary: Optimize the pre-dump algorithm to avoid pinning to many memory in RAM

Current pre-dump mode is used to write task memory contents into image files w/o stopping the task for too long. It does this by stopping the task, infecting it and draining all the memory into a set of pipes. Then the task is cured, resumed and the pipes' contents is written into images (maybe a page server). Unfortunately, this approach creates a big stress on the memory subsystem, as keeping all memory in pipes creates a lot of unreclaimable memory (pages in pipes are not swappable), as well as the number of pipes themselves can be huge, as one pipe doesn't store more than a fixed amount of data (see pipe(7) man page).

A solution for this problem is to use a sys_read_process_vm() syscall, which will mitigate all of the above. To do this we need to allocate a temporary buffer in criu, then walk the target process vm by copying the memory piece-by-piece into it, then flush the data into image (or page server), and repeat.

Ideally there should be sys_splice_process_vm() syscall in the kernel, that does the same as the read_process_vm does, but vmsplices the data

Links:

Details:

  • Skill level: advanced
  • Language: C
  • Mentor: Pavel Emelianov <xemul@virtuozzo.com>
  • Suggested by: Pavel Emelianov <xemul@virtuozzo.com>