home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / tests / benchmarks / randpage.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-05-06  |  1.2 KB  |  66 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 ] [ -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. }
  66.