[CRIU] [PATCH 3/3] Process Migration using Sockets (Rodrigo Bruno)

Pavel Emelyanov xemul at virtuozzo.com
Fri Feb 3 08:17:24 PST 2017


On 01/12/2017 05:01 AM, rbruno at www.gsd.inesc-id.pt wrote:
>  test/proxy-cache/Makefile |  29 ++++++++++++++
>  test/proxy-cache/loop.sh  |   8 ++++
>  test/proxy-cache/run.sh   | 100
> ++++++++++++++++++++++++++++++++++++++++++++++
>  test/zdtm.py              |  30 +++++++++++++-

Only the zdtm.py part is needed, please, drop the rest.
Also, is there's any test from the list that doesn't pass with --remote option? 
Or the zdtm.py run -a --remote just works?

>  4 files changed, 166 insertions(+), 1 deletion(-)
> 
>     Add testcases for image-proxy/image-cache.
> 
>     Signed-off-by: Rodrigo Bruno <rbruno at gsd.inesc-id.pt>
>     Signed-off-by: Katerina Koukiou <k.koukiou at gmail.com>
> 
> diff --git a/test/proxy-cache/Makefile b/test/proxy-cache/Makefile
> new file mode 100644
> index 0000000..674c493
> --- /dev/null
> +++ b/test/proxy-cache/Makefile
> @@ -0,0 +1,29 @@
> +DIR	:= $(shell pwd)/data
> +CRIU	:= $(DIR)/criu
> +
> +LOOP	:= $(DIR)/loop.sh
> +PIDFILE := $(DIR)/loop.pid
> +
> +DUMPDIR	:= $(DIR)/dump
> +PREDIR	:= $(DIR)/predump
> +LOG	:= $(DIR)/log
> +
> +PROXY_CACHE_TCP_PORT	:= 9997
> +LOCAL_CACHE_PATH	:= $(DIR)/image-cache.sock
> +LOCAL_PROXY_PATH	:= $(DIR)/image-proxy.sock
> +
> +export DIR LOOP PIDFILE DUMPDIR PREDIR CRIU LOG PROXY_CACHE_TCP_PORT
> LOCAL_CACHE_PATH LOCAL_PROXY_PATH
> +
> +run: testdir
> +	./run.sh
> +
> +testdir: ../../criu
> +	mkdir -p $(DIR)
> +	mkdir -p $(DUMPDIR)
> +	mkdir -p $(PREDIR)
> +	mkdir -p $(LOG)
> +	cp ../../criu/criu $(CRIU)
> +	cp loop.sh $(LOOP)
> +
> +clean:
> +	rm -rf $(DIR)
> diff --git a/test/proxy-cache/loop.sh b/test/proxy-cache/loop.sh
> new file mode 100755
> index 0000000..a5fcb08
> --- /dev/null
> +++ b/test/proxy-cache/loop.sh
> @@ -0,0 +1,8 @@
> +#!/bin/bash
> +
> +echo $$ > $1.int
> +mv $1.int $1
> +
> +while :; do
> +	sleep 1
> +done
> diff --git a/test/proxy-cache/run.sh b/test/proxy-cache/run.sh
> new file mode 100755
> index 0000000..e403d5f
> --- /dev/null
> +++ b/test/proxy-cache/run.sh
> @@ -0,0 +1,100 @@
> +#!/bin/bash
> +
> +set -x
> +
> +PID=
> +
> +function run {
> +	echo "== Run ${LOOP}"
> +	echo ${PIDFILE}
> +	rm -f ${PIDFILE}
> +	setsid ${LOOP} ${PIDFILE} < /dev/null &> /dev/null &
> +	for i in `seq 100`; do
> +		test -f ${PIDFILE} && break
> +		sleep 1
> +	done
> +	PID=`cat ${PIDFILE}`
> +	echo ${PID}
> +}
> +
> +function prepare {
> +	${CRIU} image-cache -d -vvvv -o ${LOG}/image-cache.log \
> +						--port ${PROXY_CACHE_TCP_PORT} --images-dir $1
> +	sleep 1
> +
> +	${CRIU} image-proxy -d -vvvv -o ${LOG}/image-proxy.log \
> +						--address localhost \
> +						--port ${PROXY_CACHE_TCP_PORT} --images-dir $1
> +	sleep 1
> +}
> +
> +function predump {
> +	echo "== Predump ${PID}"
> +	${CRIU} pre-dump -vvvv --tree ${PID} --images-dir ${PREDIR} \
> +					 -o ${LOG}/predump.log \
> +					 --remote
> +	return $?
> +}
> +
> +function dump {
> +	echo "== Dump ${PID}"
> +	${CRIU} dump -vvvv --tree ${PID} --images-dir ${DUMPDIR} \
> +			-o ${LOG}/dump.log --prev-images-dir ${PREDIR} --track-mem \
> +			--remote
> +	return $?
> +}
> +
> +function restore {
> +	echo "== Restore ${DUMPDIR}"
> +	${CRIU} restore -vvvv --images-dir ${DUMPDIR} --restore-detached \
> +			-o ${LOG}/restore.log \
> +			--remote
> +	return $?
> +}
> +
> +function result {
> +	local BGRED='\033[41m'
> +	local BGGREEN='\033[42m'
> +	local NORMAL=$(tput sgr0)
> +
> +	if [ $1 -ne 0 ]; then
> +		echo -e "${BGRED}FAIL${NORMAL}"
> +		exit 1
> +	else
> +		echo -e "${BGGREEN}PASS${NORMAL}"
> +	fi
> +}
> +
> +function test_dump_restore {
> +	echo "==== Check if dump-restore works with proxy-cache"
> +
> +	run
> +	test -d ${DUMPDIR} && rm -rf ${DUMPDIR}
> +	mkdir -p ${DUMPDIR}
> +	prepare ${DUMPDIR}
> +	dump; result $(($?))
> +	restore ; result $(($?))
> +
> +	kill -SIGKILL ${PID}
> +}
> +
> +function test_predump_dump_restore {
> +	echo "==== Check if predump-dump-restore works with proxy-cache"
> +	run
> +	test -d ${PREDIR} && rm -rf ${PREDIR}
> +	mkdir -p ${PREDIR}
> +	prepare ${PREDIR}
> +	predump; result $(($?))
> +	test -d ${DUMPDIR} && rm -rf ${DUMPDIR}
> +	mkdir -p ${DUMPDIR}
> +	ln -s ${PREDIR}"/img-proxy.sock" ${DUMPDIR}"/img-proxy.sock"
> +	ln -s ${PREDIR}"/img-cache.sock" ${DUMPDIR}"/img-cache.sock"
> +	dump; result $(($?))
> +	restore ; result $(($?))
> +
> +	kill -SIGKILL ${PID}
> +}
> +
> +test_dump_restore
> +sleep 1
> +test_predump_dump_restore
> diff --git a/test/zdtm.py b/test/zdtm.py
> index 7cd9dc4..8d389a3 100755
> --- a/test/zdtm.py
> +++ b/test/zdtm.py
> @@ -777,6 +777,7 @@ class criu:
>  		self.__mdedup = (opts['noauto_dedup'] and True or False)
>  		self.__user = (opts['user'] and True or False)
>  		self.__leave_stopped = (opts['stop'] and True or False)
> +		self.__remote = (opts['remote'] and True or False)
>  		self.__criu = (opts['rpc'] and criu_rpc or criu_cli)
> 
>  	def logs(self):
> @@ -884,6 +885,29 @@ class criu:
> 
>  		a_opts += self.__test.getdopts()
> 
> +		if self.__remote:
> +			from subprocess import check_output
> +
> +			logdir = os.getcwd() + "/" + self.__dump_path + "/" + str(self.__iter)
> +			print "Adding image cache"
> +
> +			cache_opts = [criu_bin, "image-cache", "--port", "12345", "-v4", "-o",
> +				      logdir + "/image-cache.log", "-D", logdir]
> +
> +			cpid = subprocess.Popen(cache_opts).pid
> +			time.sleep(1)
> +
> +			print "Adding image proxy"
> +
> +			proxy_opts = [criu_bin, "image-proxy", "--port", "12345", "--address",
> +				      "localhost", "-v4", "-o", logdir + "/image-proxy.log",
> +                                      "-D", logdir]
> +
> +			ppid = subprocess.Popen(proxy_opts).pid
> +			time.sleep(1)
> +
> +			a_opts += ["--remote"]
> +
>  		if self.__dedup:
>  			a_opts += ["--auto-dedup"]
> 
> @@ -923,6 +947,9 @@ class criu:
>  			r_opts += ['--empty-ns', 'net']
>  			r_opts += ['--action-script', os.getcwd() + '/empty-netns-prep.sh']
> 
> +		if self.__remote:
> +			r_opts += ["--remote"]
> +
>  		self.__prev_dump_iter = None
>  		criu_dir = os.path.dirname(os.getcwd())
>  		if os.getenv("GCOV"):
> @@ -1362,7 +1389,7 @@ class launcher:
> 
>  		nd = ('nocr', 'norst', 'pre', 'iters', 'page_server', 'sibling',
> 'stop', 'empty_ns',
>  				'fault', 'keep_img', 'report', 'snaps', 'sat', 'script', 'rpc',
> -				'join_ns', 'dedup', 'sbs', 'freezecg', 'user', 'dry_run',
> 'noauto_dedup')
> +				'join_ns', 'dedup', 'sbs', 'freezecg', 'user', 'dry_run',
> 'noauto_dedup', 'remote')
>  		arg = repr((name, desc, flavor, {d: self.__opts[d] for d in nd}))
> 
>  		if self.__use_log:
> @@ -1834,6 +1861,7 @@ rp.add_argument("--user", help = "Run CRIU as
> regular user", action = 'store_tru
>  rp.add_argument("--rpc", help = "Run CRIU via RPC rather than CLI",
> action = 'store_true')
> 
>  rp.add_argument("--page-server", help = "Use page server dump", action =
> 'store_true')
> +rp.add_argument("--remote", help = "Use remote option for diskless C/R",
> action = 'store_true')
>  rp.add_argument("-p", "--parallel", help = "Run test in parallel")
>  rp.add_argument("--dry-run", help="Don't run tests, just pretend to",
> action='store_true')
>  rp.add_argument("--script", help="Add script to get notified by criu")
> 
> 
> _______________________________________________
> CRIU mailing list
> CRIU at openvz.org
> https://lists.openvz.org/mailman/listinfo/criu
> .
> 



More information about the CRIU mailing list