Update rteval to use linux-6.6.1 as the default kernel for kcompile
Resolves: RHEL-14483 Signed-off-by: John Kacur <jkacur@redhat.com>
This commit is contained in:
parent
48500e037e
commit
cc1eae455f
@ -1,57 +0,0 @@
|
|||||||
From 0ba98b12775b5394aab2205df29d93439d625cc3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Date: Thu, 1 Jun 2023 16:27:35 -0400
|
|
||||||
Subject: [PATCH] Added code to check if the proc/net/if_inet6 file exists
|
|
||||||
while loading IPv6 addresses in the IPv6Addresses class
|
|
||||||
|
|
||||||
Added code to check if the proc/net/if_inet6 file exists while loading IPv6 addresses in the IPv6Addresses class. If it doesn't, then the system has IPv6 disabled, and that chunk of code is passed.
|
|
||||||
|
|
||||||
Signed-off-by: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/sysinfo/newnet.py | 28 ++++++++++++++++------------
|
|
||||||
1 file changed, 16 insertions(+), 12 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/sysinfo/newnet.py b/rteval/sysinfo/newnet.py
|
|
||||||
index 63417d9e59f1..2911400ceb6c 100644
|
|
||||||
--- a/rteval/sysinfo/newnet.py
|
|
||||||
+++ b/rteval/sysinfo/newnet.py
|
|
||||||
@@ -72,19 +72,23 @@ class IPv6Addresses():
|
|
||||||
and a list of ipv6addresses
|
|
||||||
'''
|
|
||||||
MYP = '/proc/net/if_inet6'
|
|
||||||
- with open(MYP, 'r') as f:
|
|
||||||
- mystr = f.readline().strip()
|
|
||||||
- while len(mystr) > 0:
|
|
||||||
- ipv6addr , _, _, _, _, intf = mystr.split()
|
|
||||||
- ipv6addr = compress_iv6(ipv6addr)
|
|
||||||
- if intf == 'lo':
|
|
||||||
- mystr = f.readline().strip()
|
|
||||||
- continue
|
|
||||||
- if intf not in self.data:
|
|
||||||
- self.data[intf] = [ipv6addr]
|
|
||||||
- else:
|
|
||||||
- self.data[intf].append(ipv6addr)
|
|
||||||
+ try:
|
|
||||||
+ with open(MYP, 'r') as f:
|
|
||||||
mystr = f.readline().strip()
|
|
||||||
+ while len(mystr) > 0:
|
|
||||||
+ ipv6addr , _, _, _, _, intf = mystr.split()
|
|
||||||
+ ipv6addr = compress_iv6(ipv6addr)
|
|
||||||
+ if intf == 'lo':
|
|
||||||
+ mystr = f.readline().strip()
|
|
||||||
+ continue
|
|
||||||
+ if intf not in self.data:
|
|
||||||
+ self.data[intf] = [ipv6addr]
|
|
||||||
+ else:
|
|
||||||
+ self.data[intf].append(ipv6addr)
|
|
||||||
+ mystr = f.readline().strip()
|
|
||||||
+ # if IPv6 is disabled, the if_net6 files does not exist, so we can pass
|
|
||||||
+ except FileNotFoundError:
|
|
||||||
+ pass
|
|
||||||
|
|
||||||
class IPv4Addresses():
|
|
||||||
''' Obtains a list of IPv4 addresses from the proc file system '''
|
|
||||||
--
|
|
||||||
2.31.1
|
|
||||||
|
|
@ -1,165 +0,0 @@
|
|||||||
From 149c119df7c7a8ddfd1abc7a127d536cc0674230 Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Tue, 23 Aug 2022 14:57:37 -0400
|
|
||||||
Subject: [PATCH 1/3] rteval: Fix "DMI WARNING" when not running as root
|
|
||||||
|
|
||||||
In some cases it is not necessary to run as root, for example when
|
|
||||||
running -Z (--summarize) to summarize an existing report.
|
|
||||||
|
|
||||||
In such cases we do not want to see the message:
|
|
||||||
** DMI WARNING ** Failed to open memory buffer (/dev/mem): Permission denied
|
|
||||||
|
|
||||||
The fix here is to surpresses that message.
|
|
||||||
|
|
||||||
In addition:
|
|
||||||
- the unused "config" option to DMIinfo.__init__ is removed
|
|
||||||
- A few strings are converted to f-strings
|
|
||||||
- "with" is used to open the xsltfile
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/sysinfo/__init__.py | 6 ++---
|
|
||||||
rteval/sysinfo/dmi.py | 45 +++++++++++++++++++-------------------
|
|
||||||
2 files changed, 26 insertions(+), 25 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/sysinfo/__init__.py b/rteval/sysinfo/__init__.py
|
|
||||||
index 0436ebb350d9..a4359382f006 100644
|
|
||||||
--- a/rteval/sysinfo/__init__.py
|
|
||||||
+++ b/rteval/sysinfo/__init__.py
|
|
||||||
@@ -42,7 +42,7 @@ class SystemInfo(KernelInfo, SystemServices, dmi.DMIinfo, CPUtopology,
|
|
||||||
self.__logger = logger
|
|
||||||
KernelInfo.__init__(self, logger=logger)
|
|
||||||
SystemServices.__init__(self, logger=logger)
|
|
||||||
- dmi.DMIinfo.__init__(self, config, logger=logger)
|
|
||||||
+ dmi.DMIinfo.__init__(self, logger=logger)
|
|
||||||
CPUtopology.__init__(self)
|
|
||||||
OSInfo.__init__(self, logger=logger)
|
|
||||||
cmdlineInfo.__init__(self, logger=logger)
|
|
||||||
@@ -80,8 +80,8 @@ if __name__ == "__main__":
|
|
||||||
cfg.installdir = "."
|
|
||||||
si = SystemInfo(cfg, logger=l)
|
|
||||||
|
|
||||||
- print("\tRunning on %s" % si.get_base_os())
|
|
||||||
- print("\tNUMA nodes: %d" % si.mem_get_numa_nodes())
|
|
||||||
+ print(f"\tRunning on {si.get_base_os()}")
|
|
||||||
+ print(f"\tNUMA nodes: {si.mem_get_numa_nodes()}")
|
|
||||||
print("\tMemory available: %03.2f %s\n" % si.mem_get_size())
|
|
||||||
|
|
||||||
print("\tServices: ")
|
|
||||||
diff --git a/rteval/sysinfo/dmi.py b/rteval/sysinfo/dmi.py
|
|
||||||
index 80cf3c723b36..5965c128c093 100644
|
|
||||||
--- a/rteval/sysinfo/dmi.py
|
|
||||||
+++ b/rteval/sysinfo/dmi.py
|
|
||||||
@@ -1,6 +1,4 @@
|
|
||||||
#
|
|
||||||
-# dmi.py - class to wrap DMI Table information
|
|
||||||
-#
|
|
||||||
# Copyright 2009 - 2013 Clark Williams <williams@redhat.com>
|
|
||||||
# Copyright 2009 - 2013 David Sommerseth <davids@redhat.com>
|
|
||||||
#
|
|
||||||
@@ -24,6 +22,7 @@
|
|
||||||
# including keys needed to generate an equivalently functional executable
|
|
||||||
# are deemed to be part of the source code.
|
|
||||||
#
|
|
||||||
+""" dmi.py class to wrap DMI Table Information """
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import os
|
|
||||||
@@ -52,16 +51,18 @@ def ProcessWarnings():
|
|
||||||
if warnings is None:
|
|
||||||
return
|
|
||||||
|
|
||||||
+ ignore1 = '/dev/mem: Permission denied'
|
|
||||||
+ ignore2 = 'No SMBIOS nor DMI entry point found, sorry.'
|
|
||||||
+ ignore3 = 'Failed to open memory buffer (/dev/mem): Permission denied'
|
|
||||||
+ ignore = (ignore1, ignore2, ignore3)
|
|
||||||
for warnline in warnings.split('\n'):
|
|
||||||
# Ignore these warnings, as they are "valid" if not running as root
|
|
||||||
- if warnline == '/dev/mem: Permission denied':
|
|
||||||
- continue
|
|
||||||
- if warnline == 'No SMBIOS nor DMI entry point found, sorry.':
|
|
||||||
+ if warnline in ignore:
|
|
||||||
continue
|
|
||||||
|
|
||||||
# All other warnings will be printed
|
|
||||||
if len(warnline) > 0:
|
|
||||||
- print("** DMI WARNING ** %s" % warnline)
|
|
||||||
+ print(f"** DMI WARNING ** {warnline}")
|
|
||||||
|
|
||||||
dmidecode.clear_warnings()
|
|
||||||
|
|
||||||
@@ -69,8 +70,7 @@ def ProcessWarnings():
|
|
||||||
class DMIinfo:
|
|
||||||
'''class used to obtain DMI info via python-dmidecode'''
|
|
||||||
|
|
||||||
- # TODO: Remove unnecessary config
|
|
||||||
- def __init__(self, config, logger):
|
|
||||||
+ def __init__(self, logger):
|
|
||||||
self.__version = '0.5'
|
|
||||||
|
|
||||||
if not dmidecode_loaded:
|
|
||||||
@@ -83,22 +83,24 @@ class DMIinfo:
|
|
||||||
|
|
||||||
self.__xsltparser = self.__load_xslt('rteval_dmi.xsl')
|
|
||||||
|
|
||||||
- def __load_xslt(self, fname):
|
|
||||||
- xsltfile = None
|
|
||||||
+ @staticmethod
|
|
||||||
+ def __load_xslt(fname):
|
|
||||||
+ xsltf = None
|
|
||||||
if os.path.exists(fname):
|
|
||||||
- xsltfile = open(fname, "r")
|
|
||||||
- elif rtevalConfig.default_config_search([fname], os.path.isfile):
|
|
||||||
- xsltfile = open(rtevalConfig.default_config_search([fname], os.path.isfile), "r")
|
|
||||||
-
|
|
||||||
- if xsltfile:
|
|
||||||
- xsltdoc = lxml.etree.parse(xsltfile)
|
|
||||||
- ret = lxml.etree.XSLT(xsltdoc)
|
|
||||||
- xsltfile.close()
|
|
||||||
+ xsltf = fname
|
|
||||||
+ else:
|
|
||||||
+ xsltf = rtevalConfig.default_config_search([fname], os.path.isfile)
|
|
||||||
+
|
|
||||||
+ if xsltf:
|
|
||||||
+ with open(xsltf, "r") as xsltfile:
|
|
||||||
+ xsltdoc = lxml.etree.parse(xsltfile)
|
|
||||||
+ ret = lxml.etree.XSLT(xsltdoc)
|
|
||||||
return ret
|
|
||||||
|
|
||||||
raise RuntimeError(f'Could not locate XSLT template for DMI data ({fname})')
|
|
||||||
|
|
||||||
def MakeReport(self):
|
|
||||||
+ """ Add DMI information to final report """
|
|
||||||
rep_n = libxml2.newNode("DMIinfo")
|
|
||||||
rep_n.newProp("version", self.__version)
|
|
||||||
if self.__fake:
|
|
||||||
@@ -113,7 +115,7 @@ class DMIinfo:
|
|
||||||
return rep_n
|
|
||||||
|
|
||||||
def unit_test(rootdir):
|
|
||||||
- """ unit_test for dmi.py, looks a little crufty! """
|
|
||||||
+ """ unit_test for dmi.py """
|
|
||||||
|
|
||||||
class UnittestConfigDummy:
|
|
||||||
def __init__(self, rootdir):
|
|
||||||
@@ -132,15 +134,14 @@ def unit_test(rootdir):
|
|
||||||
|
|
||||||
log = Log()
|
|
||||||
log.SetLogVerbosity(Log.DEBUG|Log.INFO)
|
|
||||||
- cfg = UnittestConfigDummy(rootdir)
|
|
||||||
- d = DMIinfo(cfg, log)
|
|
||||||
+ d = DMIinfo(log)
|
|
||||||
dx = d.MakeReport()
|
|
||||||
x = libxml2.newDoc("1.0")
|
|
||||||
x.setRootElement(dx)
|
|
||||||
x.saveFormatFileEnc("-", "UTF-8", 1)
|
|
||||||
return 0
|
|
||||||
except Exception as e:
|
|
||||||
- print("** EXCEPTION: %s" % str(e))
|
|
||||||
+ print(f"** EXCEPTION: {str(e)}")
|
|
||||||
return 1
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
--
|
|
||||||
2.37.3
|
|
||||||
|
|
@ -1,32 +0,0 @@
|
|||||||
From 33cd1f747596541dc947e14f3dd25ff7960b7443 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
Date: Wed, 26 Jul 2023 10:22:12 +0200
|
|
||||||
Subject: [PATCH] rteval: Add missing docstrings in SysTopology
|
|
||||||
|
|
||||||
Add docstrings for isolated_cpus_str and default_cpus_str.
|
|
||||||
|
|
||||||
Signed-off-by: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/systopology.py | 2 ++
|
|
||||||
1 file changed, 2 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/rteval/systopology.py b/rteval/systopology.py
|
|
||||||
index 19443f9..a991e70 100644
|
|
||||||
--- a/rteval/systopology.py
|
|
||||||
+++ b/rteval/systopology.py
|
|
||||||
@@ -407,10 +407,12 @@ class SysTopology:
|
|
||||||
return cpulist
|
|
||||||
|
|
||||||
def isolated_cpus_str(self):
|
|
||||||
+ """ return a list of strings of numbers of all isolated cpus """
|
|
||||||
cpulist = [str(cpu) for cpu in self.isolated_cpus()]
|
|
||||||
return cpulist
|
|
||||||
|
|
||||||
def default_cpus_str(self):
|
|
||||||
+ """ return a list of strings of numbers of all default schedulable cpus """
|
|
||||||
cpulist = [str(cpu) for cpu in self.default_cpus()]
|
|
||||||
return cpulist
|
|
||||||
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,54 +0,0 @@
|
|||||||
From 606bb31cbf967e5e48c10c7e8ea8bab0685eb410 Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Thu, 2 Feb 2023 00:47:31 -0500
|
|
||||||
Subject: [PATCH] rteval: Catch failures in python-dmidecode
|
|
||||||
|
|
||||||
python-dmidecode can generate incorrect xml,
|
|
||||||
namely Attribute unit redefined
|
|
||||||
|
|
||||||
Although useful, the dmidecode is not critical to rteval reporting.
|
|
||||||
|
|
||||||
Therefore catch this, and first see if we can at least query the bios.
|
|
||||||
If that works report the bios instead off all, and if that
|
|
||||||
doesn't work, just continue without the dmidecode report.
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/sysinfo/dmi.py | 14 +++++++++++++-
|
|
||||||
1 file changed, 13 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/sysinfo/dmi.py b/rteval/sysinfo/dmi.py
|
|
||||||
index 83f347623b58..89a7faae06b1 100644
|
|
||||||
--- a/rteval/sysinfo/dmi.py
|
|
||||||
+++ b/rteval/sysinfo/dmi.py
|
|
||||||
@@ -79,6 +79,7 @@ class DMIinfo:
|
|
||||||
|
|
||||||
def __init__(self, logger=None):
|
|
||||||
self.__version = '0.6'
|
|
||||||
+ self._log = logger
|
|
||||||
|
|
||||||
if not dmidecode_avail:
|
|
||||||
logger.log(Log.DEBUG, "DMI info unavailable, ignoring DMI tables")
|
|
||||||
@@ -115,7 +116,18 @@ class DMIinfo:
|
|
||||||
rep_n.newProp("not_available", "1")
|
|
||||||
else:
|
|
||||||
self.__dmixml.SetResultType(dmidecode.DMIXML_DOC)
|
|
||||||
- dmiqry = xmlout.convert_libxml2_to_lxml_doc(self.__dmixml.QuerySection('all'))
|
|
||||||
+ try:
|
|
||||||
+ dmiqry = xmlout.convert_libxml2_to_lxml_doc(self.__dmixml.QuerySection('all'))
|
|
||||||
+ except Exception as ex1:
|
|
||||||
+ self._log.log(Log.DEBUG, f'** EXCEPTION {str(ex1)}, will query BIOS only')
|
|
||||||
+ try:
|
|
||||||
+ # If we can't query 'all', at least query 'bios'
|
|
||||||
+ dmiqry = xmlout.convert_libxml2_to_lxml_doc(self.__dmixml.QuerySection('bios'))
|
|
||||||
+ except Exception as ex2:
|
|
||||||
+ rep_n.addContent("No DMI tables available")
|
|
||||||
+ rep_n.newProp("not_available", "1")
|
|
||||||
+ self._log.log(Log.DEBUG, f'** EXCEPTION {str(ex2)}, dmi info will not be reported')
|
|
||||||
+ return rep_n
|
|
||||||
resdoc = self.__xsltparser(dmiqry)
|
|
||||||
dmi_n = xmlout.convert_lxml_to_libxml2_nodes(resdoc.getroot())
|
|
||||||
rep_n.addChild(dmi_n)
|
|
||||||
--
|
|
||||||
2.39.0
|
|
||||||
|
|
@ -1,11 +1,9 @@
|
|||||||
From 0f39c69610985b07ce2aa41142d2f0481da8e3a4 Mon Sep 17 00:00:00 2001
|
From c0ee73f00f6868e0ead5ace958a88a6a23db6ad3 Mon Sep 17 00:00:00 2001
|
||||||
From: John Kacur <jkacur@redhat.com>
|
From: John Kacur <jkacur@redhat.com>
|
||||||
Date: Fri, 3 Feb 2023 16:13:09 -0500
|
Date: Thu, 9 Nov 2023 15:43:53 -0500
|
||||||
Subject: [PATCH 8/8] rteval: Change the default kernel to compile to
|
Subject: [PATCH] rteval: Change the default kernel for kcompile to linux-6.6.1
|
||||||
linux-6.1.8
|
|
||||||
|
|
||||||
rteval compiles the linux kernel as a load
|
Change the default kernel for kcompile to linux-6.6.1
|
||||||
Change the default kernel that rteval compiles to linux-6.1.8
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
Signed-off-by: John Kacur <jkacur@redhat.com>
|
||||||
---
|
---
|
||||||
@ -15,53 +13,53 @@ Signed-off-by: John Kacur <jkacur@redhat.com>
|
|||||||
3 files changed, 4 insertions(+), 4 deletions(-)
|
3 files changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
diff --git a/Makefile b/Makefile
|
diff --git a/Makefile b/Makefile
|
||||||
index ffea8a05f460..81ca8242bbbe 100644
|
index b73e8c13f3e5..14f74e087eff 100644
|
||||||
--- a/Makefile
|
--- a/Makefile
|
||||||
+++ b/Makefile
|
+++ b/Makefile
|
||||||
@@ -17,7 +17,7 @@ PREFIX := /usr
|
@@ -18,7 +18,7 @@ PREFIX := /usr
|
||||||
DATADIR := $(DESTDIR)/$(PREFIX)/share
|
DATADIR := $(DESTDIR)/$(PREFIX)/share
|
||||||
LOADDIR := loadsource
|
LOADDIR := loadsource
|
||||||
|
|
||||||
-KLOAD := $(LOADDIR)/linux-5.18.1.tar.xz
|
-KLOAD := $(LOADDIR)/linux-6.1.8.tar.xz
|
||||||
+KLOAD := $(LOADDIR)/linux-6.1.8.tar.xz
|
+KLOAD := $(LOADDIR)/linux-6.6.1.tar.xz
|
||||||
BLOAD := $(LOADDIR)/dbench-4.0.tar.gz
|
BLOAD := $(LOADDIR)/dbench-4.0.tar.gz
|
||||||
LOADS := $(KLOAD) $(BLOAD)
|
LOADS := $(KLOAD) $(BLOAD)
|
||||||
|
|
||||||
diff --git a/rteval/modules/loads/kcompile.py b/rteval/modules/loads/kcompile.py
|
diff --git a/rteval/modules/loads/kcompile.py b/rteval/modules/loads/kcompile.py
|
||||||
index 6faa686f81d0..35ee5cbbb52d 100644
|
index 8be79ce630d5..0d025771e90e 100644
|
||||||
--- a/rteval/modules/loads/kcompile.py
|
--- a/rteval/modules/loads/kcompile.py
|
||||||
+++ b/rteval/modules/loads/kcompile.py
|
+++ b/rteval/modules/loads/kcompile.py
|
||||||
@@ -38,7 +38,7 @@ from rteval.systopology import CpuList, SysTopology
|
@@ -20,7 +20,7 @@ expand_cpulist = CpuList.expand_cpulist
|
||||||
expand_cpulist = CpuList.expand_cpulist
|
|
||||||
compress_cpulist = CpuList.compress_cpulist
|
compress_cpulist = CpuList.compress_cpulist
|
||||||
|
nonisolated_cpulist = CpuList.nonisolated_cpulist
|
||||||
|
|
||||||
-DEFAULT_KERNEL_PREFIX = "linux-5.18"
|
-DEFAULT_KERNEL_PREFIX = "linux-6.1"
|
||||||
+DEFAULT_KERNEL_PREFIX = "linux-6.1"
|
+DEFAULT_KERNEL_PREFIX = "linux-6.6"
|
||||||
|
|
||||||
class KBuildJob:
|
class KBuildJob:
|
||||||
'''Class to manage a build job bound to a particular node'''
|
'''Class to manage a build job bound to a particular node'''
|
||||||
@@ -349,7 +349,7 @@ class Kcompile(CommandLineLoad):
|
@@ -334,7 +334,7 @@ class Kcompile(CommandLineLoad):
|
||||||
|
|
||||||
def ModuleParameters():
|
def ModuleParameters():
|
||||||
return {"source": {"descr": "Source tar ball",
|
return {"source": {"descr": "Source tar ball",
|
||||||
- "default": "linux-5.18.1.tar.xz",
|
- "default": "linux-6.1.8.tar.xz",
|
||||||
+ "default": "linux-6.1.8.tar.xz",
|
+ "default": "linux-6.6.1.tar.xz",
|
||||||
"metavar": "TARBALL"},
|
"metavar": "TARBALL"},
|
||||||
"jobspercore": {"descr": "Number of working threads per core",
|
"jobspercore": {"descr": "Number of working threads per core",
|
||||||
"default": 2,
|
"default": 2,
|
||||||
diff --git a/rteval/rteval.conf b/rteval/rteval.conf
|
diff --git a/rteval/rteval.conf b/rteval/rteval.conf
|
||||||
index 1a8d0afd2642..79e28032dc6b 100644
|
index 79e28032dc6b..a4aad33e264f 100644
|
||||||
--- a/rteval/rteval.conf
|
--- a/rteval/rteval.conf
|
||||||
+++ b/rteval/rteval.conf
|
+++ b/rteval/rteval.conf
|
||||||
@@ -18,7 +18,7 @@ dbench: external
|
@@ -18,7 +18,7 @@ dbench: external
|
||||||
stressng: module
|
stressng: module
|
||||||
|
|
||||||
[kcompile]
|
[kcompile]
|
||||||
-source: linux-5.18.1.xz
|
-source: linux-6.1.8.xz
|
||||||
+source: linux-6.1.8.xz
|
+source: linux-6.6.1.xz
|
||||||
jobspercore: 2
|
jobspercore: 2
|
||||||
|
|
||||||
[hackbench]
|
[hackbench]
|
||||||
--
|
--
|
||||||
2.39.0
|
2.41.0
|
||||||
|
|
@ -1,303 +0,0 @@
|
|||||||
From 9a0b29ceea0ec231208209f3ddcf929c0cf39d3b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Date: Fri, 23 Jun 2023 13:50:48 -0400
|
|
||||||
Subject: [PATCH] rteval: Changed files to use argparse library instead of
|
|
||||||
optparse
|
|
||||||
|
|
||||||
Replaced optparse.OptionParser() with argparse.ArgumentParser() and optparse.add_options() with argparse.add_arguments().
|
|
||||||
Added/changed code to assign the cmd_opts and cmd_args variables in rteval-cmd correctly to get the -Z/--summarize and
|
|
||||||
-H/--raw-histogram working correctly.
|
|
||||||
Note: the rteval/server files haven't been tested since server is
|
|
||||||
disabled.
|
|
||||||
|
|
||||||
Signed-off-by: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval-cmd | 88 ++++++++++++++++++++++---------------
|
|
||||||
rteval/modules/__init__.py | 12 +++--
|
|
||||||
rteval/rtevalConfig.py | 4 +-
|
|
||||||
server/rteval_testserver.py | 11 ++---
|
|
||||||
server/unittest.py | 8 ++--
|
|
||||||
5 files changed, 70 insertions(+), 53 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval-cmd b/rteval-cmd
|
|
||||||
index 1e6a7fc86baa..70996acce626 100755
|
|
||||||
--- a/rteval-cmd
|
|
||||||
+++ b/rteval-cmd
|
|
||||||
@@ -40,7 +40,7 @@ import os
|
|
||||||
import time
|
|
||||||
import re
|
|
||||||
import shutil
|
|
||||||
-import optparse
|
|
||||||
+import argparse
|
|
||||||
import tempfile
|
|
||||||
import requests
|
|
||||||
import lxml.etree
|
|
||||||
@@ -115,66 +115,84 @@ def parse_options(cfg, parser, cmdargs):
|
|
||||||
# thus they are prefixed with 'rteval___'.
|
|
||||||
# See rteval/rtevalConfig::UpdateFromOptionParser() method for more info
|
|
||||||
#
|
|
||||||
- parser.add_option("-d", "--duration", dest="rteval___duration",
|
|
||||||
- type="string", default=rtevcfg.duration, metavar="DURATION",
|
|
||||||
- help="specify length of test run (default: %default)")
|
|
||||||
- parser.add_option("-v", "--verbose", dest="rteval___verbose",
|
|
||||||
+ parser.add_argument("-d", "--duration", dest="rteval___duration",
|
|
||||||
+ type=str, default=rtevcfg.duration, metavar="DURATION",
|
|
||||||
+ help=f"specify length of test run (default: {rtevcfg.duration})")
|
|
||||||
+ parser.add_argument("-v", "--verbose", dest="rteval___verbose",
|
|
||||||
action="store_true", default=rtevcfg.verbose,
|
|
||||||
- help="turn on verbose prints (default: %default)")
|
|
||||||
- parser.add_option("-q", "--quiet", dest="rteval___quiet",
|
|
||||||
+ help=f"turn on verbose prints (default: {rtevcfg.verbose})")
|
|
||||||
+ parser.add_argument("-q", "--quiet", dest="rteval___quiet",
|
|
||||||
action="store_true", default=rtevcfg.quiet,
|
|
||||||
- help="turn on quiet mode (default: %default)")
|
|
||||||
- parser.add_option("-w", "--workdir", dest="rteval___workdir",
|
|
||||||
- type="string", default=rtevcfg.workdir, metavar="DIRECTORY",
|
|
||||||
- help="top directory for rteval data (default: %default)")
|
|
||||||
- parser.add_option("-l", "--loaddir", dest="rteval___srcdir",
|
|
||||||
- type="string", default=rtevcfg.srcdir, metavar="DIRECTORY",
|
|
||||||
- help="directory for load source tarballs (default: %default)")
|
|
||||||
- parser.add_option("-i", "--installdir", dest="rteval___installdir",
|
|
||||||
- type="string", default=rtevcfg.installdir, metavar="DIRECTORY",
|
|
||||||
- help="place to locate installed templates (default: %default)")
|
|
||||||
- parser.add_option("-s", "--sysreport", dest="rteval___sysreport",
|
|
||||||
+ help=f"turn on quiet mode (default: {rtevcfg.quiet})")
|
|
||||||
+ parser.add_argument("-w", "--workdir", dest="rteval___workdir",
|
|
||||||
+ type=str, default=rtevcfg.workdir, metavar="DIRECTORY",
|
|
||||||
+ help=f"top directory for rteval data (default: {rtevcfg.workdir})")
|
|
||||||
+ parser.add_argument("-l", "--loaddir", dest="rteval___srcdir",
|
|
||||||
+ type=str, default=rtevcfg.srcdir, metavar="DIRECTORY",
|
|
||||||
+ help=f"directory for load source tarballs (default: {rtevcfg.srcdir})")
|
|
||||||
+ parser.add_argument("-i", "--installdir", dest="rteval___installdir",
|
|
||||||
+ type=str, default=rtevcfg.installdir, metavar="DIRECTORY",
|
|
||||||
+ help=f"place to locate installed templates (default: {rtevcfg.installdir})")
|
|
||||||
+ parser.add_argument("-s", "--sysreport", dest="rteval___sysreport",
|
|
||||||
action="store_true", default=rtevcfg.sysreport,
|
|
||||||
- help='run sysreport to collect system data (default: %default)')
|
|
||||||
- parser.add_option("-D", '--debug', dest='rteval___debugging',
|
|
||||||
+ help=f'run sysreport to collect system data (default: {rtevcfg.sysreport})')
|
|
||||||
+ parser.add_argument("-D", '--debug', dest='rteval___debugging',
|
|
||||||
action='store_true', default=rtevcfg.debugging,
|
|
||||||
- help='turn on debug prints (default: %default)')
|
|
||||||
+ help=f'turn on debug prints (default: {rtevcfg.debugging})')
|
|
||||||
#parser.add_option("-X", '--xmlrpc-submit', dest='rteval___xmlrpc',
|
|
||||||
# action='store', default=rtevcfg.xmlrpc, metavar='HOST',
|
|
||||||
# help='Hostname to XML-RPC server to submit reports')
|
|
||||||
#parser.add_option("-P", "--xmlrpc-no-abort", dest="rteval___xmlrpc_noabort",
|
|
||||||
# action='store_true', default=False,
|
|
||||||
# help="Do not abort if XML-RPC server do not respond to ping request");
|
|
||||||
- parser.add_option("-Z", '--summarize', dest='rteval___summarize',
|
|
||||||
+ parser.add_argument("-Z", '--summarize', dest='rteval___summarize',
|
|
||||||
action='store_true', default=False,
|
|
||||||
help='summarize an already existing XML report')
|
|
||||||
- parser.add_option("-H", '--raw-histogram', dest='rteval___rawhistogram',
|
|
||||||
+ parser.add_argument("-H", '--raw-histogram', dest='rteval___rawhistogram',
|
|
||||||
action='store_true', default=False,
|
|
||||||
help='Generate raw histogram data for an already existing XML report')
|
|
||||||
- parser.add_option("-f", "--inifile", dest="rteval___inifile",
|
|
||||||
- type='string', default=None, metavar="FILE",
|
|
||||||
+ parser.add_argument("-f", "--inifile", dest="rteval___inifile",
|
|
||||||
+ type=str, default=None, metavar="FILE",
|
|
||||||
help="initialization file for configuring loads and behavior")
|
|
||||||
- parser.add_option("-a", "--annotate", dest="rteval___annotate",
|
|
||||||
- type="string", default=None, metavar="STRING",
|
|
||||||
+ parser.add_argument("-a", "--annotate", dest="rteval___annotate",
|
|
||||||
+ type=str, default=None, metavar="STRING",
|
|
||||||
help="Add a little annotation which is stored in the report")
|
|
||||||
- parser.add_option("-L", "--logging", dest="rteval___logging",
|
|
||||||
+ parser.add_argument("-L", "--logging", dest="rteval___logging",
|
|
||||||
action='store_true', default=False,
|
|
||||||
help='log the output of the loads in the report directory')
|
|
||||||
- parser.add_option("-O", "--onlyload", dest="rteval___onlyload",
|
|
||||||
+ parser.add_argument("-O", "--onlyload", dest="rteval___onlyload",
|
|
||||||
action='store_true', default=False,
|
|
||||||
help="only run the loads (don't run measurement threads)")
|
|
||||||
- parser.add_option("-V", "--version", dest="rteval___version",
|
|
||||||
+ parser.add_argument("-V", "--version", dest="rteval___version",
|
|
||||||
action='store_true', default=False,
|
|
||||||
help='print rteval version and exit')
|
|
||||||
- parser.add_option("-S", "--source-download", dest="rteval___srcdownload",
|
|
||||||
- type="string", default=None, metavar="KERNEL_VERSION",
|
|
||||||
+ parser.add_argument("-S", "--source-download", dest="rteval___srcdownload",
|
|
||||||
+ type=str, default=None, metavar="KERNEL_VERSION",
|
|
||||||
help='download a source kernel from kernel.org and exit')
|
|
||||||
|
|
||||||
|
|
||||||
if not cmdargs:
|
|
||||||
cmdargs = ["--help"]
|
|
||||||
|
|
||||||
- (cmd_opts, cmd_args) = parser.parse_args(args=cmdargs)
|
|
||||||
+ # if -Z/--summarize is specified, add the files to be summarized to cmd_args, and add -Z to cmd_opts
|
|
||||||
+ cmd_args = []
|
|
||||||
+ if (sys.argv.count('-Z')+sys.argv.count('--summarize')) > 0:
|
|
||||||
+ try:
|
|
||||||
+ ind = cmdargs.index('-Z')
|
|
||||||
+ except ValueError:
|
|
||||||
+ ind = cmdargs.index('--summarize')
|
|
||||||
+ cmd_args = cmdargs[ind+1:]
|
|
||||||
+ cmdargs = cmdargs[:ind+1]
|
|
||||||
+ # if -H/--raw-histogram is specified, add the files to be summarized to cmd_args, and add -Z to cmd_opts
|
|
||||||
+ elif (sys.argv.count('-H')+sys.argv.count('--raw-histogram')) > 0:
|
|
||||||
+ try:
|
|
||||||
+ ind = cmdargs.index('-H')
|
|
||||||
+ except ValueError:
|
|
||||||
+ ind = cmdargs.index('--raw-histogram')
|
|
||||||
+ cmd_args = cmdargs[ind+1:]
|
|
||||||
+ cmdargs = cmdargs[:ind+1]
|
|
||||||
+ cmd_opts = parser.parse_args(args=cmdargs)
|
|
||||||
+
|
|
||||||
if cmd_opts.rteval___version:
|
|
||||||
print(f"rteval version {RTEVAL_VERSION}")
|
|
||||||
sys.exit(0)
|
|
||||||
@@ -196,7 +214,7 @@ def parse_options(cfg, parser, cmdargs):
|
|
||||||
cmd_opts.rteval___duration = float(v) * mult
|
|
||||||
|
|
||||||
# Update the config object with the parsed arguments
|
|
||||||
- cfg.UpdateFromOptionParser(parser)
|
|
||||||
+ cfg.UpdateFromOptionParser(cmd_opts)
|
|
||||||
|
|
||||||
return cmd_args
|
|
||||||
|
|
||||||
@@ -266,7 +284,7 @@ if __name__ == '__main__':
|
|
||||||
measuremods = MeasurementModules(config, logger=logger)
|
|
||||||
|
|
||||||
# parse command line options
|
|
||||||
- parser = optparse.OptionParser()
|
|
||||||
+ parser = argparse.ArgumentParser()
|
|
||||||
loadmods.SetupModuleOptions(parser)
|
|
||||||
measuremods.SetupModuleOptions(parser)
|
|
||||||
cmd_args = parse_options(config, parser, sys.argv[1:])
|
|
||||||
diff --git a/rteval/modules/__init__.py b/rteval/modules/__init__.py
|
|
||||||
index d52dd597186a..253e72abf8aa 100644
|
|
||||||
--- a/rteval/modules/__init__.py
|
|
||||||
+++ b/rteval/modules/__init__.py
|
|
||||||
@@ -25,7 +25,7 @@
|
|
||||||
import time
|
|
||||||
from datetime import datetime
|
|
||||||
import threading
|
|
||||||
-import optparse
|
|
||||||
+import argparse
|
|
||||||
import libxml2
|
|
||||||
from rteval.Log import Log
|
|
||||||
from rteval.rtevalConfig import rtevalCfgSection
|
|
||||||
@@ -294,12 +294,11 @@ the information provided by the module"""
|
|
||||||
def SetupModuleOptions(self, parser, config):
|
|
||||||
"""Sets up a separate optptarse OptionGroup per module with its supported parameters"""
|
|
||||||
|
|
||||||
- grparser = optparse.OptionGroup(parser, "Group Options for %s modules" % self.__modtype)
|
|
||||||
- grparser.add_option('--%s-cpulist' % self.__modtype,
|
|
||||||
+ grparser = parser.add_argument_group("Group Options for %s modules" % self.__modtype)
|
|
||||||
+ grparser.add_argument('--%s-cpulist' % self.__modtype,
|
|
||||||
dest='%s___cpulist' % self.__modtype, action='store', default="",
|
|
||||||
help='CPU list where %s modules will run' % self.__modtype,
|
|
||||||
metavar='LIST')
|
|
||||||
- parser.add_option_group(grparser)
|
|
||||||
|
|
||||||
for (modname, mod) in list(self.__modsloaded.items()):
|
|
||||||
opts = mod.ModuleParameters()
|
|
||||||
@@ -313,7 +312,7 @@ the information provided by the module"""
|
|
||||||
# Ignore if a section is not found
|
|
||||||
cfg = None
|
|
||||||
|
|
||||||
- grparser = optparse.OptionGroup(parser, "Options for the %s module" % shortmod)
|
|
||||||
+ grparser = parser.add_argument_group("Options for the %s module" % shortmod)
|
|
||||||
for (o, s) in list(opts.items()):
|
|
||||||
descr = 'descr' in s and s['descr'] or ""
|
|
||||||
metavar = 'metavar' in s and s['metavar'] or None
|
|
||||||
@@ -328,14 +327,13 @@ the information provided by the module"""
|
|
||||||
default = 'default' in s and s['default'] or None
|
|
||||||
|
|
||||||
|
|
||||||
- grparser.add_option('--%s-%s' % (shortmod, o),
|
|
||||||
+ grparser.add_argument('--%s-%s' % (shortmod, o),
|
|
||||||
dest="%s___%s" % (shortmod, o),
|
|
||||||
action='store',
|
|
||||||
help='%s%s' % (descr,
|
|
||||||
default and ' (default: %s)' % default or ''),
|
|
||||||
default=default,
|
|
||||||
metavar=metavar)
|
|
||||||
- parser.add_option_group(grparser)
|
|
||||||
|
|
||||||
|
|
||||||
def InstantiateModule(self, modname, modcfg, modroot=None):
|
|
||||||
diff --git a/rteval/rtevalConfig.py b/rteval/rtevalConfig.py
|
|
||||||
index 41f1a567720f..ec14a13adcd9 100644
|
|
||||||
--- a/rteval/rtevalConfig.py
|
|
||||||
+++ b/rteval/rtevalConfig.py
|
|
||||||
@@ -286,11 +286,11 @@ class rtevalConfig:
|
|
||||||
return self.__config_files.__contains__(fname)
|
|
||||||
|
|
||||||
|
|
||||||
- def UpdateFromOptionParser(self, parser):
|
|
||||||
+ def UpdateFromOptionParser(self, cmd_opts):
|
|
||||||
"Parse through the command line options and update the appropriate config settings"
|
|
||||||
|
|
||||||
last_sect = None
|
|
||||||
- for sk, v in sorted(vars(parser.values).items()):
|
|
||||||
+ for sk, v in sorted(vars(cmd_opts).items()):
|
|
||||||
# optparse key template: {sectionname}___{key}
|
|
||||||
k = sk.split('___')
|
|
||||||
if k[0] != last_sect:
|
|
||||||
diff --git a/server/rteval_testserver.py b/server/rteval_testserver.py
|
|
||||||
index 3f0c3c73733c..6cac85bcfe52 100644
|
|
||||||
--- a/server/rteval_testserver.py
|
|
||||||
+++ b/server/rteval_testserver.py
|
|
||||||
@@ -31,6 +31,7 @@ import signal
|
|
||||||
from xmlrpc.server import SimpleXMLRPCServer
|
|
||||||
from xmlrpc.server import SimpleXMLRPCRequestHandler
|
|
||||||
from optparse import OptionParser
|
|
||||||
+import argparse
|
|
||||||
|
|
||||||
import xmlrpc_API1
|
|
||||||
from Logger import Logger
|
|
||||||
@@ -110,16 +111,16 @@ rtevalserver = None
|
|
||||||
#
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
- parser = OptionParser(version="%prog v0.1")
|
|
||||||
+ parser = argparse.ArgumentParser(version="%prog v0.1")
|
|
||||||
|
|
||||||
- parser.add_option("-L", "--listen", action="store", dest="listen", default=LISTEN,
|
|
||||||
+ parser.add_argument("-L", "--listen", action="store", dest="listen", default=LISTEN,
|
|
||||||
help="Which interface to listen to [default: %default]", metavar="IPADDR")
|
|
||||||
- parser.add_option("-P", "--port", action="store", type="int", dest="port", default=PORT,
|
|
||||||
+ parser.add_argument("-P", "--port", action="store", type="int", dest="port", default=PORT,
|
|
||||||
help="Which port to listen to [default: %default]", metavar="PORT")
|
|
||||||
- parser.add_option("-l", "--log", action="store", dest="logfile", default=None,
|
|
||||||
+ parser.add_argument("-l", "--log", action="store", dest="logfile", default=None,
|
|
||||||
help="Where to log requests.", metavar="FILE")
|
|
||||||
|
|
||||||
- (options, args) = parser.parse_args()
|
|
||||||
+ options = parser.parse_args()
|
|
||||||
|
|
||||||
logger = Logger(options.logfile, "RTeval")
|
|
||||||
rtevalserver = RTevald(options, logger)
|
|
||||||
diff --git a/server/unittest.py b/server/unittest.py
|
|
||||||
index 4d53f46590ce..7dcdef08c098 100644
|
|
||||||
--- a/server/unittest.py
|
|
||||||
+++ b/server/unittest.py
|
|
||||||
@@ -1,5 +1,5 @@
|
|
||||||
import sys, threading, time, signal, libxml2
|
|
||||||
-from optparse import OptionParser
|
|
||||||
+import argparse
|
|
||||||
from rteval_testserver import RTevald
|
|
||||||
from Logger import Logger
|
|
||||||
|
|
||||||
@@ -14,10 +14,10 @@ class ServerThread(threading.Thread):
|
|
||||||
self.port = port
|
|
||||||
self.log = Logger('unit-test-server.log','rteval-xmlrpc-testsrv')
|
|
||||||
|
|
||||||
- parser = OptionParser()
|
|
||||||
- parser.add_option("-L", "--listen", action="store", dest="listen", default="127.0.0.1",
|
|
||||||
+ parser = argparse.ArgumentParser()
|
|
||||||
+ parser.add_argument("-L", "--listen", action="store", dest="listen", default="127.0.0.1",
|
|
||||||
help="Which interface to listen to [default: %default]", metavar="IPADDR")
|
|
||||||
- parser.add_option("-P", "--port", action="store", type="int", dest="port", default=self.port,
|
|
||||||
+ parser.add_argument("-P", "--port", action="store", type="int", dest="port", default=self.port,
|
|
||||||
help="Which port to listen to [default: %default]", metavar="PORT")
|
|
||||||
|
|
||||||
(options, args) = parser.parse_args()
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,98 +0,0 @@
|
|||||||
From 3206001ad1b42cf6fb97c7848f438d2bdbe843bc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
Date: Fri, 30 Jun 2023 11:19:02 +0200
|
|
||||||
Subject: [PATCH] rteval: Detect isolcpus in systopology
|
|
||||||
|
|
||||||
Works similarly to online_cpus:
|
|
||||||
- add CpuList.isolated_cpulist to filter isolated CPUs
|
|
||||||
- add SysTopology.isolated_cpus to get list of isolated CPUs
|
|
||||||
- add CpuList.nonisolated_cpulist to do the opposite filter
|
|
||||||
- add SysTopology.default_cpus to get CPUs that are used for scheduling
|
|
||||||
by default, i.e. online and non-isolated CPUs
|
|
||||||
|
|
||||||
Signed-off-by: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/systopology.py | 47 +++++++++++++++++++++++++++++++++++++++++++
|
|
||||||
1 file changed, 47 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/rteval/systopology.py b/rteval/systopology.py
|
|
||||||
index c8f85c5..19443f9 100644
|
|
||||||
--- a/rteval/systopology.py
|
|
||||||
+++ b/rteval/systopology.py
|
|
||||||
@@ -127,6 +127,11 @@ class CpuList:
|
|
||||||
return True
|
|
||||||
return False
|
|
||||||
|
|
||||||
+ @staticmethod
|
|
||||||
+ def isolated_file_exists():
|
|
||||||
+ """ Check whether machine / kernel is configured with isolated file """
|
|
||||||
+ return os.path.exists(os.path.join(CpuList.cpupath, "isolated"))
|
|
||||||
+
|
|
||||||
@staticmethod
|
|
||||||
def longest_sequence(cpulist):
|
|
||||||
""" return index of last element of a sequence that steps by one """
|
|
||||||
@@ -214,6 +219,24 @@ class CpuList:
|
|
||||||
newlist.append(cpu)
|
|
||||||
return newlist
|
|
||||||
|
|
||||||
+ @staticmethod
|
|
||||||
+ def isolated_cpulist(cpulist):
|
|
||||||
+ """Given a cpulist, return a cpulist of isolated CPUs"""
|
|
||||||
+ if not CpuList.isolated_file_exists():
|
|
||||||
+ return cpulist
|
|
||||||
+ isolated_cpulist = sysread(CpuList.cpupath, "isolated")
|
|
||||||
+ isolated_cpulist = CpuList.expand_cpulist(isolated_cpulist)
|
|
||||||
+ return list(set(isolated_cpulist) & set(cpulist))
|
|
||||||
+
|
|
||||||
+ @staticmethod
|
|
||||||
+ def nonisolated_cpulist(cpulist):
|
|
||||||
+ """Given a cpulist, return a cpulist of non-isolated CPUs"""
|
|
||||||
+ if not CpuList.isolated_file_exists():
|
|
||||||
+ return cpulist
|
|
||||||
+ isolated_cpulist = sysread(CpuList.cpupath, "isolated")
|
|
||||||
+ isolated_cpulist = CpuList.expand_cpulist(isolated_cpulist)
|
|
||||||
+ return list(set(cpulist).difference(set(isolated_cpulist)))
|
|
||||||
+
|
|
||||||
#
|
|
||||||
# class to abstract access to NUMA nodes in /sys filesystem
|
|
||||||
#
|
|
||||||
@@ -362,11 +385,35 @@ class SysTopology:
|
|
||||||
cpulist.sort()
|
|
||||||
return cpulist
|
|
||||||
|
|
||||||
+ def isolated_cpus(self):
|
|
||||||
+ """ return a list of integers of all isolated cpus """
|
|
||||||
+ cpulist = []
|
|
||||||
+ for n in self.nodes:
|
|
||||||
+ cpulist += CpuList.isolated_cpulist(self.getcpus(n))
|
|
||||||
+ cpulist.sort()
|
|
||||||
+ return cpulist
|
|
||||||
+
|
|
||||||
+ def default_cpus(self):
|
|
||||||
+ """ return a list of integers of all default schedulable cpus, i.e. online non-isolated cpus """
|
|
||||||
+ cpulist = []
|
|
||||||
+ for n in self.nodes:
|
|
||||||
+ cpulist += CpuList.nonisolated_cpulist(self.getcpus(n))
|
|
||||||
+ cpulist.sort()
|
|
||||||
+ return cpulist
|
|
||||||
+
|
|
||||||
def online_cpus_str(self):
|
|
||||||
""" return a list of strings of numbers of all online cpus """
|
|
||||||
cpulist = [str(cpu) for cpu in self.online_cpus()]
|
|
||||||
return cpulist
|
|
||||||
|
|
||||||
+ def isolated_cpus_str(self):
|
|
||||||
+ cpulist = [str(cpu) for cpu in self.isolated_cpus()]
|
|
||||||
+ return cpulist
|
|
||||||
+
|
|
||||||
+ def default_cpus_str(self):
|
|
||||||
+ cpulist = [str(cpu) for cpu in self.default_cpus()]
|
|
||||||
+ return cpulist
|
|
||||||
+
|
|
||||||
def invert_cpulist(self, cpulist):
|
|
||||||
""" return a list of online cpus not in cpulist """
|
|
||||||
return [c for c in self.online_cpus() if c not in cpulist]
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,169 +0,0 @@
|
|||||||
From bce23ecc5d8bb6cab86843f7a42164ee44ef091f Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Thu, 27 Oct 2022 11:14:27 -0400
|
|
||||||
Subject: [PATCH 3/3] rteval: Don't attempt to get DMIinfo if there are dmi
|
|
||||||
warnings
|
|
||||||
|
|
||||||
If the python module dmidecode is available, but produces warnings,
|
|
||||||
you can get a traceback. This happens on some arm boxes,
|
|
||||||
as shown in the traceback below.
|
|
||||||
|
|
||||||
Fix this by treating any warnings that are not listed in the
|
|
||||||
ignorable warnings as if dmi info is not available.
|
|
||||||
|
|
||||||
Also add logging to dmi.ProcessWarnings()
|
|
||||||
|
|
||||||
./rteval-cmd -d10s
|
|
||||||
** DMI WARNING ** /sys/firmware/efi/systab: SMBIOS entry point missing
|
|
||||||
got system topology: 1 node system (4 cores per node)
|
|
||||||
rteval run on 5.19.16-200.fc36.aarch64 started at Fri Oct 21 16:11:51 2022
|
|
||||||
started 3 loads on 4 cores
|
|
||||||
started measurement threads on 4 cores
|
|
||||||
Run duration: 10.0 seconds
|
|
||||||
stopping run at Fri Oct 21 16:13:26 2022
|
|
||||||
Traceback (most recent call last):
|
|
||||||
File "/root/src/rteval/./rteval-cmd", line 402, in <module>
|
|
||||||
ec = rteval.Measure()
|
|
||||||
File "/root/src/rteval/rteval/__init__.py", line 286, in Measure
|
|
||||||
self._report(measure_start, self.__rtevcfg.xslt_report)
|
|
||||||
File "/root/src/rteval/rteval/rtevalReport.py", line 76, in _report
|
|
||||||
self.__xmlreport.AppendXMLnodes(self._sysinfo.MakeReport())
|
|
||||||
File "/root/src/rteval/rteval/sysinfo/__init__.py", line 69, in MakeReport
|
|
||||||
report_n.addChild(dmi.DMIinfo.MakeReport(self))
|
|
||||||
File "/root/src/rteval/rteval/sysinfo/dmi.py", line 111, in MakeReport
|
|
||||||
dmiqry = xmlout.convert_libxml2_to_lxml_doc(self.__dmixml.QuerySection('all'))
|
|
||||||
File "/usr/lib64/python3.10/site-packages/dmidecode.py", line 64, in QuerySection
|
|
||||||
ret = libxml2.xmlDoc( _obj = xmlapi(query_type='s',
|
|
||||||
RuntimeError: [src/dmidecodemodule.c:331] Error decoding DMI data
|
|
||||||
|
|
||||||
** COLLECTED WARNINGS **
|
|
||||||
/sys/firmware/efi/systab: SMBIOS entry point missing
|
|
||||||
** END OF WARNINGS **
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval-cmd | 4 ++--
|
|
||||||
rteval/sysinfo/__init__.py | 2 +-
|
|
||||||
rteval/sysinfo/dmi.py | 34 +++++++++++++++++++++-------------
|
|
||||||
3 files changed, 24 insertions(+), 16 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval-cmd b/rteval-cmd
|
|
||||||
index 6a928362828f..1e6a7fc86baa 100755
|
|
||||||
--- a/rteval-cmd
|
|
||||||
+++ b/rteval-cmd
|
|
||||||
@@ -210,8 +210,6 @@ def remove_offline(cpulist):
|
|
||||||
if __name__ == '__main__':
|
|
||||||
from rteval.sysinfo import dmi
|
|
||||||
|
|
||||||
- dmi.ProcessWarnings()
|
|
||||||
-
|
|
||||||
# set LD_BIND_NOW to resolve shared library symbols
|
|
||||||
# note: any string will do, nothing significant about 'rteval'
|
|
||||||
|
|
||||||
@@ -261,6 +259,8 @@ if __name__ == '__main__':
|
|
||||||
| (rtevcfg.debugging and Log.DEBUG)
|
|
||||||
logger.SetLogVerbosity(loglev)
|
|
||||||
|
|
||||||
+ dmi.ProcessWarnings(logger=logger)
|
|
||||||
+
|
|
||||||
# Load modules
|
|
||||||
loadmods = LoadModules(config, logger=logger)
|
|
||||||
measuremods = MeasurementModules(config, logger=logger)
|
|
||||||
diff --git a/rteval/sysinfo/__init__.py b/rteval/sysinfo/__init__.py
|
|
||||||
index bb1d00810856..5767e5b7f6fe 100644
|
|
||||||
--- a/rteval/sysinfo/__init__.py
|
|
||||||
+++ b/rteval/sysinfo/__init__.py
|
|
||||||
@@ -49,7 +49,7 @@ class SystemInfo(KernelInfo, SystemServices, dmi.DMIinfo, CPUtopology,
|
|
||||||
NetworkInfo.__init__(self, logger=logger)
|
|
||||||
|
|
||||||
# Parse initial DMI decoding errors
|
|
||||||
- dmi.ProcessWarnings()
|
|
||||||
+ dmi.ProcessWarnings(logger=logger)
|
|
||||||
|
|
||||||
# Parse CPU info
|
|
||||||
CPUtopology._parse(self)
|
|
||||||
diff --git a/rteval/sysinfo/dmi.py b/rteval/sysinfo/dmi.py
|
|
||||||
index 5965c128c093..83f347623b58 100644
|
|
||||||
--- a/rteval/sysinfo/dmi.py
|
|
||||||
+++ b/rteval/sysinfo/dmi.py
|
|
||||||
@@ -1,6 +1,7 @@
|
|
||||||
#
|
|
||||||
# Copyright 2009 - 2013 Clark Williams <williams@redhat.com>
|
|
||||||
# Copyright 2009 - 2013 David Sommerseth <davids@redhat.com>
|
|
||||||
+# Copyright 2022 John Kacur <jkacur@redhat.com>
|
|
||||||
#
|
|
||||||
# This program is free software; you can redistribute it and/or modify
|
|
||||||
# it under the terms of the GNU General Public License as published by
|
|
||||||
@@ -34,14 +35,19 @@ from rteval import rtevalConfig
|
|
||||||
|
|
||||||
try:
|
|
||||||
import dmidecode
|
|
||||||
- dmidecode_loaded = True
|
|
||||||
+ dmidecode_avail = True
|
|
||||||
except ModuleNotFoundError:
|
|
||||||
- dmidecode_loaded = False
|
|
||||||
+ dmidecode_avail = False
|
|
||||||
|
|
||||||
-def ProcessWarnings():
|
|
||||||
+def set_dmidecode_avail(val):
|
|
||||||
+ """ Used to set global variable dmidecode_avail from a function """
|
|
||||||
+ global dmidecode_avail
|
|
||||||
+ dmidecode_avail = val
|
|
||||||
+
|
|
||||||
+def ProcessWarnings(logger=None):
|
|
||||||
""" Process Warnings from dmidecode """
|
|
||||||
|
|
||||||
- if not dmidecode_loaded:
|
|
||||||
+ if not dmidecode_avail:
|
|
||||||
return
|
|
||||||
|
|
||||||
if not hasattr(dmidecode, 'get_warnings'):
|
|
||||||
@@ -62,7 +68,8 @@ def ProcessWarnings():
|
|
||||||
|
|
||||||
# All other warnings will be printed
|
|
||||||
if len(warnline) > 0:
|
|
||||||
- print(f"** DMI WARNING ** {warnline}")
|
|
||||||
+ logger.log(Log.DEBUG, f"** DMI WARNING ** {warnline}")
|
|
||||||
+ set_dmidecode_avail(False)
|
|
||||||
|
|
||||||
dmidecode.clear_warnings()
|
|
||||||
|
|
||||||
@@ -70,11 +77,11 @@ def ProcessWarnings():
|
|
||||||
class DMIinfo:
|
|
||||||
'''class used to obtain DMI info via python-dmidecode'''
|
|
||||||
|
|
||||||
- def __init__(self, logger):
|
|
||||||
- self.__version = '0.5'
|
|
||||||
+ def __init__(self, logger=None):
|
|
||||||
+ self.__version = '0.6'
|
|
||||||
|
|
||||||
- if not dmidecode_loaded:
|
|
||||||
- logger.log(Log.DEBUG|Log.WARN, "No dmidecode module found, ignoring DMI tables")
|
|
||||||
+ if not dmidecode_avail:
|
|
||||||
+ logger.log(Log.DEBUG, "DMI info unavailable, ignoring DMI tables")
|
|
||||||
self.__fake = True
|
|
||||||
return
|
|
||||||
|
|
||||||
@@ -127,14 +134,15 @@ def unit_test(rootdir):
|
|
||||||
self.__dict__[k] = self.config[k]
|
|
||||||
|
|
||||||
try:
|
|
||||||
- ProcessWarnings()
|
|
||||||
+ log = Log()
|
|
||||||
+ log.SetLogVerbosity(Log.DEBUG|Log.INFO)
|
|
||||||
+
|
|
||||||
+ ProcessWarnings(logger=log)
|
|
||||||
if os.getuid() != 0:
|
|
||||||
print("** ERROR ** Must be root to run this unit_test()")
|
|
||||||
return 1
|
|
||||||
|
|
||||||
- log = Log()
|
|
||||||
- log.SetLogVerbosity(Log.DEBUG|Log.INFO)
|
|
||||||
- d = DMIinfo(log)
|
|
||||||
+ d = DMIinfo(logger=log)
|
|
||||||
dx = d.MakeReport()
|
|
||||||
x = libxml2.newDoc("1.0")
|
|
||||||
x.setRootElement(dx)
|
|
||||||
--
|
|
||||||
2.37.3
|
|
||||||
|
|
@ -1,52 +0,0 @@
|
|||||||
From 2db552584b292d8a0d030c5d0e3a0a5cdc8af7cc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
Date: Fri, 30 Jun 2023 11:19:04 +0200
|
|
||||||
Subject: [PATCH] rteval: Exclude isolcpus from kcompile by default
|
|
||||||
|
|
||||||
Allows correct calculation of make job count that does not include
|
|
||||||
isolated CPUs, on which the loads won't be scheduled.
|
|
||||||
|
|
||||||
Signed-off-by: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/modules/loads/kcompile.py | 8 ++++++--
|
|
||||||
1 file changed, 6 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/modules/loads/kcompile.py b/rteval/modules/loads/kcompile.py
|
|
||||||
index 9244246..316791e 100644
|
|
||||||
--- a/rteval/modules/loads/kcompile.py
|
|
||||||
+++ b/rteval/modules/loads/kcompile.py
|
|
||||||
@@ -37,6 +37,7 @@ from rteval.systopology import CpuList, SysTopology
|
|
||||||
|
|
||||||
expand_cpulist = CpuList.expand_cpulist
|
|
||||||
compress_cpulist = CpuList.compress_cpulist
|
|
||||||
+nonisolated_cpulist = CpuList.nonisolated_cpulist
|
|
||||||
|
|
||||||
DEFAULT_KERNEL_PREFIX = "linux-6.1"
|
|
||||||
|
|
||||||
@@ -55,17 +56,20 @@ class KBuildJob:
|
|
||||||
if not os.path.isdir(self.objdir):
|
|
||||||
os.mkdir(self.objdir)
|
|
||||||
|
|
||||||
+ # Exclude isolated CPUs if cpulist not set
|
|
||||||
+ cpus_available = len(nonisolated_cpulist(self.node.cpus.cpulist))
|
|
||||||
+
|
|
||||||
if os.path.exists('/usr/bin/numactl') and not cpulist:
|
|
||||||
# Use numactl
|
|
||||||
self.binder = f'numactl --cpunodebind {int(self.node)}'
|
|
||||||
- self.jobs = self.calc_jobs_per_cpu() * len(self.node)
|
|
||||||
+ self.jobs = self.calc_jobs_per_cpu() * cpus_available
|
|
||||||
elif cpulist:
|
|
||||||
# Use taskset
|
|
||||||
self.jobs = self.calc_jobs_per_cpu() * len(cpulist)
|
|
||||||
self.binder = f'taskset -c {compress_cpulist(cpulist)}'
|
|
||||||
else:
|
|
||||||
# Without numactl calculate number of jobs from the node
|
|
||||||
- self.jobs = self.calc_jobs_per_cpu() * len(self.node)
|
|
||||||
+ self.jobs = self.calc_jobs_per_cpu() * cpus_available
|
|
||||||
|
|
||||||
self.runcmd = f"make O={self.objdir} -C {self.kdir} -j{self.jobs}"
|
|
||||||
self.cleancmd = f"make O={self.objdir} -C {self.kdir} clean allmodconfig"
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
|||||||
From 1afab85c9aa0795af2ce96e1c6a2ccbe3ccec4b5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
Date: Fri, 30 Jun 2023 11:19:07 +0200
|
|
||||||
Subject: [PATCH] rteval: Exclude isolcpus from loads report
|
|
||||||
|
|
||||||
Use SysTopology.default_cpus() to report cores on which measurements and
|
|
||||||
loads and run by default to reflect the default behavior (no isolcpus).
|
|
||||||
|
|
||||||
Signed-off-by: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/modules/loads/__init__.py | 2 +-
|
|
||||||
rteval/modules/measurement/__init__.py | 2 +-
|
|
||||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/modules/loads/__init__.py b/rteval/modules/loads/__init__.py
|
|
||||||
index 761cc8c..74aad58 100644
|
|
||||||
--- a/rteval/modules/loads/__init__.py
|
|
||||||
+++ b/rteval/modules/loads/__init__.py
|
|
||||||
@@ -138,7 +138,7 @@ class LoadModules(RtEvalModules):
|
|
||||||
# Convert str to list and remove offline cpus
|
|
||||||
cpulist = CpuList(cpulist).cpulist
|
|
||||||
else:
|
|
||||||
- cpulist = SysTop().online_cpus()
|
|
||||||
+ cpulist = SysTop().default_cpus()
|
|
||||||
rep_n.newProp("loadcpus", collapse_cpulist(cpulist))
|
|
||||||
|
|
||||||
return rep_n
|
|
||||||
diff --git a/rteval/modules/measurement/__init__.py b/rteval/modules/measurement/__init__.py
|
|
||||||
index d99873e..0e395be 100644
|
|
||||||
--- a/rteval/modules/measurement/__init__.py
|
|
||||||
+++ b/rteval/modules/measurement/__init__.py
|
|
||||||
@@ -194,7 +194,7 @@ measurement profiles, based on their characteristics"""
|
|
||||||
# Convert str to list and remove offline cpus
|
|
||||||
cpulist = CpuList(cpulist).cpulist
|
|
||||||
else:
|
|
||||||
- cpulist = SysTop().online_cpus()
|
|
||||||
+ cpulist = SysTop().default_cpus()
|
|
||||||
rep_n.newProp("measurecpus", collapse_cpulist(cpulist))
|
|
||||||
|
|
||||||
for mp in self.__measureprofiles:
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,41 +0,0 @@
|
|||||||
From 4ee01e7b82e348d57621a87b9862ebdfd81aefe8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
Date: Fri, 30 Jun 2023 11:19:05 +0200
|
|
||||||
Subject: [PATCH] rteval: Exclude isolcpus from stressng by default
|
|
||||||
|
|
||||||
Note: this has little effect now, because the cpus variables is only
|
|
||||||
used for removing empty nodes unless a cpulist is specified by the user.
|
|
||||||
However, this can change in the future.
|
|
||||||
|
|
||||||
Signed-off-by: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/modules/loads/stressng.py | 5 +++++
|
|
||||||
1 file changed, 5 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/rteval/modules/loads/stressng.py b/rteval/modules/loads/stressng.py
|
|
||||||
index 85cb473..800fdec 100644
|
|
||||||
--- a/rteval/modules/loads/stressng.py
|
|
||||||
+++ b/rteval/modules/loads/stressng.py
|
|
||||||
@@ -9,6 +9,7 @@ from rteval.Log import Log
|
|
||||||
from rteval.systopology import CpuList, SysTopology
|
|
||||||
|
|
||||||
expand_cpulist = CpuList.expand_cpulist
|
|
||||||
+nonisolated_cpulist = CpuList.nonisolated_cpulist
|
|
||||||
|
|
||||||
class Stressng(CommandLineLoad):
|
|
||||||
" This class creates a load module that runs stress-ng "
|
|
||||||
@@ -69,6 +70,10 @@ class Stressng(CommandLineLoad):
|
|
||||||
# if a cpulist was specified, only allow cpus in that list on the node
|
|
||||||
if self.cpulist:
|
|
||||||
cpus[n] = [c for c in cpus[n] if c in expand_cpulist(self.cpulist)]
|
|
||||||
+ # if a cpulist was not specified, exclude isolated cpus
|
|
||||||
+ else:
|
|
||||||
+ cpus[n] = CpuList.nonisolated_cpulist(cpus[n])
|
|
||||||
+
|
|
||||||
|
|
||||||
# remove nodes with no cpus available for running
|
|
||||||
for node, cpu in cpus.items():
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
From 9c096f32cb35452b3475198fcab8ad4356151e86 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
Date: Fri, 30 Jun 2023 11:19:06 +0200
|
|
||||||
Subject: [PATCH] rteval: Fix CPU count calculation for hackbench
|
|
||||||
|
|
||||||
Use count from cpulist when specified and all CPUs on node excluding
|
|
||||||
offline ones and isolated ones if not specified.
|
|
||||||
|
|
||||||
Signed-off-by: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/modules/loads/hackbench.py | 6 +++++-
|
|
||||||
1 file changed, 5 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/modules/loads/hackbench.py b/rteval/modules/loads/hackbench.py
|
|
||||||
index 14e60d1..f5a547e 100644
|
|
||||||
--- a/rteval/modules/loads/hackbench.py
|
|
||||||
+++ b/rteval/modules/loads/hackbench.py
|
|
||||||
@@ -38,6 +38,7 @@ from rteval.Log import Log
|
|
||||||
from rteval.systopology import CpuList, SysTopology
|
|
||||||
|
|
||||||
expand_cpulist = CpuList.expand_cpulist
|
|
||||||
+isolated_cpulist = CpuList.isolated_cpulist
|
|
||||||
|
|
||||||
class Hackbench(CommandLineLoad):
|
|
||||||
def __init__(self, config, logger):
|
|
||||||
@@ -77,9 +78,12 @@ class Hackbench(CommandLineLoad):
|
|
||||||
# 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 c in expand_cpulist(self.cpulist)]
|
|
||||||
+ # if a cpulist was not specified, exclude isolated cpus
|
|
||||||
+ else:
|
|
||||||
+ self.cpus[n] = CpuList.nonisolated_cpulist(self.cpus[n])
|
|
||||||
|
|
||||||
# track largest number of cpus used on a node
|
|
||||||
- node_biggest = len(sysTop.getcpus(int(n)))
|
|
||||||
+ node_biggest = len(self.cpus[n])
|
|
||||||
if node_biggest > biggest:
|
|
||||||
biggest = node_biggest
|
|
||||||
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
From 78bd089e89e15b09db8e1d2bdcc0d9620d4da03c Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Tue, 6 Dec 2022 14:44:44 -0500
|
|
||||||
Subject: rteval: Log.py: Convert to f-strings
|
|
||||||
|
|
||||||
Convert Log.py to f-strings
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/Log.py | 9 +++------
|
|
||||||
1 file changed, 3 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/Log.py b/rteval/Log.py
|
|
||||||
index 63ca3b8681f8..8d08ab3e210a 100644
|
|
||||||
--- a/rteval/Log.py
|
|
||||||
+++ b/rteval/Log.py
|
|
||||||
@@ -60,10 +60,7 @@ class Log:
|
|
||||||
|
|
||||||
def log(self, logtype, msg):
|
|
||||||
if (logtype & self.__logverb) or logtype == self.ALWAYS:
|
|
||||||
- self.__logfile.write("%s%s\n" %
|
|
||||||
- (self.__logtype_str(logtype),
|
|
||||||
- msg)
|
|
||||||
- )
|
|
||||||
+ self.__logfile.write(f"{self.__logtype_str(logtype)}{msg}\n")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -80,8 +77,8 @@ def unit_test(rootdir):
|
|
||||||
def run_log_test(l):
|
|
||||||
for lt in range(min(logtypes), max(logtypes)*2):
|
|
||||||
test = ", ".join([logtypes_s[logtypes.index(i)] for i in [p for p in takewhile(lambda x: x <= lt, (2**i for i in count())) if p & lt]])
|
|
||||||
- print("Testing verbosity flags set to: (%i) %s" % (lt, test))
|
|
||||||
- msg = "Log entry when verbosity is set to %i [%s]" % (lt, test)
|
|
||||||
+ print(f"Testing verbosity flags set to: ({lt}) {test}")
|
|
||||||
+ msg = f"Log entry when verbosity is set to {lt} [{test}]"
|
|
||||||
l.SetLogVerbosity(lt)
|
|
||||||
test_log(l, msg)
|
|
||||||
print("-"*20)
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,399 +0,0 @@
|
|||||||
From d0552193364d160252d117c5bf2e298a31550e3c Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Mon, 10 Oct 2022 09:49:47 -0400
|
|
||||||
Subject: [PATCH] rteval: Replace python-ethtool with inline code
|
|
||||||
|
|
||||||
This patch adds the file newnet.py to replace the use of python-ethtool
|
|
||||||
The information it generates will appear in the summary.xml
|
|
||||||
You can also test the functionality by running
|
|
||||||
python rteval/sysinfo/newnet.py
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
- V2 Add SPDX license identifier
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/sysinfo/__init__.py | 3 +-
|
|
||||||
rteval/sysinfo/network.py | 117 -------------------
|
|
||||||
rteval/sysinfo/newnet.py | 225 +++++++++++++++++++++++++++++++++++++
|
|
||||||
3 files changed, 227 insertions(+), 118 deletions(-)
|
|
||||||
delete mode 100644 rteval/sysinfo/network.py
|
|
||||||
create mode 100644 rteval/sysinfo/newnet.py
|
|
||||||
|
|
||||||
diff --git a/rteval/sysinfo/__init__.py b/rteval/sysinfo/__init__.py
|
|
||||||
index a4359382f006..bb1d00810856 100644
|
|
||||||
--- a/rteval/sysinfo/__init__.py
|
|
||||||
+++ b/rteval/sysinfo/__init__.py
|
|
||||||
@@ -32,7 +32,7 @@ from rteval.sysinfo.services import SystemServices
|
|
||||||
from rteval.sysinfo.cputopology import CPUtopology
|
|
||||||
from rteval.sysinfo.memory import MemoryInfo
|
|
||||||
from rteval.sysinfo.osinfo import OSInfo
|
|
||||||
-from rteval.sysinfo.network import NetworkInfo
|
|
||||||
+from rteval.sysinfo.newnet import NetworkInfo
|
|
||||||
from rteval.sysinfo.cmdline import cmdlineInfo
|
|
||||||
from rteval.sysinfo import dmi
|
|
||||||
|
|
||||||
@@ -46,6 +46,7 @@ class SystemInfo(KernelInfo, SystemServices, dmi.DMIinfo, CPUtopology,
|
|
||||||
CPUtopology.__init__(self)
|
|
||||||
OSInfo.__init__(self, logger=logger)
|
|
||||||
cmdlineInfo.__init__(self, logger=logger)
|
|
||||||
+ NetworkInfo.__init__(self, logger=logger)
|
|
||||||
|
|
||||||
# Parse initial DMI decoding errors
|
|
||||||
dmi.ProcessWarnings()
|
|
||||||
diff --git a/rteval/sysinfo/network.py b/rteval/sysinfo/network.py
|
|
||||||
deleted file mode 100644
|
|
||||||
index ce9989a1240b..000000000000
|
|
||||||
--- a/rteval/sysinfo/network.py
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,117 +0,0 @@
|
|
||||||
-# -*- coding: utf-8 -*-
|
|
||||||
-#
|
|
||||||
-# Copyright 2009 - 2013 David Sommerseth <davids@redhat.com>
|
|
||||||
-#
|
|
||||||
-# This program is free software; you can redistribute it and/or modify
|
|
||||||
-# it under the terms of the GNU General Public License as published by
|
|
||||||
-# the Free Software Foundation; either version 2 of the License, or
|
|
||||||
-# (at your option) any later version.
|
|
||||||
-#
|
|
||||||
-# This program is distributed in the hope that it will be useful,
|
|
||||||
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
-# GNU General Public License for more details.
|
|
||||||
-#
|
|
||||||
-# You should have received a copy of the GNU General Public License along
|
|
||||||
-# with this program; if not, write to the Free Software Foundation, Inc.,
|
|
||||||
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
|
||||||
-#
|
|
||||||
-# For the avoidance of doubt the "preferred form" of this code is one which
|
|
||||||
-# is in an open unpatent encumbered format. Where cryptographic key signing
|
|
||||||
-# forms part of the process of creating an executable the information
|
|
||||||
-# including keys needed to generate an equivalently functional executable
|
|
||||||
-# are deemed to be part of the source code.
|
|
||||||
-#
|
|
||||||
-
|
|
||||||
-import ethtool, libxml2
|
|
||||||
-
|
|
||||||
-class NetworkInfo(object):
|
|
||||||
- def __init__(self):
|
|
||||||
- pass
|
|
||||||
-
|
|
||||||
- def net_GetDefaultGW(self):
|
|
||||||
- # Get the interface name for the IPv4 default gw
|
|
||||||
- route = open('/proc/net/route')
|
|
||||||
- defgw4 = None
|
|
||||||
- if route:
|
|
||||||
- rl = route.readline()
|
|
||||||
- while rl != '' :
|
|
||||||
- rl = route.readline()
|
|
||||||
- splt = rl.split("\t")
|
|
||||||
- # Only catch default route
|
|
||||||
- if len(splt) > 2 and splt[2] != '00000000' and splt[1] == '00000000':
|
|
||||||
- defgw4 = splt[0]
|
|
||||||
- break
|
|
||||||
- route.close()
|
|
||||||
- return (defgw4, None) # IPv6 gw not yet implemented
|
|
||||||
-
|
|
||||||
- def MakeReport(self):
|
|
||||||
- ncfg_n = libxml2.newNode("NetworkConfig")
|
|
||||||
- (defgw4, defgw6) = self.net_GetDefaultGW()
|
|
||||||
-
|
|
||||||
- # Make an interface tag for each device found
|
|
||||||
- if hasattr(ethtool, 'get_interfaces_info'):
|
|
||||||
- # Using the newer python-ethtool API (version >= 0.4)
|
|
||||||
- for dev in ethtool.get_interfaces_info(ethtool.get_devices()):
|
|
||||||
- if dev.device == 'lo':
|
|
||||||
- continue
|
|
||||||
-
|
|
||||||
- intf_n = libxml2.newNode('interface')
|
|
||||||
- intf_n.newProp('device', dev.device)
|
|
||||||
- intf_n.newProp('hwaddr', dev.mac_address)
|
|
||||||
- ncfg_n.addChild(intf_n)
|
|
||||||
-
|
|
||||||
- # Protcol configurations
|
|
||||||
- if dev.ipv4_address:
|
|
||||||
- ipv4_n = libxml2.newNode('IPv4')
|
|
||||||
- ipv4_n.newProp('ipaddr', dev.ipv4_address)
|
|
||||||
- ipv4_n.newProp('netmask', str(dev.ipv4_netmask))
|
|
||||||
- ipv4_n.newProp('broadcast', dev.ipv4_broadcast)
|
|
||||||
- ipv4_n.newProp('defaultgw', (defgw4 == dev.device) and '1' or '0')
|
|
||||||
- intf_n.addChild(ipv4_n)
|
|
||||||
-
|
|
||||||
- for ip6 in dev.get_ipv6_addresses():
|
|
||||||
- ipv6_n = libxml2.newNode('IPv6')
|
|
||||||
- ipv6_n.newProp('ipaddr', ip6.address)
|
|
||||||
- ipv6_n.newProp('netmask', str(ip6.netmask))
|
|
||||||
- ipv6_n.newProp('scope', ip6.scope)
|
|
||||||
- intf_n.addChild(ipv6_n)
|
|
||||||
-
|
|
||||||
- else: # Fall back to older python-ethtool API (version < 0.4)
|
|
||||||
- ifdevs = ethtool.get_active_devices()
|
|
||||||
- ifdevs.remove('lo')
|
|
||||||
- ifdevs.sort()
|
|
||||||
-
|
|
||||||
- for dev in ifdevs:
|
|
||||||
- intf_n = libxml2.newNode('interface')
|
|
||||||
- intf_n.newProp('device', dev.device)
|
|
||||||
- intf_n.newProp('hwaddr', dev.mac_address)
|
|
||||||
- ncfg_n.addChild(intf_n)
|
|
||||||
-
|
|
||||||
- ipv4_n = libxml2.newNode('IPv4')
|
|
||||||
- ipv4_n.newProp('ipaddr', ethtool.get_ipaddr(dev))
|
|
||||||
- ipv4_n.newProp('netmask', str(ethtool.get_netmask(dev)))
|
|
||||||
- ipv4_n.newProp('defaultgw', (defgw4 == dev) and '1' or '0')
|
|
||||||
- intf_n.addChild(ipv4_n)
|
|
||||||
-
|
|
||||||
- return ncfg_n
|
|
||||||
-
|
|
||||||
-
|
|
||||||
-def unit_test(rootdir):
|
|
||||||
- import sys
|
|
||||||
- try:
|
|
||||||
- net = NetworkInfo()
|
|
||||||
- doc = libxml2.newDoc('1.0')
|
|
||||||
- cfg = net.MakeReport()
|
|
||||||
- doc.setRootElement(cfg)
|
|
||||||
- doc.saveFormatFileEnc('-', 'UTF-8', 1)
|
|
||||||
-
|
|
||||||
- except Exception as e:
|
|
||||||
- import traceback
|
|
||||||
- traceback.print_exc(file=sys.stdout)
|
|
||||||
- print("** EXCEPTION %s", str(e))
|
|
||||||
- return 1
|
|
||||||
-
|
|
||||||
-if __name__ == '__main__':
|
|
||||||
- unit_test(None)
|
|
||||||
-
|
|
||||||
diff --git a/rteval/sysinfo/newnet.py b/rteval/sysinfo/newnet.py
|
|
||||||
new file mode 100644
|
|
||||||
index 000000000000..63417d9e59f1
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/rteval/sysinfo/newnet.py
|
|
||||||
@@ -0,0 +1,225 @@
|
|
||||||
+''' Module to obtain network information for the rteval report '''
|
|
||||||
+#
|
|
||||||
+# Copyright 2022 John Kacur <jkacur@redhat.com
|
|
||||||
+# SPDX-License-Identifier: GPL-2.0-or-later
|
|
||||||
+#
|
|
||||||
+
|
|
||||||
+import os
|
|
||||||
+import socket
|
|
||||||
+import ipaddress
|
|
||||||
+import sys
|
|
||||||
+import libxml2
|
|
||||||
+from rteval.Log import Log
|
|
||||||
+
|
|
||||||
+def get_active_devices():
|
|
||||||
+ ''' returns a list of active network devices, similar to ethtool '''
|
|
||||||
+ ret = []
|
|
||||||
+
|
|
||||||
+ for device in socket.if_nameindex():
|
|
||||||
+ ret.append(device[1])
|
|
||||||
+
|
|
||||||
+ return ret
|
|
||||||
+
|
|
||||||
+def compress_iv6(addr):
|
|
||||||
+ ''' inserts colons into an ipv6address and returns it in compressed form '''
|
|
||||||
+ retaddr = ''
|
|
||||||
+ # Insert colons into the number
|
|
||||||
+ for i in range(4,33,4):
|
|
||||||
+ if i == 32:
|
|
||||||
+ retaddr += addr[i-4:i]
|
|
||||||
+ else:
|
|
||||||
+ retaddr += addr[i-4:i] + ':'
|
|
||||||
+ addr = ipaddress.IPv6Network(retaddr)
|
|
||||||
+ retaddr = str(ipaddress.IPv6Address(retaddr))
|
|
||||||
+ return retaddr
|
|
||||||
+
|
|
||||||
+def get_defaultgw():
|
|
||||||
+ ''' return the ipv4address of the default gateway '''
|
|
||||||
+ defaultgw = None
|
|
||||||
+ with open('/proc/net/route') as f:
|
|
||||||
+ line = f.readline().strip()
|
|
||||||
+ while len(line) > 0:
|
|
||||||
+ (iface, dest, gateway, _, _, _, _, _, _, _, _) = line.split()
|
|
||||||
+ if iface == 'Iface':
|
|
||||||
+ line = f.readline().strip()
|
|
||||||
+ continue
|
|
||||||
+ if dest == '00000000' and gateway != '00000000':
|
|
||||||
+ addr = int(gateway, base=16)
|
|
||||||
+ defaultgw = str(ipaddress.IPv4Address(socket.ntohl(addr)))
|
|
||||||
+ return defaultgw
|
|
||||||
+ line = f.readline().strip()
|
|
||||||
+ return defaultgw
|
|
||||||
+
|
|
||||||
+class IPv6Addresses():
|
|
||||||
+ ''' Obtains a list of IPv6 addresses from the proc file system '''
|
|
||||||
+
|
|
||||||
+ def __init__(self):
|
|
||||||
+ self.data = {}
|
|
||||||
+ IPv6Addresses.load(self)
|
|
||||||
+
|
|
||||||
+ def __contains__(self, dev):
|
|
||||||
+ return dev in self.data
|
|
||||||
+
|
|
||||||
+ def __getitem__(self, dev):
|
|
||||||
+ return self.data.get(dev, None)
|
|
||||||
+
|
|
||||||
+ def __iter__(self):
|
|
||||||
+ return iter(self.data)
|
|
||||||
+
|
|
||||||
+ def load(self):
|
|
||||||
+ '''
|
|
||||||
+ Called by init to load the self.data dictionary with device keys
|
|
||||||
+ and a list of ipv6addresses
|
|
||||||
+ '''
|
|
||||||
+ MYP = '/proc/net/if_inet6'
|
|
||||||
+ with open(MYP, 'r') as f:
|
|
||||||
+ mystr = f.readline().strip()
|
|
||||||
+ while len(mystr) > 0:
|
|
||||||
+ ipv6addr , _, _, _, _, intf = mystr.split()
|
|
||||||
+ ipv6addr = compress_iv6(ipv6addr)
|
|
||||||
+ if intf == 'lo':
|
|
||||||
+ mystr = f.readline().strip()
|
|
||||||
+ continue
|
|
||||||
+ if intf not in self.data:
|
|
||||||
+ self.data[intf] = [ipv6addr]
|
|
||||||
+ else:
|
|
||||||
+ self.data[intf].append(ipv6addr)
|
|
||||||
+ mystr = f.readline().strip()
|
|
||||||
+
|
|
||||||
+class IPv4Addresses():
|
|
||||||
+ ''' Obtains a list of IPv4 addresses from the proc file system '''
|
|
||||||
+
|
|
||||||
+ def __init__(self):
|
|
||||||
+ self.data = {}
|
|
||||||
+ IPv4Addresses.load(self)
|
|
||||||
+
|
|
||||||
+ def __contains__(self, dev):
|
|
||||||
+ return dev in self.data
|
|
||||||
+
|
|
||||||
+ def __getitem__(self, dev):
|
|
||||||
+ return self.data[dev]
|
|
||||||
+
|
|
||||||
+ def __iter__(self):
|
|
||||||
+ return iter(self.data)
|
|
||||||
+
|
|
||||||
+ def load(self):
|
|
||||||
+ '''
|
|
||||||
+ Called by init to load the self.data dictionary with
|
|
||||||
+ device keys, and value consisting of a list of
|
|
||||||
+ ipv4address, netmask and broadcast address
|
|
||||||
+ '''
|
|
||||||
+ MYP = '/proc/net/route'
|
|
||||||
+ with open(MYP, 'r') as f:
|
|
||||||
+ mystr = f.readline().strip()
|
|
||||||
+ while len(mystr) > 0:
|
|
||||||
+ intf, dest, _, _, _, _, _, mask, _, _, _ = mystr.split()
|
|
||||||
+ # Skip over the head of the table an the gateway line
|
|
||||||
+ if intf == "Iface" or dest == '00000000':
|
|
||||||
+ mystr = f.readline().strip()
|
|
||||||
+ continue
|
|
||||||
+ d1 = int(dest, base=16)
|
|
||||||
+ m1 = int(mask, base=16)
|
|
||||||
+ addr = str(ipaddress.IPv4Address(socket.ntohl(d1)))
|
|
||||||
+ netmask = str(ipaddress.IPv4Address(socket.ntohl(m1)))
|
|
||||||
+ addr_with_mask = ipaddress.ip_network(addr + '/' + netmask)
|
|
||||||
+ broadcast = str(addr_with_mask.broadcast_address)
|
|
||||||
+ if intf not in self.data:
|
|
||||||
+ self.data[intf] = [(addr, netmask, broadcast)]
|
|
||||||
+ else:
|
|
||||||
+ self.data[intf].append((addr, netmask, broadcast))
|
|
||||||
+ mystr = f.readline().strip()
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+class MacAddresses():
|
|
||||||
+ ''' Obtains a list of hardware addresses of network devices '''
|
|
||||||
+
|
|
||||||
+ def __init__(self):
|
|
||||||
+ self.mac_address = {}
|
|
||||||
+ self.path = None
|
|
||||||
+ MacAddresses.load(self)
|
|
||||||
+
|
|
||||||
+ def load(self):
|
|
||||||
+ '''
|
|
||||||
+ called by init to load self.mac_address as a dictionary of
|
|
||||||
+ device keys, and mac or hardware addresses as values
|
|
||||||
+ '''
|
|
||||||
+ nics = get_active_devices()
|
|
||||||
+ for nic in nics:
|
|
||||||
+ self.path = f'/sys/class/net/{nic}'
|
|
||||||
+ hwaddr = MacAddresses.set_val(self, 'address')
|
|
||||||
+ self.mac_address[nic] = hwaddr
|
|
||||||
+
|
|
||||||
+ def set_val(self, val):
|
|
||||||
+ ''' Return the result of reading self.path/val '''
|
|
||||||
+ val_path = f'{self.path}/{val}'
|
|
||||||
+ if os.path.exists(val_path):
|
|
||||||
+ with open(val_path, 'r') as f:
|
|
||||||
+ return f.readline().strip()
|
|
||||||
+ return None
|
|
||||||
+
|
|
||||||
+ def __contains__(self, dev):
|
|
||||||
+ return dev in self.mac_address
|
|
||||||
+
|
|
||||||
+ def __getitem__(self, dev):
|
|
||||||
+ return self.mac_address[dev]
|
|
||||||
+
|
|
||||||
+ def __iter__(self):
|
|
||||||
+ return iter(self.mac_address)
|
|
||||||
+
|
|
||||||
+class NetworkInfo():
|
|
||||||
+ ''' Creates an xml report of the network for rteval '''
|
|
||||||
+
|
|
||||||
+ def __init__(self, logger):
|
|
||||||
+ self.defgw4 = get_defaultgw()
|
|
||||||
+ self.__logger = logger
|
|
||||||
+
|
|
||||||
+ def MakeReport(self):
|
|
||||||
+ ''' Make an xml report for rteval '''
|
|
||||||
+ ncfg_n = libxml2.newNode("NetworkConfig")
|
|
||||||
+ defgw4 = self.defgw4
|
|
||||||
+
|
|
||||||
+ mads = MacAddresses()
|
|
||||||
+ for device in mads:
|
|
||||||
+ if device == 'lo':
|
|
||||||
+ continue
|
|
||||||
+ intf_n = libxml2.newNode('interface')
|
|
||||||
+ intf_n.newProp('device', device)
|
|
||||||
+ intf_n.newProp('hwaddr', mads[device])
|
|
||||||
+ ncfg_n.addChild(intf_n)
|
|
||||||
+
|
|
||||||
+ ipv4ads = IPv4Addresses()
|
|
||||||
+ ipv6ads = IPv6Addresses()
|
|
||||||
+ for dev in ipv4ads:
|
|
||||||
+ if dev != device:
|
|
||||||
+ continue
|
|
||||||
+ for lelem in ipv4ads[dev]:
|
|
||||||
+ ipv4_n = libxml2.newNode('IPv4')
|
|
||||||
+ (ipaddr, netmask, broadcast) = lelem
|
|
||||||
+ ipv4_n.newProp('ipaddr', ipaddr)
|
|
||||||
+ ipv4_n.newProp('netmask', netmask)
|
|
||||||
+ ipv4_n.newProp('broadcast', broadcast)
|
|
||||||
+ ipv4_n.newProp('defaultgw', (defgw4 == ipaddr) and '1' or '0')
|
|
||||||
+ intf_n.addChild(ipv4_n)
|
|
||||||
+ if ipv6ads[dev]:
|
|
||||||
+ for lelem in ipv6ads[dev]:
|
|
||||||
+ ipv6_n = libxml2.newNode('IPv6')
|
|
||||||
+ ipaddr = lelem
|
|
||||||
+ ipv6_n.newProp('ipaddr', ipaddr)
|
|
||||||
+ intf_n.addChild(ipv6_n)
|
|
||||||
+ return ncfg_n
|
|
||||||
+
|
|
||||||
+if __name__ == "__main__":
|
|
||||||
+
|
|
||||||
+ try:
|
|
||||||
+ log = Log()
|
|
||||||
+ log.SetLogVerbosity(Log.DEBUG|Log.INFO)
|
|
||||||
+ net = NetworkInfo(logger=log)
|
|
||||||
+ doc = libxml2.newDoc('1.0')
|
|
||||||
+ cfg = net.MakeReport()
|
|
||||||
+ doc.setRootElement(cfg)
|
|
||||||
+ doc.saveFormatFileEnc('-', 'UTF-8', 1)
|
|
||||||
+
|
|
||||||
+ except Exception as e:
|
|
||||||
+ import traceback
|
|
||||||
+ traceback.print_exc(file=sys.stdout)
|
|
||||||
+ print(f"** EXCEPTION {str(e)}")
|
|
||||||
--
|
|
||||||
2.37.3
|
|
||||||
|
|
@ -1,83 +0,0 @@
|
|||||||
From cb7ba0c0db7631021341b7fa692c286fd9d33cd1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
Date: Fri, 30 Jun 2023 11:19:03 +0200
|
|
||||||
Subject: [PATCH] rteval: Report isolated CPUs
|
|
||||||
|
|
||||||
Add a flag for whether a CPU is isolated in CPUtopology and display
|
|
||||||
the number of isolated CPUs in text report.
|
|
||||||
|
|
||||||
Signed-off-by: Tomas Glozar <tglozar@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/rteval_text.xsl | 4 ++++
|
|
||||||
rteval/sysinfo/cputopology.py | 11 +++++++++++
|
|
||||||
2 files changed, 15 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/rteval/rteval_text.xsl b/rteval/rteval_text.xsl
|
|
||||||
index 7ecfac6..0ef649b 100644
|
|
||||||
--- a/rteval/rteval_text.xsl
|
|
||||||
+++ b/rteval/rteval_text.xsl
|
|
||||||
@@ -59,6 +59,10 @@
|
|
||||||
<xsl:value-of select="SystemInfo/CPUtopology/@num_cpu_cores"/>
|
|
||||||
<xsl:text> (online: </xsl:text>
|
|
||||||
<xsl:value-of select="SystemInfo/CPUtopology/@num_cpu_cores_online"/>
|
|
||||||
+ <xsl:if test="SystemInfo/CPUtopology/@num_cpu_cores_isolated != 0">
|
|
||||||
+ <xsl:text>, isolated: </xsl:text>
|
|
||||||
+ <xsl:value-of select="SystemInfo/CPUtopology/@num_cpu_cores_isolated"/>
|
|
||||||
+ </xsl:if>
|
|
||||||
<xsl:text>)</xsl:text>
|
|
||||||
</xsl:when>
|
|
||||||
<xsl:when test="hardware/cpu_topology">
|
|
||||||
diff --git a/rteval/sysinfo/cputopology.py b/rteval/sysinfo/cputopology.py
|
|
||||||
index 2bb6323..f60b059 100644
|
|
||||||
--- a/rteval/sysinfo/cputopology.py
|
|
||||||
+++ b/rteval/sysinfo/cputopology.py
|
|
||||||
@@ -25,6 +25,7 @@
|
|
||||||
|
|
||||||
import os
|
|
||||||
import libxml2
|
|
||||||
+from rteval.systopology import SysTopology
|
|
||||||
|
|
||||||
class CPUtopology:
|
|
||||||
"Retrieves an overview over the installed CPU cores and the system topology"
|
|
||||||
@@ -34,6 +35,7 @@ class CPUtopology:
|
|
||||||
self.__cputop_n = None
|
|
||||||
self.__cpu_cores = 0
|
|
||||||
self.__online_cores = 0
|
|
||||||
+ self.__isolated_cores = 0
|
|
||||||
self.__cpu_sockets = 0
|
|
||||||
|
|
||||||
def __read(self, dirname, fname):
|
|
||||||
@@ -51,6 +53,10 @@ class CPUtopology:
|
|
||||||
|
|
||||||
self.__cputop_n = libxml2.newNode('CPUtopology')
|
|
||||||
|
|
||||||
+ # Get list of isolated CPUs from SysTopology
|
|
||||||
+ systopology = SysTopology()
|
|
||||||
+ isolated_cpus = {'cpu' + n for n in systopology.isolated_cpus_str()}
|
|
||||||
+
|
|
||||||
cpusockets = []
|
|
||||||
for dirname in os.listdir(self.sysdir):
|
|
||||||
# Only parse directories which starts with 'cpu'
|
|
||||||
@@ -82,6 +88,10 @@ class CPUtopology:
|
|
||||||
'physical_package_id')
|
|
||||||
cpu_n.newProp('physical_package_id', str(phys_pkg_id))
|
|
||||||
cpusockets.append(phys_pkg_id)
|
|
||||||
+ is_isolated = dirname in isolated_cpus
|
|
||||||
+ if is_isolated:
|
|
||||||
+ self.__isolated_cores += 1
|
|
||||||
+ cpu_n.newProp('isolated', str(int(dirname in isolated_cpus)))
|
|
||||||
break
|
|
||||||
|
|
||||||
# Count unique CPU sockets
|
|
||||||
@@ -97,6 +107,7 @@ class CPUtopology:
|
|
||||||
# Summarise the core counts
|
|
||||||
self.__cputop_n.newProp('num_cpu_cores', str(self.__cpu_cores))
|
|
||||||
self.__cputop_n.newProp('num_cpu_cores_online', str(self.__online_cores))
|
|
||||||
+ self.__cputop_n.newProp('num_cpu_cores_isolated', str(self.__isolated_cores))
|
|
||||||
self.__cputop_n.newProp('num_cpu_sockets', str(self.__cpu_sockets))
|
|
||||||
|
|
||||||
return self.__cputop_n
|
|
||||||
--
|
|
||||||
2.41.0
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
From c8f7457cfb23b595bdd3f500dc1c9790c7302dd3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Date: Thu, 1 Jun 2023 16:27:29 -0400
|
|
||||||
Subject: rteval: Use f-strings in cputopology
|
|
||||||
|
|
||||||
Use f-strings in cputopology
|
|
||||||
|
|
||||||
Signed-off-by: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/sysinfo/cputopology.py | 4 +---
|
|
||||||
1 file changed, 1 insertion(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/sysinfo/cputopology.py b/rteval/sysinfo/cputopology.py
|
|
||||||
index ced7e1f295b7..2bb632312320 100644
|
|
||||||
--- a/rteval/sysinfo/cputopology.py
|
|
||||||
+++ b/rteval/sysinfo/cputopology.py
|
|
||||||
@@ -124,9 +124,7 @@ def unit_test(rootdir):
|
|
||||||
x.saveFormatFileEnc('-', 'UTF-8', 1)
|
|
||||||
|
|
||||||
print(" ---- getCPUcores() / getCPUscokets() ---- ")
|
|
||||||
- print("CPU cores: %i (online: %i) - CPU sockets: %i" % (cputop.cpu_getCores(False),
|
|
||||||
- cputop.cpu_getCores(True),
|
|
||||||
- cputop.cpu_getSockets()))
|
|
||||||
+ print(f"CPU cores: {cputop.cpu_getCores(False)} (online: {cputop.cpu_getCores(True)}) - CPU sockets: {cputop.cpu_getSockets()}")
|
|
||||||
return 0
|
|
||||||
except Exception as e:
|
|
||||||
# import traceback
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,31 +0,0 @@
|
|||||||
From a4acd156917024303f326dd5e66a7c9e2d12fda3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Date: Thu, 1 Jun 2023 16:27:30 -0400
|
|
||||||
Subject: rteval: Use f-strings in kernel.py
|
|
||||||
|
|
||||||
Use f-strings in kernel.py
|
|
||||||
|
|
||||||
Signed-off-by: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/sysinfo/kernel.py | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/sysinfo/kernel.py b/rteval/sysinfo/kernel.py
|
|
||||||
index f2e9d72ac2ef..ba5cadda40c5 100644
|
|
||||||
--- a/rteval/sysinfo/kernel.py
|
|
||||||
+++ b/rteval/sysinfo/kernel.py
|
|
||||||
@@ -47,8 +47,8 @@ class KernelInfo:
|
|
||||||
policies = {'DLN': 'deadline', 'FF':'fifo', 'RR':'rrobin', 'TS':'other', '?':'unknown'}
|
|
||||||
ret_kthreads = {}
|
|
||||||
self.__log(Log.DEBUG, "getting kthread status")
|
|
||||||
- cmd = '%s -eocommand,pid,policy,rtprio,comm' % getcmdpath('ps')
|
|
||||||
- self.__log(Log.DEBUG, "cmd: %s" % cmd)
|
|
||||||
+ cmd = f"{getcmdpath('ps')} -eocommand,pid,policy,rtprio,comm"
|
|
||||||
+ self.__log(Log.DEBUG, f"cmd: {cmd}")
|
|
||||||
c = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
|
|
||||||
for p in c.stdout:
|
|
||||||
v = p.strip().split()
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,49 +0,0 @@
|
|||||||
From 6e063353072b73e43a732bb5dfa265767ac0dbd7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Date: Thu, 1 Jun 2023 16:27:31 -0400
|
|
||||||
Subject: rteval: Use f-strings in memory.py
|
|
||||||
|
|
||||||
Use f-strings in memory.py
|
|
||||||
|
|
||||||
Signed-off-by: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/sysinfo/memory.py | 8 ++++----
|
|
||||||
1 file changed, 4 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/sysinfo/memory.py b/rteval/sysinfo/memory.py
|
|
||||||
index 7c5fd6f315cf..cc2fa2cfa4be 100644
|
|
||||||
--- a/rteval/sysinfo/memory.py
|
|
||||||
+++ b/rteval/sysinfo/memory.py
|
|
||||||
@@ -49,7 +49,7 @@ class MemoryInfo:
|
|
||||||
if l.startswith('MemTotal:'):
|
|
||||||
parts = l.split()
|
|
||||||
if parts[2].lower() != 'kb':
|
|
||||||
- raise RuntimeError("Units changed from kB! (%s)" % parts[2])
|
|
||||||
+ raise RuntimeError(f"Units changed from kB! ({parts[2]})")
|
|
||||||
rawsize = int(parts[1])
|
|
||||||
f.close()
|
|
||||||
break
|
|
||||||
@@ -76,7 +76,7 @@ class MemoryInfo:
|
|
||||||
|
|
||||||
memsize = self.mem_get_size()
|
|
||||||
mem_n = libxml2.newNode("memory_size")
|
|
||||||
- mem_n.addContent("%.3f" % memsize[0])
|
|
||||||
+ mem_n.addContent(f"{memsize[0]:.3f}")
|
|
||||||
mem_n.newProp("unit", memsize[1])
|
|
||||||
rep_n.addChild(mem_n)
|
|
||||||
|
|
||||||
@@ -88,8 +88,8 @@ def unit_test(rootdir):
|
|
||||||
import sys
|
|
||||||
try:
|
|
||||||
mi = MemoryInfo()
|
|
||||||
- print("Numa nodes: %i" % mi.mem_get_numa_nodes())
|
|
||||||
- print("Memory: %i %s" % mi.mem_get_size())
|
|
||||||
+ print(f"Numa nodes: {mi.mem_get_numa_nodes()}")
|
|
||||||
+ print(f"Memory: {int(mi.mem_get_size()[0])} {mi.mem_get_size()[1]}")
|
|
||||||
except Exception as e:
|
|
||||||
import traceback
|
|
||||||
traceback.print_exc(file=sys.stdout)
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
|||||||
From f821e5f2daf595838395d80ba89ee5699076daf1 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Date: Thu, 1 Jun 2023 16:27:32 -0400
|
|
||||||
Subject: rteval: Use f-strings in osinfo
|
|
||||||
|
|
||||||
Use f-strings in osinfo.py
|
|
||||||
|
|
||||||
Signed-off-by: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/sysinfo/osinfo.py | 12 ++++++------
|
|
||||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/sysinfo/osinfo.py b/rteval/sysinfo/osinfo.py
|
|
||||||
index ead5e3939cfa..83dc78b96fdd 100644
|
|
||||||
--- a/rteval/sysinfo/osinfo.py
|
|
||||||
+++ b/rteval/sysinfo/osinfo.py
|
|
||||||
@@ -55,9 +55,9 @@ class OSInfo:
|
|
||||||
shutil.copyfile(dpath, os.path.join(repdir, "dmesg"))
|
|
||||||
return
|
|
||||||
if os.path.exists('/usr/bin/dmesg'):
|
|
||||||
- subprocess.call('/usr/bin/dmesg > %s' % os.path.join(repdir, "dmesg"), shell=True)
|
|
||||||
+ subprocess.call(f'/usr/bin/dmesg > {os.path.join(repdir, "dmesg")}', shell=True)
|
|
||||||
return
|
|
||||||
- print("dmesg file not found at %s and no dmesg exe found!" % dpath)
|
|
||||||
+ print(f"dmesg file not found at {dpath} and no dmesg exe found!")
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@@ -69,16 +69,16 @@ class OSInfo:
|
|
||||||
else:
|
|
||||||
raise RuntimeError("Can't find sosreport/sysreport")
|
|
||||||
|
|
||||||
- self.__logger.log(Log.DEBUG, "report tool: %s" % exe)
|
|
||||||
+ self.__logger.log(Log.DEBUG, f"report tool: {exe}")
|
|
||||||
options = ['-k', 'rpm.rpmva=off',
|
|
||||||
'--name=rteval',
|
|
||||||
'--batch']
|
|
||||||
|
|
||||||
self.__logger.log(Log.INFO, "Generating SOS report")
|
|
||||||
- self.__logger.log(Log.INFO, "using command %s" % " ".join([exe]+options))
|
|
||||||
+ self.__logger.log(Log.INFO, f"using command {' '.join([exe]+options)}")
|
|
||||||
subprocess.call([exe] + options)
|
|
||||||
for s in glob('/tmp/s?sreport-rteval-*'):
|
|
||||||
- self.__logger.log(Log.DEBUG, "moving %s to %s" % (s, repdir))
|
|
||||||
+ self.__logger.log(Log.DEBUG, f"moving {s} to {repdir}")
|
|
||||||
shutil.move(s, repdir)
|
|
||||||
|
|
||||||
|
|
||||||
@@ -118,7 +118,7 @@ def unit_test(rootdir):
|
|
||||||
log = Log()
|
|
||||||
log.SetLogVerbosity(Log.DEBUG|Log.INFO)
|
|
||||||
osi = OSInfo(logger=log)
|
|
||||||
- print("Base OS: %s" % osi.get_base_os())
|
|
||||||
+ print(f"Base OS: {osi.get_base_os()}")
|
|
||||||
|
|
||||||
print("Testing OSInfo::copy_dmesg('/tmp'): ", end=' ')
|
|
||||||
osi.copy_dmesg('/tmp')
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
|||||||
From 2de834b44c2a731bc25449d84456396c0d519198 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Date: Thu, 1 Jun 2023 16:27:28 -0400
|
|
||||||
Subject: rteval: Use f-strings in rtevalConfig
|
|
||||||
|
|
||||||
Use f-strings in rtevalConfig.py
|
|
||||||
|
|
||||||
Signed-off-by: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/rtevalConfig.py | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/rtevalConfig.py b/rteval/rtevalConfig.py
|
|
||||||
index de88924642ca..41f1a567720f 100644
|
|
||||||
--- a/rteval/rtevalConfig.py
|
|
||||||
+++ b/rteval/rtevalConfig.py
|
|
||||||
@@ -115,7 +115,7 @@ class rtevalCfgSection:
|
|
||||||
"Simple method for dumping config when object is used as a string"
|
|
||||||
if not self.__cfgdata:
|
|
||||||
return "# empty"
|
|
||||||
- return "\n".join(["%s: %s" % (k, v) for k, v in list(self.__cfgdata.items())]) + "\n"
|
|
||||||
+ return "\n".join([f"{k}: {v}" for k, v in list(self.__cfgdata.items())]) + "\n"
|
|
||||||
|
|
||||||
|
|
||||||
def __setattr__(self, key, val):
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
|||||||
From 5e4fed8a745f70f9be1199f047069e144e9b8fd5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Date: Thu, 1 Jun 2023 16:27:27 -0400
|
|
||||||
Subject: rteval: Use f-strings in rtevalclient.py
|
|
||||||
|
|
||||||
Use f-strings in rtevalclient.py
|
|
||||||
|
|
||||||
Signed-off-by: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/rtevalclient.py | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/rtevalclient.py b/rteval/rtevalclient.py
|
|
||||||
index 26c953005326..7ff7d2700cfc 100644
|
|
||||||
--- a/rteval/rtevalclient.py
|
|
||||||
+++ b/rteval/rtevalclient.py
|
|
||||||
@@ -61,7 +61,7 @@ class rtevalclient:
|
|
||||||
cmpr = compr.compress(fbuf.getvalue())
|
|
||||||
data = base64.b64encode(cmpr + compr.flush())
|
|
||||||
ret = self.srv.SendReport(self.hostname, data)
|
|
||||||
- print("rtevalclient::SendReport() - Sent %i bytes (XML document length: %i bytes, compression ratio: %.02f%%)" % (len(data), doclen, (1-(float(len(data)) / float(doclen)))*100 ))
|
|
||||||
+ print(f"rtevalclient::SendReport() - Sent {len(data)} bytes (XML document length: {doclen} bytes, compression ratio: {(1-(float(len(data)) / float(doclen)))*100}:.2f)")
|
|
||||||
return ret
|
|
||||||
|
|
||||||
def SendDataAsFile(self, fname, data, decompr = False):
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,61 +0,0 @@
|
|||||||
From d83a8eb7f0b830408659483922eca25b51bd7b5e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Date: Thu, 1 Jun 2023 16:27:33 -0400
|
|
||||||
Subject: rteval: Use f-strings in services.py
|
|
||||||
|
|
||||||
Use f-strings in services.py
|
|
||||||
|
|
||||||
Signed-off-by: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/sysinfo/services.py | 12 ++++++------
|
|
||||||
1 file changed, 6 insertions(+), 6 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/sysinfo/services.py b/rteval/sysinfo/services.py
|
|
||||||
index c85980e19165..a87b4abeea76 100644
|
|
||||||
--- a/rteval/sysinfo/services.py
|
|
||||||
+++ b/rteval/sysinfo/services.py
|
|
||||||
@@ -55,17 +55,17 @@ class SystemServices:
|
|
||||||
break
|
|
||||||
if not servicesdir:
|
|
||||||
raise RuntimeError("No services dir (init.d) found on your system")
|
|
||||||
- self.__log(Log.DEBUG, "Services located in %s, going through each service file to check status" % servicesdir)
|
|
||||||
+ self.__log(Log.DEBUG, f"Services located in {servicesdir}, going through each service file to check status")
|
|
||||||
ret_services = {}
|
|
||||||
for service in glob.glob(os.path.join(servicesdir, '*')):
|
|
||||||
servicename = os.path.basename(service)
|
|
||||||
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)
|
|
||||||
+ cmd = f'{getcmdpath("grep")} -qs "\(^\|\W\)status)" {service}'
|
|
||||||
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']
|
|
||||||
+ cmd = ['env', '-i', f'LANG="{os.environ["LANG"]}"', f'PATH="{os.environ["PATH"]}"', f'TERM="{os.environ["TERM"]}"', service, 'status']
|
|
||||||
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()):
|
|
||||||
@@ -79,8 +79,8 @@ class SystemServices:
|
|
||||||
|
|
||||||
def __get_services_systemd(self):
|
|
||||||
ret_services = {}
|
|
||||||
- cmd = '%s list-unit-files -t service --no-legend' % getcmdpath('systemctl')
|
|
||||||
- self.__log(Log.DEBUG, "cmd: %s" % cmd)
|
|
||||||
+ cmd = f'{getcmdpath("systemctl")} list-unit-files -t service --no-legend'
|
|
||||||
+ self.__log(Log.DEBUG, f"cmd: {cmd}")
|
|
||||||
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'
|
|
||||||
@@ -133,7 +133,7 @@ def unit_test(rootdir):
|
|
||||||
|
|
||||||
return 0
|
|
||||||
except Exception as err:
|
|
||||||
- print("** EXCEPTION: %s" % str(err))
|
|
||||||
+ print(f"** EXCEPTION: {str(err)}")
|
|
||||||
return 1
|
|
||||||
|
|
||||||
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,27 +0,0 @@
|
|||||||
From adc41fa998fc15dff2c5edf3f57e6cd0970e17e5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Date: Thu, 1 Jun 2023 16:27:34 -0400
|
|
||||||
Subject: rteval: Use f-strings in tools.py
|
|
||||||
|
|
||||||
Use f-strings in tools.py
|
|
||||||
|
|
||||||
Signed-off-by: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/sysinfo/tools.py | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/sysinfo/tools.py b/rteval/sysinfo/tools.py
|
|
||||||
index 3993da413d8a..aa00b3d3eafc 100644
|
|
||||||
--- a/rteval/sysinfo/tools.py
|
|
||||||
+++ b/rteval/sysinfo/tools.py
|
|
||||||
@@ -40,5 +40,5 @@ def getcmdpath(which):
|
|
||||||
pathSave[which] = cmdfile
|
|
||||||
break
|
|
||||||
if not pathSave[which]:
|
|
||||||
- raise RuntimeError("Command '%s' is unknown on this system" % which)
|
|
||||||
+ raise RuntimeError(f"Command '{which}' is unknown on this system")
|
|
||||||
return pathSave[which]
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,119 +0,0 @@
|
|||||||
From 0f44bad0f6d95448425903c4ec3a3fa8093ae6e7 Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Wed, 9 Nov 2022 12:28:38 -0500
|
|
||||||
Subject: rteval: rteval/__init__.py: Convert regular strings to f-strings
|
|
||||||
|
|
||||||
Convert regular strings to f-strings in __init__.py
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/__init__.py | 32 +++++++++++++++-----------------
|
|
||||||
1 file changed, 15 insertions(+), 17 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/__init__.py b/rteval/__init__.py
|
|
||||||
index 22af8e85d5aa..d8127425febe 100644
|
|
||||||
--- a/rteval/__init__.py
|
|
||||||
+++ b/rteval/__init__.py
|
|
||||||
@@ -59,7 +59,7 @@ def sig_handler(signum, frame):
|
|
||||||
stopsig_received = True
|
|
||||||
print("*** stop signal received - stopping rteval run ***")
|
|
||||||
else:
|
|
||||||
- raise RuntimeError("SIGNAL received! (%d)" % signum)
|
|
||||||
+ raise RuntimeError(f"SIGNAL received! ({signum})")
|
|
||||||
|
|
||||||
class RtEval(rtevalReport):
|
|
||||||
def __init__(self, config, loadmods, measuremods, logger):
|
|
||||||
@@ -96,10 +96,10 @@ class RtEval(rtevalReport):
|
|
||||||
self.__mailer = None
|
|
||||||
|
|
||||||
if not os.path.exists(self.__rtevcfg.xslt_report):
|
|
||||||
- raise RuntimeError("can't find XSL template (%s)!" % self.__rtevcfg.xslt_report)
|
|
||||||
+ raise RuntimeError(f"can't find XSL template ({self.__rtevcfg.xslt_report})!")
|
|
||||||
|
|
||||||
# Add rteval directory into module search path
|
|
||||||
- sys.path.insert(0, '%s/rteval' % sysconfig.get_python_lib())
|
|
||||||
+ sys.path.insert(0, f'{sysconfig.get_python_lib()}/rteval')
|
|
||||||
|
|
||||||
# Initialise the report module
|
|
||||||
rtevalReport.__init__(self, self.__version,
|
|
||||||
@@ -110,8 +110,7 @@ class RtEval(rtevalReport):
|
|
||||||
self.__xmlrpc = rtevalXMLRPC(self.__rtevcfg.xmlrpc, self.__logger, self.__mailer)
|
|
||||||
if not self.__xmlrpc.Ping():
|
|
||||||
if not self.__rtevcfg.xmlrpc_noabort:
|
|
||||||
- print("ERROR: Could not reach XML-RPC server '%s'. Aborting." % \
|
|
||||||
- self.__rtevcfg.xmlrpc)
|
|
||||||
+ print(f"ERROR: Could not reach XML-RPC server '{self.__rtevcfg.xmlrpc}'. Aborting.")
|
|
||||||
sys.exit(2)
|
|
||||||
else:
|
|
||||||
print("WARNING: Could not ping the XML-RPC server. Will continue anyway.")
|
|
||||||
@@ -174,8 +173,7 @@ class RtEval(rtevalReport):
|
|
||||||
|
|
||||||
measure_start = None
|
|
||||||
(with_loads, run_parallel) = measure_profile.GetProfile()
|
|
||||||
- self.__logger.log(Log.INFO, "Using measurement profile [loads: %s parallel: %s]" % (
|
|
||||||
- with_loads, run_parallel))
|
|
||||||
+ self.__logger.log(Log.INFO, f"Using measurement profile [loads: {with_loads} parallel: {run_parallel}]")
|
|
||||||
try:
|
|
||||||
nthreads = 0
|
|
||||||
|
|
||||||
@@ -183,23 +181,23 @@ class RtEval(rtevalReport):
|
|
||||||
if with_loads:
|
|
||||||
self._loadmods.Start()
|
|
||||||
|
|
||||||
- print("rteval run on %s started at %s" % (os.uname()[2], time.asctime()))
|
|
||||||
+ print(f"rteval run on {os.uname()[2]} started at {time.asctime()}")
|
|
||||||
onlinecpus = self._sysinfo.cpu_getCores(True)
|
|
||||||
cpulist = self._loadmods._cfg.GetSection("loads").cpulist
|
|
||||||
if cpulist:
|
|
||||||
- print("started %d loads on cores %s" % (self._loadmods.ModulesLoaded(), cpulist), end=' ')
|
|
||||||
+ print(f"started {self._loadmods.ModulesLoaded()} loads on cores {cpulist}", end=' ')
|
|
||||||
else:
|
|
||||||
- print("started %d loads on %d cores" % (self._loadmods.ModulesLoaded(), onlinecpus), end=' ')
|
|
||||||
+ print(f"started {self._loadmods.ModulesLoaded()} loads on {onlinecpus} cores", end=' ')
|
|
||||||
if self._sysinfo.mem_get_numa_nodes() > 1:
|
|
||||||
- print(" with %d numa nodes" % self._sysinfo.mem_get_numa_nodes())
|
|
||||||
+ print(f" with {self._sysinfo.mem_get_numa_nodes()} numa nodes")
|
|
||||||
else:
|
|
||||||
print("")
|
|
||||||
cpulist = self._measuremods._MeasurementModules__cfg.GetSection("measurement").cpulist
|
|
||||||
if cpulist:
|
|
||||||
- print("started measurement threads on cores %s" % cpulist)
|
|
||||||
+ print(f"started measurement threads on cores {cpulist}")
|
|
||||||
else:
|
|
||||||
- print("started measurement threads on %d cores" % onlinecpus)
|
|
||||||
- print("Run duration: %s seconds" % str(self.__rtevcfg.duration))
|
|
||||||
+ print(f"started measurement threads on {onlinecpus} cores")
|
|
||||||
+ print(f"Run duration: {str(self.__rtevcfg.duration)} seconds")
|
|
||||||
|
|
||||||
# start the cyclictest thread
|
|
||||||
measure_profile.Start()
|
|
||||||
@@ -219,7 +217,7 @@ class RtEval(rtevalReport):
|
|
||||||
# wait for time to expire or thread to die
|
|
||||||
signal.signal(signal.SIGINT, sig_handler)
|
|
||||||
signal.signal(signal.SIGTERM, sig_handler)
|
|
||||||
- self.__logger.log(Log.INFO, "waiting for duration (%s)" % str(self.__rtevcfg.duration))
|
|
||||||
+ self.__logger.log(Log.INFO, f"waiting for duration ({str(self.__rtevcfg.duration)})")
|
|
||||||
stoptime = (time.time() + float(self.__rtevcfg.duration))
|
|
||||||
currtime = time.time()
|
|
||||||
rpttime = currtime + report_interval
|
|
||||||
@@ -246,7 +244,7 @@ class RtEval(rtevalReport):
|
|
||||||
left_to_run = stoptime - currtime
|
|
||||||
self.__show_remaining_time(left_to_run)
|
|
||||||
rpttime = currtime + report_interval
|
|
||||||
- print("load average: %.2f" % self._loadmods.GetLoadAvg())
|
|
||||||
+ print(f"load average: {self._loadmods.GetLoadAvg():.2f}")
|
|
||||||
currtime = time.time()
|
|
||||||
|
|
||||||
self.__logger.log(Log.DEBUG, "out of measurement loop")
|
|
||||||
@@ -265,7 +263,7 @@ class RtEval(rtevalReport):
|
|
||||||
if with_loads:
|
|
||||||
self._loadmods.Stop()
|
|
||||||
|
|
||||||
- print("stopping run at %s" % time.asctime())
|
|
||||||
+ print(f"stopping run at {time.asctime()}")
|
|
||||||
|
|
||||||
# wait for measurement modules to finish calculating stats
|
|
||||||
measure_profile.WaitForCompletion()
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,64 +0,0 @@
|
|||||||
From 0945147e2c459dfff400fe8bfdebd11e6464eab4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Wed, 9 Nov 2022 14:14:50 -0500
|
|
||||||
Subject: rteval: rtevalConfig.py: Convert regular strings to f-strings
|
|
||||||
|
|
||||||
Convert regular strings to f-strings in rtevalConfig.py
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/rtevalConfig.py | 10 +++++-----
|
|
||||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/rtevalConfig.py b/rteval/rtevalConfig.py
|
|
||||||
index decd36ed18ab..de88924642ca 100644
|
|
||||||
--- a/rteval/rtevalConfig.py
|
|
||||||
+++ b/rteval/rtevalConfig.py
|
|
||||||
@@ -196,7 +196,7 @@ class rtevalConfig:
|
|
||||||
|
|
||||||
# get our system topology info
|
|
||||||
self.__systopology = SysTopology()
|
|
||||||
- print(("got system topology: %s" % self.__systopology))
|
|
||||||
+ print(f"got system topology: {self.__systopology}")
|
|
||||||
|
|
||||||
# Import the default config first
|
|
||||||
for sect, vals in list(default_config.items()):
|
|
||||||
@@ -225,7 +225,7 @@ class rtevalConfig:
|
|
||||||
"Simple method for dumping config when object is used as a string"
|
|
||||||
ret = ""
|
|
||||||
for sect in list(self.__config_data.keys()):
|
|
||||||
- ret += "[%s]\n%s\n" % (sect, str(self.__config_data[sect]))
|
|
||||||
+ ret += f"[{sect}]\n{str(self.__config_data[sect])}\n"
|
|
||||||
return ret
|
|
||||||
|
|
||||||
|
|
||||||
@@ -240,7 +240,7 @@ class rtevalConfig:
|
|
||||||
for f in ('rteval.conf', '/etc/rteval.conf'):
|
|
||||||
p = os.path.abspath(f)
|
|
||||||
if os.path.exists(p):
|
|
||||||
- self.__info("found config file %s" % p)
|
|
||||||
+ self.__info(f"found config file {p}")
|
|
||||||
return p
|
|
||||||
raise RuntimeError("Unable to find configfile")
|
|
||||||
|
|
||||||
@@ -258,7 +258,7 @@ class rtevalConfig:
|
|
||||||
# Don't try to reread this file if it's already been parsed
|
|
||||||
return
|
|
||||||
|
|
||||||
- self.__info("reading config file %s" % cfgfile)
|
|
||||||
+ self.__info(f"reading config file {cfgfile}")
|
|
||||||
ini = configparser.ConfigParser()
|
|
||||||
ini.optionxform = str
|
|
||||||
ini.read(cfgfile)
|
|
||||||
@@ -321,7 +321,7 @@ class rtevalConfig:
|
|
||||||
# Return a new object with config settings of a given section
|
|
||||||
return self.__config_data[section]
|
|
||||||
except KeyError:
|
|
||||||
- raise KeyError("The section '%s' does not exist in the config file" % section)
|
|
||||||
+ raise KeyError(f"The section '{section}' does not exist in the config file")
|
|
||||||
|
|
||||||
|
|
||||||
def unit_test(rootdir):
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,42 +0,0 @@
|
|||||||
From 96ce02046afedfac27c69c30d6ee6b9511238131 Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Wed, 9 Nov 2022 12:47:09 -0500
|
|
||||||
Subject: rteval: rtevalReport.py: Convert regular strings to f-strings
|
|
||||||
|
|
||||||
Convert regular strings to f-strings in rtevalReport.py
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/rtevalReport.py | 6 +++---
|
|
||||||
1 file changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/rtevalReport.py b/rteval/rtevalReport.py
|
|
||||||
index fdfaed560cfa..af3e6c9a703b 100644
|
|
||||||
--- a/rteval/rtevalReport.py
|
|
||||||
+++ b/rteval/rtevalReport.py
|
|
||||||
@@ -100,11 +100,11 @@ class rtevalReport:
|
|
||||||
|
|
||||||
def _show_report(self, xmlfile, xsltfile):
|
|
||||||
'''summarize a previously generated xml file'''
|
|
||||||
- print("Loading %s for summarizing" % xmlfile)
|
|
||||||
+ print(f"Loading {xmlfile} for summarizing")
|
|
||||||
|
|
||||||
xsltfullpath = os.path.join(self.__installdir, xsltfile)
|
|
||||||
if not os.path.exists(xsltfullpath):
|
|
||||||
- raise RuntimeError("can't find XSL template (%s)!" % xsltfullpath)
|
|
||||||
+ raise RuntimeError(f"can't find XSL template ({xsltfullpath})!")
|
|
||||||
|
|
||||||
xmlreport = xmlout.XMLOut('rteval', self.__version)
|
|
||||||
xmlreport.LoadReport(xmlfile)
|
|
||||||
@@ -131,7 +131,7 @@ class rtevalReport:
|
|
||||||
|
|
||||||
def _tar_results(self):
|
|
||||||
if not os.path.isdir(self.__reportdir):
|
|
||||||
- raise RuntimeError("no such directory: %s" % self.__reportdir)
|
|
||||||
+ raise RuntimeError(f"no such directory: {self.__reportdir}")
|
|
||||||
|
|
||||||
dirname = os.path.dirname(self.__reportdir)
|
|
||||||
rptdir = os.path.basename(self.__reportdir)
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,114 +0,0 @@
|
|||||||
From eceb9de2d2a0bcf3394ca257d42f91bdcac71caf Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Wed, 9 Nov 2022 13:42:59 -0500
|
|
||||||
Subject: rteval: rtevalXMLRPC.py: Convert regular strings to f-strings
|
|
||||||
|
|
||||||
Convert regular strings to f-strings in rtevalXMLRPC.py
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/rtevalXMLRPC.py | 34 ++++++++++++++--------------------
|
|
||||||
1 file changed, 14 insertions(+), 20 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/rtevalXMLRPC.py b/rteval/rtevalXMLRPC.py
|
|
||||||
index f24e21a8ed2f..6dce12ad78bb 100644
|
|
||||||
--- a/rteval/rtevalXMLRPC.py
|
|
||||||
+++ b/rteval/rtevalXMLRPC.py
|
|
||||||
@@ -33,7 +33,7 @@ from .Log import Log
|
|
||||||
class rtevalXMLRPC:
|
|
||||||
def __init__(self, host, logger, mailer=None):
|
|
||||||
self.__host = host
|
|
||||||
- self.__url = "http://%s/rteval/API1/" % self.__host
|
|
||||||
+ self.__url = f"http://{self.__host}/rteval/API1/"
|
|
||||||
self.__logger = logger
|
|
||||||
self.__mailer = mailer
|
|
||||||
self.__client = rtevalclient.rtevalclient(self.__url)
|
|
||||||
@@ -41,7 +41,7 @@ class rtevalXMLRPC:
|
|
||||||
|
|
||||||
def Ping(self):
|
|
||||||
res = None
|
|
||||||
- self.__logger.log(Log.DEBUG, "Checking if XML-RPC server '%s' is reachable" % self.__host)
|
|
||||||
+ self.__logger.log(Log.DEBUG, f"Checking if XML-RPC server '{self.__host}' is reachable")
|
|
||||||
attempt = 0
|
|
||||||
ping_success = False
|
|
||||||
warning_sent = False
|
|
||||||
@@ -52,10 +52,10 @@ class rtevalXMLRPC:
|
|
||||||
ping_success = True
|
|
||||||
except xmlrpc.client.ProtocolError:
|
|
||||||
# Server do not support Hello(), but is reachable
|
|
||||||
- self.__logger.log(Log.INFO, "Got XML-RPC connection with %s but it did not support Hello()" % self.__host)
|
|
||||||
+ self.__logger.log(Log.INFO, f"Got XML-RPC connection with {self.__host} but it did not support Hello()")
|
|
||||||
res = None
|
|
||||||
except socket.error as err:
|
|
||||||
- self.__logger.log(Log.INFO, "Could not establish XML-RPC contact with %s\n%s" % (self.__host, str(err)))
|
|
||||||
+ self.__logger.log(Log.INFO, f"Could not establish XML-RPC contact with {self.__host}\n{str(err)}")
|
|
||||||
|
|
||||||
# Do attempts handling
|
|
||||||
attempt += 1
|
|
||||||
@@ -63,17 +63,16 @@ class rtevalXMLRPC:
|
|
||||||
break # To avoid sleeping before we abort
|
|
||||||
|
|
||||||
if (self.__mailer is not None) and (not warning_sent):
|
|
||||||
- self.__mailer.SendMessage("[RTEVAL:WARNING] Failed to ping XML-RPC server", "Server %s did not respond." % self.__host)
|
|
||||||
+ self.__mailer.SendMessage("[RTEVAL:WARNING] Failed to ping XML-RPC server", f"Server {self.__host} did not respond.")
|
|
||||||
warning_sent = True
|
|
||||||
|
|
||||||
- print("Failed pinging XML-RPC server. Doing another attempt(%i) " % attempt)
|
|
||||||
+ print(f"Failed pinging XML-RPC server. Doing another attempt({attempt}) ")
|
|
||||||
time.sleep(attempt) #*15) # Incremental sleep - sleep attempts*15 seconds
|
|
||||||
ping_success = False
|
|
||||||
|
|
||||||
if res:
|
|
||||||
- self.__logger.log(Log.INFO, "Verified XML-RPC connection with %s (XML-RPC API version: %i)" % (res["server"], res["APIversion"]))
|
|
||||||
- self.__logger.log(Log.DEBUG, "Recieved greeting: %s" % res["greeting"])
|
|
||||||
-
|
|
||||||
+ self.__logger.log(Log.INFO, f'Verified XML-RPC connection with {res["server"]} (XML-RPC API version: {res["APIversion"]})')
|
|
||||||
+ self.__logger.log(Log.DEBUG, f"Recieved greeting: {res['greeting']}")
|
|
||||||
return ping_success
|
|
||||||
|
|
||||||
|
|
||||||
@@ -85,9 +84,9 @@ class rtevalXMLRPC:
|
|
||||||
warning_sent = False
|
|
||||||
while attempt < 6:
|
|
||||||
try:
|
|
||||||
- print("Submitting report to %s" % self.__url)
|
|
||||||
+ print(f"Submitting report to {self.__url}")
|
|
||||||
rterid = self.__client.SendReport(xmlreport)
|
|
||||||
- print("Report registered with submission id %i" % rterid)
|
|
||||||
+ print(f"Report registered with submission id {rterid}")
|
|
||||||
attempt = 10
|
|
||||||
exitcode = 0 # Success
|
|
||||||
except socket.error:
|
|
||||||
@@ -96,12 +95,10 @@ class rtevalXMLRPC:
|
|
||||||
break # To avoid sleeping before we abort
|
|
||||||
|
|
||||||
if (self.__mailer is not None) and (not warning_sent):
|
|
||||||
- self.__mailer.SendMessage("[RTEVAL:WARNING] Failed to submit report to XML-RPC server",
|
|
||||||
- "Server %s did not respond. Not giving up yet."
|
|
||||||
- % self.__host)
|
|
||||||
+ self.__mailer.SendMessage("[RTEVAL:WARNING] Failed to submit report to XML-RPC server", f"Server {self.__host} did not respond. Not giving up yet.")
|
|
||||||
warning_sent = True
|
|
||||||
|
|
||||||
- print("Failed sending report. Doing another attempt(%i) " % attempt)
|
|
||||||
+ print(f"Failed sending report. Making another attempt({attempt}) ")
|
|
||||||
time.sleep(attempt) #*5*60) # Incremental sleep - sleep attempts*5 minutes
|
|
||||||
|
|
||||||
except Exception as err:
|
|
||||||
@@ -111,12 +108,9 @@ class rtevalXMLRPC:
|
|
||||||
if self.__mailer is not None:
|
|
||||||
# Send final result messages
|
|
||||||
if exitcode == 2:
|
|
||||||
- self.__mailer.SendMessage("[RTEVAL:FAILURE] Failed to submit report to XML-RPC server",
|
|
||||||
- "Server %s did not respond at all after %i attempts."
|
|
||||||
- % (self.__host, attempt - 1))
|
|
||||||
+ self.__mailer.SendMessage("[RTEVAL:FAILURE] Failed to submit report to XML-RPC server", f"Server {self.__host} did not respond at all after {attempt - 1} attempts.")
|
|
||||||
elif (exitcode == 0) and warning_sent:
|
|
||||||
self.__mailer.SendMessage("[RTEVAL:SUCCESS] XML-RPC server available again",
|
|
||||||
- "Succeeded to submit the report to %s"
|
|
||||||
- % self.__host)
|
|
||||||
+ f"Succeeded to submit the report to {self.__host}")
|
|
||||||
|
|
||||||
return exitcode
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,106 +0,0 @@
|
|||||||
From e0c70244c34b691cf62b504f39ce5aebe2ac1d34 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
Date: Wed, 28 Jun 2023 13:59:03 -0400
|
|
||||||
Subject: [PATCH] rteval/server: edited files to use optparse instead of
|
|
||||||
argparse
|
|
||||||
|
|
||||||
rteval/server: edited files to use optparse instead of argparse.
|
|
||||||
Note: Since server is disabled, these changes have not been tested.
|
|
||||||
|
|
||||||
Signed-off-by: Anubhav Shelat <ashelat@redhat.com>
|
|
||||||
- Fixed spelling in commit comments
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
server/remove_rtevalrun | 16 ++++++++--------
|
|
||||||
server/rteval_testserver.py | 1 -
|
|
||||||
server/testclient_sendreportfile | 10 +++++-----
|
|
||||||
3 files changed, 13 insertions(+), 14 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/server/remove_rtevalrun b/server/remove_rtevalrun
|
|
||||||
index cee699e27c9f..7d83f71ea644 100755
|
|
||||||
--- a/server/remove_rtevalrun
|
|
||||||
+++ b/server/remove_rtevalrun
|
|
||||||
@@ -29,7 +29,7 @@
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import getpass
|
|
||||||
-from optparse import OptionParser
|
|
||||||
+from argparse import ArgumentParser
|
|
||||||
from database import Database
|
|
||||||
|
|
||||||
def do_delete(dbc, table, rterid):
|
|
||||||
@@ -45,20 +45,20 @@ def do_delete(dbc, table, rterid):
|
|
||||||
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
- parser = OptionParser(version="%prog v0.1")
|
|
||||||
+ parser = ArgumentParser(version="%prog v0.1")
|
|
||||||
|
|
||||||
- parser.add_option("-H", "--host", action="store", dest="dbhost", default="localhost",
|
|
||||||
+ parser.add_argument("-H", "--host", action="store", dest="dbhost", default="localhost",
|
|
||||||
help="Database server to connect to (default: %default)",
|
|
||||||
metavar="HOST")
|
|
||||||
- parser.add_option("-p", "--port", action="store", dest="dbport", default="5432",
|
|
||||||
+ parser.add_argument("-p", "--port", action="store", dest="dbport", default="5432",
|
|
||||||
help="Database server port to use (default: %default)", metavar="PORT")
|
|
||||||
- parser.add_option("-U", "--user", action="store", dest="dbuser", default="rtevaladmin",
|
|
||||||
+ parser.add_argument("-U", "--user", action="store", dest="dbuser", default="rtevaladmin",
|
|
||||||
help="Database user to connect as (default: %default)", metavar="USERNAME")
|
|
||||||
- parser.add_option("-d", "--database", action="store", dest="dbname", default="rteval",
|
|
||||||
+ parser.add_argument("-d", "--database", action="store", dest="dbname", default="rteval",
|
|
||||||
help="Database to use (default: %default)", metavar="DATABASE")
|
|
||||||
- parser.add_option("-r", "--rterid", action="store", dest="rterid", default=None,
|
|
||||||
+ parser.add_argument("-r", "--rterid", action="store", dest="rterid", default=None,
|
|
||||||
help="rteval run id to remove from the database", metavar="INTEGER")
|
|
||||||
- (opts, args) = parser.parse_args()
|
|
||||||
+ opts = parser.parse_args()
|
|
||||||
|
|
||||||
if opts.rterid is None:
|
|
||||||
print "%s: Missing --rterid value" % sys.argv[0]
|
|
||||||
diff --git a/server/rteval_testserver.py b/server/rteval_testserver.py
|
|
||||||
index 6cac85bcfe52..c7f9ce954b21 100644
|
|
||||||
--- a/server/rteval_testserver.py
|
|
||||||
+++ b/server/rteval_testserver.py
|
|
||||||
@@ -30,7 +30,6 @@ import sys
|
|
||||||
import signal
|
|
||||||
from xmlrpc.server import SimpleXMLRPCServer
|
|
||||||
from xmlrpc.server import SimpleXMLRPCRequestHandler
|
|
||||||
-from optparse import OptionParser
|
|
||||||
import argparse
|
|
||||||
|
|
||||||
import xmlrpc_API1
|
|
||||||
diff --git a/server/testclient_sendreportfile b/server/testclient_sendreportfile
|
|
||||||
index 08317b263f76..dc69a199122c 100755
|
|
||||||
--- a/server/testclient_sendreportfile
|
|
||||||
+++ b/server/testclient_sendreportfile
|
|
||||||
@@ -28,22 +28,22 @@
|
|
||||||
|
|
||||||
import sys
|
|
||||||
import libxml2
|
|
||||||
-from optparse import OptionParser
|
|
||||||
+from argparse import ArgumentParser
|
|
||||||
|
|
||||||
sys.path.append('../rteval')
|
|
||||||
import rtevalclient
|
|
||||||
|
|
||||||
if __name__ == '__main__':
|
|
||||||
- parser = OptionParser(version="%prog v0.1")
|
|
||||||
+ parser = ArgumentParser(version="%prog v0.1")
|
|
||||||
|
|
||||||
- parser.add_option("-r", "--report", action="store", dest="report", default="summary.xml",
|
|
||||||
+ parser.add_argument("-r", "--report", action="store", dest="report", default="summary.xml",
|
|
||||||
help="Which XML report to send to the XML-RPC server (default: %default)",
|
|
||||||
metavar="FILE")
|
|
||||||
- parser.add_option("-X", "--xmlrpc-submit", dest="xmlrpchost", default="localhost:65432",
|
|
||||||
+ parser.add_argument("-X", "--xmlrpc-submit", dest="xmlrpchost", default="localhost:65432",
|
|
||||||
help="Hostname to the XML-RPC server to send the data (default: %default)",
|
|
||||||
metavar="HOST[:PORT]")
|
|
||||||
|
|
||||||
- (opts, args) = parser.parse_args()
|
|
||||||
+ opts = parser.parse_args()
|
|
||||||
|
|
||||||
d = libxml2.parseFile(opts.report)
|
|
||||||
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,64 +0,0 @@
|
|||||||
From ecd21eff1601e0ef666b80e0709eacbd4754250c Mon Sep 17 00:00:00 2001
|
|
||||||
From: John Kacur <jkacur@redhat.com>
|
|
||||||
Date: Tue, 6 Dec 2022 14:35:49 -0500
|
|
||||||
Subject: rteval: xmlout.py: Convert to f-strings where possible
|
|
||||||
|
|
||||||
Convert xmlout.py to f-strings where possible
|
|
||||||
|
|
||||||
Signed-off-by: John Kacur <jkacur@redhat.com>
|
|
||||||
---
|
|
||||||
rteval/xmlout.py | 10 +++++-----
|
|
||||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/rteval/xmlout.py b/rteval/xmlout.py
|
|
||||||
index a955fb11c77a..b549cc87a2cc 100644
|
|
||||||
--- a/rteval/xmlout.py
|
|
||||||
+++ b/rteval/xmlout.py
|
|
||||||
@@ -67,7 +67,7 @@ class XMLOut:
|
|
||||||
|
|
||||||
def __del__(self):
|
|
||||||
if self.level > 0:
|
|
||||||
- raise RuntimeError("XMLOut: open blocks at __del__ (last opened '%s')" % self.currtag.name)
|
|
||||||
+ raise RuntimeError(f"XMLOut: open blocks at __del__ (last opened '{self.currtag.name}')")
|
|
||||||
if self.xmldoc is not None:
|
|
||||||
self.xmldoc.freeDoc()
|
|
||||||
|
|
||||||
@@ -131,7 +131,7 @@ class XMLOut:
|
|
||||||
self.__parseToXML(n, v)
|
|
||||||
node.addChild(n)
|
|
||||||
else:
|
|
||||||
- raise TypeError("unhandled type (%s) for value '%s'" % (type(data), str(data)))
|
|
||||||
+ raise TypeError(f"unhandled type ({str(type(data))}) for value '{str(data)}'")
|
|
||||||
|
|
||||||
def close(self):
|
|
||||||
if self.status == 0:
|
|
||||||
@@ -139,7 +139,7 @@ class XMLOut:
|
|
||||||
if self.status == 3:
|
|
||||||
raise RuntimeError("XMLOut: XML document already closed")
|
|
||||||
if self.level > 0:
|
|
||||||
- raise RuntimeError("XMLOut: open blocks at close() (last opened '%s')" % self.currtag.name)
|
|
||||||
+ raise RuntimeError(f"XMLOut: open blocks at close() (last opened '{self.currtag.name}')")
|
|
||||||
|
|
||||||
if self.status == 1: # Only set the root node in the doc on created reports (NewReport called)
|
|
||||||
self.xmldoc.setRootElement(self.xmlroot)
|
|
||||||
@@ -172,7 +172,7 @@ class XMLOut:
|
|
||||||
root = self.xmldoc.children
|
|
||||||
if root.name != self.roottag:
|
|
||||||
self.status = 3
|
|
||||||
- raise RuntimeError("XMLOut: Loaded report is not a valid %s XML file" % self.roottag)
|
|
||||||
+ raise RuntimeError(f"XMLOut: Loaded report is not a valid {self.roottag} XML file")
|
|
||||||
|
|
||||||
if validate_version is True:
|
|
||||||
ver = root.hasProp('version')
|
|
||||||
@@ -183,7 +183,7 @@ class XMLOut:
|
|
||||||
|
|
||||||
if ver.getContent() != self.version:
|
|
||||||
self.status = 3
|
|
||||||
- raise RuntimeError("XMLOut: Loaded report is not of version %s" % self.version)
|
|
||||||
+ raise RuntimeError(f"XMLOut: Loaded report is not of version {self.version}")
|
|
||||||
|
|
||||||
self.status = 2 # Confirm that we have loaded a report from file
|
|
||||||
|
|
||||||
--
|
|
||||||
2.40.1
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
Name: rteval
|
Name: rteval
|
||||||
Version: 3.7
|
Version: 3.7
|
||||||
Release: 1%{?dist}
|
Release: 2%{?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
|
||||||
@ -31,6 +31,7 @@ Requires: dwarves
|
|||||||
BuildArch: noarch
|
BuildArch: noarch
|
||||||
|
|
||||||
#Patches
|
#Patches
|
||||||
|
Patch1: rteval-Change-the-default-kernel-for-kcompile.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
|
||||||
@ -43,6 +44,7 @@ to the screen.
|
|||||||
|
|
||||||
%prep
|
%prep
|
||||||
%setup -q
|
%setup -q
|
||||||
|
%patch1 -p1
|
||||||
|
|
||||||
%build
|
%build
|
||||||
%{__python3} setup.py build
|
%{__python3} setup.py build
|
||||||
@ -64,6 +66,10 @@ to the screen.
|
|||||||
%{_bindir}/rteval
|
%{_bindir}/rteval
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Thu Nov 09 2023 John Kacur <jkacur@redhat.com> - 3.7-2
|
||||||
|
- Update rteval to use linux-6.6.1 as the default kernel for kcompile
|
||||||
|
Resolves: RHEL-14483
|
||||||
|
|
||||||
* Tue Oct 24 2023 John Kacur <jkacur@redhat.com> - 3.7-1
|
* Tue Oct 24 2023 John Kacur <jkacur@redhat.com> - 3.7-1
|
||||||
- Rebase to rteval-3.7 upstream
|
- Rebase to rteval-3.7 upstream
|
||||||
jiraProject == RHEL-7863
|
jiraProject == RHEL-7863
|
||||||
|
Loading…
Reference in New Issue
Block a user