blob: 746163d1e83b065e441d20c998fc732553a8e22b [file] [log] [blame]
import test, pickle
from autotest_utils import *
import re
class kernbench(test.test):
version = 1
def setup(self):
#
# If we have a local copy of the 2.6.14 tarball use that
# else let the kernel object use the defined mirrors
# to obtain it.
#
# http://kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2
#
# On ia64, we default to 2.6.20, as it can't compile 2.6.14.
if get_current_kernel_arch() == 'ia64':
default_ver = '2.6.20'
else:
default_ver = '2.6.14'
tarball = None
for dir in (self.bindir, '/usr/local/src'):
tar = 'linux-%s.tar.bz2' % default_ver
path = os.path.join(dir, tar)
if os.path.exists(path):
tarball = path
break
if not tarball:
tarball = default_ver
kernel = self.job.kernel(tarball, self.tmpdir, self.srcdir)
kernel.config(defconfig=True)
# 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'))
kernel.job = self.job
print "kernbench x %d: %d threads" % (iterations, threads)
kernel.build_timed(threads) # warmup run
profilers = self.job.profilers
if not profilers.only():
for i in range(iterations):
logfile = self.resultsdir+'/time.%d' % i
kernel.build_timed(threads, logfile)
# Do a profiling run if necessary
if profilers.present():
profilers.start(self)
logfile = self.resultsdir+'/time.profile'
kernel.build_timed(threads, logfile)
profilers.stop(self)
profilers.report(self)
kernel.clean() # Don't leave litter lying around
os.chdir(self.resultsdir)
system("grep -h elapsed time.* > time")
self.__format_results(open('time').read())
def __format_results(self, results):
out = open('keyval', 'w')
for result in extract_all_time_results(results):
print >> out, "user=%s\nsystem=%s\nelapsed=%s\n" % result
out.close()