home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / tests / benchmarks / bench-4.1 / randpage.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-05-06  |  1.1 KB  |  63 lines

  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 ] [ -p #pages ] niter\n", name);
  22.         exit(1);
  23.     }
  24.     if (strcmp(*argv, "-p") == 0) {
  25.         argc--, argv++;
  26.         if (argc < 1)
  27.             goto usage;
  28.         npages = atoi(*argv);
  29.         if (npages <= 0) {
  30.             printf("%s: Bad page count.\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.     pages = valloc(npages * pagesize);
  49.     if (pages == (char *)0) {
  50.         printf("Can't allocate %d pages (%2.1f megabytes).\n",
  51.             npages, (npages * pagesize) / (1024. * 1024.));
  52.         exit(3);
  53.     }
  54.     if (vflag)
  55.         vadvise(VA_ANOM);
  56.     for (i = 0; i < niter; i++) {
  57.         pn = random() % npages;
  58.         if (debug)
  59.             printf("touch page %d\n", pn);
  60.         pages[pagesize * pn] = 1;
  61.     }
  62. }
  63.