mirror of
https://github.com/checkpoint-restore/criu
synced 2025-08-31 06:15:24 +00:00
a99b7c1ba348ff51ed1764772557fd75d88e9b45
When splicing page server data from UNIX socket we may get error (EAGAIN) from splice if no data is available on the socket yet. This is because the SPLICE_F_NONBLOCK flag is checked by af_unix.c in the kernel to decide whether or not to do blocking read. This is not symmetrical with TCP sockets, which only check for the socket's O_NONBLOCK flag for the same decicion. Dropping the SPLICE_F_NONBLOCK flag is not possible too, as otherwise we'll block on the pipe when trying to put data into it. Even if part of the data fits into it kernel would block anyway untill full buffer is in. And there will be no read() from the pipe, as it should happen one step later in the same task. So to untie this, we need to wait for the data explicitly with poll(). Signed-off-by: Pavel Emelyanov <xemul@virtuozzo.com>
CRIU (Checkpoint and Restore in Userspace)
An utility to checkpoint/restore tasks. Using this tool, you can freeze a running application (or part of it) and checkpoint it to a hard drive as a collection of files. You can then use the files to restore and run the application from the point it was frozen at. The distinctive feature of the CRIU project is that it is mainly implemented in user space.
The project home is at http://criu.org.
Pages worth starting with are:
- Kernel configuration, compilation, etc
- A simple example of usage
- More sophisticated example with graphical app
A video tour on basic CRIU features
How to contribute
- How to submit patches;
- Send all bug reports to mailing list;
- Spread the word about CRIU in social networks;
Description
Languages
C
86%
Python
6.1%
Java
2.6%
Shell
2.6%
Makefile
2%
Other
0.7%