Add patches so that the stress-ng module runs alone on rteval
Add patches so that the stress-ng module runs alone on rteval Resolves: rhbz#2007022 Signed-off-by: John Kacur <jkacur@redhat.com>
This commit is contained in:
parent
8634b5d96e
commit
ea90bc0f71
79
rteval-Add-idea-of-exclusive-load-module-and-make-st.patch
Normal file
79
rteval-Add-idea-of-exclusive-load-module-and-make-st.patch
Normal file
@ -0,0 +1,79 @@
|
|||||||
|
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
|
||||||
|
|
115
rteval-Make-donotrun-work-correctly-in-load-modules.patch
Normal file
115
rteval-Make-donotrun-work-correctly-in-load-modules.patch
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
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
|
||||||
|
|
49
rteval-Remove-mult-from-hackbench.py.patch
Normal file
49
rteval-Remove-mult-from-hackbench.py.patch
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
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
|
||||||
|
|
31
rteval-Remove-self.__err_sleep.patch
Normal file
31
rteval-Remove-self.__err_sleep.patch
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
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
|
||||||
|
|
@ -0,0 +1,42 @@
|
|||||||
|
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
|
||||||
|
|
19
rteval.spec
19
rteval.spec
@ -1,6 +1,6 @@
|
|||||||
Name: rteval
|
Name: rteval
|
||||||
Version: 3.2
|
Version: 3.2
|
||||||
Release: 7%{?dist}
|
Release: 8%{?dist}
|
||||||
Summary: Utility to evaluate system suitability for RT Linux
|
Summary: Utility to evaluate system suitability for RT Linux
|
||||||
|
|
||||||
Group: Development/Tools
|
Group: Development/Tools
|
||||||
@ -30,6 +30,11 @@ BuildArch: noarch
|
|||||||
#Patches
|
#Patches
|
||||||
Patch1: rteval-Restrict-measurement-threads-to-the-cpus-in-cpumask.patch
|
Patch1: rteval-Restrict-measurement-threads-to-the-cpus-in-cpumask.patch
|
||||||
Patch2: rteval-Update-to-using-the-linux-5.13.2-kernel.patch
|
Patch2: rteval-Update-to-using-the-linux-5.13.2-kernel.patch
|
||||||
|
Patch3: rteval-hackbench.py-Enable-running-on-a-system-with-low-mem.patch
|
||||||
|
Patch4: rteval-Remove-mult-from-hackbench.py.patch
|
||||||
|
Patch5: rteval-Remove-self.__err_sleep.patch
|
||||||
|
Patch6: rteval-Make-donotrun-work-correctly-in-load-modules.patch
|
||||||
|
Patch7: rteval-Add-idea-of-exclusive-load-module-and-make-st.patch
|
||||||
|
|
||||||
%description
|
%description
|
||||||
The rteval script is a utility for measuring various aspects of
|
The rteval script is a utility for measuring various aspects of
|
||||||
@ -44,6 +49,11 @@ to the screen.
|
|||||||
%setup -q
|
%setup -q
|
||||||
%patch1 -p1
|
%patch1 -p1
|
||||||
%patch2 -p1
|
%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6 -p1
|
||||||
|
%patch7 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%{__python3} setup.py build
|
%{__python3} setup.py build
|
||||||
@ -70,6 +80,13 @@ rm -rf $RPM_BUILD_ROOT
|
|||||||
%{python3_sitelib}/rteval/__pycache__/*
|
%{python3_sitelib}/rteval/__pycache__/*
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Nov 04 2021 John Kacur <jkacur@redhat.com> - 3.2-8
|
||||||
|
- allow hackbench to run with warning on low mem
|
||||||
|
- clean-ups to hackbench.py
|
||||||
|
- make donotrun work correctly in load modules
|
||||||
|
- Add the idea of an exclusive load module and make stress-ng one
|
||||||
|
Resolves: rhbz#2007022
|
||||||
|
|
||||||
* Tue Aug 10 2021 John Kacur <jkacur@redhat.com> - 3.2-7
|
* Tue Aug 10 2021 John Kacur <jkacur@redhat.com> - 3.2-7
|
||||||
- Add perl, gcc-c++ and a few other utilities for kernel compilation
|
- Add perl, gcc-c++ and a few other utilities for kernel compilation
|
||||||
- Reorganize the Requires a little for clarity
|
- Reorganize the Requires a little for clarity
|
||||||
|
Loading…
Reference in New Issue
Block a user