3 # Copyright (C) 2011 The Regents of the University of California
4 # Written by Michael Vrable <mvrable@cs.ucsd.edu>
6 # Redistribution and use in source and binary forms, with or without
7 # modification, are permitted provided that the following conditions
9 # 1. Redistributions of source code must retain the above copyright
10 # notice, this list of conditions and the following disclaimer.
11 # 2. Redistributions in binary form must reproduce the above copyright
12 # notice, this list of conditions and the following disclaimer in the
13 # documentation and/or other materials provided with the distribution.
14 # 3. Neither the name of the University nor the names of its contributors
15 # may be used to endorse or promote products derived from this software
16 # without specific prior written permission.
18 # THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
19 # ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 # IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 # ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
22 # FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 # DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 # OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 # HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 # LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 # OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
36 size = struct.calcsize(DATAPOINT)
39 i = struct.unpack(DATAPOINT, d)
44 if __name__ == '__main__':
45 blocksize = int(sys.argv[1])
47 for f in sys.argv[2:]:
48 data += load_log(open(f))
51 duration = data[-1][0] - data[0][0]
52 #print "Time span: %d to %d (%d seconds)" % (data[0][0], data[-1][0], duration)
54 start = data[0][0] + 5
56 truncated = [d for d in data if start <= d[0] <= end]
57 #print len(data), len(truncated)
58 duration = float(end - start + 1)
60 #print "# ops/sec\tbandwidth (MB/s)\tLatency(ms)"
61 print "%s\t%s\t%s" % (len(truncated) / duration,
62 len(truncated) / duration * blocksize / 1024.0**2,
63 sum(d[1] for d in truncated) / len(truncated) / 1000)