import rteval-3.3-4.el8

This commit is contained in:
CentOS Sources 2022-02-03 05:24:05 +00:00 committed by Stepan Oksanichenko
parent a90c6ef420
commit d02c461ec0
12 changed files with 184 additions and 370 deletions

2
.gitignore vendored
View File

@ -1 +1 @@
SOURCES/rteval-3.2.tar.xz
SOURCES/rteval-3.3.tar.xz

View File

@ -1 +1 @@
91a7a126a2fafd88f03880a21c656fd571a347f5 SOURCES/rteval-3.2.tar.xz
557793c55592bfb3dc0e858274895af4347a2fe9 SOURCES/rteval-3.3.tar.xz

View File

@ -1,79 +0,0 @@
From 89622562925f432396a07cb8d7bb07da89151f2f Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Thu, 23 Sep 2021 14:12:40 -0400
Subject: [PATCH 2/7] rteval: Add idea of exclusive load module and make
stress-ng one
When running stress-ng as a load module in rteval, we don't want to run
kcompile or hackbench, so create the notion of an exclusive load module
and make stress-ng one.
Signed-off-by: John Kacur <jkacur@redhat.com>
---
rteval/modules/__init__.py | 21 +++++++++++++++++++++
rteval/modules/loads/stressng.py | 2 ++
2 files changed, 23 insertions(+)
diff --git a/rteval/modules/__init__.py b/rteval/modules/__init__.py
index 6ff82d10bf8c..d52dd597186a 100644
--- a/rteval/modules/__init__.py
+++ b/rteval/modules/__init__.py
@@ -58,6 +58,7 @@ class rtevalModulePrototype(threading.Thread):
"stop": threading.Event(),
"finished": threading.Event()}
self._donotrun = False
+ self._exclusive = False
self.__timestamps = {}
self.__sleeptime = 2.0
@@ -75,6 +76,16 @@ class rtevalModulePrototype(threading.Thread):
return self.__ready
+ def is_exclusive(self):
+ """ Returns true if this workload should run alone """
+ return self._exclusive
+
+
+ def set_donotrun(self):
+ """ set a module's donotrun field to True """
+ self._donotrun = True
+
+
def _setReady(self, state=True):
""" Sets the ready flag for the module """
self.__ready = state
@@ -459,7 +470,17 @@ class RtEvalModules:
raise rtevalRuntimeError("No %s modules configured" % self._module_type)
self._logger.log(Log.INFO, "Preparing %s modules" % self._module_type)
+ exclusive = 0
+ for (modname, mod) in self.__modules:
+ if mod.is_exclusive() and mod.WorkloadWillRun():
+ exclusive += 1
for (modname, mod) in self.__modules:
+ if exclusive >= 1:
+ if exclusive != 1:
+ msg = f"More than one exclusive load: {exclusive}"
+ raise RuntimeError(msg)
+ if not mod.is_exclusive() and mod.WorkloadWillRun():
+ mod.set_donotrun()
mod.start()
if mod.WorkloadWillRun():
self._logger.log(Log.DEBUG, "\t - Started %s preparations" % modname)
diff --git a/rteval/modules/loads/stressng.py b/rteval/modules/loads/stressng.py
index 926de38e3116..d084814142fb 100644
--- a/rteval/modules/loads/stressng.py
+++ b/rteval/modules/loads/stressng.py
@@ -27,6 +27,8 @@ class Stressng(CommandLineLoad):
self._donotrun = False
else:
self._donotrun = True
+ """ When this module runs, other load modules should not """
+ self._exclusive = True
def _WorkloadSetup(self):
" Since there is nothing to build, we don't need to do anything here "
--
2.31.1

View File

@ -0,0 +1,53 @@
From 19f9aa600ae331eb2fadf5f821f539bf24f0dea3 Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Tue, 18 Jan 2022 15:03:36 -0500
Subject: [PATCH] rteval: Fix Popen for python3.6 where text=True is not
available
Fix using text=True in Popen for python-3.6 by using
encoding='utf-8' instead
Signed-off-by: John Kacur <jkacur@redhat.com>
---
rteval/sysinfo/services.py | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/rteval/sysinfo/services.py b/rteval/sysinfo/services.py
index e5de22efc342..c85980e19165 100644
--- a/rteval/sysinfo/services.py
+++ b/rteval/sysinfo/services.py
@@ -62,11 +62,11 @@ class SystemServices:
if not [1 for p in reject if fnmatch.fnmatch(servicename, p)] \
and os.access(service, os.X_OK):
cmd = '%s -qs "\(^\|\W\)status)" %s' % (getcmdpath('grep'), service)
- c = subprocess.Popen(cmd, shell=True, text=True)
+ c = subprocess.Popen(cmd, shell=True, encoding='utf-8')
c.wait()
if c.returncode == 0:
cmd = ['env', '-i', 'LANG="%s"' % os.environ['LANG'], 'PATH="%s"' % os.environ['PATH'], 'TERM="%s"' % os.environ['TERM'], service, 'status']
- c = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
+ c = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8')
c.wait()
if c.returncode == 0 and (c.stdout.read() or c.stderr.read()):
ret_services[servicename] = 'running'
@@ -81,7 +81,7 @@ class SystemServices:
ret_services = {}
cmd = '%s list-unit-files -t service --no-legend' % getcmdpath('systemctl')
self.__log(Log.DEBUG, "cmd: %s" % cmd)
- c = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
+ c = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, encoding='utf-8')
for p in c.stdout:
# p are lines like b'servicename.service status'
v = p.strip().split()
@@ -91,7 +91,7 @@ class SystemServices:
def services_get(self):
cmd = [getcmdpath('ps'), '-ocomm=', '1']
- c = subprocess.Popen(cmd, stdout=subprocess.PIPE, text=True)
+ c = subprocess.Popen(cmd, stdout=subprocess.PIPE, encoding='utf-8')
self.__init = c.stdout.read().strip()
if self.__init == 'systemd':
self.__log(Log.DEBUG, "Using systemd to get services status")
--
2.31.1

View File

@ -0,0 +1,32 @@
From aca562064a8d9f5927aa39bc108eac3bf4d0a56b Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Fri, 14 Jan 2022 14:00:54 -0500
Subject: [PATCH] rteval: Fix test misses threshold assignment
Fix case where self.__cfg.threshold has a value but
instead of 'threshold' in self.__cfg,
'breaktrace' in self.__cfg.
by just checking whether self.__cfg.threshold has a value
if self._cfg.breaktrace does not have a value
Signed-off-by: John Kacur <jkacur@redhat.com>
---
rteval/modules/measurement/cyclictest.py | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/rteval/modules/measurement/cyclictest.py b/rteval/modules/measurement/cyclictest.py
index cc74b467913d..af8adeeeb402 100644
--- a/rteval/modules/measurement/cyclictest.py
+++ b/rteval/modules/measurement/cyclictest.py
@@ -299,7 +299,7 @@ class Cyclictest(rtevalModulePrototype):
if 'breaktrace' in self.__cfg and self.__cfg.breaktrace:
self.__cmd.append("-b%d" % int(self.__cfg.breaktrace))
self.__cmd.append("--tracemark")
- elif 'threshold' in self.__cfg and self.__cfg.threshold:
+ elif self.__cfg.threshold:
self.__cmd.append("-b%d" % int(self.__cfg.threshold))
# Buffer for cyclictest data written to stdout
--
2.31.1

View File

@ -0,0 +1,60 @@
From 9dff629f186313beebb96594d236dd9268bef1b1 Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Wed, 26 Jan 2022 10:06:33 -0500
Subject: [PATCH] rteval: Increase default buckets from 2000 to 3500
Increase the default buckets from 2000 to 3500
With commit 0292c8963611 we skip statistics reporting if we run out of
buckets. Increase the default number of buckets to make this less likely
to occur.
Signed-off-by: John Kacur <jkacur@redhat.com>
---
doc/rteval.8 | 2 +-
rteval/modules/measurement/cyclictest.py | 2 +-
rteval/rteval.conf | 2 +-
3 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/doc/rteval.8 b/doc/rteval.8
index fa24509ce7e5..25dcfcc298e7 100644
--- a/doc/rteval.8
+++ b/doc/rteval.8
@@ -122,7 +122,7 @@ Measurement thread interval in microseconds (default: 100)
Interval increment in microseconds (default: 0)
.TP
.B \-\-cyclictest-buckets=NBUCKETS
-Number of 1 microsecond histogram buckets (default: 2000)
+Number of 1 microsecond histogram buckets (default: 3500)
.TP
.B \-\-hackbench-jobspercore=N
Number of jobs per online-core for hackbench load
diff --git a/rteval/modules/measurement/cyclictest.py b/rteval/modules/measurement/cyclictest.py
index af8adeeeb402..5330d1466302 100644
--- a/rteval/modules/measurement/cyclictest.py
+++ b/rteval/modules/measurement/cyclictest.py
@@ -450,7 +450,7 @@ def ModuleParameters():
"default": 100,
"metavar": "INTV_US"},
"buckets": {"descr": "Histogram width",
- "default": 2000,
+ "default": 3500,
"metavar": "NUM"},
"priority": {"descr": "Run cyclictest with the given priority",
"default": 95,
diff --git a/rteval/rteval.conf b/rteval/rteval.conf
index 7ce6ef0b5acc..aa0a53bcfc63 100644
--- a/rteval/rteval.conf
+++ b/rteval/rteval.conf
@@ -6,7 +6,7 @@ duration: 60.0
report_interval: 600
[cyclictest]
-buckets: 2000
+buckets: 3500
interval: 100
distance: 0
priority: 95
--
2.34.1

View File

@ -1,115 +0,0 @@
From e94a774b8c14e01622b170517eedb9e90232c42c Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Thu, 23 Sep 2021 11:29:24 -0400
Subject: [PATCH 1/7] rteval: Make donotrun work correctly in load modules
hackbench and kcompile don't correctly adhere to the donotrun variable
which is inherited from class rtevalModulePrototype. If the variable is set
after the modules are loaded, although the modules do not run, some
thread accounting still occurs which causes problems on shutdown of
rteval.
Fix in the methods in hackbench and kcompile where this is relevant, by
checking the variable before the method runs.
While we are at it fix a few other things
- change len(threading.enumerate()) to threading.active_count()
- Fix a spelling typo
This patch is in preparation for a patch to allow stress-ng to run as a
load module without running other modules.
Signed-off-by: John Kacur <jkacur@redhat.com>
---
rteval/__init__.py | 4 ++--
rteval/modules/loads/__init__.py | 2 +-
rteval/modules/loads/hackbench.py | 3 +++
rteval/modules/loads/kcompile.py | 9 +++++++++
4 files changed, 15 insertions(+), 3 deletions(-)
diff --git a/rteval/__init__.py b/rteval/__init__.py
index 5faed23bc927..22af8e85d5aa 100644
--- a/rteval/__init__.py
+++ b/rteval/__init__.py
@@ -208,7 +208,7 @@ class RtEval(rtevalReport):
report_interval = int(self.__rtevcfg.report_interval)
if with_loads:
self._loadmods.Unleash()
- nthreads = len(threading.enumerate())
+ nthreads = threading.active_count()
else:
nthreads = None
self.__logger.log(Log.INFO, "Waiting 30 seconds to let load modules settle down")
@@ -233,7 +233,7 @@ class RtEval(rtevalReport):
"Measurement threads did not use the full time slot. Doing a controlled stop.")
if with_loads:
- if len(threading.enumerate()) < nthreads:
+ if threading.active_count() < nthreads:
raise RuntimeError("load thread died!")
if not load_avg_checked:
diff --git a/rteval/modules/loads/__init__.py b/rteval/modules/loads/__init__.py
index 9a942f454536..2c2105efa964 100644
--- a/rteval/modules/loads/__init__.py
+++ b/rteval/modules/loads/__init__.py
@@ -106,7 +106,7 @@ class LoadModules(RtEvalModules):
"Loads and imports all the configured modules"
for m in modcfg:
- # hope to eventually have different kinds but module is only on
+ # hope to eventually have different kinds but module is only one
# for now (jcw)
if m[1].lower() == 'module':
self._LoadModule(m[0])
diff --git a/rteval/modules/loads/hackbench.py b/rteval/modules/loads/hackbench.py
index 2fb90c1946a5..21a803b8a3cd 100644
--- a/rteval/modules/loads/hackbench.py
+++ b/rteval/modules/loads/hackbench.py
@@ -42,6 +42,9 @@ class Hackbench(CommandLineLoad):
CommandLineLoad.__init__(self, "hackbench", config, logger)
def _WorkloadSetup(self):
+ if self._donotrun:
+ return
+
'calculate arguments based on input parameters'
(mem, units) = self.memsize
if units == 'KB':
diff --git a/rteval/modules/loads/kcompile.py b/rteval/modules/loads/kcompile.py
index 8d08a3d44302..ec85b75f38b5 100644
--- a/rteval/modules/loads/kcompile.py
+++ b/rteval/modules/loads/kcompile.py
@@ -158,6 +158,9 @@ class Kcompile(CommandLineLoad):
"error removing builddir (%s) (ret=%d)" % (self.builddir, ret))
def _WorkloadSetup(self):
+ if self._donotrun:
+ return
+
# find our source tarball
if 'tarball' in self._cfg:
tarfile = os.path.join(self.srcdir, self._cfg.tarfile)
@@ -219,6 +222,9 @@ class Kcompile(CommandLineLoad):
def _WorkloadBuild(self):
+ if self._donotrun:
+ return
+
null = os.open("/dev/null", os.O_RDWR)
if self._logging:
out = self.open_logfile("kcompile-build.stdout")
@@ -293,6 +299,9 @@ class Kcompile(CommandLineLoad):
def _WorkloadCleanup(self):
+ if self._donotrun:
+ return
+
self._log(Log.DEBUG, "out of stopevent loop")
for n in self.buildjobs:
if self.buildjobs[n].jobid.poll() is None:
--
2.31.1

View File

@ -1,49 +0,0 @@
From 50e885286b535c4014e769791c25d172e7ee1a8d Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Tue, 14 Sep 2021 14:48:01 -0400
Subject: [PATCH 02/11] rteval: Remove mult from hackbench.py
The method for calculating the number of jobs to run for hackbench was
changed with the following commit.
commit 67629a1b69ffe72af6bfb3a0d4362ac1920005a7
However, the mult variable which was used to calculate the number of
jobs using the older method was not removed.
Remove it now and simplify the logic.
Signed-off-by: John Kacur <jkacur@redhat.com>
---
rteval/modules/loads/hackbench.py | 7 ++-----
1 file changed, 2 insertions(+), 5 deletions(-)
diff --git a/rteval/modules/loads/hackbench.py b/rteval/modules/loads/hackbench.py
index ab028c495d8b..8119d50f626a 100644
--- a/rteval/modules/loads/hackbench.py
+++ b/rteval/modules/loads/hackbench.py
@@ -41,7 +41,6 @@ class Hackbench(CommandLineLoad):
def __init__(self, config, logger):
CommandLineLoad.__init__(self, "hackbench", config, logger)
-
def _WorkloadSetup(self):
'calculate arguments based on input parameters'
(mem, units) = self.memsize
@@ -51,12 +50,10 @@ class Hackbench(CommandLineLoad):
mem = mem / 1024.0
elif units == 'TB':
mem = mem * 1024
+
ratio = float(mem) / float(self.num_cpus)
- if ratio >= 0.75:
- mult = float(self._cfg.setdefault('jobspercore', 2))
- else:
+ if ratio < 0.75:
self._log(Log.WARN, "Low memory system (%f GB/core)!" % ratio)
- mult = 0
sysTop = SysTopology()
# get the number of nodes
--
2.31.1

View File

@ -1,31 +0,0 @@
From 0d226e7032399e94f8bdeac84c55333209f0a558 Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Tue, 14 Sep 2021 14:56:42 -0400
Subject: [PATCH 03/11] rteval: Remove self.__err_sleep
commit 5ed68ae77ec05786aab99fbed35d0347a5d25997
changed the code to exit gracefully if hackbench failed from memory
errors. No attempt is made anymore to wait to see if memory pressures
ease. The variable __err_sleep however was not removed at the time.
Remove it now, as it is now longer used.
Signed-off-by: John Kacur <jkacur@redhat.com>
---
rteval/modules/loads/hackbench.py | 1 -
1 file changed, 1 deletion(-)
diff --git a/rteval/modules/loads/hackbench.py b/rteval/modules/loads/hackbench.py
index 8119d50f626a..2fb90c1946a5 100644
--- a/rteval/modules/loads/hackbench.py
+++ b/rteval/modules/loads/hackbench.py
@@ -97,7 +97,6 @@ class Hackbench(CommandLineLoad):
'-l', str(self._cfg.setdefault('loops', '1000')),
'-s', str(self._cfg.setdefault('datasize', '1000'))
]
- self.__err_sleep = 5.0
def _WorkloadBuild(self):
# Nothing to build, so we're basically ready
--
2.31.1

View File

@ -1,35 +0,0 @@
From be811d28a471cfcaf7960289e00960e7f5b18f03 Mon Sep 17 00:00:00 2001
From: John Kacur <jkacur@redhat.com>
Date: Thu, 15 Jul 2021 10:09:03 -0400
Subject: [PATCH] rteval: Restrict measurement threads to the cpus in cpumask
Only run measurement threads on cpus in the list from sched_getaffinity
Signed-off-by: John Kacur <jkacur@redhat.com>
---
rteval/modules/measurement/cyclictest.py | 9 +++++++++
1 file changed, 9 insertions(+)
diff --git a/rteval/modules/measurement/cyclictest.py b/rteval/modules/measurement/cyclictest.py
index 232bd6b9acc6..ae91dbb7c043 100644
--- a/rteval/modules/measurement/cyclictest.py
+++ b/rteval/modules/measurement/cyclictest.py
@@ -209,6 +209,15 @@ class Cyclictest(rtevalModulePrototype):
else:
self.__cpus = online_cpus()
+ # Get the cpuset from the environment
+ cpuset = os.sched_getaffinity(0)
+
+ # Convert the elements to strings
+ cpuset = [str(c) for c in cpuset]
+
+ # Only include cpus that are in the cpuset
+ self.__cpus = [c for c in self.__cpus if c in cpuset]
+
self.__numcores = len(self.__cpus)
info = cpuinfo()
--
2.31.1

View File

@ -1,42 +0,0 @@
From cb8263770e4f5834a43db6be8ffb55ffd7f876c9 Mon Sep 17 00:00:00 2001
From: Punit Agrawal <punit1.agrawal@toshiba.co.jp>
Date: Wed, 1 Sep 2021 17:08:15 +0900
Subject: [PATCH 01/11] rteval: hackbench.py: Enable running on a system with
low memory
The hackbench workload refues to run on RockPro64, a hexacore 64bit
Arm board with 4GB memory, complaining about insufficient memory
per-core.
On further investigation, it turns out that workload is using an
arbitrary limit of 0.75 GB/core but will quite happily run on much
lower lower memory systems.
Instead of preventing execution, convert the info message to a warning
when the memory is lower than expected but continue execution. This
should enable the workload to be used on a wider range of systems.
Signed-off-by: Punit Agrawal <punit1.agrawal@toshiba.co.jp>
Signed-off-by: John Kacur <jkacur@redhat.com>
---
rteval/modules/loads/hackbench.py | 3 +--
1 file changed, 1 insertion(+), 2 deletions(-)
diff --git a/rteval/modules/loads/hackbench.py b/rteval/modules/loads/hackbench.py
index 3b692070e9d9..ab028c495d8b 100644
--- a/rteval/modules/loads/hackbench.py
+++ b/rteval/modules/loads/hackbench.py
@@ -55,9 +55,8 @@ class Hackbench(CommandLineLoad):
if ratio >= 0.75:
mult = float(self._cfg.setdefault('jobspercore', 2))
else:
- self._log(Log.INFO, "Low memory system (%f GB/core)! Not running" % ratio)
+ self._log(Log.WARN, "Low memory system (%f GB/core)!" % ratio)
mult = 0
- self._donotrun = True
sysTop = SysTopology()
# get the number of nodes
--
2.31.1

View File

@ -1,6 +1,6 @@
Name: rteval
Version: 3.2
Release: 3%{?dist}
Version: 3.3
Release: 4%{?dist}
Summary: Utility to evaluate system suitability for RT Linux
Group: Development/Tools
@ -15,28 +15,26 @@ Requires: python3-ethtool
Requires: python3-lxml
Requires: python3-dmidecode >= 3.10
Requires: rt-tests >= 1.5-11
Requires: rteval-loads >= 1.4-7
Requires: rteval-loads >= 1.5-1
Requires: sysstat
Requires: xz bzip2
Requires: xz bzip2 tar gzip m4 make gawk
Requires: kernel-headers
Requires: sos
Requires: tar
BuildArch: noarch
Obsoletes: rteval <= 2.14
Requires: numactl
Requires: gcc flex bison bc make
Requires: gcc binutils gcc-c++ flex bison bc make
Requires: elfutils elfutils-libelf-devel
Requires: openssl
Requires: openssl-devel
Requires: openssl openssl-devel
Requires: stress-ng
Requires: perl-interpreter perl-devel perl-generators
Requires: libmpc libmpc-devel
Obsoletes: rteval-common <= 3.1
#Patches
Patch1: rteval-Restrict-measurement-threads-to-the-cpus-in-cpumask.patch
Patch2: rteval-hackbench.py-Enable-running-on-a-system-with-low-mem.patch
Patch3: rteval-Remove-mult-from-hackbench.py.patch
Patch4: rteval-Remove-self.__err_sleep.patch
Patch5: rteval-Add-idea-of-exclusive-load-module-and-make-st.patch
Patch6: rteval-Make-donotrun-work-correctly-in-load-modules.patch
Patch1: rteval-Fix-test-misses-threshold-assignment.patch
Patch2: rteval-Fix-Popen-for-python3.6-where-text-True-is-no.patch
Patch3: rteval-Increase-default-buckets-from-2000-to-3500.patch
%description
The rteval script is a utility for measuring various aspects of
@ -52,9 +50,6 @@ to the screen.
%patch1 -p1
%patch2 -p1
%patch3 -p1
%patch4 -p1
%patch5 -p1
%patch6 -p1
%build
%{__python3} setup.py build
@ -92,6 +87,31 @@ rm -rf $RPM_BUILD_ROOT
%{python3_sitelib}/rteval/__pycache__/*
%changelog
* Thu Jan 27 2022 John Kacur <jkacur@redhat.com> - 3.3-4
- Increase the default number of buckets from 2000 to 3500
Resolves: rhbz#2046321
* Tue Jan 18 2022 John Kacur <jkacur@redhat.com> - 3.3-3
- Fix Popen use of text=True not available in python3.6
Resolves: rhbz#2041584
* Fri Jan 14 2022 John Kacur <jkacur@redhat.com> - 3.3-2
- Fix test missing threshold assignment
Resolves: rhbz#2012285
* Thu Jan 13 2022 John Kacur <jkacur@redhat.com> - 3.3-1
- Rebase to upstream rteval-3.3
Resolves: rhbz#2012291
* Wed Jan 12 2022 John Kacur <jkacur@redhat.com> - 3.2-4
- Do not pass obsolete notrace option to cyclictest
- Parse maximum latency even if outside configured buckets
- Sort the list of cpus
- Skip statistics generation if max latency outside of configured buckets
- Add --cyclictest-threshold=USEC feature
- Add libmpc and libmpc-devel to the Requires
Resolves: rhbz#2012285
* Thu Nov 04 2021 John Kacur <jkacur@redhat.com> - 3.2-3
- allow hackbench to run with warning on low mem
- clean-ups to hackbench.py