Simplifying examples by improving vfs tapset

Jeff Moyer jmoyer@redhat.com
Tue Oct 28 15:40:00 GMT 2008


William Cohen <wcohen@redhat.com> writes:

> I am looking through the examples being used in the SystemTap
> beginners guide and trying to streamline them a bit.  One
> simplification is the minimize the use of raw kernel.function() and
> module().function() probes by using tapset aliases instead.  Probing
> the raw C functions is not so meaningful for average users. Plus they
> don't know what arguments might be available at those functions. The
> tapsets should minimize raw functions. When looking to convert some of
> the probes to use the vfs tapsets, I noticed that a number of the vfs
> tapsets don't have dev or devname defined, e.g. vfs.read{.return} and
> vfs.write{.return}. This result in ugly code such as in disktop.stp
> probe handlers:
>
> 		dev = __file_dev($file)
> 		devname = __find_bdevname(dev,__file_bdev($file))
>
>
> The dev and devname should be consistently available for vfs
> tapset. This would eliminate the need for internal systemtap tapset
> functions to be used in the probe handlers and would make examples
> such as disktop.stp simpler. There appears to be ugliness in
> systemtap.examples/io/iostat-scsi.stp.
>
> Attached is the suggested patch to for the vfs.stp stapset and the
> disktop.stp example.
>
> -Will
> diff --git a/tapset/vfs.stp b/tapset/vfs.stp
> index 7f2312d..2ac8256 100644
> --- a/tapset/vfs.stp
> +++ b/tapset/vfs.stp
> @@ -800,6 +800,8 @@ probe vfs.read = kernel.function ("vfs_read")
>  	pos = $pos
>  	buf = $buf
>  	bytes_to_read = $count
> +	dev = __file_dev($file)
> +	devname = __find_bdevname(dev, __file_bdev($file))
>  }
>  
>  probe vfs.read.return = kernel.function ("vfs_read").return
> @@ -808,6 +810,8 @@ probe vfs.read.return = kernel.function ("vfs_read").return
>  	pos = $pos
>  	buf = $buf
>  	bytes_to_read = $count
> +	dev = __file_dev($file)
> +	devname = __find_bdevname(dev, __file_bdev($file))
>  
>  	ret = $return
>  	bytes_read = ret > 0 ? ret : 0
> @@ -844,6 +848,8 @@ probe vfs.write = kernel.function ("vfs_write")
>  	pos = $pos
>  	buf = $buf
>  	bytes_to_write = $count
> +	dev = __file_dev($file)
> +	devname = __find_bdevname(dev, __file_bdev($file))
>  }
>  
>  probe vfs.write.return = kernel.function ("vfs_write").return
> @@ -852,6 +858,8 @@ probe vfs.write.return = kernel.function ("vfs_write").return
>  	pos = $pos
>  	buf = $buf
>  	bytes_to_write = $count
> +	dev = __file_dev($file)
> +	devname = __find_bdevname(dev, __file_bdev($file))
>  
>  	ret = $return
>  	bytes_written = ret > 0 ? ret : 0

What about readv and writev?  I had modified my local copy of
disktop.stp to take these into account (hooking into do_readv_writev).
I will post those updates if you like, once I figure out why I ran into
a problem with the array assignments.  (I had to read from the io_stat
array before writing to it, otherwise the written values didn't show
up.)

One other improvement that could be made to the script is AIO support.

Cheers,

Jeff



More information about the Systemtap mailing list