[CRIU] [PATCH] zdtm: check pre-dump of shared memory

Pavel Emelyanov xemul at virtuozzo.com
Wed Oct 12 01:03:48 PDT 2016


On 10/12/2016 02:00 AM, Andrei Vagin wrote:
> Pavel, could you commit this patch?

But this new test fails as I see from the commit message. Also, we've
disabled the shmem pre-dump, so what's the point?

> On Fri, Sep 16, 2016 at 03:31:28PM +0300, Andrei Vagin wrote:
>> From: Andrei Vagin <avagin at virtuozzo.com>
>>
>> [root at fc24 criu]# python test/zdtm.py run -t zdtm/transition/shmem  --pre 3
>> === Run 1/1 ================
>>
>> ======================== Run zdtm/transition/shmem in h ========================
>> cc -g -O2 -Wall -Werror -fno-strict-aliasing  -iquote ../lib/arch/x86/include -I../lib   shmem.c ../lib/libzdtmtst.a ../lib/libzdtmtst.a -o shmem
>> Start test
>> ./shmem --pidfile=shmem.pid --outfile=shmem.out
>> Run criu pre-dump
>> Run criu pre-dump
>> Run criu pre-dump
>> Run criu dump
>> Run criu restore
>> Send the 15 signal to  33
>> Wait for zdtm/transition/shmem(33) to die for 0.100000
>> Test output: ================================
>> 15:12:25.444:    33: FAIL: shmem.c:70: checksum mismatch: ea71000 109c9000
>>
>> Cc: Eugene Batalov <eabatalov89 at gmail.com>
>> Signed-off-by: Andrei Vagin <avagin at virtuozzo.com>
>> ---
>>  test/zdtm/transition/Makefile |  1 +
>>  test/zdtm/transition/shmem.c  | 82 +++++++++++++++++++++++++++++++++++++++++++
>>  2 files changed, 83 insertions(+)
>>  create mode 100644 test/zdtm/transition/shmem.c
>>
>> diff --git a/test/zdtm/transition/Makefile b/test/zdtm/transition/Makefile
>> index f3797ad..7ddb238 100644
>> --- a/test/zdtm/transition/Makefile
>> +++ b/test/zdtm/transition/Makefile
>> @@ -23,6 +23,7 @@ TST_NOFILE	=	\
>>  		file_aio        \
>>  		socket-tcp      \
>>  		socket-tcp6     \
>> +		shmem		\
>>  
>>  
>>  TST_FILE	=	\
>> diff --git a/test/zdtm/transition/shmem.c b/test/zdtm/transition/shmem.c
>> new file mode 100644
>> index 0000000..f6b093c
>> --- /dev/null
>> +++ b/test/zdtm/transition/shmem.c
>> @@ -0,0 +1,82 @@
>> +#define _GNU_SOURCE
>> +#include <errno.h>
>> +#include <stdlib.h>
>> +#include <string.h>
>> +#include <sys/mman.h>
>> +#include <signal.h>
>> +#include <sys/wait.h>
>> +
>> +#include "zdtmtst.h"
>> +
>> +const char *test_author	= "Andrei Vagin <avagin at virtuozzo.com>";
>> +
>> +#define MEM_SIZE (1<<25)
>> +
>> +int main(int argc, char **argv)
>> +{
>> +	pid_t pid;
>> +	void *addr;
>> +	int *sum, status;
>> +	long size;
>> +
>> +	test_init(argc, argv);
>> +
>> +	sum = mmap(NULL, PAGE_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_SHARED, -1, 0);
>> +	if (sum == MAP_FAILED)
>> +		return 1;
>> +	addr = mmap(NULL, MEM_SIZE, PROT_READ | PROT_WRITE, MAP_ANONYMOUS | MAP_SHARED, -1, 0);
>> +	if (addr == MAP_FAILED)
>> +		return 1;
>> +
>> +	pid = fork();
>> +	if (pid < 0)
>> +		return 1;
>> +
>> +	if (pid == 0) {
>> +		int i = 0;
>> +		long size = PAGE_SIZE, old_size = MEM_SIZE;
>> +
>> +		status = 0;
>> +		while (test_go()) {
>> +			addr = mremap(addr, old_size, size, MREMAP_MAYMOVE);
>> +
>> +			status -= *((int *)(addr + size - PAGE_SIZE));
>> +
>> +			*((int *)(addr + size - PAGE_SIZE)) = i++;
>> +
>> +			status += *((int *)(addr + size - PAGE_SIZE));
>> +
>> +			old_size = size;
>> +			size += PAGE_SIZE;
>> +			if (size > MEM_SIZE)
>> +				size = PAGE_SIZE;
>> +		}
>> +		*sum = status;
>> +		return 0;
>> +	}
>> +
>> +	test_daemon();
>> +	test_waitsig();
>> +
>> +	kill(pid, SIGTERM);
>> +	status = -1;
>> +	waitpid(pid, &status, 0);
>> +	if (status) {
>> +		pr_perror("The child return non-zero code: %d\n", status);
>> +		return 1;
>> +	}
>> +
>> +	status = 0;
>> +	for (size = PAGE_SIZE; size <= MEM_SIZE; size += PAGE_SIZE) {
>> +		status += *((int *)(addr + size - PAGE_SIZE));
>> +	}
>> +
>> +	if (status != *sum) {
>> +		fail("checksum mismatch: %x %x\n", status, *sum);
>> +		return 1;
>> +	}
>> +
>> +	pass();
>> +
>> +	return 0;
>> +}
>> -- 
>> 2.7.4
>>
> .
> 



More information about the CRIU mailing list