summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xbenchmark-cmd131
1 files changed, 69 insertions, 62 deletions
diff --git a/benchmark-cmd b/benchmark-cmd
index ad5da31..da6b1fa 100755
--- a/benchmark-cmd
+++ b/benchmark-cmd
@@ -7,10 +7,10 @@ import tempfile
class Table(object):
- '''Represent tabular data for formatting purposes.'''
-
- sep = ' '
-
+ """Represent tabular data for formatting purposes."""
+
+ sep = " "
+
def __init__(self):
self.caption = None
self.columns = []
@@ -25,21 +25,25 @@ class Table(object):
def write_plaintext(self, f):
if self.caption:
- f.write('%s\n%s\n\n' % (self.caption, '-' * len(self.caption)))
-
+ f.write("%s\n%s\n\n" % (self.caption, "-" * len(self.caption)))
+
cells = []
cells.append([h1 for h1, h2, format, left in self.columns])
cells.append([h2 for h1, h2, format, left in self.columns])
for row in self.rows:
- cells.append([self.format_cell(row[i], self.columns[i][2])
- for i in range(len(self.columns))])
+ cells.append(
+ [
+ self.format_cell(row[i], self.columns[i][2])
+ for i in range(len(self.columns))
+ ]
+ )
widths = self.compute_column_widths(cells)
-
- f.write('%s\n' % self.format_headings(widths, 0))
- f.write('%s\n' % self.format_headings(widths, 1))
+
+ f.write("%s\n" % self.format_headings(widths, 0))
+ f.write("%s\n" % self.format_headings(widths, 1))
for row in self.rows:
- f.write('%s\n' % self.format_row(row, widths))
+ f.write("%s\n" % self.format_row(row, widths))
def format_cell(self, data, format):
return format % data
@@ -52,112 +56,115 @@ class Table(object):
return widths
def format_headings(self, widths, which):
- headings = [self.pad(widths[i],
- self.columns[i][which],
- self.columns[i][3])
- for i in range(len(widths))]
+ headings = [
+ self.pad(widths[i], self.columns[i][which], self.columns[i][3])
+ for i in range(len(widths))
+ ]
return self.sep.join(headings)
-
+
def format_row(self, row, widths):
def cell(i):
h1, h2, format, left = self.columns[i]
return self.pad(widths[i], format % row[i], left)
+
cells = [cell(i) for i in range(len(widths))]
return self.sep.join(cells)
def pad(self, width, text, left):
if left:
- return '%-*s' % (width, text)
+ return "%-*s" % (width, text)
else:
- return '%*s' % (width, text)
+ return "%*s" % (width, text)
class Benchmarker(cliapp.Application):
-
def add_settings(self):
- self.settings.string_list(['command'], 'command to benchmark')
- self.settings.string_list(['verify'], 'command for verifying result')
- self.settings.string_list(['setup'], 'command for setup')
- self.settings.string_list(['cleanup'], 'command for cleanup')
- self.settings.boolean(['setup-once'], 'do setups only once')
- self.settings.boolean(['cleanup-once'], 'do cleanups only once')
- self.settings.boolean(['verbose'], 'show commands and their output')
-
+ self.settings.string_list(["command"], "command to benchmark")
+ self.settings.string_list(["verify"], "command for verifying result")
+ self.settings.string_list(["setup"], "command for setup")
+ self.settings.string_list(["cleanup"], "command for cleanup")
+ self.settings.boolean(["setup-once"], "do setups only once")
+ self.settings.boolean(["cleanup-once"], "do cleanups only once")
+ self.settings.boolean(["verbose"], "show commands and their output")
+
def process_args(self, args):
results = Table()
- results.add_column('user', '(s)', '%.1f')
- results.add_column('system', '(s)', '%.1f')
- results.add_column('real', '(s)', '%.1f')
- results.add_column('max RSS', '(KiB)', '%d')
- results.add_column('cmd', '', '%-0s', left=True)
-
- commands = self.settings['command']
- if commands and self.settings['setup-once']:
+ results.add_column("user", "(s)", "%.1f")
+ results.add_column("system", "(s)", "%.1f")
+ results.add_column("real", "(s)", "%.1f")
+ results.add_column("max RSS", "(KiB)", "%d")
+ results.add_column("cmd", "", "%-0s", left=True)
+
+ commands = self.settings["command"]
+ if commands and self.settings["setup-once"]:
self.setup()
for cmd in commands:
- if not self.settings['setup-once']:
+ if not self.settings["setup-once"]:
self.setup()
numbers = self.measure_cmd(cmd)
self.verify()
results.add_row(numbers + (cmd,))
- if not self.settings['cleanup-once']:
+ if not self.settings["cleanup-once"]:
self.cleanup()
- if self.settings['verbose']:
- self.output.write('\n')
- if commands and self.settings['cleanup-once']:
+ if self.settings["verbose"]:
+ self.output.write("\n")
+ if commands and self.settings["cleanup-once"]:
self.cleanup()
results.write_plaintext(self.output)
def setup(self):
- self.run_shell(self.settings['setup'])
+ self.run_shell(self.settings["setup"])
def cleanup(self):
- self.run_shell(self.settings['cleanup'])
+ self.run_shell(self.settings["cleanup"])
def verify(self):
- self.run_shell(self.settings['verify'])
+ self.run_shell(self.settings["verify"])
def run_shell(self, cmds):
for cmd in cmds:
- if self.settings['verbose']:
- self.output.write('COMMAND: %s\n' % cmd)
- out = self.runcmd(['sh', '-c', cmd])
- if self.settings['verbose']:
+ if self.settings["verbose"]:
+ self.output.write("COMMAND: %s\n" % cmd)
+ out = self.runcmd(["sh", "-c", cmd])
+ if self.settings["verbose"]:
self.output.write(out)
def measure_cmd(self, cmd):
fd, timings = tempfile.mkstemp()
- time_argv = ['/usr/bin/time',
- '-o', timings,
- '--format', '%U\n%S\n%e\n%M\n%e',
- '--',
- 'sh',
- '-c', cmd]
-
- if self.settings['verbose']:
- self.output.write('MEASURE: %s\n' % cmd)
+ time_argv = [
+ "/usr/bin/time",
+ "-o",
+ timings,
+ "--format",
+ "%U\n%S\n%e\n%M\n%e",
+ "--",
+ "sh",
+ "-c",
+ cmd,
+ ]
+
+ if self.settings["verbose"]:
+ self.output.write("MEASURE: %s\n" % cmd)
out = self.runcmd(time_argv)
- if self.settings['verbose']:
+ if self.settings["verbose"]:
self.output.write(out)
data = []
while True:
- datum = os.read(fd, 1024**2)
+ datum = os.read(fd, 1024 ** 2)
if not datum:
break
data.append(datum)
os.close(fd)
- data = ''.join(data)
+ data = "".join(data)
fields = [float(x) for x in data.splitlines()]
user = fields[0]
system = fields[1]
real = fields[2]
maxrss = fields[3]
- elapsed = fields[4]
return user, system, real, maxrss
Benchmarker().run()
-