Hi Ted, I really like the idea of gathering data about time spent waiting for a disk, but where do I find this data?
Thank you, Navan On Apr 4, 2013, at 7:50 PM, Ted Unangst <t...@tedunangst.com> wrote: > This is a stupid simple diff to see just how much time you spend > waiting for your disk. If you're into measuring that kind of thing. > > Index: vfs_bio.c > =================================================================== > RCS file: /cvs/src/sys/kern/vfs_bio.c,v > retrieving revision 1.146 > diff -u -p -r1.146 vfs_bio.c > --- vfs_bio.c 17 Feb 2013 17:39:29 -0000 1.146 > +++ vfs_bio.c 5 Apr 2013 01:34:03 -0000 > @@ -1153,6 +1153,8 @@ buf_daemon(struct proc *p) > } > } > > +uint64_t biowaittime; > + > /* > * Wait for operations on the buffer to complete. > * When they do, extract and return the I/O's error value. > @@ -1161,12 +1163,18 @@ int > biowait(struct buf *bp) > { > int s; > + struct timespec before, after, diff; > > KASSERT(!(bp->b_flags & B_ASYNC)); > > s = splbio(); > + nanotime(&before); > while (!ISSET(bp->b_flags, B_DONE)) > tsleep(bp, PRIBIO + 1, "biowait", 0); > + nanotime(&after); > + timespecsub(&after, &before, &diff); > + biowaittime += diff.tv_nsec; > + biowaittime += diff.tv_sec * 1000000000L; > splx(s); > > /* check for interruption of I/O (e.g. via NFS), then errors. */ >