#!/usr/sbin/dtrace -s #pragma D option quiet :::BEGIN { printf("%-10s %-10s %51s %2s %8s %8s\n", "Event", "Device", "Path", "RW", "Size", "Offset"); } ::bwrite_common:entry { self->bwrite = 1; } ::bwrite_common:return { self->bwrite = 0; } ::bread_common:entry { self->bread = 1; } ::bread_common:return { self->bread = 0; } ::fop_putpage:entry /self->trace == 0 && (((vnode_t *)arg0)->v_path)/ { vp = (vnode_t*)arg0; b_addr = arg1; len = arg2; self->path=stringof(vp->v_path); printf("put-page %58s %8d\n", self->path, len); self->type = "putpage-io"; self->trace = 1; } ::fop_putpage:return /self->trace == 1/ { self->trace = 0; } ::fop_getpage:entry /self->trace == 0 && (((vnode_t *)arg0)->v_path)/ { vp = (vnode_t*)arg0; b_addr = arg1; len = arg2; self->path=stringof(vp->v_path); printf("get-page %58s %8d\n", self->path, len); self->type = "getpage-io"; self->trace = 1; } ::fop_getpage:return /self->trace == 1/ { self->trace = 0; } io::bdev_strategy:start /self->trace/ { printf("%s %10s %51s %2s %8d %8u\n", self->type, args[1]->dev_statname, self->path, args[0]->b_flags & B_READ ? "R" : "W", args[0]->b_bcount, args[0]->b_blkno); } io::bdev_strategy:start /self->trace == 0 && (self->bwrite || self->bread)/ { printf("buffer-io %10s %51s %2s %8d %8u\n", args[1]->dev_statname, args[2]->fi_pathname, args[0]->b_flags & B_READ ? "R" : "W", args[0]->b_bcount, args[0]->b_blkno); } io::bdev_strategy:start /self->trace == 0 && (!(self->bwrite || self->bread))/ { printf("other-io %10s %51s %2s %8d %8u\n", args[1]->dev_statname, args[2]->fi_pathname, args[0]->b_flags & B_READ ? "R" : "W", args[0]->b_bcount, args[0]->b_blkno); }