Difference between revisions of "Comparison to other CR projects"
(Categorize) |
|||
Line 4: | Line 4: | ||
{{:DMTCP}} | {{:DMTCP}} | ||
+ | |||
+ | == [http://criu.org CRIU], [http://dmtcp.sourceforge.net DMTCP], [https://ftg.lbl.gov/projects/CheckpointRestart BLCR] == | ||
+ | |||
+ | “looks\seems like yes/no” - i found only unproved message(s) saying “yes”/“no” | ||
+ | |||
+ | “not yet” - it is officially planned or i found no reasons, why it can’t be done. | ||
+ | |||
+ | |||
+ | {| style="border-spacing:0;" | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| CRIU | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| DMTCP | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| BLCR | ||
+ | |||
+ | |- | ||
+ | | style="background-color:#dc2300;border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| | ||
+ | | style="background-color:#dc2300;border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| | ||
+ | | style="background-color:#dc2300;border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| | ||
+ | | style="background-color:#dc2300;border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| arch | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| x86_64, ARM | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| x86, x86_64, ARM | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| x86,x86_64,PPC/PPC64,ARM | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| OS | ||
+ | | colspan="3" style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| <center>Linux</center> | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| modified kernel | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes, but only for some extra features. | ||
+ | |||
+ | All unnecessary features are already in new kernel versions | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no, module can be simply modprobed | ||
+ | |||
+ | |||
+ | problems with installation on new kernels | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| special libs | ||
+ | |||
+ | |||
+ | |||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| root privileges | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes, otherwise it would be unsafe,because,for example, of parasite code | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| need to modify programs | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | there are some difficulties with statically linked applications, and with LinuxThreads (cuz it does not support them at all) | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| need to prepare tasks | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | It preloadsthe DMTCP library. That library runs before the routinemain(). It creates a second thread. Thecheckpoint thread then creates a socket to the DMTCP coordinator andregisters itself. The checkpoint thread also creates a signal handler. | ||
+ | |||
+ | |||
+ | |||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | CR shall notify processes when a checkpoint is to occur (before the kernel takes a checkpoint) to | ||
+ | |||
+ | allow the processes to prepare itself accordingly. | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| Does it change behavior of the c/r-ed programs? | ||
+ | |||
+ | |||
+ | |||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | because of wrappers on system calls | ||
+ | |||
+ | |||
+ | |||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | because of wrappers on system calls | ||
+ | |||
+ | |- | ||
+ | | style="background-color:#008000;border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| | ||
+ | | style="background-color:#008000;border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| | ||
+ | | style="background-color:#008000;border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| | ||
+ | | style="background-color:#008000;border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| | ||
+ | |||
+ | |- | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| migration | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | even if kernel ,libs, etc are newer | ||
+ | |||
+ | |||
+ | Can use Memory Changes Tracking to decrease time for dumping | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | if both kernels are recent | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | but if all is the same! | ||
+ | |||
+ | |||
+ | if even prelinked addresses are different,it will not restore | ||
+ | |||
+ | |||
+ | But it can save the whole used libs and localization files to restore program on the different machine | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| Containers | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | LXC and OpenVZ containers | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| looks like no | ||
+ | |||
+ | It doesn't support namespaces, so it probably can’t dump containers | ||
+ | |||
+ | |||
+ | |||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| looks like no | ||
+ | |||
+ | |- | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| parallel/distributed computations | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| no | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | OpenMPI, MPICH2, OpenMP, Cilk are alredy supported and Infiniband is in progress. | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | Cray MPI, Intel MPI, LAM/MPI, MPICH-V, MPICH2, MVAPICH, Open MPI, SGI MPT | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| c\r gdb with debugging app | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no, because they are using the same interface | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| X-Windows graphics programs (KDE, GNOME, etc) | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes, by using vnc | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes, by using vnc | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| seems like no | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| Solutions for invocation in the custom software | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| not yet | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | Plugins and API | ||
+ | |||
+ | |||
+ | |||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| not yet | ||
+ | |||
+ | |- | ||
+ | | colspan="4" style="background-color:#800080;border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| unix sockets | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes,all kinds | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| udp sockets | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes, both ipv4 and ipv6 | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| not yet | ||
+ | |||
+ | developers of dmtcp had no request for this | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| not yet | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| tcp sockets | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| not yet | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| remote tcp connection | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| not yet | ||
+ | |||
+ | but you can write a simple DMTCP plugin that tells DMTCP how you want to reconnect on restart | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| Infiniband | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| not yet | ||
+ | |||
+ | developing is on the half-way | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | |||
+ | |- | ||
+ | | style="background-color:#008080;border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| | ||
+ | | style="background-color:#008080;border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| | ||
+ | | style="background-color:#008080;border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| | ||
+ | | style="background-color:#008080;border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| | ||
+ | |||
+ | |- | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| multithread support | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | |- | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| multiprocess | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| process groups | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| not yet | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| zombies | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | |||
+ | |- | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| namespaces | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| no | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| no | ||
+ | |||
+ | |- | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| sessions | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| not yet | ||
+ | |||
+ | |- | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| Ptraced programs | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| no | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| no | ||
+ | |||
+ | |- | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| System V IPC | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| no | ||
+ | |||
+ | |- | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| memory mappings | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes, all kinds | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes, partially | ||
+ | |||
+ | |- | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| protected memory | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | |- | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| pipes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border:1pt solid #000000;padding:0.176cm;"| not yet | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| terminals | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | only Unix98 PTYs | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | |||
+ | |||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| non-posix files (inotify, signalfd, eventfd, etc) | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | inotify, epoll, etc. | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| Yes | ||
+ | |||
+ | epoll, eventfd, signalfd are already supported and | ||
+ | |||
+ | inotify will be supported in future | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| looks like no | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| timers | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | |||
+ | Any counter or timer active since the beginning of a process will consider the restarted process to be a new process. | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| Shared resources (files, mm, etc.) | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | files, memory, etc. | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | |||
+ | System V shared memory(shmget, etc.), mmap-based shared memory, shared sockets, pipes, file descriptors. | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | |||
+ | but it is planned to suppord shared mmap regions | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| block devices | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| looks like yes | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| looks like yes | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| no | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| character devices | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| mostly no | ||
+ | |||
+ | but /dev/null, /dev/zero, etc. are supported | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| mostly no | ||
+ | |||
+ | looks like null and zero are supported | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| mostly no | ||
+ | |||
+ | but /dev/null and | ||
+ | |||
+ | /dev/zero are supported | ||
+ | |||
+ | |- | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| capture the contents of all open files | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| yes | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| looks like no | ||
+ | | style="border-top:none;border-bottom:1pt solid #000000;border-left:1pt solid #000000;border-right:1pt solid #000000;padding:0.176cm;"| not yet | ||
+ | |||
+ | |} | ||
+ | |||
+ | |||
== External links == | == External links == |
Revision as of 13:21, 11 July 2013
This pages tries to explain differences between CRIU and other C/R solutions.
DMTCP
DMTCP implements checkpoint/restore of a process on a library level. This means, that if you want to C/R some application you should launch one with DMTCP library (dynamically) linked from the very beginning. When launched like this, the DMTCP library intercepts a certain amount of library calls from the application, builds a shadow data-base of information about process' internals and then forwards the request down to glibc/kernel. The information gathered is to be used to create an image of the application. With this approach, one can only dump applications known to run successfully with the DMTCP libraries, but the latter doesn't provide proxies for all kernel APIs (for example, inotify() is known to be unsupported). Another implication of this approach is potential performance issues that arise due to proxying of requests.
Restoration of process set is also tricky, as it frequently requires restoring an object with the predefined ID and kernel is known to provide no APIs for several of them. For example, kernel cannot fork a process with the desired PID. To address that, DMTCP fools a process by intercepting the getpid() library call and providing fake PID value to the application. Such behavior is very dangerous, as application might see wrong files in the /proc filesystem if it will try to access one via its PID.
CRIU, on the other hand, doesn't require any libraries to be pre-loaded. It will checkpoint and restore any arbitrary application, as long as kernel provides all needed facilities. Kernel support for some of CRIU features were added recently, essentially meaning that a recent kernel version might be required.
CRIU, DMTCP, BLCR
“looks\seems like yes/no” - i found only unproved message(s) saying “yes”/“no”
“not yet” - it is officially planned or i found no reasons, why it can’t be done.
CRIU | DMTCP | BLCR | |
arch | x86_64, ARM | x86, x86_64, ARM | x86,x86_64,PPC/PPC64,ARM |
OS | |||
modified kernel | yes, but only for some extra features.
All unnecessary features are already in new kernel versions |
no | no, module can be simply modprobed
|
special libs
|
no | yes | yes |
root privileges | yes, otherwise it would be unsafe,because,for example, of parasite code | no | no |
need to modify programs | no | no | yes
there are some difficulties with statically linked applications, and with LinuxThreads (cuz it does not support them at all)
|
need to prepare tasks | no | yes
It preloadsthe DMTCP library. That library runs before the routinemain(). It creates a second thread. Thecheckpoint thread then creates a socket to the DMTCP coordinator andregisters itself. The checkpoint thread also creates a signal handler.
|
yes
CR shall notify processes when a checkpoint is to occur (before the kernel takes a checkpoint) to allow the processes to prepare itself accordingly.
|
Does it change behavior of the c/r-ed programs?
|
no | yes
because of wrappers on system calls
|
yes
because of wrappers on system calls |
migration | yes
even if kernel ,libs, etc are newer
|
yes
if both kernels are recent |
yes
but if all is the same!
|
Containers | yes
LXC and OpenVZ containers |
looks like no
It doesn't support namespaces, so it probably can’t dump containers
|
looks like no |
parallel/distributed computations | no | yes
OpenMPI, MPICH2, OpenMP, Cilk are alredy supported and Infiniband is in progress. |
yes
Cray MPI, Intel MPI, LAM/MPI, MPICH-V, MPICH2, MVAPICH, Open MPI, SGI MPT |
c\r gdb with debugging app | no, because they are using the same interface | yes | no |
X-Windows graphics programs (KDE, GNOME, etc) | yes, by using vnc | yes, by using vnc | seems like no
|
Solutions for invocation in the custom software | not yet | yes
Plugins and API
|
not yet |
unix sockets | yes,all kinds | yes | no |
udp sockets | yes, both ipv4 and ipv6 | not yet
developers of dmtcp had no request for this |
not yet |
tcp sockets | yes | yes | not yet |
remote tcp connection | yes | not yet
but you can write a simple DMTCP plugin that tells DMTCP how you want to reconnect on restart |
no |
Infiniband | no | not yet
developing is on the half-way |
no |
multithread support | yes | yes | yes |
multiprocess | yes | yes | yes |
process groups | yes | yes | not yet |
zombies | yes | no | no |
namespaces | yes | no | no |
sessions | yes | yes | not yet |
Ptraced programs | no | yes | no |
System V IPC | yes | yes | no |
memory mappings | yes, all kinds | yes | yes, partially |
protected memory | yes | yes | yes |
pipes | yes | yes | not yet |
terminals | yes
only Unix98 PTYs |
yes
|
yes |
non-posix files (inotify, signalfd, eventfd, etc) | yes
inotify, epoll, etc. |
Yes
epoll, eventfd, signalfd are already supported and inotify will be supported in future |
looks like no |
timers | yes | no
Any counter or timer active since the beginning of a process will consider the restarted process to be a new process. |
yes |
Shared resources (files, mm, etc.) | yes
files, memory, etc. |
yes
System V shared memory(shmget, etc.), mmap-based shared memory, shared sockets, pipes, file descriptors. |
no
but it is planned to suppord shared mmap regions |
block devices | looks like yes | looks like yes | no
|
character devices | mostly no
but /dev/null, /dev/zero, etc. are supported |
mostly no
looks like null and zero are supported |
mostly no
but /dev/null and /dev/zero are supported |
capture the contents of all open files | yes | looks like no | not yet |