Example #1
0
int mm_main(int argc, char *argv[])
#endif
{
  mm_showmallinfo();

  /* Allocate some memory */

  do_mallocs(allocs, alloc_sizes, random1, NTEST_ALLOCS);

  /* Re-allocate the memory */

  do_reallocs(allocs, alloc_sizes, realloc_sizes, random2, NTEST_ALLOCS);

  /* Release the memory */

  do_frees(allocs, realloc_sizes, random3, NTEST_ALLOCS);

  /* Allocate aligned memory */

  do_memaligns(allocs, alloc_sizes, alignment, random2, NTEST_ALLOCS/2);
  do_memaligns(allocs, alloc_sizes, alignment, &random2[NTEST_ALLOCS/2], NTEST_ALLOCS/2);

  /* Release aligned memory */

  do_frees(allocs, alloc_sizes, random1, NTEST_ALLOCS);

  printf("TEST COMPLETE\n");
  return 0;
}
int
main(int argc, char *argv[]) {
	struct timespec *t1;
	void *child_stack;
	int clone_flags = 0, do_clone_vm;
	int iters;
	int child_status, child_pid;
	int i;


	if (argc < (NARGS+1))
	{
		printf("test_clone <malloc_cnt> <clone_vm> <iters>\n");
		return -2;
	}

	//clone_flags = CLONE_FS|CLONE_FILES;

	sscanf(argv[1], "%d", &malloc_cnt);
	ptrs = (struct alloc_info *)malloc(
			sizeof(struct alloc_info)*malloc_cnt);
	sscanf(argv[2], "%d", &do_clone_vm);
	if (do_clone_vm)
		clone_flags |= CLONE_VM;
	
	sscanf(argv[3], "%d", &iters);
	
	child_done = (int *)mmap(NULL, sizeof(int), PROT_READ|PROT_WRITE, 
			MAP_ANONYMOUS|MAP_SHARED, -1, 0);
	if (child_done == MAP_FAILED) {
		perror("map failed");
		return -2;
	}

	t1 = mmap(NULL, sizeof(struct timespec), PROT_READ|PROT_WRITE, 
			MAP_ANONYMOUS|MAP_SHARED, -1, 0);
	if (t1 == MAP_FAILED) {
		perror("mmap failed");
		return -2;
	}
	//dummy mallocs
	malloc(PAGE_SZ);
	malloc(PAGE_SZ);

#define CHILD_STACK_SZ (4*4096)
	child_stack = malloc(CHILD_STACK_SZ);
	if(!child_stack) {
		perror("malloc");
		printf("child stack allocation failed\n");
		return -3;
	}
	for (i = 0;i<iters; i++) {
		do_mallocs();
		clock_gettime(CLOCK_MONOTONIC, t1);
		*child_done = 0;
		child_pid = clone(clone_fn, child_stack+CHILD_STACK_SZ-1, clone_flags, t1);
		if (child_pid < 0) {
			perror("clone failed");
			return -1;
		}
		printf("child %d created\n", child_pid);
	}
	i = 0;
	while(1) {
		child_pid = waitpid(-1, &child_status, WNOHANG);
		if (child_pid > 0) {
			printf("child %d exited\n", child_pid);
			i++;
			if (i == iters) break;
		}	
		sleep(1);
	}

	return 0;
}