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; }