On Aug 22, 2008, at 7:31 AM, Ben Rockwood wrote: > John Dzilvelis wrote: >> Hello, >> I have recently started using iosnoop from the dtrace toolkit to >> monitor file level io. It works great (!) on ufs file systems, but >> I am unable to see any file names when monitoring processes running >> on a zfs file system. As is documented, "<none>" is displayed for >> the file name when it can not be determined from the file system. >> Ideally I would like to gather file level ( named) IO Read/Write >> Bytes as well as IO Read/Write Counts, like the output of iosnoop. >> During my search of the list archives it appears that this issue >> came up in March 2008. But I haven't been able to determine if >> there was a resolution. >> If there has not been a solution to this, then it would be great if >> someone could point me in the right direction so that I can >> experiment with some other probes. I've noticed that the fbt >> provider has many zfs related probes, but I am unable to find the >> docs that describe them individually in detail. > > Tracing IO through ZFS is very complex because of the various layers > through which IO passes. If you want to watch arbitrary file io > requests you'll want to stick with syscall probes and the like. > DTracing IO at a high level is easy, same at a low level, its the in > between with ZFS thats tough. > > The FBT provider exposes every functions entry and return, so for a > given fbt:zfs:whatever probe just look for that function in the ZFS > code > (cvs.opensolaris.org). > > How you trace will depend on what you want to know, but I find that a > good starting point is to aggregate callstacks from low level zio > functions, thus allowing me to see how we got there; ie: dtrace > 'fbt:zfs:zio_read:entry{ @[stack(20)] = count(); }'. Based on the > call > stack I can use other FBT probes to explore. When all else fails I > have > gone so far as to trace every function in the kernel (this works for > about 1-2 seconds and produces an output file around 500M on my > personal > workstation at home)... not something I'd do in production but an > amazing learning experience. ;)
yep - you won't see filenames from iosnoop on zfs since it doesn't call bdev_strategy() directly which is what io:::start works with .. this came up last year with Mauro on the zfs-discuss alias .. if you're looking for file pathnames take a look at the following example I whipped up after that discussion for use on a project to track timings to zfs based files (which can be particularly enlightening.) #!/usr/sbin/dtrace -s # pragma D option quiet zfs_write:entry, zfs_read:entry, zfs_putpage:entry, zfs_getpage:entry { self->ts = timestamp; self->filepath = args[0]->v_path; } zfs_write:return, zfs_read:return, zfs_putpage:return, zfs_getpage:return /self->ts && self->filepath/ { printf("%s on %s took %d nsecs\n", probefunc, stringof(self->filepath), timestamp - self->ts); self->ts = 0; self->filepath = 0; } --- for IO sizes and counts though .. take a look at the calls to extract the right arguments you might be looking for --- .je _______________________________________________ dtrace-discuss mailing list dtrace-discuss@opensolaris.org