|
|
1.1 ! root 1: /* ! 2: * Random page access benchmark. ! 3: */ ! 4: #include <sys/vadvise.h> ! 5: ! 6: char *valloc(); ! 7: int rand(); ! 8: ! 9: main(argc, argv) ! 10: char *argv[]; ! 11: { ! 12: register int npages = 4096, pagesize, pn, i, niter; ! 13: int vflag = 0, debug = 0; ! 14: char *pages, *name; ! 15: ! 16: name = argv[0]; ! 17: argc--, argv++; ! 18: again: ! 19: if (argc < 1) { ! 20: usage: ! 21: printf("usage: %s [ -d ] [ -v ] [ -k #Kb ] niter\n", name); ! 22: exit(1); ! 23: } ! 24: if (strcmp(*argv, "-k") == 0) { ! 25: argc--, argv++; ! 26: if (argc < 1) ! 27: goto usage; ! 28: npages = atoi(*argv); ! 29: if (npages <= 0) { ! 30: printf("%s: Bad virtual memory size.\n", *argv); ! 31: exit(2); ! 32: } ! 33: argc--, argv++; ! 34: goto again; ! 35: } ! 36: if (strcmp(*argv, "-v") == 0) { ! 37: argc--, argv++; ! 38: vflag++; ! 39: goto again; ! 40: } ! 41: if (strcmp(*argv, "-d") == 0) { ! 42: argc--, argv++; ! 43: debug++; ! 44: goto again; ! 45: } ! 46: niter = atoi(*argv); ! 47: pagesize = getpagesize(); ! 48: npages /= pagesize / 1024; ! 49: pages = valloc(npages, pagesize); ! 50: if (pages == (char *)0) { ! 51: printf("Can't allocate %d pages (%2.1f megabytes).\n", ! 52: npages, (npages * pagesize) / (1024. * 1024.)); ! 53: exit(3); ! 54: } ! 55: if (pagesize != 1024) ! 56: printf("Pagesize %dKb\n", pagesize / 1024); ! 57: if (vflag) ! 58: vadvise(VA_ANOM); ! 59: for (i = 0; i < niter; i++) { ! 60: pn = random() % npages; ! 61: if (debug) ! 62: printf("touch page %d\n", pn); ! 63: pages[pagesize * pn] = 1; ! 64: } ! 65: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.