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

  1. /*
  2.  * Random I/O benchmark.
  3.  *
  4.  * Process writes blocks to 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 < 4) {
  22.         printf("usage: %s file max-file-size #writes\n", argv[0]);
  23.         exit(1);
  24.     }
  25.     fd = open(argv[1], O_WRONLY|O_CREAT|O_TRUNC, 0644);
  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.     /* file size is in megabytes */
  36.     fstat(fd, &sb);
  37.     maxblocks = atoi(argv[2]) * ((1024 * 1024) / sb.st_blksize);
  38.     niter = atoi(argv[3]);
  39.     printf("%d random writes (block size %d)\n", niter, sb.st_blksize);
  40.     for (i = 0; i < niter; i++) {
  41.         bn = random() % maxblocks;
  42.         lseek(fd, bn * sb.st_blksize, L_SET);
  43.         write(fd, buf, sb.st_blksize);
  44.     }
  45. }
  46.