To make transition of containers between nodes shoveless
we provide offsets for monotonic clocks. The kernel
use these values to zap the time difference between nodes
when setups timers. So that we need to save these values
somewhere in images and set them up back on restore procedure.

Ideally this should be implemened via CRIU directly with
custom cgroups properties engine but until done we may
carry the settings with libvzctl directly, just like
we do for coredump patterns.

Thus -- checkpoint @ve.clock_bootbased and @ve.clock_monotonic
properties into image and restore them back.

https://jira.sw.ru/browse/PSBM-41406
https://jira.sw.ru/browse/PSBM-45631

Signed-off-by: Cyrill Gorcunov <gorcu...@openvz.org>
---
 scripts/vz-cpt.in        | 10 ++++++++++
 scripts/vz-rst-action.in |  4 +++-
 scripts/vz-rst.in        |  6 ++++++
 3 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/scripts/vz-cpt.in b/scripts/vz-cpt.in
index 44982e1..8ecb33b 100755
--- a/scripts/vz-cpt.in
+++ b/scripts/vz-cpt.in
@@ -45,7 +45,17 @@ done
 # simply increase the number of file descriptors allowed.
 ulimit -n 8192
 
+function cg_dump_props {
+       if [ -n "$VEID" ]; then
+               # Save monotonic offsets for next restore
+               cgget -n -v -r ve.clock_bootbased $VEID > 
$1/vz_clock_bootbased.img
+               cgget -n -v -r ve.clock_monotonic $VEID > 
$1/vz_clock_monotonic.img
+       fi
+       return 0
+}
+
 mkdir -p $dumpdir &&
+cg_dump_props $dumpdir &&
 criu dump -vvvv -o dump.log                            \
                --file-locks                            \
                --tcp-established                       \
diff --git a/scripts/vz-rst-action.in b/scripts/vz-rst-action.in
index 4083b88..8c7f9b2 100755
--- a/scripts/vz-rst-action.in
+++ b/scripts/vz-rst-action.in
@@ -68,7 +68,9 @@ case "$CRTOOLS_SCRIPT_ACTION" in
        ln -s /proc/$pid/ns/net $VE_NETNS_FILE
 
        if [ -n "$VEID" ]; then
-               cgset -r ve.state="START $pid" $VEID || exit
+               [ -n "$VE_CLOCK_BOOTBASED" ] && cgset -r 
ve.clock_bootbased="$VE_CLOCK_BOOTBASED" $VEID
+               [ -n "$VE_CLOCK_MONOTONIC" ] && cgset -r 
ve.clock_monotonic="$VE_CLOCK_MONOTONIC" $VEID
+               cgset -r ve.state="START $pid" $VEID || exit
                cgset -r ve.pseudosuper="0" $VEID
        fi
        ;;
diff --git a/scripts/vz-rst.in b/scripts/vz-rst.in
index 78884da..9ef5c56 100755
--- a/scripts/vz-rst.in
+++ b/scripts/vz-rst.in
@@ -57,6 +57,12 @@ extra_args_path="$VE_DUMP_DIR/restore-extra-args"
 # Setup default work directory if not explicitly specified
 [ -z "$VE_WORK_DIR" ] && VE_WORK_DIR="$VE_DUMP_DIR"
 
+# Setup monotonic offsets for clock adjustments
+if [ -n "$VEID" ]; then
+        export VE_CLOCK_BOOTBASED=`cat $VE_DUMP_DIR/vz_clock_bootbased.img`
+        export VE_CLOCK_MONOTONIC=`cat $VE_DUMP_DIR/vz_clock_monotonic.img`
+fi
+
 # Setup default log name if not explicitly specified
 [ -z "$VE_RESTORE_LOG_PATH" ] && VE_RESTORE_LOG_PATH="restore.log"
 
-- 
2.5.5

_______________________________________________
Devel mailing list
Devel@openvz.org
https://lists.openvz.org/mailman/listinfo/devel

Reply via email to