Very generic information about IO, using io:::start probe. Looking for min, max, avg, and other details.
#!/bin/bash
name=${0/.sh}
user_custom_limit=$1
var_def_limit='100'
var_limit=${user_custom_limit:-${var_def_limit}}
output_log=/root/$name-${var_limit}-$(date +"%Y%m%d").log
exec 1> $output_log
dtrace -qn '
inline int maxrun = '$var_limit';
BEGIN {
cnt = 0;
}
io:::start {
self->rw = (int )args[0]->b_flags & B_READ ? "READ" : "WRITE";
@by_size[self->rw] = quantize(args[0]->b_bcount);
/* @files[pid, execname, self->rw, args[2]->fi_pathname] = sum (args[0]->b_bcount); */
@total_blks[self->rw] = count();
@total_bytes[self->rw] = sum(args[0]->b_bcount);
@min_bsize[self->rw] = min(args[0]->b_bcount);
@max_bsize[self->rw] = max(args[0]->b_bcount);
@avg_bsize[self->rw] = avg(args[0]->b_bcount);
self->rw = 0;
}
tick-60sec /cnt > maxrun/ {
exit(0);
}
tick-60sec {
cnt++;
}
END {
normalize(@total_bytes, 1024);
printa("%s Bytes: %@d\n", @by_size);
printa("Average %s IO Size: %@d\n", @avg_bsize);
printa("Minimum %s IO Size: %@d\n", @min_bsize);
printa("Maximum %s IO Size: %@d\n", @max_bsize);
printa("%s Blocks: %@d\n", @total_blks);
printa("Total %s KBytes: %@d\n", @total_bytes);
}'