How it works now
Dumping
Currently memory dumping depends on 3 big technologies:
- /proc/pid/map_files/ directory with links is used to determine
- which file is mapped
- shared memory "identifier" to detect the sharing
- proc pagemap file says which pages are to be dumped and which are not (to be fixed as well)
- Ptrace SEIZE is used to grab pages from task's VM into pipe (with vmsplice)
Restoring
This one depends only on the /proc/pid/map_files/ to restore the shmem regions -- tasks just open some other's link and map it to create shmem region. The pages restoration just writes page data "in place".
Non linear mappings
Currently we don't support non-linear mappings (fail dump if present)