From e3d27a40f628e213e7766d0c6d190ceaae89f9cd Mon Sep 17 00:00:00 2001 From: CentOS Sources Date: Tue, 28 Apr 2020 05:32:04 -0400 Subject: [PATCH] import rteval-3.0-6.el8 --- .gitignore | 1 + .rteval.metadata | 1 + ...her-cpu-online-before-adding-to-list.patch | 119 ++++ ...sume-cpu0-cannot-be-offlined-test-it.patch | 33 + ...ckbench-Fix-interating-through-nodes.patch | 41 ++ ...de-in-args-to-Popen-must-be-a-string.patch | 54 ++ ...ystopology-for-hackbench-online-cpus.patch | 78 +++ SPECS/rteval.spec | 632 ++++++++++++++++++ 8 files changed, 959 insertions(+) create mode 100644 .gitignore create mode 100644 .rteval.metadata create mode 100644 SOURCES/rteval-Check-whether-cpu-online-before-adding-to-list.patch create mode 100644 SOURCES/rteval-Don-t-assume-cpu0-cannot-be-offlined-test-it.patch create mode 100644 SOURCES/rteval-hackbench-Fix-interating-through-nodes.patch create mode 100644 SOURCES/rteval-node-in-args-to-Popen-must-be-a-string.patch create mode 100644 SOURCES/rteval-use-systopology-for-hackbench-online-cpus.patch create mode 100644 SPECS/rteval.spec diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..60a09eb --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +SOURCES/rteval-3.0.tar.xz diff --git a/.rteval.metadata b/.rteval.metadata new file mode 100644 index 0000000..0078bc9 --- /dev/null +++ b/.rteval.metadata @@ -0,0 +1 @@ +ee9134bcf8791823770f3ed764e52d003bd7a597 SOURCES/rteval-3.0.tar.xz diff --git a/SOURCES/rteval-Check-whether-cpu-online-before-adding-to-list.patch b/SOURCES/rteval-Check-whether-cpu-online-before-adding-to-list.patch new file mode 100644 index 0000000..b47ce44 --- /dev/null +++ b/SOURCES/rteval-Check-whether-cpu-online-before-adding-to-list.patch @@ -0,0 +1,119 @@ +From f65d46723cd0e2d3a9b1f788b0ffa51e7fd04f8b Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Thu, 23 May 2019 17:54:20 +0200 +Subject: [PATCH 1/2] rteval: Check whether a cpu is online before adding it to + the list + +Check whether a cpu is online before adding it to the list + +If sys online files exist, use them to determine if a cpu is online + +This is done in two places, misc.py, and also in systopology which is +getting the cpus from the numa node in /sys/devices, including offline +cpus + +Signed-off-by: John Kacur +--- + rteval/misc.py | 19 ++++++++++++++++++- + rteval/systopology.py | 29 ++++++++++++++++++++++++----- + 2 files changed, 42 insertions(+), 6 deletions(-) + +diff --git a/rteval/misc.py b/rteval/misc.py +index 7c9991483728..a43a8964e061 100644 +--- a/rteval/misc.py ++++ b/rteval/misc.py +@@ -36,7 +36,24 @@ def expand_cpulist(cpulist): + return [ str(i) for i in list(set(result)) ] + + def online_cpus(): +- return [ str(c.replace('/sys/devices/system/cpu/cpu', '')) for c in glob.glob('/sys/devices/system/cpu/cpu[0-9]*') ] ++ online_cpus = [] ++ # Check for the online file with cpu1 since cpu0 can't always be offlined ++ if os.path.exists('/sys/devices/system/cpu/cpu1/online'): ++ for c in glob.glob('/sys/devices/system/cpu/cpu[0-9]*'): ++ num = str(c.replace('/sys/devices/system/cpu/cpu','')) ++ # On some machine you can't turn off cpu0 ++ if not os.path.exists(c + '/online') and num == "0": ++ online_cpus.append(num) ++ else: ++ with open(c + '/online') as f: ++ is_online = f.read().rstrip('\n') ++ if is_online == "1": ++ online_cpus.append(num) ++ else: # use the old heuristic ++ for c in glob.glob('/sys/devices/system/cpu/cpu[0-9]*'): ++ num = str(c.replace('/sys/devices/system/cpu/cpu','')) ++ online_cpus.append(num) ++ return online_cpus + + def invert_cpulist(cpulist): + return [ c for c in online_cpus() if c not in cpulist] +diff --git a/rteval/systopology.py b/rteval/systopology.py +index 97a6037e83aa..07674658df8e 100644 +--- a/rteval/systopology.py ++++ b/rteval/systopology.py +@@ -45,6 +45,7 @@ class CpuList(object): + self.cpulist = cpulist + elif type(cpulist) is str: + self.cpulist = self.__expand_cpulist(cpulist) ++ self.cpulist = self.online_cpulist(self.cpulist) + self.cpulist.sort() + + def __str__(self): +@@ -56,6 +57,10 @@ class CpuList(object): + def __len__(self): + return len(self.cpulist) + ++ def online_file_exists(self): ++ if os.path.exists('/sys/devices/system/cpu/cpu1/online'): ++ return True ++ return False + + # return the index of the last element of a sequence + # that steps by one +@@ -68,7 +73,6 @@ class CpuList(object): + return idx + return lim - 1 + +- + # + # collapse a list of cpu numbers into a string range + # of cpus (e.g. 0-5, 7, 9) +@@ -110,15 +114,30 @@ class CpuList(object): + return self.cpulist + + # check whether cpu n is online +- def isonline(self, n): ++ def is_online(self, n): + if n not in self.cpulist: + raise RuntimeError("invalid cpu number %d" % n) + if n == 0: + return True + path = os.path.join(CpuList.cpupath,'cpu%d' % n) +- if os.path.exists(path): +- return sysread(path, "online") == 1 +- return False ++ # Some hardware doesn't allow cpu0 to be turned off ++ if not os.path.exists(path + '/online') and n == 0: ++ return True ++ else: ++ return sysread(path, "online") == "1" ++ ++ # Given a cpulist, return a cpulist of online cpus ++ def online_cpulist(self, cpulist): ++ # This only works if the sys online files exist ++ if not self.online_file_exists(): ++ return cpulist ++ newlist = [] ++ for cpu in cpulist: ++ if not self.online_file_exists() and cpu == '0': ++ newlist.append(cpu) ++ elif self.is_online(int(cpu)): ++ newlist.append(cpu) ++ return newlist + + # + # class to abstract access to NUMA nodes in /sys filesystem +-- +2.20.1 + diff --git a/SOURCES/rteval-Don-t-assume-cpu0-cannot-be-offlined-test-it.patch b/SOURCES/rteval-Don-t-assume-cpu0-cannot-be-offlined-test-it.patch new file mode 100644 index 0000000..7230bd7 --- /dev/null +++ b/SOURCES/rteval-Don-t-assume-cpu0-cannot-be-offlined-test-it.patch @@ -0,0 +1,33 @@ +From 24efd8cf2fbde73636c4c8434447b0e04dc7a89a Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Tue, 19 Nov 2019 12:12:33 +0100 +Subject: [PATCH] rteval: Don't assume cpu0 cannot be offlined, test it + +Don't just assume that cpu0 cannot be offlined. +If the file /sys/devices/system/cpu/cpu0/online exists, then test the +value just like for every other cpu + +However, if the file doesn't exist, that means that it cannot be +offlined. + +Signed-off-by: John Kacur +--- + rteval/systopology.py | 2 -- + 1 file changed, 2 deletions(-) + +diff --git a/rteval/systopology.py b/rteval/systopology.py +index 9556e51d96a2..7c3878e51be4 100644 +--- a/rteval/systopology.py ++++ b/rteval/systopology.py +@@ -117,8 +117,6 @@ class CpuList(object): + def is_online(self, n): + if n not in self.cpulist: + raise RuntimeError("invalid cpu number %d" % n) +- if n == 0: +- return True + path = os.path.join(CpuList.cpupath,'cpu%d' % n) + # Some hardware doesn't allow cpu0 to be turned off + if not os.path.exists(path + '/online') and n == 0: +-- +2.20.1 + diff --git a/SOURCES/rteval-hackbench-Fix-interating-through-nodes.patch b/SOURCES/rteval-hackbench-Fix-interating-through-nodes.patch new file mode 100644 index 0000000..216e522 --- /dev/null +++ b/SOURCES/rteval-hackbench-Fix-interating-through-nodes.patch @@ -0,0 +1,41 @@ +From 3c6483c6e6e24a3e457c631f031f83e81b5e930c Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Tue, 10 Dec 2019 02:23:10 +0100 +Subject: [PATCH] rteval: hackbench Fix interating through nodes + +Fix iterating through the nodes in hackbench. +When creating a dictionary of node, cpus, we need to iterate through the +nodes and not through sysTop alone. + +Also use python3 syntax for iterating through a dictionary. + +Signed-off-by: John Kacur +--- + rteval/modules/loads/hackbench.py | 4 ++-- + 1 file changed, 2 insertions(+), 2 deletions(-) + +diff --git a/rteval/modules/loads/hackbench.py b/rteval/modules/loads/hackbench.py +index f31e29dd3f13..d951d1a0b930 100644 +--- a/rteval/modules/loads/hackbench.py ++++ b/rteval/modules/loads/hackbench.py +@@ -61,7 +61,7 @@ class Hackbench(CommandLineLoad): + # get the cpus for each node + self.cpus = {} + biggest = 0 +- for n in sysTop: ++ for n in sysTop.getnodes(): + self.cpus[n] = sysTop.getcpus(int(n)) + # if a cpulist was specified, only allow cpus in that list on the node + if self.cpulist: +@@ -73,7 +73,7 @@ class Hackbench(CommandLineLoad): + biggest = node_biggest + + # remove nodes with no cpus available for running +- for node,cpus in self.cpus.items(): ++ for node,cpus in list(self.cpus.items()): + if not cpus: + self.nodes.remove(node) + self._log(Log.DEBUG, "node %s has no available cpus, removing" % node) +-- +2.20.1 + diff --git a/SOURCES/rteval-node-in-args-to-Popen-must-be-a-string.patch b/SOURCES/rteval-node-in-args-to-Popen-must-be-a-string.patch new file mode 100644 index 0000000..b144644 --- /dev/null +++ b/SOURCES/rteval-node-in-args-to-Popen-must-be-a-string.patch @@ -0,0 +1,54 @@ +From ba69dfd96da37208c63313ecab233a39568d576c Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Mon, 2 Dec 2019 13:05:02 +0100 +Subject: [PATCH] rteval: node in args to Popen must be a string + +In hackbench.py, the args to Popen must be a string and not an integer + +Before this change, this can happen. + +rteval --duration=1m +got system topology: 2 node system (10 cores per node) +rteval run on 4.18.0-151.rt13.8.el8.x86_64 started at Tue Nov 26 14:42:18 2019 +started 2 loads on 20 cores with 2 numa nodes +started measurement threads on 20 cores +Run duration: 60.0 seconds +Exception in thread hackbench: +Traceback (most recent call last): + File "/usr/lib64/python3.6/threading.py", line 916, in _bootstrap_inner + self.run() + File "/usr/lib/python3.6/site-packages/rteval/modules/__init__.py", line 188, in run + self._WorkloadTask() + File "/usr/lib/python3.6/site-packages/rteval/modules/loads/hackbench.py", line 147, in _WorkloadTask + self.tasks[n] = self.__starton(n) + File "/usr/lib/python3.6/site-packages/rteval/modules/loads/hackbench.py", line 134, in __starton + stderr=self.__err) + File "/usr/lib64/python3.6/subprocess.py", line 729, in __init__ + restore_signals, start_new_session) + File "/usr/lib64/python3.6/subprocess.py", line 1295, in _execute_child + restore_signals, start_new_session, preexec_fn) +TypeError: expected str, bytes or os.PathLike object, not int + +After converting the node to a string, it works as expected + +Signed-off-by: John Kacur +--- + rteval/modules/loads/hackbench.py | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/rteval/modules/loads/hackbench.py b/rteval/modules/loads/hackbench.py +index b15ea6378310..f31e29dd3f13 100644 +--- a/rteval/modules/loads/hackbench.py ++++ b/rteval/modules/loads/hackbench.py +@@ -120,7 +120,7 @@ class Hackbench(CommandLineLoad): + def __starton(self, node): + if self.__multinodes or self.cpulist: + if self.__usenumactl: +- args = [ 'numactl', '--cpunodebind', node ] + self.args ++ args = [ 'numactl', '--cpunodebind', str(node) ] + self.args + else: + cpulist = ",".join([ str(n) for n in self.cpus[node] ]) + args = ['taskset', '-c', cpulist ] + self.args +-- +2.20.1 + diff --git a/SOURCES/rteval-use-systopology-for-hackbench-online-cpus.patch b/SOURCES/rteval-use-systopology-for-hackbench-online-cpus.patch new file mode 100644 index 0000000..d97164c --- /dev/null +++ b/SOURCES/rteval-use-systopology-for-hackbench-online-cpus.patch @@ -0,0 +1,78 @@ +From c7ba86bae03dc98f3f988e0f261af1651930fd50 Mon Sep 17 00:00:00 2001 +From: John Kacur +Date: Tue, 28 May 2019 23:47:22 +0200 +Subject: [PATCH 2/2] rteval: Change hackbench to use systopology to calculate + online cpus + +- change the class SysTopology method getcpus to work properly +. have hackbench make use of SysTopology instead of it's own +implementation to calculate cpus. The advantage is that this will +automatically calculate online cpus and sort them + +Signed-off-by: John Kacur +--- + rteval/modules/loads/hackbench.py | 18 +++++++++--------- + rteval/systopology.py | 2 +- + 2 files changed, 10 insertions(+), 10 deletions(-) + +diff --git a/rteval/modules/loads/hackbench.py b/rteval/modules/loads/hackbench.py +index 0ee60d900f18..b15ea6378310 100644 +--- a/rteval/modules/loads/hackbench.py ++++ b/rteval/modules/loads/hackbench.py +@@ -30,6 +30,7 @@ from signal import SIGKILL + from rteval.modules.loads import CommandLineLoad + from rteval.Log import Log + from rteval.misc import expand_cpulist ++from rteval.systopology import SysTopology + + class Hackbench(CommandLineLoad): + def __init__(self, config, logger): +@@ -53,24 +54,23 @@ class Hackbench(CommandLineLoad): + mult = 0 + self._donotrun = True + +- # figure out how many nodes we have +- self.nodes = [ n.split('/')[-1][4:] for n in glob.glob('/sys/devices/system/node/node*') ] +- ++ sysTop = SysTopology() ++ # get the number of nodes ++ self.nodes = sysTop.getnodes() + + # get the cpus for each node + self.cpus = {} + biggest = 0 +- for n in self.nodes: +- self.cpus[n] = [ int(c.split('/')[-1][3:]) for c in glob.glob('/sys/devices/system/node/node%s/cpu[0-9]*' % n) ] +- self.cpus[n].sort() +- ++ for n in sysTop: ++ self.cpus[n] = sysTop.getcpus(int(n)) + # if a cpulist was specified, only allow cpus in that list on the node + if self.cpulist: + self.cpus[n] = [ c for c in self.cpus[n] if str(c) in expand_cpulist(self.cpulist) ] + + # track largest number of cpus used on a node +- if len(self.cpus[n]) > biggest: +- biggest = len(self.cpus[n]) ++ node_biggest = len(sysTop.getcpus(int(n))) ++ if node_biggest > biggest: ++ biggest = node_biggest + + # remove nodes with no cpus available for running + for node,cpus in self.cpus.items(): +diff --git a/rteval/systopology.py b/rteval/systopology.py +index 07674658df8e..9556e51d96a2 100644 +--- a/rteval/systopology.py ++++ b/rteval/systopology.py +@@ -246,7 +246,7 @@ class SysTopology(object): + return list(self.nodes.keys()) + + def getcpus(self, node): +- return self.nodes[node] ++ return self.nodes[node].getcpulist() + + + +-- +2.20.1 + diff --git a/SPECS/rteval.spec b/SPECS/rteval.spec new file mode 100644 index 0000000..28f8e49 --- /dev/null +++ b/SPECS/rteval.spec @@ -0,0 +1,632 @@ +Name: rteval +Version: 3.0 +Release: 6%{?dist} +Summary: Utility to evaluate system suitability for RT Linux + +Group: Development/Tools +License: GPLv2 +URL: https://www.kernel.org/pub/linux/utils/rteval/rteval-3.0.tar.xz +Source0: rteval-%{version}.tar.xz +BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) + +BuildRequires: python3-devel +Requires: platform-python +Requires: python3-schedutils python3-ethtool python3-lxml +Requires: python3-dmidecode >= 3.10 +Requires: rt-tests >= 1.5-11 +Requires: rteval-loads >= 1.4-5 +Requires: rteval-common => %{version}-%{release} +Requires: sysstat +Requires: xz bzip2 +Requires: kernel-headers +Requires: sos +Requires: tar +BuildArch: noarch +Obsoletes: rteval <= 2.14 +Requires: numactl +Requires: gcc flex bison bc +Requires: elfutils elfutils-libelf-devel +Requires: openssl-devel + +%description +The rteval script is a utility for measuring various aspects of +realtime behavior on a system under load. The script unpacks the +kernel source, and then goes into a loop, running hackbench and +compiling a kernel tree. During that loop the cyclictest program +is run to measure event response time. After the run time completes, +a statistical analysis of the event response times is done and printed +to the screen. + +%package common +Summary: Common rteval files +BuildArch: noarch + +# Patches +Patch1: rteval-Check-whether-cpu-online-before-adding-to-list.patch +Patch2: rteval-use-systopology-for-hackbench-online-cpus.patch +Patch3: rteval-Don-t-assume-cpu0-cannot-be-offlined-test-it.patch +Patch4: rteval-node-in-args-to-Popen-must-be-a-string.patch +Patch5: rteval-hackbench-Fix-interating-through-nodes.patch + +%description common +Common files used by rteval, rteval-xmlrpc and rteval-parser + +%prep +%setup -q +%patch1 -p1 +%patch2 -p1 +%patch3 -p1 +%patch4 -p1 +%patch5 -p1 + +# version sanity check (make sure specfile and rteval.py match) +#cp rteval/version.py rtevalversion.py +#srcver=$(%{__python3} -c "from rtevalversion import RTEVAL_VERSION; print RTEVAL_VERSION") +#rm -rf rtevalversion.py +#if [ $srcver != %{version} ]; then +# printf "\n***\n*** rteval spec file version do not match the rteval/rteval.py version\n***\n\n" +# exit -1 +#fi + +%build +%{__python3} setup.py build + +%install +%{__python3} setup.py install --root=$RPM_BUILD_ROOT + +%clean +rm -rf $RPM_BUILD_ROOT + +%files common +%doc COPYING +%dir %{_datadir}/%{name} +%{python3_sitelib}/rteval/rtevalclient.py* +%{python3_sitelib}/rteval/rtevalConfig.py* +%{python3_sitelib}/rteval/rtevalXMLRPC.py* +%{python3_sitelib}/rteval/version.py* +%{python3_sitelib}/rteval/Log.py* +%{python3_sitelib}/rteval/misc.py* +%{python3_sitelib}/rteval/systopology.py* + +%files +%defattr(-,root,root,-) +%{python3_sitelib}/*.egg-info + +%doc COPYING README doc/rteval.txt +%{_mandir}/man8/rteval.8.gz +%config(noreplace) %{_sysconfdir}/rteval.conf +%{_datadir}/%{name}/rteval_*.xsl +%{python3_sitelib}/rteval/__init__.py* +%{python3_sitelib}/rteval/rtevalMailer.py* +%{python3_sitelib}/rteval/rtevalReport.py* +%{python3_sitelib}/rteval/xmlout.py* +%{python3_sitelib}/rteval/modules +%{python3_sitelib}/rteval/sysinfo +/usr/bin/rteval + +%{python3_sitelib}/rteval/__pycache__/* + +%changelog +* Tue Dec 10 2019 John Kacur - 3.0-6 +- Iterate over nodes and not sysTop +- Explictly add a few more software requires for compiling the kernel +Resolves: rhbz#1755603 + +* Tue Dec 03 2019 John Kacur - 3.0-5 +- Explicitly add some software requires for compiling the kernel +Resolves: rhbz#1766879 + +* Mon Dec 02 2019 John Kacur - 3.0-4 +- In hackbench.py node in args to Popen must be a string +Resolves: rhbz#1777048 + +* Tue Nov 19 2019 John Kacur - 3.0-3 +- Don't assume cpu0 cannot be offlined, test for it +- Drop patches that are no longer in the spec file +Resolves: rhbz#1773792 + +* Mon Nov 18 2019 John Kacur - 3.0-2 +- Check whether a cpu is online before adding to a list +- Change hackbench to use the systopology interface for online cpus +Resolves: rhbz#1715081 + +* Fri Nov 15 2019 John Kacur - 3.0-1 +- Sync rt-tests and rteval-loads versions in the specfile +- Upgrade to upstream rteval-3.0 +Resolves: rhbz#1748955 + +* Fri Nov 08 2019 John Kacur - 2.14-27 +- Update kcompile sources to linux-5.1 +Resolves: rhbz#1770215 + +* Fri Nov 08 2019 John Kacur - 2.14-26 +- Fix number of hackbench jobs wrt number of CPUs +- Don't run on nodes with no CPUs available +Resolves: rhbz#1770211 + +* Tue Apr 02 2019 Clark Williams - 2.14.25 +- fix incorrect test logic in gating tests +Resolves: rhbz#1682426 + +* Tue Apr 02 2019 Clark Williams - 2.14.24 +- add rteval-loads dependency to gating +- added second test (short_run) to gating +Resolves: rhbz#1682426 + +* Mon Apr 01 2019 Clark Williams - 2.14.23 +- add missing gating.yaml +Resolves: rhbz#1682426 + +* Mon Apr 01 2019 Clark Williams - 2.14.22 +- checkin OSCI gating framework +Resolves: rhbz#1682426 + +* Mon Dec 17 2018 John Kacur - 2.14-21 +- Fix typo in debug output +Resolves: rhbz#1659974 + +* Tue Oct 16 2018 John Kacur - 2.14-20 +- Disable options for the remote xmlrpc server, not currently supported +Resolves: rhbz#1628322 + +* Sat Oct 13 2018 John Kacur - 2.14-19 +- Fix Requires for python3 +Resolves: rhbz#1638135 + +* Fri Oct 12 2018 John Kacur - 2.14-18 +- Fix time format in report +Resolves: rhbz#1630733 + +* Fri Sep 28 2018 John Kacur - 2.14-17 +- Change python3 to platform-python +Resolves: rhbz#1633619 + +* Fri Aug 10 2018 John Kacur - 2.14-16 +- remove unnecssary encode that is causing problems +Resolves: rhbz#1614384 + +* Tue Aug 07 2018 John Kacur - 2.14-15 +- tar is required in kcompile.py. Make it a Require in the specfile +Resolves: rhbz#1612992 + +* Fri Aug 03 2018 John Kacur - 2.14-14 +- fix python3 division of integers +Resolves: rhbz#1611813 + +* Fri Aug 03 2018 John Kacur - 2.14-13 +-fix rtevalclient import +Resolves: rhbz#1608464 + +* Sat Jun 23 2018 John Kacur - 2.14-12 +- More python3 changes +- Changes for the new version of rt-tests that automates --numa +Resolves: rhbz#1594287 + +* Tue Jun 12 2018 John Kacur jkacur@redhat.com> - 2.14-11 +- More specfile changes for python3 build +Resolves: rhbz#1518699 + +* Wed May 30 2018 John Kacur - 2.14-10 +- Chnages for a python3 build +Resolves: rhbz#1518699 + +* Fri Oct 27 2017 John Kacur - 2.14-9 +- Remove redundant files for clarity. +Resolves: rhbz1504162 + +* Fri Oct 27 2017 John Kacur - 2.14-8 +- Don't fail if we don't know the init system +Resolves: rhbz1504168 + +* Fri Oct 20 2017 John Kacur - 2.14-7 +- Remove underscore from sysread function in systopology.py +Resolves: rhbz1504164 + +* Fri Oct 20 2017 John Kacur - 2.14-6 +- Improve error handling if cyclictest fails to run +Resolves: rhbz1504159 + +* Fri Oct 20 2017 John Kacur - 2.14-5 +- Remove trace-cmd from Requires, since it is not needed to run rteval +Resolves: rhbz1504173 + +* Mon Oct 16 2017 John Kacur - 2.14-4 +- Don't sleep if hackbench fails to launch due to out-of-memory +- Instead, exit gracefully +Resolves: rhbz1380144 + +* Wed Oct 11 2017 John Kacur - 2.14-3 +- Add sos as a requires since this package is needed to run sosreport +Resolves: rhbz1500722 + +* Wed Oct 11 2017 John Kacur - 2.14-2 +- Add the contents of the kernel boot command line to the summary report +Resolves: rhbz1452788 + +* Thu Mar 16 2017 Clark Williams - 2.14-1 +- removed leftover import of systopology from sysinfo + +* Wed Mar 15 2017 Clark Williams - 2.13-2 +- Updated specfile to correct version and bz [1382155] + +* Tue Sep 20 2016 Clark Williams - 2.12-1 +- handle empty environment variables SUDO_USER and USER [1312057] + +* Tue Aug 30 2016 Clark Williams - 2.11-1 +- make sure we return non-zero for early exit from tests + +* Wed Aug 3 2016 Clark Williams - 2.10-1 +- bumped version for RHEL 7.3 release + +* Mon May 9 2016 Clark Williams - 2.9.1 +- default cpulist for modules if only one specified [1333831] + +* Tue Apr 26 2016 Clark Williams - 2.8.1 +- add the --version option to print the rteval version +- made the --cyclictest-breaktrace option work properly [1209986] + +* Fri Apr 1 2016 Clark Williams - 2.7.1 +- treat SIGINT and SIGTERM as valid end-of-run events [1278757] +- added cpulist options to man page + +* Thu Feb 11 2016 Clark Williams - 2.6.1 +- update to make --loads-cpulist and --measurement-cpulist work [1306437] + +* Thu Dec 10 2015 Clark Williams - 2.5-1 +- stop using old numactl --cpubind argument + +* Wed Dec 9 2015 Clark Williams - 2.4.2 +- added Require of package numactl + +* Tue Nov 17 2015 Clark Williams - 2.4.1 +- rework hackbench load to not generate cross-node traffic [1282826] + +* Wed Aug 12 2015 Clark Williams - 2.3-1 +- comment out HWLatDetect module from default config [1245699] + +* Wed Jun 10 2015 Clark Williams - 2.2-1 +- add --loads-cpulist and --measurement-cpulist to allow cpu placement [1230401] + +* Thu Apr 23 2015 Luis Claudio R. Goncalves - 2.1-8 +- load default configs when no config file is specified (Jiri kastner) [1212452] + +* Wed Jan 14 2015 Clark Williams - 2.1-7 +- added requires of bzip2 to specfile [1151567] + +* Thu Jan 8 2015 Clark Williams - 2.1-6 +- cleaned up product documentation [1173315] + +* Mon Nov 10 2014 Luis Claudio R. Goncalves - 2.1-5 +- rebuild for RHEL-7.1 (1151567) + +* Thu Mar 27 2014 Clark Williams - 2.1-4 +- cherry-picked old commit to deal with installdir problem + +* Wed Mar 26 2014 Clark Williams - 2.1-3 +- added sysstat requires to specfile + +* Tue Mar 12 2013 David Sommerseth - 2.1-2 +- Migrated from libxslt-python to python-lxml + +* Fri Jan 18 2013 David Sommerseth - 2.1-1 +- Made some log lines clearer +- cyclictest: Added --cyclictest-breaktrace feature +- cyclictest: Removed --cyclictest-distance option +- cyclictest: Use a tempfile buffer for cyclictest's stdout data +- cyclictest: Report if breaktrace was triggered +- cyclictest: Make the unit test work again +- cyclictest: Only log and show statistic data when samples are collected +- Copyright updates + +* Thu Jan 17 2013 David Sommerseth - 2.0.1-1 +- Fix up type casting in the core module code +- hwlatdetect: Add some more useful debug info +- Reworked the run logic for modules - allow them to flag they won't run +- Fixed a few log messages in load modules +- Add a 30 seconds sleep before unleashing the measurement threads + +* Thu Jan 10 2013 David Sommerseth - 2.0-3 +- Separate out RTEVAL_VERSION into rteval.version, to avoid + massive BuildRequirements + +* Fri Dec 21 2012 David Sommerseth - 2.0-2 +- Split out common files into rteval-common + +* Fri Dec 21 2012 David Sommerseth - 2.0-1 +- Updated to rteval v2.0 and reworked spec file to use setup.py directly + +* Tue Oct 23 2012 Clark Williams - 1.36-1 +- deal with system not having dmidecode python module +- make sure to cast priority parameter to int +- from Raphaƫl Beamonte : + - Rewrite of the get_kthreads method to make it cross-distribution + - Adds getcmdpath method to use which to locate the used commands + - Rewrite of the get_services method to make it cross-distribution + +* Mon Apr 2 2012 Clark Williams - 1.35-1 +- fix thinko where SIGINT and SIGTERM handlers were commented out + +* Thu Jan 12 2012 Clark Williams - 1.34-1 +- fix missing config merge in rteval.py to pass parameters + down to cyclictest +- modify hackbench to use helper function to start process + +* Sat May 14 2011 Clark Williams - 1.33-1 +- modify hackbench cutoff to be 0.75GB/core + +* Mon Aug 23 2010 Clark Williams - 1.32-1 +- update docs +- refactor some RTEval methods to utility functions +- modify hackbench.py not to run under low memory conditions +- clean up XML generation to deal with new hackbench code +- clean up XSL code to deal with new XML 'run' attribute +- from David Sommerseth : + - improve CPU socket counting logic + - delay log directory creation until actually needed +- from Gowrishankar : + - check if the core id really exists (multithreading fix) + +* Mon Jul 26 2010 Clark Williams - 1.31-1 +- from David Sommerseth : + - Updated hackbench implementation to avoid overusing resources + - Don't show NUMA node information if it's missing in the summary.xml + - Show CPU cores properly + +* Wed Jul 21 2010 Clark Williams - 1.30-1 +- added code to hackbench to try to detect and ease memory pressure + +* Fri Jul 16 2010 Clark Williams - 1.29-1 +- fixed incorrect type value in kcompile.py + +* Fri Jul 16 2010 Clark Williams - 1.28-1 +- added logic to loads to adjust number of jobs based on ratio + of memory per core + +* Wed Jul 14 2010 Clark Williams - 1.27-1 +- modified hackbench to go back to using threads rather than + processes for units of work +- added memory size, number of numa nodes and run duration to the + parameter dictionary passed to all loads and cyclictest + +* Tue Jul 13 2010 Clark Williams - 1.26-1 +- modified hackbench parameters to reduce memory consumption + +* Mon Jul 12 2010 Clark Williams - 1.25-1 +- fixed cyclictest bug that caused everything to be uniprocessor +- updated source copyrights to 2010 + +* Fri Jul 9 2010 Clark Williams - 1.24-1 +- modified hackbench arguments and added new parameters for + hackbench in rteval.conf + +* Thu Jul 8 2010 Clark Williams - 1.23-1 +- version bump to deal with out-of-sync cvs issue + +* Thu Jul 8 2010 Clark Williams - 1.22-1 +- merged David Sommerseth changes to use + hackbench from rt-tests packages rather than carry local copy +- converted all loads and cyclictest to pass __init__ parameters + in a dictionary rather than as discrete parameters +- added logging for load output + + * Tue Apr 13 2010 Clark Williams - 1.21-1 +- from Luis Claudio Goncalves : + - remove unecessary wait() call in cyclictest.py + - close /dev/null after using it + - call subprocess.wait() when needed + - remove delayloop code in hackbench.py +- from David Sommerseth : + - add SIGINT handler + - handle non-root user case + - process DMI warnings before command line arguments + - added --annotate feature to rteval + - updates to xmlrpc code + + * Tue Apr 6 2010 Clark Williams - 1.20-1 +- code fixes from Luis Claudio Goncalves +- from David Sommerseth : + - xmlrpc server updates + - cputopology.py for recording topology in xml + - added NUMA node recording for run data + - rpmlint fixes +- added start of rteval whitepaper in docs dir + +* Tue Mar 16 2010 Clark Williams - 1.19-1 +- add ability for --summarize to read tarfiles +- from David Sommerseth + - gather info about loaded kernel modules for XML file + - added child tracking to hackbench to prevent zombies + +* Tue Feb 16 2010 Clark Williams - 1.18-1 +- fix usage of python 2.6 features on RHEL5 (python 2.4) + +* Tue Feb 16 2010 Clark Williams - 1.17-1 +- added logic to filter non-printables from service status output + so that we have legal XML output +- added logic to hackbench.py to cleanup properly at the end + of the test + +* Thu Feb 11 2010 Clark Williams - 1.16-1 +- fix errors in show_remaining_time() introduced because + time values are floats rather than ints + +* Thu Feb 11 2010 Clark Williams - 1.15-1 +- added logic to use --numa and --smp options of new cyclictest +- added countdown report for time remaining in a run + +* Tue Feb 9 2010 Clark Williams - 1.14-1 +- David Sommerseth : + merged XMLReport() changes for hwcert suite + +* Tue Dec 22 2009 Clark Williams - 1.13-1 +- added cyclictest default initializers +- added sanity checks to statistics reduction code +- updated release checklist to include origin push +- updated Makefile clean and help targets +- davids updates (mainly for v7 integration): + - Add explicit sys.path directory to the python sitelib+ + '/rteval' + - Send program arguments via RtEval() constructor + - Added more DMI data into the summary.xml report + - Fixed issue with not including all devices in the + OnBoardDeviceInfo tag + +* Thu Dec 3 2009 David Sommerseth - 1.12-2 +- fixed Makefile and specfile to include and install the + rteval/rteval_histogram_raw.py source file for gaining + raw access to histogram data +- Removed xmlrpc package during merge against master_ipv4 branch + +* Wed Nov 25 2009 Clark Williams - 1.12-1 +- fix incorrect reporting of measurement thread priorities + +* Mon Nov 16 2009 Clark Williams - 1.11-5 +- ensure that no double-slashes ("//") appear in the symlink + path for /usr/bin/rteval (problem with rpmdiff) + +* Tue Nov 10 2009 Clark Williams - 1.11-4 +- changed symlink back to install and tracked by %%files + +* Mon Nov 9 2009 Clark Williams - 1.11-3 +- changed symlink generation from %%post to %%posttrans + +* Mon Nov 9 2009 Clark Williams - 1.11-2 +- fixed incorrect dependency for libxslt + +* Fri Nov 6 2009 Clark Williams - 1.11-1 +- added base OS info to XML file and XSL report +- created new package rteval-loads for the load source code + +* Wed Nov 4 2009 Clark Williams - 1.10-1 +- added config file section for cyclictest and two settable + parameters, buckets and interval + +* Thu Oct 29 2009 Clark Williams - 1.9-1 +- merged davids updates: + -H option (raw histogram data) + cleaned up xsl files + fixed cpu sorting + +* Mon Oct 26 2009 David Sommerseth - 1.8-3 +- Fixed rpmlint complaints + +* Mon Oct 26 2009 David Sommerseth - 1.8-2 +- Added xmlrpc package, containing the XML-RPC mod_python modules + +* Tue Oct 20 2009 Clark Williams - 1.8-1 +- split kcompile and hackbench into sub-packages +- reworked Makefile (and specfile) install/uninstall logic +- fixed sysreport incorrect plugin option +- catch failure when running on root-squashed NFS + +* Tue Oct 13 2009 Clark Williams - 1.7-1 +- added kthread status to xml file +- merged davids changes for option processing and additions + to xml summary + +* Tue Oct 13 2009 Clark Williams - 1.6-1 +- changed stat calculation to loop less +- added methods to grab service and kthread status + +* Mon Oct 12 2009 Clark Williams - 1.5-1 +- changed cyclictest to use less memory when doing statisics + calculations +- updated debug output to use module name prefixes +- changed option processing to only process config file once + +* Fri Oct 9 2009 Clark Williams - 1.4-1 +- changed cyclictest to use histogram rather than sample array +- calcuated statistics directly from histogram +- changed sample interval to 100us +- added -a (affinity) argument to force cpu affinity for + measurement threads + +* Thu Sep 24 2009 David Sommerseth - 1.3-3 +- Cleaned up the spec file and made rpmlint happy + +* Wed Sep 23 2009 David Sommerseth - 1.3-2 +- Removed version number from /usr/share/rteval path + +* Tue Sep 22 2009 Clark Williams - 1.3-1 +- changes from davids: + * changed report code to sort by processor id + * added report submission retry logic + * added emailer class + +* Fri Sep 18 2009 Clark Williams - 1.2-1 +- added config file handling for modifying load behavior and + setting defaults +- added units in report per IBM request + +* Wed Aug 26 2009 Clark Williams - 1.1-2 +- missed a version change in rteval/rteval.py + +* Wed Aug 26 2009 Clark Williams - 1.1-1 +- modified cyclictest.py to start cyclictest threads with a + 'distance' of zero, meaning they all have the same measurement + interval + +* Tue Aug 25 2009 Clark Williams - 1.0-1 +- merged davids XMLRPC fixes +- fixed --workdir option +- verion bump to 1.0 + +* Thu Aug 13 2009 Clark Williams - 0.9-2 +- fixed problem with incorrect version in rteval.py + +* Tue Aug 4 2009 Clark Williams - 0.9-1 +- merged dsommers XMLRPC and database changes +- Specify minimum python-dmidecode version, which got native XML support +- Added rteval_dmi.xsl +- Fixed permission issues in /usr/share/rteval-x.xx + +* Wed Jul 22 2009 Clark Williams - 0.8-1 +- added code to capture clocksource info +- added code to copy dmesg info to report directory +- added code to display clocksource info in report +- added --summarize option to display summary of existing report +- added helpfile target to Makefile + +* Thu Mar 26 2009 Clark Williams - 0.7-1 +- added require for python-schedutils to specfile +- added default for cyclictest output file +- added help parameter to option parser data +- renamed xml output file to summary.xml +- added routine to create tarfile of result files + +* Wed Mar 18 2009 Clark Williams - 0.6-6 +- added code to handle binary data coming from DMI tables + +* Wed Mar 18 2009 Clark Williams - 0.6-5 +- fixed logic for locating XSL template (williams) +- fixed another stupid typo in specfile (williams) + +* Wed Mar 18 2009 Clark Williams - 0.6-4 +- fixed specfile to install rteval_text.xsl in /usr/share directory + +* Wed Mar 18 2009 Clark Williams - 0.6-3 +- added Requires for libxslt-python (williams) +- fixed race condition in xmlout constructor/destructor (williams) + +* Wed Mar 18 2009 Clark Williams - 0.6-2 +- added Requires for libxslt (williams) +- fixed stupid typo in rteval/rteval.py (williams) + +* Wed Mar 18 2009 Clark Williams - 0.6-1 +- added xml output logic (williams, dsommers) +- added xlst template for report generator (dsommers) +- added dmi/smbios output to report (williams) +- added __del__ method to hackbench to cleanup after run (williams) +- modified to always keep run data (williams) + +* Fri Feb 20 2009 Clark Williams - 0.5-1 +- fixed tab/space mix problem +- added report path line to report + +* Fri Feb 20 2009 Clark Williams - 0.4-1 +- reworked report output +- handle keyboard interrupt better +- removed duration mismatch between rteval and cyclictest + +* Mon Feb 2 2009 Clark Williams - 0.3-1 +- initial checkin