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")