blob: 83f53d9ca6e0cf6346c6f44ffb3dcb872a152e01 [file] [log] [blame] [edit]
# Needs autoconf & automake & libtool to be installed. Ewwwwwwwwwwwwwwwwwwwwww
import re, os
from autotest_lib.client.bin import test, utils, os_dep
class reaim(test.test):
version = 1
# http://prdownloads.sourceforge.net/re-aim-7/osdl-aim-7.0.1.13.tar.gz
def setup(self, tarball = 'osdl-aim-7.0.1.13.tar.gz'):
tarball = utils.unmap_url(self.bindir, tarball, self.tmpdir)
utils.extract_tarball_to_dir(tarball, self.srcdir)
self.job.setup_dep(['libaio'])
libs = '-L' + self.autodir + '/deps/libaio/lib -laio'
cflags = '-I ' + self.autodir + '/deps/libaio/include'
var_libs = 'LIBS="' + libs + '"'
var_cflags = 'CFLAGS="' + cflags + '"'
self.make_flags = var_libs + ' ' + var_cflags
os_dep.commands('autoconf', 'automake', 'libtoolize')
os.chdir(self.srcdir)
utils.system('./bootstrap')
utils.system('./configure')
# we can't use patch here, as the Makefile is autogenerated
# so we can't tell exactly what it looks like.
# Perform some foul in-place sed hackery instead.
for file in ('Makefile', 'src/Makefile'):
utils.system('sed -i "s/^CFLAGS =/CFLAGS +=/" ' + file)
utils.system('sed -i "s/^LIBS =/LIBS +=/" ' + file)
utils.system(self.make_flags + ' make')
os.rename('src/reaim', 'reaim')
def initialize(self):
self.job.require_gcc()
self.ldlib = 'LD_LIBRARY_PATH=%s/deps/libaio/lib'%(self.autodir)
def execute(self, iterations = 1, workfile = 'workfile.short',
start = 1, end = 10, increment = 2,
extra_args = '', tmpdir = None):
if not tmpdir:
tmpdir = self.tmpdir
# -f workfile
# -s <number of users to start with>
# -e <number of users to end with>
# -i <number of users to increment>
workfile = os.path.join('data', workfile)
args = "-f %s -s %d -e %d -i %d" % (workfile, start, end, increment)
config = os.path.join(self.srcdir, 'reaim.config')
utils.system('cp -f %s/reaim.config %s' % (self.bindir, config))
args += ' -c ./reaim.config'
open(config, 'a+').write("DISKDIR %s\n" % tmpdir)
os.chdir(self.srcdir)
cmd = self.ldlib + ' ./reaim ' + args + ' ' + extra_args
results = []
profilers = self.job.profilers
if not profilers.only():
for i in range(iterations):
results.append(utils.system_output(cmd, retain_output=True))
# Do a profiling run if necessary
if profilers.present():
profilers.start(self)
results.append(utils.system_output(cmd, retain_output=True))
profilers.stop(self)
profilers.report(self)
self.__format_results("\n".join(results))
def __format_results(self, results):
out = open(self.resultsdir + '/keyval', 'w')
for line in results.split('\n'):
m = re.match('Max Jobs per Minute (\d+)', line)
if m:
max_jobs_per_min = m.group(1)
if re.match(r"^[0-9\. ]+$", line):
fields = line.split()
out.write("""\
max_jobs_per_min=%s
num_forked=%s
parent_time=%s
child_systime=%s
child_utime=%s
jobs_min=%s
jobs_min_child=%s
std_dev_time=%s
std_dev_pct=%s
jti=%s
""" % tuple([max_jobs_per_min] + fields))
out.close()