/* * Copyright (C) Ingo Molnar, 2004 * * Create 80 MB worth of finegrained mappings to a shmfs file. */ #include #include #include #include #include /* 80 MB of mappings */ #define CACHE_PAGES 20000 #define PAGE_SIZE 4096 #define CACHE_SIZE (CACHE_PAGES*PAGE_SIZE) #define WINDOW_PAGES (CACHE_PAGES*9/10) #define WINDOW_SIZE (WINDOW_PAGES*PAGE_SIZE) #define WINDOW_START 0x48000000 int main(void) { char *data, *ptr, filename[100]; char empty_page [PAGE_SIZE]; int i, fd; sprintf(filename, "/dev/shm/cache%d", getpid()); fd = open(filename, O_RDWR|O_CREAT|O_TRUNC,S_IRWXU); unlink(filename); for (i = 0; i < CACHE_PAGES; i++) write(fd, empty_page, PAGE_SIZE); data = mmap(0, WINDOW_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED , fd, 0); for (i = 0; i < WINDOW_PAGES; i++) { ptr = (char*) mmap(data + i*PAGE_SIZE, PAGE_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED | MAP_FIXED, fd, (WINDOW_PAGES-i)*PAGE_SIZE); (*ptr)++; } printf("%d pages mapped - sleeping until Ctrl-C.\n", WINDOW_PAGES); pause(); return 0; }