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