# 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 # -e # -i 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()