diff options
author | Adrian Reber <areber@redhat.com> | 2021-12-21 16:01:53 +0000 |
---|---|---|
committer | Adrian Reber <areber@redhat.com> | 2021-12-23 09:51:38 +0000 |
commit | d669dbfb9fbb4bae56ba90ce9b58352c793eff6e (patch) | |
tree | 60b8c68575360fa10ebb390eea542ce3b2e5b4a7 /pkg/criu | |
parent | b746b22564298463ebf322d630488236b7277074 (diff) | |
download | podman-d669dbfb9fbb4bae56ba90ce9b58352c793eff6e.tar.gz podman-d669dbfb9fbb4bae56ba90ce9b58352c793eff6e.tar.bz2 podman-d669dbfb9fbb4bae56ba90ce9b58352c793eff6e.zip |
Error out early if system does not support pre-copy checkpointing
CRIU's pre-copy migration support relies on the soft dirty page tracking
in the Linux kernel:
https://www.kernel.org/doc/Documentation/vm/soft-dirty.txt
This functionality is not implemented for all architectures and it can
also be turned off in the kernel.
CRIU can check if the combination of architecture/kernel/CRIU supports
the soft dirty page tracking and exports this feature checking
functionality in go-criu.
This commit adds an early check if the user selects pre-copy
checkpointing to error out if the system does not support it.
Signed-off-by: Adrian Reber <areber@redhat.com>
Diffstat (limited to 'pkg/criu')
-rw-r--r-- | pkg/criu/criu.go | 22 | ||||
-rw-r--r-- | pkg/criu/criu_unsupported.go | 7 |
2 files changed, 29 insertions, 0 deletions
diff --git a/pkg/criu/criu.go b/pkg/criu/criu.go index 2a6805979..967da0dca 100644 --- a/pkg/criu/criu.go +++ b/pkg/criu/criu.go @@ -1,7 +1,12 @@ +// +build linux + package criu import ( "github.com/checkpoint-restore/go-criu/v5" + "github.com/checkpoint-restore/go-criu/v5/rpc" + + "google.golang.org/protobuf/proto" ) // MinCriuVersion for Podman at least CRIU 3.11 is required @@ -21,3 +26,20 @@ func CheckForCriu(version int) bool { } return result } + +func MemTrack() bool { + features, err := criu.MakeCriu().FeatureCheck( + &rpc.CriuFeatures{ + MemTrack: proto.Bool(true), + }, + ) + if err != nil { + return false + } + + if features == nil || features.MemTrack == nil { + return false + } + + return *features.MemTrack +} diff --git a/pkg/criu/criu_unsupported.go b/pkg/criu/criu_unsupported.go new file mode 100644 index 000000000..51cd0c1fd --- /dev/null +++ b/pkg/criu/criu_unsupported.go @@ -0,0 +1,7 @@ +// +build !linux + +package criu + +func MemTrack() bool { + return false +} |