cgroup2: use CRIU's new freezer v2 support
The newest CRIU version supports freezer v2 and this tells runc
to use it if new enough or fall back to non-freezer based process
freezing on cgroup v2 system.
@@ -1015,10 +1015,15 @@ func (c *linuxContainer) Checkpoint(criuOpts *CriuOpts) error {
}
}
- fcg := c.cgroupManager.GetPaths()["freezer"]
- if fcg != "" {
+ if !cgroups.IsCgroup2UnifiedMode() && c.checkCriuVersion(31400) == nil {
+ // CRIU currently cannot handle the v2 freezer correctly
+ // before release 3.14. For older releases we are telling
+ // CRIU to not use the cgroup v2 freezer. CRIU will pause
+ // each process manually using ptrace().
+ if fcg := c.cgroupManager.GetPaths()["freezer"]; fcg != "" {
rpcOpts.FreezeCgroup = proto.String(fcg)
}
+ }
// append optional criu opts, e.g., page-server and port
if criuOpts.PageServer.Address != "" && criuOpts.PageServer.Port != 0 {
