xref: /freebsd/share/dtrace/nfsclienttime (revision c94c8819a54751eaa137a68c420c20cd8584c140)
1*c94c8819SGeorge V. Neville-Neil#!/bin/sh
2*c94c8819SGeorge V. Neville-Neil#
3*c94c8819SGeorge V. Neville-Neil# Copyright (c) 2012 Robert N. M. Watson
4*c94c8819SGeorge V. Neville-Neil# All rights reserved.
5*c94c8819SGeorge V. Neville-Neil#
6*c94c8819SGeorge V. Neville-Neil# This software was developed at the University of Cambridge Computer
7*c94c8819SGeorge V. Neville-Neil# Laboratory with support from a grant from Google, Inc.
8*c94c8819SGeorge V. Neville-Neil#
9*c94c8819SGeorge V. Neville-Neil# Redistribution and use in source and binary forms, with or without
10*c94c8819SGeorge V. Neville-Neil# modification, are permitted provided that the following conditions
11*c94c8819SGeorge V. Neville-Neil# are met:
12*c94c8819SGeorge V. Neville-Neil# 1. Redistributions of source code must retain the above copyright
13*c94c8819SGeorge V. Neville-Neil#    notice, this list of conditions and the following disclaimer.
14*c94c8819SGeorge V. Neville-Neil# 2. Redistributions in binary form must reproduce the above copyright
15*c94c8819SGeorge V. Neville-Neil#    notice, this list of conditions and the following disclaimer in the
16*c94c8819SGeorge V. Neville-Neil#    documentation and/or other materials provided with the distribution.
17*c94c8819SGeorge V. Neville-Neil#
18*c94c8819SGeorge V. Neville-Neil# THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
19*c94c8819SGeorge V. Neville-Neil# ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20*c94c8819SGeorge V. Neville-Neil# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21*c94c8819SGeorge V. Neville-Neil# ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
22*c94c8819SGeorge V. Neville-Neil# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23*c94c8819SGeorge V. Neville-Neil# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24*c94c8819SGeorge V. Neville-Neil# OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25*c94c8819SGeorge V. Neville-Neil# HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26*c94c8819SGeorge V. Neville-Neil# LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27*c94c8819SGeorge V. Neville-Neil# OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28*c94c8819SGeorge V. Neville-Neil# SUCH DAMAGE.
29*c94c8819SGeorge V. Neville-Neil#
30*c94c8819SGeorge V. Neville-Neil# $FreeBSD$
31*c94c8819SGeorge V. Neville-Neil#
32*c94c8819SGeorge V. Neville-Neil# This script measures all time spent waiting on RPC replies for each
33*c94c8819SGeorge V. Neville-Neil# system call, and then generates a histogram of those times sorted by
34*c94c8819SGeorge V. Neville-Neil# system call name.
35*c94c8819SGeorge V. Neville-Neil#
36*c94c8819SGeorge V. Neville-Neil# Currently only supports NFSv3
37*c94c8819SGeorge V. Neville-Neil#
38*c94c8819SGeorge V. Neville-Neil# Usage: nfsclienttime
39*c94c8819SGeorge V. Neville-Neil#
40*c94c8819SGeorge V. Neville-Neil# Press Ctrl-C to exit and display statistics.
41*c94c8819SGeorge V. Neville-Neil#
42*c94c8819SGeorge V. Neville-Neil
43*c94c8819SGeorge V. Neville-Neil/usr/sbin/dtrace -n '
44*c94c8819SGeorge V. Neville-Neil#pragma D option quiet
45*c94c8819SGeorge V. Neville-Neil
46*c94c8819SGeorge V. Neville-Neildtrace:::BEGIN
47*c94c8819SGeorge V. Neville-Neil{
48*c94c8819SGeorge V. Neville-Neil	printf("Collecting data...press Ctrl-C to exit.\n");
49*c94c8819SGeorge V. Neville-Neil}
50*c94c8819SGeorge V. Neville-Neil
51*c94c8819SGeorge V. Neville-Neilsyscall:::entry
52*c94c8819SGeorge V. Neville-Neil{
53*c94c8819SGeorge V. Neville-Neil
54*c94c8819SGeorge V. Neville-Neil        self->count = 0;
55*c94c8819SGeorge V. Neville-Neil}
56*c94c8819SGeorge V. Neville-Neil
57*c94c8819SGeorge V. Neville-Neilnfsclient:nfs3::start
58*c94c8819SGeorge V. Neville-Neil{
59*c94c8819SGeorge V. Neville-Neil
60*c94c8819SGeorge V. Neville-Neil        self->timestamp = timestamp;
61*c94c8819SGeorge V. Neville-Neil}
62*c94c8819SGeorge V. Neville-Neil
63*c94c8819SGeorge V. Neville-Neilnfsclient:nfs3::done
64*c94c8819SGeorge V. Neville-Neil{
65*c94c8819SGeorge V. Neville-Neil
66*c94c8819SGeorge V. Neville-Neil        self->count += (timestamp - self->timestamp);
67*c94c8819SGeorge V. Neville-Neil}
68*c94c8819SGeorge V. Neville-Neil
69*c94c8819SGeorge V. Neville-Neilsyscall:::return
70*c94c8819SGeorge V. Neville-Neil/self->count != 0/  {
71*c94c8819SGeorge V. Neville-Neil
72*c94c8819SGeorge V. Neville-Neil        @syscalls[probefunc] = quantize(self->count);
73*c94c8819SGeorge V. Neville-Neil}
74*c94c8819SGeorge V. Neville-Neil'
75