Visit Azul.com Support

CRaC Engines

Table of Contents
Need help?
Schedule a consultation with an Azul performance expert.
Contact Us

Creating and restoring a checkpoint is performed by a component called the "CRaC Engine". This engine performs all the heavy lifting of recording the state of the process and its reconstruction on restore. The engine also defines the image storage format and can provide extra features such as image compression and decompression.

The first engine that has been developed within the CRaC project was based on CRIU. This is a standard Linux Checkpoint/Restore In Userspace feature. The CRIU-based engine has some limitations, such as the requirement for root privileges.

The goal of the CRaC-project is to eventually provide different engines for all platforms. As such, Warp has been added as an alternative CRaC engine for Linux systems within the Azul Zulu Builds of OpenJDK.

CRIU Based Engine

The default engine in CRaC is CRIU-based. This engine must be run as root user, usually achieved through ownership with the SUID bit, as described here.

To perform a checkpoint in a containerized environment, the engine must be granted the CHECKPOINT_RESTORE and SYS_PTRACE capabilities, as described on Starting an Application in a Docker Container, which might be a limiting factor for the deployment.

This engine can be enabled with the VM option -XX:CRaCEngine=criu (which is also the default option).

Warp Engine

With the release of October '24, an alternative, CRIU-independent engine for checkpoint and restore, Warp, has been added. This engine doesn’t require any additional privileges, neither for checkpoint nor for restore. This new engine can be enabled with the VM option -XX:CRaCEngine=warp.

An application that gets restored with -XX:CRaCEngine=warp doesn’t run with the same PID and TIDs as the original process. If the application relies on these values, a Resource must be defined to handle this during the restore. Additionaly, if any file descriptors were ignored through FD policies, these might not be restored the same way.

Warp also brings additional optimizations, useful mainly when the image is compressed, as described in Using Image Compression on Checkpoint. See CRaC Command-Line Options and System Properties > Command Line Options for more information.

Note
These additional optimizations as well as image compression with Warp are only available in the Subscriber Availability (SA) builds as a preview (EA).

Supported Platforms

The Warp engine is currently available on Linux on x86_64 (using GLIBC), and as preview (EA) for Alpine Linux.

Simulation Engines

To test CRaC applications and the implementation in the JVM, two simulation engines are integrated.

simengine

  • Available on Linux, Windows, and macOS.

  • Creating a checkpoint is immediately followed by a restore. This happens in the same process without any pause.

  • Can’t be used with -XX:CRaCRestoreFrom.

  • Is useful to test the beforeCheckpoint and afterRestore as they get called just as during a “real” checkpoint and restore process.

pauseengine

  • Only available on Linux.

  • On checkpoint the JVM process pauses.

  • To restore, you need to start another JVM and use -XX:CRaCRestoreFrom as usual.

  • The new JVM will unpause the checkpointed process and exit.

  • The initial JVM will restore and continue its execution.

  • You can use this to test changes in the environment while the checkpointed process is paused and the correct behavior when restoring.