- 19 May, 2017 19 commits
-
-
Andrei Vagin authored
Processes can be restored in another mntns, so mnt_id will be useless in this case. If mntns isn't dumped, we have to dump a path to a mount point. Cc: Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com> Reviewed-by:
Cyrill Gorcunov <gorcunov@openvz.org> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
There were kernel bug with 32-bit mmap() returning 64-bit pointer. The fix is in Torvalds master, will be released in v4.12 kernel. Checkpointing after v4.9 kernel works good, but restoring will result in application which will mmap() 64-bit addresses resulting in segfault/memory corruptions/etc. As our policy is fail on dump if we can't restore on the same target, error checkpointing for v4.9. Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Andrei Vagin authored
The idea is simple. Everyone has to wait its children, a restore is interrupted if we found abandoned zombie. Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
We currently can batch pagemap entries into page-read list, but will need to queue them into per-pstree_entry one. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
The pages.img will need to get opened one more time w/o the pagemap.img. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
1. Commit 8b99809a ("compel: make plugins .a archives") changed the suffix of compel plugins, so this test no longer compiles. 2. "compel plugins" can print auxiliary plugins now, let's use it. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
As we have more than 1 working plugin right now, let's implement the TODO item for "compel plugins" command. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Andrei Vagin authored
Ubuntu 14.04 (Travis) doesn't have it. Reviewed-by:
Kirill Tkhai <ktkhai@virtuozzo.com> Looks-good-to: Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Andrei Vagin authored
Reviewed-by:
Kirill Tkhai <ktkhai@virtuozzo.com> Looks-good-to: Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
Apparently, setup.py from distutils interprets --root= option without an argument as "--root=." and we end up with what is described in https://github.com/xemul/criu/issues/309. Fix is to prepend DESTDIR value (if any) to --prefix argument. v2: fix uninstall as well v3: same code, resent via gmail Reported-by:
Juraj Oršulić <juraj.orsulic@fer.hr> Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
soccr.h: After previous patch <linux/types.h> is not needed anymore, <netinet/tcp.h> is needed as we test for it in feature tests, i.e., struct tcp_repair_window is declared there. Also drop forward-declaration of (struct libsoccr_sk) - it's declared again below. soccr.c: Sort headers by name so errors like twice-including errno.h will not happen again. Also remove assert.h. Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
As uint32_t already has occupied the header, use it for all 32-bit unsigns. That will allow to drop additional include <linux/types.h>. Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
When running 'cirt x dir rss' one will see the way pagemap chunks are scatered across the VMs of processes. Sample output from the env00 zdtm test is 22 400000 / 1 00400000 / 5 /root/criu/test/zdtm/static/env00 604000 / 2 00604000 / 1 /root/criu/test/zdtm/static/env00 00605000 / 1 /root/criu/test/zdtm/static/env00 853000 / 1 00853000 / 33 7faba2d4b000 / 6 7faba2d4b000 / 4 /usr/lib64/libc-2.22.so 7faba2d4f000 / 2 /usr/lib64/libc-2.22.so 7faba2d51000 / 2 7faba2d51000 / 4 7faba2d54000 / 1 ~ 7faba2f64000 / 3 7faba2f64000 / 3 7faba2f74000 / 1 7faba2f74000 / 1 7faba2f75000 / 2 7faba2f75000 / 1 /usr/lib64/ld-2.22.so 7faba2f76000 / 1 /usr/lib64/ld-2.22.so 7faba2f77000 / 1 7faba2f77000 / 1 7fffb4de3000 / 3 7fffb4de2000 / 70 7fffb4e24000 / 2 ~ 7fffb4e27000 / 1 ~ 7fffb4f6a000 / 2 7fffb4f6a000 / 2 Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
The same as for Checkpointing - we need to call 32-bit syscall for compatible tasks here to correctly restore compat_robust_list, not robust_list. Note: I check here restorer's *task* arg for compatible mode, not restorer *thread* arg. As changing application's mode during runtime is very rare thing itself, application that runs different bitness threads is most likely not present at all. If we ever meet such application, this could be improved. Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
The kernel keeps two different pointers for 32-bit and 64-bit futex lists: robust_list and compat_robust_list in task_struct. So, dump compat_robust_list for ia32 tasks. Note: this means that one can set *both* compat_robust_list and robust_list pointers by using as we're here 32-bit and 64-bit syscalls. That's one of mixed-bitness application questions. For simplification (and omitting more syscalls), we dump here only one of the pointers. Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Check for presence of robust futex list is in the reality (futex_rla_len != 0). That does code on dumping, in get_task_futex_robust_list(): > ret = syscall(SYS_get_robust_list, pid, &head, &len); > if (ret < 0 && errno == ENOSYS) { [..] > len = 0; [..] > } [..] > info->futex_rla_len = (u32)len; And in images: futex_rla_len == 0 means that futex is not present. So, we don't need additional restorer's parameter `has_futex' which is always true, remove it. Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Dmitry Safonov authored
Cleanup: use nr, provided by compel. Signed-off-by:
Dmitry Safonov <dsafonov@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
- 10 May, 2017 21 commits
-
-
Pavel Emelyanov authored
Modules pre-load is also slow, but guarding this code with the presence of criu.kdat cache file seems reasonable. Or course, one may unload the needed modules by hands, but such smart user may as well remove the /run/criu.kdat file :) Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
Doing kerndat checks on every criu start is way too slow. We need some way to speed this checks up on a particular box. As suggested by Andre, Dima and Mike let's try to keep the collected kdat bits into some tmpfs file. Keeping it on tmpfs would invaludate this cache on every machine reboot. There have been many suggestions how to generate this file, my proposal is to create it once the kdat object is filled by criu, w/o any explicit command. Optionally we can add 'criu kdat --save|--drop' actions to manage this file. v2: * don't ignore return code of write() (some glibcs complain) * unlink tmp file in case rename failed v3: * add one more magic into kerndat_s which is the 'date +%s' * ignore any errors opening or saving cache. Only size/magic mismatch matters (and result in dropping the cache) * cache file path is Makefile-configurable (RUNDIR) * don't save cache if kerndat auto-detection failed v4: * Use ?= for RUNDIR definition. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
v2: When uffd is present, the reported features may still be 0, so we need one more bool for uffd syscall itself. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
Introduce 3-state mode and check them always. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kirill Tkhai authored
Some get_status() methods may allocate data, because not all of the fields in /proc/[pid]/status file have the fixed size. For example, NSpid, which size may vary. Introduce new method free_status() in counterweight for such type get_status() methods. it will be called in case of we go to try_again and need to free allocated data. Also, introduce data parameter for a use in the future. Signed-off-by:
Kirill Tkhai <ktkhai@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kirill Tkhai authored
The goal of this function is to compare everything except caps, but caps size is took to compare. It's wrong, there must be used offsetof(struct proc_status_creds, cap_inh) instead. Also, sigpnd may be different too. v3: Move excluding sigpnd from comparation in this patch (was in another patch). Reorder fields in seize_task_status(). Signed-off-by:
Kirill Tkhai <ktkhai@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
Having a "header library" is nice if it's small and clean, but - we compile its code a few times; - there is no distinction between internal and external functions. Let's separate functions out of header and into a .c file. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
The function is not included into the library, so having its prototype there was a shortcut. Move it to a separate include file. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
This is an auxiliary source file. The corresponding object file was cleaned, but .d was not. Add it to SRC/OBJ/DEP so the appropriate files will be cleaned automatically. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
MAKEFLAGS += -r only works for sub-make, and it is not applicable to the current instance. Since previous commit make is not re-running itself (after re-reading deps files), so MAKEFLAGS no longer works. Use one more way to disable built-in rules that stand in our way. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
As it was pointed out by our esteemed maintainer (let his light shine), after my recent changes to test/zdtm Makefiles all dependencies are regenerated even if we only need to build a single test (for example, cd test/zdtm/static && make env00). This was caused by "-include $(DEP)" statement. Make sees that these files are need to be included, but are missing, and since it knows how to generate them it goes on to do so. The solution is to use $(wildcard) function which returns the list of _existing_ files, and so include will only receive the files that exist. Reported-by:
Andrei Vagin <avagin@virtuozzo.com> Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Kir Kolyshkin authored
inotify_system_nodel.c is supposed to be a symlink to inotify_system.c, but somehow the file was committed. This, together with the statement in Makefile to recreate the file, lead to replacing the file with a symlink during make. Remove the file, add the symlink, and remove the Makefile rule. PS yes, I have checked the files are identical. Signed-off-by:
Kir Kolyshkin <kir@openvz.org> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
When we don't restore any namespaces criu forces tasks to wake it up two times simply to no-op and wake up tasks back. This can be optimized by simply omitting the not needed wakeups. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
Here's why: This stage is needed to make sure all tasks have appeared and did some actions (that are called before restore_finish_stage()). With this description there's no need in involving criu process in it, this stage is purely inter-tasks sync point. Taking into account we do already make root task wait for others to complete forking (it calls restore_wait_ther_tasks()) we may rework this stage not to involve criu process in it. Here's how: So the criu task starts the forking stage, then goes waiting for "inprogress tasks". The latter wait is purely about nr_in_progress counter, thus there's no strict requirement that the stage remains the same by the time criu is woken up. Siad that, the root task waits for other tasks to finish forking, does fini_restore_mntns() (already in the code), then switches the stage to the next (the RESTORE one). Other tasks do normal staging barrier. Criu task is not woken up as nr_in_progress always remains >= 1. The result is -2 context switches -- from root task to criu and back -- which gives us good boost when restoring single task app. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
Describe what the tasks do during restore and what the expectations at the sync points are. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
Looks like this separate stage is not needed. The scripts involved in ns restore are synchronized with existing stages like this: criu: root task: ROOT_TASK stage <appear> "setup-ns" script PREPARE_NAMESPACES prepare_namespace() "post-setup-ns" script FORKING restore_task_mnt_ns() <everything else> which seems to be OK. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
This is wat root task does -- calls prepare_namespace(). Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
The stage name is what tasks do, not what criu waits for. When the first stage is started we want the root task to come up, rather than namespaces to get restored. Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-
Pavel Emelyanov authored
Signed-off-by:
Pavel Emelyanov <xemul@virtuozzo.com> Signed-off-by:
Andrei Vagin <avagin@virtuozzo.com>
-