This is the mail archive of the systemtap@sourceware.org mailing list for the systemtap project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: Simplifying examples by improving vfs tapset


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


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]