You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.4 KiB
97 lines
3.4 KiB
# 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()
|