mem: Protobuf format for page dumps

Since now we drain pages out of parasite, we can invent any format for
page dumps. Let is be ... prorobuf one! :)

Another thing to keep in mind, is that we're about to use splices and
implement iterative migration, so it's better to have actual pages be
page-aligned in the image.

And -- backward compatibility. That said the new format is:

1. pagemap-... file which contains a header (currently with a ID of
   the image with pages, see below) and an array of <nr_pages:vaddr>
   pairs. The first value means "how many pages to take from the
   file with pages (see below)" and the second -- where in the task
   address space to put them. Simple.

2. pages-... file which containes only pages one by one (thus aligned
   as we want).

This patch breaks backward compatibility (old images with pages wil
be restored and then crash). Need to do it before v0.5 release.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
mem: Abstraction layer for putting pages into image

We'll send them over network soon, so prepare abstraction layer for
this. Shmem is not on this scheme yet.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
mem: Introduce page server

The page server is a process, that is about to get pages over
the network and put them into pagemap- + pages- images. Right
now what it does is simply get the data and puts it into the
image files. When we have dirty set tracking in the kernel the
page server will have to collect "page changes" and properly
integrate them into images.

Running crtools with page server is like this:

dst_node# crtools page-server --port <port> -D dump/ ...
src_node# crtools dump -t <pid> --page-server --address <dst_node> --port <port> -D dump/ ...

After this images from dst_node/dump/ and src_node/dump/ should
be put into one place and tasks can be restored out of it.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
zdtm: Test how page server works

When -p is used, launch page server in the same dir as
crtools dump is to get fill dump in it.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
mem: Raise the page images IDs base for page server

Currently shmem generates page images in parallel
with page server and IDs may intersect. Fix this by
making page server create larger IDs.

Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
app-emu/lxc: create /var/run/netns/

In Fedora /var/run is on tmpfs, so all directories should be
recreated each times.

Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
zdtm: check unshared descriptors for one end of a pipe

Signed-off-by: Andrey Vagin <avagin@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
image: Fixup error paths in check_img_inventory

 - Free unpacked PB data
 - Close file descriptor

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
cr-restore: Report the mem size if mmap failed

Without patch

 | Error (cr-restore.c:414): Unable to reserve memory: Invalid argument

with applied

 | Error (cr-restore.c:414): Unable to reserve memory (0 bytes): Invalid argument

more convenient for debugging.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
ids: Don't forget to setup task state in write_img_inventory

Need to have proper fake-item state to make this code work ok:

get_task_ids
if (item->state != TASK_DEAD) {
	ret = dump_task_kobj_ids(item);
	if (ret)
		goto err_free;

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Signed-off-by: Pavel Emelyanov <xemul@parallels.com>
make: Don't generate tags/cscope for tools/

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
cpt2: Initial commit

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
Massive update

 - can collect inotify objects
 - can convert pages and VMA (partially),
   still some flags on VMA are dangling
   and need to figure out how to deal with
   shared pages.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
test: Add trivial 102.cpt

Where init is rather a busy loop

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
task: Start converting CoreEntry

GP registers and FPU state are covered.

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
task: Add stub for task_state

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
task: Add stubs for rest of per-task image files

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
inventory: Write kIDs from root task

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
mm: Add stub for shmem pages

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>
task: Add a bunch of stubs for task images

Signed-off-by: Cyrill Gorcunov <gorcunov@openvz.org>