# Checkpoint/restore streamer

The Cedana daemon supports checkpoint/restore via high-performance low-overhead streaming. It's powered by the [streamer plugin](https://github.com/cedana/cedana-image-streamer), which is a fork of CRIU's [image streamer](https://github.com/checkpoint-restore/criu-image-streamer).

{% hint style="info" %}
Real benefits of streaming are realized only when checkpointing and restoring to/from a remote location. See [remote storage](#remote-storage).
{% endhint %}

## Prerequisites

1. Create an account with Cedana, to get access to the streamer plugin. See [authentication](https://docs.cedana.ai/daemon/get-started/authentication).
2. Set the Cedana URL & authentication token in the [configuration](https://docs.cedana.ai/daemon/get-started/configuration).
3. Install the streamer plugin with `sudo cedana plugin install streamer`.
4. Ensure the daemon is running, see [installation](https://docs.cedana.ai/daemon/get-started/installation).
5. Do a health check to ensure the plugin is ready, see [health checks](https://docs.cedana.ai/daemon/get-started/health).

## Checkpoint

The `cedana dump` subcommand supports a `--streams <n>` flag, where `n` is the number of parallel streams to use (minimum of 2). For example:

```sh
cedana dump process <pid> --streams 4
```

This will directly stream the checkpoint to a directory, using 4 parallel streams. You will notice that the checkpoint directory contains 4 separate image files:

```
-rw-r--r-- 1 root root 145K Feb 19 15:13 img-0
-rw-r--r-- 1 root root  17K Feb 19 15:13 img-1
-rw-r--r-- 1 root root 209K Feb 19 15:13 img-2
-rw-r--r-- 1 root root 188K Feb 19 15:13 img-3
```

## Restore

The `cedana restore` will automatically detect if the checkpoint was taken with streaming, and will use the same number of streams to restore. For example:

```sh
cedana restore process --path <path-to-dump>
```

## Compression

All compression algorithms supported for basic checkpoint/restore are supported. See [compression](https://docs.cedana.ai/daemon/cr#compression) for more information.

## Remote storage

Cedana supports streaming to/from remote storage, through storage plugins. Check out the following guides for specific remote storage:

* [Amazon S3](https://docs.cedana.ai/daemon/storage/s3)
* [Google Cloud Storage](https://docs.cedana.ai/daemon/storage/gcs)
* [Cedana Storage](https://docs.cedana.ai/daemon/storage/cedana)

{% hint style="info" %}
The daemon simply reads/writes from the filesystem. This is also the case for streaming, with the additional requirement that the underlying filesystem must be [POSIX-compliant](https://grimoire.carcano.ch/blog/posix-compliant-filesystems/). To checkpoint/restore to/from a remote directory, you can also use a FUSE-based filesystem mount backed by your network storage. For Amazon's S3, check out [s3fs-fuse](https://github.com/s3fs-fuse/s3fs-fuse).
{% endhint %}

## Enable by default

To enable streaming by default, set the `Checkpoint.Stream` field in the [configuration](https://docs.cedana.ai/daemon/get-started/configuration) to the desired number of parallel streams. Zero means no streaming.

{% hint style="info" %}
For all available CLI options, see [CLI reference](https://docs.cedana.ai/daemon/references/cli/cedana). Directly interacting with daemon is also possible through gRPC, see [API reference](https://docs.cedana.ai/daemon/references/api).
{% endhint %}
