From 5f6c52dff03f2dc85d5b26b7f4469bc85a25ee09 Mon Sep 17 00:00:00 2001 From: Florian Fischer Date: Fri, 13 Dec 2019 14:43:54 +0100 Subject: introduce verbosity aware subprocess.run wrapper and use it in benchmarks --- src/benchmarks/mysql.py | 48 +++++++++++++++++++++-------------------------- src/benchmarks/raxmlng.py | 16 +++------------- src/benchmarks/redis.py | 8 ++------ 3 files changed, 26 insertions(+), 46 deletions(-) (limited to 'src/benchmarks') diff --git a/src/benchmarks/mysql.py b/src/benchmarks/mysql.py index 0d24ff6..f80286f 100644 --- a/src/benchmarks/mysql.py +++ b/src/benchmarks/mysql.py @@ -75,15 +75,14 @@ import multiprocessing import os import re import shutil -import subprocess -from subprocess import PIPE +from subprocess import CalledProcessError import sys import numpy as np from src.benchmark import Benchmark import src.facter -from src.util import print_status, print_debug, print_info2 +from src.util import print_status, print_debug, print_info2, run_cmd MYSQL_USER = "fischerling" RUN_TIME = 10 @@ -147,39 +146,34 @@ class BenchmarkMYSQL(Benchmark): ] print_info2("Oracle MySQL detected") - p = subprocess.run(init_db_cmd, stdout=PIPE, stderr=PIPE) - - if not p.returncode == 0: - print_debug(init_db_cmd) - print_debug("Stdout:", p.stdout, file=sys.stdout) - print_debug("Stderr:", p.stderr, file=sys.stderr) - raise Exception("Creating test DB failed with:", p.returncode) + try: + run_cmd(init_db_cmd, capture=True) + except CalledProcessError as e: + print_debug("Stdout:", e.stdout, file=sys.stderr) + print_debug("Stderr:", e.stderr, file=sys.stderr) + raise e self.start_servers() # Create sbtest TABLE - p = subprocess.run( - f"mysql -u {MYSQL_USER} -S {self.build_dir}/socket".split(), - input=b"CREATE DATABASE sbtest;\n", - stdout=PIPE, - stderr=PIPE, + create_db_cmd = f"mysql -u {MYSQL_USER} -S {self.build_dir}/socket".split(), + try: + run_cmd(create_db_cmd, + input="CREATE DATABASE sbtest;\n", + capture=True, cwd=self.build_dir) - - if p.returncode != 0: - print_debug("Stderr:", p.stderr, file=sys.stderr) - raise Exception("Creating test tables failed with:", - p.returncode) + except CalledProcessError as e: + print_debug("Stderr:", e.stderr, file=sys.stderr) + raise e print_status("Prepare test tables ...") - prepare_cmd = PREPARE_CMD.format(build_dir=self.build_dir) - p = subprocess.run(prepare_cmd.split(), stdout=PIPE, stderr=PIPE) - if p.returncode != 0: - print_debug(f"Cmd: {prepare_cmd} failed with {p.returncode}", - file=sys.stderr) + prepare_cmd = PREPARE_CMD.format(build_dir=self.build_dir).split() + try: + run_cmd(prepare_cmd, captur=True) + except CalledProcessError as e: print_debug("Stdout:", p.stdout, file=sys.stderr) print_debug("Stderr:", p.stderr, file=sys.stderr) - raise Exception("Preparing test tables failed with:", - p.returncode) + raise e self.shutdown_servers() diff --git a/src/benchmarks/raxmlng.py b/src/benchmarks/raxmlng.py index dd405f5..786b143 100644 --- a/src/benchmarks/raxmlng.py +++ b/src/benchmarks/raxmlng.py @@ -18,13 +18,12 @@ import os import re -import subprocess import sys from urllib.request import urlretrieve from src.artifact import GitArtifact from src.benchmark import Benchmark -from src.util import print_info +from src.util import print_info, run_cmd RUNTIME_RE = re.compile("Elapsed time: (?P(\\d*.\\d*)) seconds") @@ -59,17 +58,8 @@ class BenchmarkRaxmlng(Benchmark): os.makedirs(raxmlng_builddir, exist_ok=True) # building raxml-ng - proc = subprocess.run( - ["cmake", ".."], - cwd=raxmlng_builddir, - # stdout=subprocess.PIPE, stderr=subprocess.PIPE, - universal_newlines=True) - - proc = subprocess.run( - ["make"], - cwd=raxmlng_builddir, - # stdout=subprocess.PIPE, stderr=subprocess.PIPE, - universal_newlines=True) + run_cmd( ["cmake", ".."], cwd=raxmlng_builddir, output_verbosity=2) + run_cmd( ["make"], cwd=raxmlng_builddir, output_verbosity=2) # create symlinks for exe in ["raxml-ng"]: diff --git a/src/benchmarks/redis.py b/src/benchmarks/redis.py index b487baf..23c2de6 100644 --- a/src/benchmarks/redis.py +++ b/src/benchmarks/redis.py @@ -23,13 +23,12 @@ archive. The used parameters are inspired by the ones used in mimalloc-bench." import os import re -import subprocess import sys from urllib.request import urlretrieve from src.artifact import ArchiveArtifact from src.benchmark import Benchmark -from src.util import print_info +from src.util import print_info, run_cmd REQUESTS_RE = re.compile("(?P(\\d*.\\d*)) requests per second") @@ -63,10 +62,7 @@ class BenchmarkRedis(Benchmark): redis.provide(self.build_dir) # building redis - proc = subprocess.run( - ["make", "-C", redis_dir, "MALLOC=libc", "USE_JEMALLOC=no"], - # stdout=subprocess.PIPE, stderr=subprocess.PIPE, - universal_newlines=True) + run_cmd(["make", "-C", redis_dir, "MALLOC=libc", "USE_JEMALLOC=no"]) # create symlinks for exe in ["redis-cli", "redis-server", "redis-benchmark"]: -- cgit v1.2.3