Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions files/scripts/syncd.sh
Original file line number Diff line number Diff line change
Expand Up @@ -99,6 +99,10 @@ stop() {
debug "Warm shutdown syncd process ..."
/usr/bin/docker exec -i syncd /usr/bin/syncd_request_shutdown --warm

if [ x$sonic_asic_platform == x'mellanox' ]; then
/usr/bin/docker exec -i syncd /usr/bin/checkpoint.sh
fi

# wait until syncd quits gracefully
while docker top syncd | grep -q /usr/bin/syncd; do
sleep 0.1
Expand Down
1 change: 1 addition & 0 deletions platform/mellanox/docker-syncd-mlnx.mk
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ $(DOCKER_SYNCD_MLNX)_CONTAINER_NAME = syncd
$(DOCKER_SYNCD_MLNX)_RUN_OPT += --net=host --privileged -t
$(DOCKER_SYNCD_MLNX)_RUN_OPT += -v /host/machine.conf:/etc/machine.conf
$(DOCKER_SYNCD_MLNX)_RUN_OPT += -v /etc/sonic:/etc/sonic:ro
$(DOCKER_SYNCD_MLNX)_RUN_OPT += -v /host/warmboot:/var/warmboot
$(DOCKER_SYNCD_MLNX)_RUN_OPT += --tmpfs /run/criu
3 changes: 3 additions & 0 deletions platform/mellanox/docker-syncd-mlnx/Dockerfile.j2
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,9 @@ debs/{{ deb }}{{' '}}
COPY ["start.sh", "/usr/bin/"]
COPY ["supervisord.conf", "/etc/supervisor/conf.d/"]

COPY ["restore.sh", "/usr/bin/"]
COPY ["checkpoint.sh", "/usr/bin/"]

## Clean up
RUN apt-get clean -y; apt-get autoclean -y; apt-get autoremove -y
RUN rm -rf /debs
Expand Down
34 changes: 34 additions & 0 deletions platform/mellanox/docker-syncd-mlnx/checkpoint.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
#!/usr/bin/env bash

SYNCD_DUMP_DIR=/var/warmboot/syncd
SYNCD_PID=`pidof syncd`
SYNCD_EXTERNAL_ARGS=`ls -la /proc/$SYNCD_PID/fd | grep -ho "socket:\[[0-9]*\]" | sed "s/socket:/--external unix/g" | xargs`

SDK_DUMP_DIR=/var/warmboot/sdk
SDK_PID=`pidof sx_sdk`
SDK_EXTERNAL_ARGS=`ls -la /proc/$SDK_PID/fd | grep -ho "socket:\[[0-9]*\]" | sed "s/socket:/--external unix/g" | xargs`

SHM_DUMP_DIR=/var/warmboot/shm
SHM_DIR=/dev/shm

if [ -d $SYNCD_DUMP_DIR ]; then
rm -rf $SYNCD_DUMP_DIR
fi

if [ -d $SDK_DUMP_DIR ]; then
rm -rf $SDK_DUMP_DIR
fi

if [ -d $SHM_DUMP_DIR ]; then
rm -rf $SHM_DUMP_DIR
fi

mkdir $SYNCD_DUMP_DIR
mkdir $SDK_DUMP_DIR
mkdir $SHM_DUMP_DIR

criu dump -D $SYNCD_DUMP_DIR -t $SYNCD_PID --shell-job $SYNCD_EXTERNAL_ARGS

criu dump -D $SDK_DUMP_DIR -t $SDK_PID --shell-job $SDK_EXTERNAL_ARGS

cp -rf $SHM_DIR/* $SHM_DUMP_DIR/
21 changes: 21 additions & 0 deletions platform/mellanox/docker-syncd-mlnx/restore.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
#!/usr/bin/env bash

SYNCD_DUMP_DIR=/var/warmboot/syncd
SDK_DUMP_DIR=/var/warmboot/sdk
SHM_DUMP_DIR=/var/warmboot/shm
SHM_DIR=/dev/shm

if [ -d $SHM_DUMP_DIR ]; then
cp -rf $SHM_DUMP_DIR/* $SHM_DIR/
rm -rf $SHM_DUMP_DIR
fi

if [ -d $SDK_DUMP_DIR ]; then
criu restore -d -D $SDK_DUMP_DIR --shell-job --ext-unix-sk
rm -rf $SDK_DUMP_DIR
fi

if [ -d $SYNCD_DUMP_DIR ]; then
criu restore -d -D $SYNCD_DUMP_DIR --shell-job --ext-unix-sk
rm -rf $SYNCD_DUMP_DIR
fi
4 changes: 4 additions & 0 deletions platform/mellanox/docker-syncd-mlnx/start.sh
Original file line number Diff line number Diff line change
@@ -1,5 +1,9 @@
#!/usr/bin/env bash

if [ -d /var/warmboot/syncd ]; then
echo 1000 > /proc/sys/kernel/ns_last_pid
fi

rm -f /var/run/rsyslogd.pid

supervisorctl start rsyslogd
Expand Down
1 change: 1 addition & 0 deletions platform/mellanox/rules.mk
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ include $(PLATFORM_PATH)/libsaithrift-dev.mk
include $(PLATFORM_PATH)/python-saithrift.mk
include $(PLATFORM_PATH)/docker-ptf-mlnx.mk
include $(PLATFORM_PATH)/mlnx-sfpd.mk
include $(PLATFORM_PATH)/criu.mk

SONIC_ALL += $(SONIC_ONE_IMAGE) \
$(DOCKER_FPM)
Expand Down