|
|
1.1 ! root 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: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.