Skip to content

Commit

Permalink
lots of random files I hadn't committed
Browse files Browse the repository at this point in the history
  • Loading branch information
aclements committed Oct 3, 2024
1 parent 7f9fb08 commit 78aaa4b
Show file tree
Hide file tree
Showing 15 changed files with 1,568 additions and 0 deletions.
22 changes: 22 additions & 0 deletions abi/go.sum
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/mod v0.3.0 h1:RM4zey1++hCTbCVQfnWeKs9/IEsaBLA8vTkd0WVtmH4=
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA=
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20200815165600-90abf76919f3 h1:0aScV/0rLmANzEYIhjCOi2pTvDyhZNduBUMD2q3iqs4=
golang.org/x/tools v0.0.0-20200815165600-90abf76919f3/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA=
golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543 h1:E7g+9GITq07hpfrRu66IVDexMakfv52eLZ2CXBWiKr4=
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
142 changes: 142 additions & 0 deletions benchscripts/plot-time
Original file line number Diff line number Diff line change
@@ -0,0 +1,142 @@
#!/usr/bin/env python3
# -*- python -*-

# Copyright 2015 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

import argparse
import os
import datetime

import numpy as np
import scipy.stats as stats
import pandas as pd

import matplotlib as mpl
mpl.use('GTK3Cairo')
mpl.rc('figure', facecolor='1')
import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import seaborn as sns

# TODO: Take a rev-list and work from that instead. Then there can be
# benchmarks mixed in from other branches, and it will be much easier
# to specify a baseline.

def main():
argp = argparse.ArgumentParser(
description='''Plot benchmarks over time.''')
argp.add_argument('--baseline', action='append', type=argparse.FileType(),
help='''Benchmark output files to use as a baseline.''')
argp.add_argument('benchout', nargs='+', type=argparse.FileType(),
help='''Benchmark output files to read. Must be in
directories named YYYY-MM-DDTHH:MM:SS.''')
args = argp.parse_args()

baseline = None
baselineNames = set()
if args.baseline:
baseline = pd.DataFrame()
for benchout in args.baseline:
b1 = parseBenchmarks(benchout)
b1['date'] = dateOf(benchout.name)
baseline = baseline.append(b1, ignore_index=True)
baselineNames.add(benchout.name)

print(args.baseline, baselineNames)
benchmarks = pd.DataFrame()
for benchout in args.benchout:
if benchout.name in baselineNames:
continue
if '2015-02-18' in benchout.name:
continue # XXX
if '2015-05-05T10:38:48-04:00' in benchout.name:
# XXX Off-master commit
continue
b1 = parseBenchmarks(benchout)
b1['date'] = dateOf(benchout.name)
benchmarks = benchmarks.append(b1, ignore_index=True)

benchMeans = getBenchMeans(benchmarks)
gmeanByDate = gmeanBenchmarks(benchMeans)

for i, (gmean1, gmean2) in enumerate(zip(gmeanByDate['ops/sec'], gmeanByDate['ops/sec'][1:])):
delta = (gmean2 - gmean1) / gmean1
if abs(delta) > 0.05:
date = gmeanByDate['date'][i+1]
print("%s %s %+g%%" % (shaOfDate(date), date, delta*100))

if baseline is not None:
# Normalize each date geomean to baseline
#
# XXX Should this just add a line?
baselineGmean = stats.gmean(getBenchMeans(baseline)['ops/sec'])
gmeanByDate['normalized ops/sec'] = gmeanByDate['ops/sec'] / baselineGmean
plotCol = 'normalized ops/sec'
else:
plotCol = 'ops/sec'

# # Normalize each benchmark to latest result.
# latestBenchMeans = benchMeans.sort('date', ascending=False).groupby('name').\
# head(1).reset_index(drop=True)
# latestBenchMeans = latestBenchMeans.drop('date', 1).set_index('name')
# print(latestBenchMeans)
# # normBenchMeans = benchMeans.drop('date').groupby('name').

fig, ax = plt.subplots(1, 1, dpi=120)

ax.set_title('go1 benchmarks relative to Go 1.4') # XXX
ax.plot(gmeanByDate['date'].astype(datetime.datetime), gmeanByDate[plotCol])
ax.xaxis.set_major_formatter(mdates.DateFormatter('%b %e'))
ax.format_xdata = mdates.DateFormatter('%Y-%m-%dT%H:%M:%S')
ax.set_ylim(bottom=0)
ax.set_ylabel('Geomean performance (%s)' % plotCol)
#fig.autofmt_xdate()
fig.tight_layout()
plt.show()

def getBenchMeans(benchmarks):
# Compute ops/sec
benchmarks['ops/sec'] = 1e9 / benchmarks['ns/op']

# Compute the mean for each benchmark.
# TODO: Discard outliers.
return benchmarks.groupby(['date', 'name']).mean().reset_index()

def gmeanBenchmarks(benchMeans):
# For each date, compute the geometric mean across benchmarks.
return benchMeans.groupby('date')['ops/sec'].agg(stats.gmean).reset_index()

def parseBenchmarks(fp):
results = []
for line in fp:
f = line.split()
if len(f) < 4:
continue
name = f[0]
ns = None
for i, field in enumerate(f):
if field == 'ns/op':
ns = float(f[i-1])
if ns is None:
continue

results.append((name, ns))

# UGH. This doesn't work if results == []
return pd.DataFrame(results,
columns=('name', 'ns/op'))

def dateOf(path):
p = os.path.basename(os.path.dirname(path))
if p.endswith('-04:00'):
p = p[:-len('-04:00')] # XXX
return datetime.datetime.strptime(p, '%Y-%m-%dT%H:%M:%S')

def shaOfDate(date):
d = date.strftime('%Y-%m-%dT%H:%M:%S')
return os.path.basename(os.readlink('history/by-date/' + d))

if __name__ == '__main__':
main()
146 changes: 146 additions & 0 deletions benchscripts/plot-time-2
Original file line number Diff line number Diff line change
@@ -0,0 +1,146 @@
#!/usr/bin/env python3
# -*- python -*-

# Copyright 2015 The Go Authors. All rights reserved.
# Use of this source code is governed by a BSD-style
# license that can be found in the LICENSE file.

import argparse
import os
import datetime

import numpy as np
import scipy.stats as stats
import pandas as pd

import matplotlib as mpl
mpl.use('GTK3Cairo')
mpl.rc('figure', facecolor='1')
import matplotlib.pyplot as plt
import seaborn as sns

# TODO: Take a rev-list and work from that instead. Then there can be
# benchmarks mixed in from other branches, and it will be much easier
# to specify a baseline.

def main():
argp = argparse.ArgumentParser(
description='''Plot benchmarks over time.''')
argp.add_argument('-C', help='''Git directory''')
argp.add_argument('--baseline', metavar='COMMIT',
help='''Normalize results to COMMIT results''')
argp.add_argument('--history', metavar='DIR', default='history',
help='''Directory of benchmark results (default: %(default)s)''')
argp.add_argument('revisions', nargs='*', default=['HEAD'],
help='''Revision range to show''')
args = argp.parse_args()

global gitDir
gitDir = argp.C

revisions = gitRevList(*argp.revisions)
baselineRev = None
if argp.baseline:
baselineRev = gitRevParse(argp.baseline)

# XXX HERE. I should probably just rewrite this mess in Go.


baseline = None
baselineNames = set()
if args.baseline:
baseline = pd.DataFrame()
for benchout in args.baseline:
b1 = parseBenchmarks(benchout)
b1['date'] = dateOf(benchout.name)
baseline = baseline.append(b1, ignore_index=True)
baselineNames.add(benchout.name)

benchmarks = pd.DataFrame()
for benchout in args.benchout:
if benchout.name in baselineNames:
continue
b1 = parseBenchmarks(benchout)
b1['date'] = dateOf(benchout.name)
benchmarks = benchmarks.append(b1, ignore_index=True)

benchMeans = getBenchMeans(benchmarks)
gmeanByDate = gmeanBenchmarks(benchMeans)

if baseline is not None:
# Normalize each date geomean to baseline
#
# XXX Should this just add a line?
baselineGmean = stats.gmean(getBenchMeans(baseline)['ops/sec'])
gmeanByDate['normalized ops/sec'] = gmeanByDate['ops/sec'] / baselineGmean
plotCol = 'normalized ops/sec'
else:
plotCol = 'ops/sec'

# # Normalize each benchmark to latest result.
# latestBenchMeans = benchMeans.sort('date', ascending=False).groupby('name').\
# head(1).reset_index(drop=True)
# latestBenchMeans = latestBenchMeans.drop('date', 1).set_index('name')
# print(latestBenchMeans)
# # normBenchMeans = benchMeans.drop('date').groupby('name').

fig, ax = plt.subplots(1, 1, dpi=120)

#ax.set_title('go1 benchmarks relative to Go 1.4') # XXX
ax.plot(gmeanByDate['date'].astype(datetime.datetime), gmeanByDate[plotCol])
ax.set_ylim(bottom=0)
ax.set_ylabel('Geomean performance (%s)' % plotCol)
fig.tight_layout()
plt.show()

class Rev(collections.namedtuple('commit date')): pass

def gitRevList(*args):
revs = []
for line in subprocess.check_call(
['git', 'rev-list', '--format=format:%H %ct'] + args,
stdout=subprocess.PIPE, stdin=subprocess.DEVNULL).splitlines():
if line.startswith('commit '):
continue
commit, date = line.split()
pdate = datetime.datetime.fromtimestamp(int(date))
revs.append(Rev(commit, pdate))
return revs

def getBenchMeans(benchmarks):
# Compute ops/sec
benchmarks['ops/sec'] = 1e9 / benchmarks['ns/op']

# Compute the mean for each benchmark.
# TODO: Discard outliers.
return benchmarks.groupby(['date', 'name']).mean().reset_index()

def gmeanBenchmarks(benchMeans):
# For each date, compute the geometric mean across benchmarks.
return benchMeans.groupby('date')['ops/sec'].agg(stats.gmean).reset_index()

def parseBenchmarks(fp):
results = []
for line in fp:
f = line.split()
if len(f) < 4:
continue
name = f[0]
ns = None
for i, field in enumerate(f):
if field == 'ns/op':
ns = float(f[i-1])
if ns is None:
continue

results.append((name, ns))

return pd.DataFrame(results,
columns=('name', 'ns/op'))

def dateOf(path):
p = os.path.basename(os.path.dirname(path))
return datetime.datetime.strptime(p, '%Y-%m-%dT%H:%M:%S')

if __name__ == '__main__':
main()
Loading

0 comments on commit 78aaa4b

Please sign in to comment.