--- seeker_baryluk.c~ 2009-09-15 09:10:05.000000000 +0300 +++ seeker_baryluk.c 2010-08-19 12:33:45.151306691 +0300 @@ -17,11 +17,12 @@ #include #define BLOCKSIZE 512 -#define TIMEOUT 30 +#define DEFAULT_TIMEOUT 30 pthread_mutex_t muteks = PTHREAD_MUTEX_INITIALIZER; int count; +int TIMEOUT; time_t start; off64_t maxoffset = 0; off64_t minoffset = 249994674176000uLL; @@ -90,7 +91,9 @@ while (p->run) { offset = (off64_t) ( (unsigned long long) (p->numbytes * (rand_r(&(p->seed)) / (RAND_MAX + 1.0) ))); - //printf("%d %llu\n", p->id, (unsigned long long )offset); + // do blocksize aligned seeks + offset = offset & (~((off64_t) 0) & (~(BLOCKSIZE-1))) ; + //printf("%d %x\n", p->id, (unsigned long long )offset); retval = lseek64(p->fd, offset, SEEK_SET); handle("lseek64", retval == (off64_t) -1); retval = read(p->fd, p->buffer, BLOCKSIZE); @@ -121,22 +124,26 @@ setvbuf(stdout, NULL, _IONBF, 0); - printf("Seeker v3.0, 2009-06-17, " + printf("Seeker v3.0+Fedora, 2009-06-17, " "http://www.linuxinsight.com/how_fast_is_your_disk.html\n"); - if (!(argc == 2 || argc == 3)) { - printf("Usage: %s device [threads]\n", argv[0]); + if (!(argc == 2 || argc == 3 || argc == 4)) { + printf("Usage: %s device [threads] [seconds]\n", argv[0]); exit(1); } threads = 1; - if (argc == 3) { + TIMEOUT = DEFAULT_TIMEOUT; + if (argc > 2) { threads = atoi(argv[2]); + if (argc > 3) { + TIMEOUT = atoi(argv[3]); + } } //pthread_mutex_init(&muteks, NULL); - fd = open(argv[1], O_RDONLY | O_LARGEFILE); + fd = open(argv[1], O_RDONLY | O_LARGEFILE | O_DIRECT); handle("open", fd < 0); #ifdef BLKGETSIZE64 @@ -177,7 +184,9 @@ p[i].seed = rand()+i; p[i].fd = dup(fd); handle("dup", p[i].fd < 0); - p[i].buffer = malloc(sizeof(char)*BLOCKSIZE); + p[i].buffer = memalign(512*8, sizeof(char)*BLOCKSIZE); + //printf("\n%x\n", (int)(&(p[i].buffer))); + p[i].numbytes = numbytes; handle("malloc", p[i].buffer == NULL); p[i].run = 1;