85 lines
2.7 KiB
Python
85 lines
2.7 KiB
Python
import re, pickle, os, logging
|
|
from autotest_lib.client.bin import utils, test
|
|
|
|
|
|
class kernbench(test.test):
|
|
version = 4
|
|
|
|
def initialize(self):
|
|
self.job.require_gcc()
|
|
self.job.drop_caches_between_iterations = False
|
|
|
|
|
|
def __init_tree(self, version=None):
|
|
#
|
|
# 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 version:
|
|
default_ver = version
|
|
elif utils.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
|
|
|
|
# Do the extraction of the kernel tree
|
|
kernel = self.job.kernel(tarball, self.outputdir, self.tmpdir)
|
|
kernel.config(defconfig=True, logged=False)
|
|
return kernel
|
|
|
|
|
|
def warmup(self, threads=None, version=None):
|
|
if threads:
|
|
self.threads = threads
|
|
else:
|
|
self.threads = self.job.cpu_count()*2
|
|
|
|
self.kernel = self.__init_tree(version)
|
|
logging.info("Warmup run ...")
|
|
logfile = os.path.join(self.debugdir, 'build_log')
|
|
try:
|
|
self.kernel.build_timed(self.threads, output=logfile) # warmup run
|
|
finally:
|
|
if os.path.exists(logfile):
|
|
utils.system("gzip -9 '%s'" % logfile, ignore_status=True)
|
|
|
|
|
|
def run_once(self):
|
|
logging.info("Performance run, iteration %d,"
|
|
" %d threads" % (self.iteration, self.threads))
|
|
if self.iteration:
|
|
timefile = 'time.%d' % self.iteration
|
|
else:
|
|
timefile = 'time.profile'
|
|
self.timefile = os.path.join(self.resultsdir, timefile)
|
|
self.kernel.build_timed(self.threads, self.timefile)
|
|
|
|
|
|
def cleanup(self):
|
|
self.kernel.clean(logged=False) # Don't leave litter lying around
|
|
|
|
|
|
def postprocess_iteration(self):
|
|
os.chdir(self.resultsdir)
|
|
utils.system("grep -h elapsed %s >> time" % self.timefile)
|
|
|
|
results = open(self.timefile).read()
|
|
(user, system, elapsed) = utils.extract_all_time_results(results)[0]
|
|
self.write_perf_keyval({'user':user,
|
|
'system':system,
|
|
'elapsed':elapsed
|
|
})
|