#pragma D option quiet inline uint32_t BIO_READ = 1; inline uint32_t BIO_WRITE = 2; this uint64_t delta; BEGIN { start = timestamp; } io:::start / args[0] / { ts[args[0]] = timestamp; } io:::done /args[0] && ts[args[0]]/ { this->delta = (timestamp - ts[args[0]]) / 1000; this->name = (args[0]->bio_cmd & (BIO_READ | BIO_WRITE)) == BIO_READ ? "read " : "write "; @q[this->name] = quantize(this->delta); @a[this->name] = avg(this->delta); @v[this->name] = stddev(this->delta); @i[this->name] = count(); @b[this->name] = sum(args[0]->bio_bcount); ts[args[0]] = 0; } END { printa(@q); normalize(@i, (timestamp - start) / 1000000000); normalize(@b, (timestamp - start) / 1000000000 * 1024); printf("%-30s %11s %11s %11s %11s\n", "", "avg latency", "stddev", "iops", "throughput"); printa("%-30s %@9uus %@9uus %@9u/s %@8uk/s\n", @a, @v, @i, @b); }