|
|
1.1 ! root 1: /* ! 2: * Random I/O benchmark. ! 3: * ! 4: * Process writes blocks to a file in a ! 5: * random order. Writes are constrained ! 6: * to overwrite existing blocks. This ! 7: * test should be run after the seqio test ! 8: * so that a file is constructed. ! 9: */ ! 10: #include <sys/types.h> ! 11: #include <sys/file.h> ! 12: #include <sys/stat.h> ! 13: ! 14: char *malloc(); ! 15: ! 16: main(argc, argv) ! 17: char *argv[]; ! 18: { ! 19: char *buf; ! 20: int fd, bn, nblocks; ! 21: struct stat sb; ! 22: register int i, niter; ! 23: ! 24: if (argc < 3) { ! 25: printf("usage: %s file #writes\n", argv[0]); ! 26: exit(1); ! 27: } ! 28: fd = open(argv[1], O_WRONLY|O_CREAT, 0644); ! 29: if (fd < 0) { ! 30: perror(argv[1]); ! 31: exit(2); ! 32: } ! 33: fstat(fd, &sb); ! 34: buf = malloc(sb.st_blksize); ! 35: if (buf == (char *)0) { ! 36: printf("Couldn't allocate i/o buffer.\n"); ! 37: exit(3); ! 38: } ! 39: nblocks = sb.st_size / sb.st_blksize; ! 40: niter = atoi(argv[2]); ! 41: printf("%d random writes in %d block file (block size %d)\n", ! 42: niter, nblocks, sb.st_blksize); ! 43: for (i = 0; i < niter; i++) { ! 44: bn = random() % nblocks; ! 45: lseek(fd, bn * sb.st_blksize, L_SET); ! 46: write(fd, buf, sb.st_blksize); ! 47: } ! 48: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.