home *** CD-ROM | disk | FTP | other *** search
/ InfoMagic Source Code 1993 July / THE_SOURCE_CODE_CD_ROM.iso / bsd_srcs / sys / tests / benchmarks / randbread.c < prev    next >
Encoding:
C/C++ Source or Header  |  1985-05-06  |  865 b   |  45 lines

  1. /*
  2.  * Random I/O benchmark.
  3.  *
  4.  * Process reads blocks from a
  5.  * file in a random order. 
  6.  */
  7. #include <sys/types.h>
  8. #include <sys/file.h>
  9. #include <sys/stat.h>
  10.  
  11. char    *malloc();
  12.  
  13. main(argc, argv)
  14.     char *argv[];
  15. {
  16.     char *buf;
  17.     int fd, bn, maxblocks;
  18.     struct stat sb;
  19.     register int i, niter;
  20.  
  21.     if (argc < 3) {
  22.         printf("usage: %s file #reads\n", argv[0]);
  23.         exit(1);
  24.     }
  25.     fd = open(argv[1], O_RDONLY);
  26.     if (fd < 0) {
  27.         perror(argv[1]);
  28.         exit(2);
  29.     }
  30.     buf = malloc(sb.st_blksize);
  31.     if (buf == (char *)0) {
  32.         printf("Couldn't allocate i/o buffer.\n");
  33.         exit(3);
  34.     }
  35.     fstat(fd, &sb);
  36.     niter = atoi(argv[2]);
  37.     printf("%d random block reads, file size %d kb (bsize %d)\n",
  38.         niter, sb.st_size / 1024, sb.st_blksize);
  39.     for (i = 0; i < niter; i++) {
  40.         bn = (random() % sb.st_size) / sb.st_size;
  41.         lseek(fd, bn * sb.st_blksize, L_SET);
  42.         read(fd, buf, sb.st_blksize);
  43.     }
  44. }
  45.