aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/benchmarks/mysql.py48
-rw-r--r--src/benchmarks/raxmlng.py16
-rw-r--r--src/benchmarks/redis.py8
-rw-r--r--src/util.py26
4 files changed, 52 insertions, 46 deletions
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<runtime>(\\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<requests>(\\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"]:
diff --git a/src/util.py b/src/util.py
index 7992084..3f2ab06 100644
--- a/src/util.py
+++ b/src/util.py
@@ -24,6 +24,32 @@ import sys
import src.globalvars
+def run_cmd(cmd,
+ output_verbosity=3,
+ capture=False,
+ check=True,
+ cwd=None,
+ input=None):
+ """subprocess.run wrapper which cares about the set verbosity"""
+ if capture:
+ stdout = subprocess.PIPE
+ stderr = stdout
+ elif src.globalvars.verbosity < output_verbosity:
+ stdout = subprocess.DEVNULL
+ stderr = stdout
+ else:
+ stdout = None
+ stderr = stdout
+
+ return subprocess.run(cmd,
+ check=check,
+ universal_newlines=True,
+ cwd=None,
+ stdout=stdout,
+ stderr=stderr,
+ input=input)
+
+
def is_exe(fpath):
"""Check if the given path is an exexutable file"""
return os.path.isfile(fpath) and os.access(fpath, os.X_OK)