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