mirror of
https://github.com/opencontainers/runc.git
synced 2026-07-11 06:03:57 +08:00
use lazy-pages ready notification for criu >= 3.15
This relies on https://github.com/checkpoint-restore/criu/pull/1069 and emulates the previous behavior by writing \0 and closing status fd (as it was done by criu). Signed-off-by: Kir Kolyshkin <kolyshkin@gmail.com>
This commit is contained in:
@@ -973,7 +973,11 @@ func (c *linuxContainer) Checkpoint(criuOpts *CriuOpts) error {
|
||||
return fmt.Errorf("invalid --status-fd argument %d: not writable", fd)
|
||||
}
|
||||
|
||||
rpcOpts.StatusFd = proto.Int32(int32(fd))
|
||||
if c.checkCriuVersion(31500) != nil {
|
||||
// For criu 3.15+, use notifications (see case "status-ready"
|
||||
// in criuNotifications). Otherwise, rely on criu status fd.
|
||||
rpcOpts.StatusFd = proto.Int32(int32(fd))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1652,6 +1656,16 @@ func (c *linuxContainer) criuNotifications(resp *criurpc.CriuResp, process *Proc
|
||||
if err := utils.SendFd(process.ConsoleSocket, master.Name(), master.Fd()); err != nil {
|
||||
return err
|
||||
}
|
||||
case "status-ready":
|
||||
if opts.StatusFd != -1 {
|
||||
// write \0 to status fd to notify that lazy page server is ready
|
||||
_, err := unix.Write(opts.StatusFd, []byte{0})
|
||||
if err != nil {
|
||||
logrus.Warnf("can't write \\0 to status fd: %v", err)
|
||||
}
|
||||
_ = unix.Close(opts.StatusFd)
|
||||
opts.StatusFd = -1
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user