次の例は、diskact.d
スクリプトを変更したバージョンを示しています。このスクリプトでは、読取りおよび書込みI/Oに関する個別の結果が表示されます:
#pragma D option quiet /* rwdiskact.d -- Modified version of diskact.d that displays separate results for read and write I/O */ profile:::tick-10sec { exit(0); } io:::start { iodir = args[0]->b_flags & B_READ ? "READ" : "WRITE"; start[args[0]->b_edev, args[0]->b_blkno, iodir] = timestamp; } io:::done { iodir = args[0]->b_flags & B_READ ? "READ" : "WRITE"; this->elapsed = timestamp - start[args[0]->b_edev,args[0]->b_blkno,iodir]; @[args[1]->dev_statname, args[1]->dev_pathname, iodir] = quantize((args[0]->b_bcount * 976562) / this->elapsed); start[args[0]->b_edev, args[0]->b_blkno,iodir] = 0;} END { printa(" %s (%s) %s \n%@d\n", @); }
この例では、集計変数のタプルにiodir
変数を追加すると、DTraceで読取りおよび書込みI/O操作の個別の集計を表示できます。
#dtrace -s rwdiskact.d
^C
xvda2 (<unknown>) WRITE value ------------- Distribution ------------- count -1 | 0 0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 1 | 0 xvdc (<unknown>) WRITE value ------------- Distribution ------------- count -1 | 0 0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 1 | 0 xvdc1 (<unknown>) WRITE value ------------- Distribution ------------- count -1 | 0 0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 1 | 0 nfs (<nfs>) READ value ------------- Distribution ------------- count -1 | 0 0 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 5 1 | 0 dm-0 (<unknown>) WRITE value ------------- Distribution ------------- count 4096 | 0 8192 |@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ 1 16384 | 0