Fix up kernbench - needs to pickle what it did in the setup phase.
git-svn-id: http://test.kernel.org/svn/autotest/trunk@125 592f7852-d20e-0410-864c-8624ca9c26a4
diff --git a/bin/autotest_utils.py b/bin/autotest_utils.py
index cac7437..e77030f 100755
--- a/bin/autotest_utils.py
+++ b/bin/autotest_utils.py
@@ -215,6 +215,16 @@
os.system("echo " + string + " >> /dev/tty")
+def dump_object(object):
+ for item in object.__dict__.iteritems():
+ print item
+ try:
+ (key,value) = item
+ dump_object(value)
+ except:
+ continue
+
+
class fd_stack:
# Note that we need to redirect both the sys.stdout type descriptor
# (which print, etc use) and the low level OS numbered descriptor
diff --git a/bin/kernel.py b/bin/kernel.py
index e6a22bf..aa00de7 100755
--- a/bin/kernel.py
+++ b/bin/kernel.py
@@ -1,4 +1,4 @@
-import os,os.path,shutil,urllib
+import os,os.path,shutil,urllib,copy,pickle
from autotest_utils import *
import kernel_config
import test
@@ -99,11 +99,18 @@
def build_timed(self, threads, timefile = '/dev/null', make_opts = ''):
+ os.chdir(self.build_dir)
+ print "make clean"
+ system('make clean')
build_string = "/usr/bin/time make %s -j %s vmlinux > /dev/null 2> %s" % (make_opts, threads, timefile)
print build_string
system(build_string)
if (not os.path.isfile('vmlinux')):
raise TestError("no vmlinux found, kernel build failed")
+
+
+ def clean(self):
+ os.chdir(self.build_dir)
print "make clean"
system('make clean')
@@ -134,3 +141,11 @@
os.environ['ARCH']='x86_64'
os.environ['CROSS_COMPILE']=autodir+'sources/x86_64-cross/bin'
+
+ # we can't pickle the backreference to job (it contains fd's),
+ # nor would we want to
+ def pickle_dump(self, filename):
+ temp = copy.copy(self)
+ temp.job = None
+ pickle.dump(temp, open(filename, 'w'))
+
diff --git a/tests/kernbench/kernbench.py b/tests/kernbench/kernbench.py
index 7c9e243..178d185 100755
--- a/tests/kernbench/kernbench.py
+++ b/tests/kernbench/kernbench.py
@@ -1,23 +1,27 @@
-import test
+import test, pickle
from autotest_utils import *
class kernbench(test.test):
version = 1
- def setup(self, kernelver = '/usr/local/src/linux-2.6.14.tar.bz2',
- config = os.environ['AUTODIR'] + "/tests/kernbench/config"):
-
- self.top_dir = self.job.tmpdir+'/kernbench'
- self.kernel = self.job.kernel(self.top_dir, kernelver)
- self.kernel.config(config)
+ def setup(self):
+ tarball = '/usr/local/src/linux-2.6.14.tar.bz2'
+ config = self.bindir + "/config"
+ kernel = self.job.kernel(self.srcdir, tarball)
+ kernel.config(config)
+ # have to save this off, as we might use it in another run
+ kernel.pickle_dump(self.srcdir + '/.pickle')
def execute(self, iterations = 1, threads = 2 * count_cpus()):
+ kernel = pickle.load(open(self.srcdir + '/.pickle', 'r'))
print "kernbench x %d: %d threads" % (iterations, threads)
- self.kernel.build_timed(threads) # warmup run
+ kernel.build_timed(threads) # warmup run
for i in range(1, iterations+1):
- self.kernel.build_timed(threads, '../log/time.%d' % i)
+ logfile = self.resultsdir+'/time.%d' % i
+ kernel.build_timed(threads, logfile)
- os.chdir(top_dir + '/log')
+ kernel.clean() # Don't leave litter lying around
+ os.chdir(self.resultsdir)
system("grep elapsed time.* > time")