From ca600aeeaea73fe9ff7cee510d3cf2304594c544 Mon Sep 17 00:00:00 2001 From: Daniel Borkmann Date: Tue, 6 Dec 2011 17:05:36 +0100 Subject: [PATCH] (offtopic) Added example app for pagefault tests --- opt/pft.c | 53 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 opt/pft.c diff --git a/opt/pft.c b/opt/pft.c new file mode 100644 index 0000000..fbcef8b --- /dev/null +++ b/opt/pft.c @@ -0,0 +1,53 @@ +#include +#include +#include +#include +#include +#include +#include +#include + +/* assumed more pagefaults */ +void test1(char *addr, size_t len) +{ + size_t i; + for (i = 0; i < len; ++i) + addr[i]++; +} + +/* assumed less pagefaults */ +void test2(char *addr, size_t len) +{ + size_t i, pgsiz = sysconf(_SC_PAGE_SIZE); + for (i = 0; i < len; ++i) + addr[i & (pgsiz-1)]++; +} + +int main(int argc, char **argv) +{ + int fd, ret; + char *addr; + struct stat sb; + if (argc != 3) { + printf("Usage: ./a.out \n"); + return -EIO; + } + fd = open(argv[1], O_RDONLY); + if (fd < 0) + return -EIO; + ret = fstat(fd, &sb); + if (ret < 0) + return -EIO; + addr = mmap(NULL, sb.st_size, PROT_READ | PROT_WRITE, + MAP_PRIVATE, fd, 0); + if (addr == MAP_FAILED) + return -errno; + if (atoi(argv[2]) == 1) + test2(addr, sb.st_size); + else + test1(addr, sb.st_size); + munmap(addr, sb.st_size); + close(fd); + return 0; +} + -- 2.11.4.GIT