blob: ea8009e7f55ed28b8709e91c7ba6bd3cbdc28230 [file] [log] [blame]
mblighb0a884f2007-12-07 16:30:57 +00001#!/usr/bin/python
2
3# http://test.kernel.org/perf/kernbench.elm3b6.png
4
5import cgi, cgitb, os, sys, re, subprocess
6cgitb.enable()
7Popen = subprocess.Popen
8
jadmanski22ab0692008-05-01 22:22:51 +00009import common
10from autotest_lib.tko import db, display, frontend, plotgraph
11from autotest_lib.client.bin import kernel_versions
mblighb0a884f2007-12-07 16:30:57 +000012
13released_kernel = re.compile('2\.\d\.\d+(-smp-)[0-9]{3}\.[0-9]$')
14rc_kernel = re.compile('2\.\d\.\d+(-smp-)[0-9]{3}\.[0-9]_rc[0-9]$')
15db = db.db()
16
17def main():
18 form = cgi.FieldStorage()
19
20 benchmarks = form["benchmark"].value
21 keys = form["key"].value
22 machine_idx = form["machine"].value
23 kernel = form["kernel"].value
24 if kernel == "released":
25 kernel = released_kernel
26 if kernel == "rc":
27 kernel = rc_kernel
28
29 benchmark_idx = benchmarks.split(',')
30 key_idx = keys.split(',')
31 machine = frontend.machine.select(db, {'hostname' : machine_idx})[0]
32
33 #get the machine type from machinename
34 for line in open('machines', 'r'):
35 words = line.rstrip().split('\t')
36 if words[0] == machine.hostname:
37 title = '%s (%s)' % (words[-1], machine.hostname)
38 else:
39 title = '%s' % machine.hostname
40
41 graph = plotgraph.gnuplot(title, 'Kernel', 'normalized throughput (%)', xsort = sort_kernels, size = "600,500")
42 for benchmark, key in zip(benchmark_idx, key_idx):
43 reference_value = None
44 data = {}
mbligh6cf3bb32008-02-11 16:27:05 +000045 where = { 'subdir' : benchmark, 'machine_idx' : machine.idx , 'status' : 6}
mblighb0a884f2007-12-07 16:30:57 +000046
47 #select the corresponding kernels and sort by the release version
48 kernels = set([])
49 kernels_sort = set([])
50 kernels_idx = set([])
51 for test in frontend.test.select(db, where):
52 if kernel == "all":
53 kernels.add(test.kernel().printable)
54 kernels_idx.add(str(test.kernel().idx))
55
56 elif kernel == "experimental":
57 if not re.match(released_kernel, test.kernel().printable)\
58 and not re.match(rc_kernel, test.kernel().printable):
59 kernels.add(test.kernel().printable)
60 kernels_idx.add(str(test.kernel().idx))
61 else:
62 if re.match(kernel, test.kernel().printable):
63 kernels.add(test.kernel().printable)
64 kernels_idx.add(str(test.kernel().idx))
65 kernels_sort = sort_kernels(list(kernels))
66
67 #get the base value for each benchmark
68 kernel_base = frontend.kernel.select(db, {'printable' : kernels_sort[0]})[0]
69 for test in frontend.test.select(db, { 'subdir' : benchmark, 'machine_idx' : machine.idx, 'kernel_idx' : kernel_base.idx}):
70 iterations = test.iterations()
71 if iterations.has_key(key):
72 reference_value = sum(iterations[key])/len(iterations[key])
73 break
74
75 wherein = { 'kernel_idx' : kernels_idx }
76 for test in frontend.test.select(db, where, wherein):
77 iterations = test.iterations()
78 if iterations.has_key(key):
79 if benchmark == "kernbench":
80 data[test.kernel().printable] = [((reference_value / i - 1)*100) for i in iterations[key]]
81 else:
82 data[test.kernel().printable] = [((i / reference_value - 1)*100) for i in iterations[key]]
83 graph.add_dataset(benchmark+' ( '+key+' ) ',data)
84
85 graph.plot(cgi_header = True)
86
87
88def sort_kernels(kernels):
89 return sorted(kernels, key = kernel_versions.version_encode)
90
91main()