#define _GNU_SOURCE /* See feature_test_macros(7) */ #include #include #include #include #include #define MEMSIZE (128 * 1024 * 1024) char *testcase_description = "Separate file shared mapping page fault"; void testcase(unsigned long long *iterations) { char tmpfile[4096]; sprintf(&tmpfile[0], "/tmp/willitscale.%d.XXXXXX", sched_getcpu()); int fd; unsigned long pgsize = getpagesize(); if (1) { fd = open(tmpfile, O_RDWR|O_CREAT, 0755); //mkstemp(tmpfile); } else { fd = mkstemp(tmpfile); unlink(tmpfile); } assert(fd >= 0); assert(ftruncate(fd, MEMSIZE) == 0); while (1) { unsigned long i; char *c = mmap(NULL, MEMSIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, 0); assert(c != MAP_FAILED); for (i = 0; i < MEMSIZE; i += pgsize) { c[i] = 0; (*iterations)++; } munmap(c, MEMSIZE); } }