diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2019-08-20 18:01:33 +0000 | 
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2019-08-20 18:01:33 +0000 | 
| commit | 7d6988fdd2aee0e033034e147f16fe05594a60e4 (patch) | |
| tree | 8aa90abd4e0cce6f71fd338ee32e9957135bc642 /utils/benchmark.py | |
| parent | e2fd426bdafe9f5c10066d3926ece6e342184a67 (diff) | |
Notes
Diffstat (limited to 'utils/benchmark.py')
| -rwxr-xr-x | utils/benchmark.py | 135 | 
1 files changed, 0 insertions, 135 deletions
diff --git a/utils/benchmark.py b/utils/benchmark.py deleted file mode 100755 index f1deb0647a15..000000000000 --- a/utils/benchmark.py +++ /dev/null @@ -1,135 +0,0 @@ -#!/usr/bin/env python -# -#                     The LLVM Compiler Infrastructure -# -# This file is distributed under the University of Illinois Open Source -# License. See LICENSE.TXT for details. -# -# ==------------------------------------------------------------------------==# - -import os -import glob -import re -import subprocess -import json -import datetime -import argparse -import urllib -import urllib2 - -parser = argparse.ArgumentParser() -parser.add_argument('benchmark_directory') -parser.add_argument('--runs', type=int, default=10) -parser.add_argument('--wrapper', default='') -parser.add_argument('--machine', required=True) -parser.add_argument('--revision', required=True) -parser.add_argument('--threads', action='store_true') -parser.add_argument('--url', help='The lnt server url to send the results to', -                    default='http://localhost:8000/db_default/v4/link/submitRun') -args = parser.parse_args() - -class Bench: -    def __init__(self, directory, variant): -        self.directory = directory -        self.variant = variant -    def __str__(self): -        if not self.variant: -            return self.directory -        return '%s-%s' % (self.directory, self.variant) - -def getBenchmarks(): -    ret = [] -    for i in glob.glob('*/response*.txt'): -        m = re.match('response-(.*)\.txt', os.path.basename(i)) -        variant = m.groups()[0] if m else None -        ret.append(Bench(os.path.dirname(i), variant)) -    return ret - -def parsePerfNum(num): -    num = num.replace(b',',b'') -    try: -        return int(num) -    except ValueError: -        return float(num) - -def parsePerfLine(line): -    ret = {} -    line = line.split(b'#')[0].strip() -    if len(line) != 0: -        p = line.split() -        ret[p[1].strip().decode('ascii')] = parsePerfNum(p[0]) -    return ret - -def parsePerf(output): -    ret = {} -    lines = [x.strip() for x in output.split(b'\n')] - -    seconds = [x for x in lines if b'seconds time elapsed' in x][0] -    seconds = seconds.strip().split()[0].strip() -    ret['seconds-elapsed'] = parsePerfNum(seconds) - -    measurement_lines = [x for x in lines if b'#' in x] -    for l in measurement_lines: -        ret.update(parsePerfLine(l)) -    return ret - -def run(cmd): -    try: -        return subprocess.check_output(cmd, stderr=subprocess.STDOUT) -    except subprocess.CalledProcessError as e: -        print(e.output) -        raise e - -def combinePerfRun(acc, d): -    for k,v in d.items(): -        a = acc.get(k, []) -        a.append(v) -        acc[k] = a - -def perf(cmd): -    # Discard the first run to warm up any system cache. -    run(cmd) - -    ret = {} -    wrapper_args = [x for x in args.wrapper.split(',') if x] -    for i in range(args.runs): -        os.unlink('t') -        out = run(wrapper_args + ['perf', 'stat'] + cmd) -        r = parsePerf(out) -        combinePerfRun(ret, r) -    os.unlink('t') -    return ret - -def runBench(bench): -    thread_arg = [] if args.threads else ['--no-threads'] -    os.chdir(bench.directory) -    suffix = '-%s' % bench.variant if bench.variant else '' -    response = 'response' + suffix + '.txt' -    ret = perf(['../ld.lld', '@' + response, '-o', 't'] + thread_arg) -    ret['name'] = str(bench) -    os.chdir('..') -    return ret - -def buildLntJson(benchmarks): -    start = datetime.datetime.utcnow().isoformat() -    tests = [runBench(b) for b in benchmarks] -    end = datetime.datetime.utcnow().isoformat() -    ret = { -        'format_version' : 2, -        'machine' : { 'name' : args.machine }, -        'run' : { -            'end_time' : start, -            'start_time' : end, -            'llvm_project_revision': args.revision -        }, -        'tests' : tests -    } -    return json.dumps(ret, sort_keys=True, indent=4) - -def submitToServer(data): -    data2 = urllib.urlencode({ 'input_data' : data }).encode('ascii') -    urllib2.urlopen(urllib2.Request(args.url, data2)) - -os.chdir(args.benchmark_directory) -data = buildLntJson(getBenchmarks()) -submitToServer(data)  | 
