From 16323765822e267935346bba9331179e6e807ac2 Mon Sep 17 00:00:00 2001 From: John Kacur Date: Fri, 15 Nov 2024 13:57:57 -0500 Subject: [PATCH] Rebase to upstream rteval-3.9 Resolves: RHEL-65483 Signed-off-by: John Kacur --- .gitignore | 1 + Updated-rteval-man-page.patch | 109 ---- rteval-Add-module-for-tuned-state.patch | 254 --------- rteval-Add-noload-option.patch | 190 ------- ...dd-tuned-state-to-rteval-text-report.patch | 46 -- ...ctionality-to-allow-user-to-set-the-.patch | 221 -------- ...al-Change-constant-name-to-uppercase.patch | 83 --- ...nly-one-latency-measurement-module-a.patch | 84 --- ...Fix-aNone-being-passed-to-cyclictest.patch | 45 -- rteval-Fix-default-measurement-config.patch | 42 -- ...ng-in-kcompile-of-the-kernel-to-comp.patch | 102 ---- ...port-traceback-when-utility-sos-not-.patch | 43 -- rteval-Remove-MeasurementProfile.patch | 463 --------------- ...-RtEvalModules-Remove-unused-methods.patch | 87 --- ...he-kcompile-kernel-to-linux-6.12-rc4.patch | 88 --- ...-Upgrade-load-kernel-to-linux-6.10.5.patch | 80 --- ...-manpage-to-include-stress-ng-header.patch | 31 -- ...nt-Change-latency-flag-to-latency_te.patch | 89 --- rteval-measurement-Remove-ModuleInfo.patch | 324 ----------- rteval-restore-all-load-module-options.patch | 103 ---- ...ctest-using-default-system-when-sett.patch | 71 --- ...onvert-base64-data-to-text-before-wr.patch | 65 --- ...erlat-Add-timerlat-tracing-to-rteval.patch | 526 ------------------ rteval-timerlat-tracing-clean-up.patch | 217 -------- rteval.spec | 31 +- sources | 2 +- 26 files changed, 8 insertions(+), 3389 deletions(-) delete mode 100644 Updated-rteval-man-page.patch delete mode 100644 rteval-Add-module-for-tuned-state.patch delete mode 100644 rteval-Add-noload-option.patch delete mode 100644 rteval-Add-tuned-state-to-rteval-text-report.patch delete mode 100644 rteval-Added-functionality-to-allow-user-to-set-the-.patch delete mode 100644 rteval-Change-constant-name-to-uppercase.patch delete mode 100644 rteval-Enforce-only-one-latency-measurement-module-a.patch delete mode 100644 rteval-Fix-aNone-being-passed-to-cyclictest.patch delete mode 100644 rteval-Fix-default-measurement-config.patch delete mode 100644 rteval-Fix-parsing-in-kcompile-of-the-kernel-to-comp.patch delete mode 100644 rteval-Fix-sysreport-traceback-when-utility-sos-not-.patch delete mode 100644 rteval-Remove-MeasurementProfile.patch delete mode 100644 rteval-RtEvalModules-Remove-unused-methods.patch delete mode 100644 rteval-Update-the-kcompile-kernel-to-linux-6.12-rc4.patch delete mode 100644 rteval-Upgrade-load-kernel-to-linux-6.10.5.patch delete mode 100644 rteval-fixed-manpage-to-include-stress-ng-header.patch delete mode 100644 rteval-measurement-Change-latency-flag-to-latency_te.patch delete mode 100644 rteval-measurement-Remove-ModuleInfo.patch delete mode 100644 rteval-restore-all-load-module-options.patch delete mode 100644 rteval-run-cyclictest-using-default-system-when-sett.patch delete mode 100644 rteval-sysstat-Convert-base64-data-to-text-before-wr.patch delete mode 100644 rteval-timerlat-Add-timerlat-tracing-to-rteval.patch delete mode 100644 rteval-timerlat-tracing-clean-up.patch diff --git a/.gitignore b/.gitignore index f55902a..a3c5025 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ /0002-rteval-Remove-upstream-spec-file.patch /rteval-3.8.tar.xz /linux-6.12-rc4.tar.gz +/rteval-3.9.tar.xz diff --git a/Updated-rteval-man-page.patch b/Updated-rteval-man-page.patch deleted file mode 100644 index 34c514d..0000000 --- a/Updated-rteval-man-page.patch +++ /dev/null @@ -1,109 +0,0 @@ -From 66b6c5851ea2241b6e368a1538dc10fd1f3f76f7 Mon Sep 17 00:00:00 2001 -From: Anubhav Shelat -Date: Wed, 5 Jun 2024 14:04:54 -0400 -Subject: [PATCH] Updated rteval man page - -The rteval man page should reflect the functionality of the -current iteration of rteval. Currently the rteval man page -reflects the functionality of an outdated version. This patch -removes deprecated options and adds options that have been -added in recent updates. - -Signed-off-by: Anubhav Shelat ---- - doc/rteval.8 | 50 +++++++++++++++++++++++++++++++++----------------- - 1 file changed, 33 insertions(+), 17 deletions(-) - -diff --git a/doc/rteval.8 b/doc/rteval.8 -index 578de370effa..264bf5207716 100644 ---- a/doc/rteval.8 -+++ b/doc/rteval.8 -@@ -63,6 +63,9 @@ for example to execute a ten minute run of rteval: - .B \-v, \-\-verbose - Increase the verbosity of output during the test run - .TP -+.B \-q, \-\-quiet -+Set rteval to run in quiet mode. -+.TP - .B \-w WORKDIR, \-\-workdir=WORKDIR - Tell rteval to change directory to WORKDIR before creating any - subdirectories for report files. The default WORKDIR is the directory -@@ -71,11 +74,8 @@ in which rteval was started. - .B \-l LOADDIR, \-\-loaddir=LOADDIR - Tell rteval where to find the source for the loads - .TP --.B \-\-loads\-cpulist=CPULIST --List of CPUs where loads will run --.TP --.B \-\-measurement-cpulist=CPULIST --List of CPUs where measurement applciation will run -+.B \-i INSTALLDIR, \-\-installdir=INSTALLDIR -+Tell rteval where to locate installed templates. - .TP - .B \-s, \-\-sysreport - Have rteval run the sysreport utility after a run to gather -@@ -103,11 +103,25 @@ Log the output of the loads in the report directory - .B \-O, \-\-onlyload - Only run the loads (don't run measurement threads) - .TP -+.B \-V, \-\-version -+Print rteval version and exit. -+.TP - .B \-S KERNEL_VERSION, \-\-source\-download=KERNEL_VERSION - download a source kernel from kernel.org and exit - -+.SH GROUP OPTIONS -+.TP -+.B \-\-loads\-cpulist=CPULIST -+List of CPUs where loads will run -+.TP -+.B \-\-measurement-cpulist=CPULIST -+List of CPUs where measurement applciation will run -+.TP -+.B \-\-measurement-run-on-isolcpus -+Include isolated CPUs in default cpulist -+ - --.SH MODULE OPTIONS -+.SH CYCLICTEST OPTIONS - These are options that affect the execution behavior of the measurement and load modules. - .TP - .B \-\-cyclictest-priority=PRIORITY -@@ -116,21 +130,23 @@ SCHED_FIFO priority for measurement threads (default: 95) - .B \-\-cyclictest-interval=INTERVAL - Measurement thread interval in microseconds (default: 100) - .TP --.B \-\-cyclictest-distance=DISTANCE --Interval increment in microseconds (default: 0) --.TP - .B \-\-cyclictest-buckets=NBUCKETS - Number of 1 microsecond histogram buckets (default: 3500) - .TP --.B \-\-hackbench-jobspercore=N --Number of jobs per online-core for hackbench load -+.B \-\-cyclictest-breaktrace=USEC -+Send a break trace command if latency exceeds the given number of microseconds. -+.TP -+.B \-\-cyclictest-threshold=USEC -+Exit rteval if latency exceeds the given number of microseconds. -+.TP -+.B \-\-stressng-option=OPTION -+Pass in command line options for the stress-ng package. -+.TP -+.B \-\-stressng-arg=ARG -+Pass in command line arguments for the stress-ng package. - .TP --.B \-\-kcompile-jobspercore=N --Number of jobs per online-core for kernel compile load --.\" .SH SEE ALSO --.\" .BR bar (1), --.\" .BR baz (1). --.\" .br -+.B \-\-stressng-timeout=T -+Timeout after T seconds. - - .SH FILES - .BR rteval-YYYYMMDD-S --- -2.45.1 - diff --git a/rteval-Add-module-for-tuned-state.patch b/rteval-Add-module-for-tuned-state.patch deleted file mode 100644 index a6f00d2..0000000 --- a/rteval-Add-module-for-tuned-state.patch +++ /dev/null @@ -1,254 +0,0 @@ -From 2b589a971f8895c81e13b5cfeb45879a28ea8cc6 Mon Sep 17 00:00:00 2001 -From: Tomas Glozar -Date: Wed, 24 Jul 2024 09:37:42 +0200 -Subject: [PATCH 1/2] rteval: Add module for tuned state - -Add a sysinfo module for collecting the tuned state. Three properties -are collected: -- whether tuned is present -- what the active tuned profile is -- whether tuned profile verification passes - -In case of a failed verification, the tuned log is also collected. - -Signed-off-by: Tomas Glozar -Signed-off-by: John Kacur ---- - rteval/sysinfo/__init__.py | 5 +- - rteval/sysinfo/tuned.py | 191 +++++++++++++++++++++++++++++++++++++ - 2 files changed, 195 insertions(+), 1 deletion(-) - create mode 100644 rteval/sysinfo/tuned.py - -diff --git a/rteval/sysinfo/__init__.py b/rteval/sysinfo/__init__.py -index 09af52e..4b7b03c 100644 ---- a/rteval/sysinfo/__init__.py -+++ b/rteval/sysinfo/__init__.py -@@ -15,10 +15,11 @@ from rteval.sysinfo.memory import MemoryInfo - from rteval.sysinfo.osinfo import OSInfo - from rteval.sysinfo.newnet import NetworkInfo - from rteval.sysinfo.cmdline import cmdlineInfo -+from rteval.sysinfo.tuned import TunedInfo - from rteval.sysinfo import dmi - - class SystemInfo(KernelInfo, SystemServices, dmi.DMIinfo, CPUtopology, -- MemoryInfo, OSInfo, NetworkInfo, cmdlineInfo): -+ MemoryInfo, OSInfo, NetworkInfo, cmdlineInfo, TunedInfo): - def __init__(self, config, logger=None): - self.__logger = logger - KernelInfo.__init__(self, logger=logger) -@@ -28,6 +29,7 @@ class SystemInfo(KernelInfo, SystemServices, dmi.DMIinfo, CPUtopology, - OSInfo.__init__(self, logger=logger) - cmdlineInfo.__init__(self, logger=logger) - NetworkInfo.__init__(self, logger=logger) -+ TunedInfo.__init__(self, logger=logger) - - # Parse initial DMI decoding errors - self.ProcessWarnings() -@@ -49,6 +51,7 @@ class SystemInfo(KernelInfo, SystemServices, dmi.DMIinfo, CPUtopology, - report_n.addChild(MemoryInfo.MakeReport(self)) - report_n.addChild(dmi.DMIinfo.MakeReport(self)) - report_n.addChild(cmdlineInfo.MakeReport(self)) -+ report_n.addChild(TunedInfo.MakeReport(self)) - - return report_n - -diff --git a/rteval/sysinfo/tuned.py b/rteval/sysinfo/tuned.py -new file mode 100644 -index 0000000..063fcbf ---- /dev/null -+++ b/rteval/sysinfo/tuned.py -@@ -0,0 +1,191 @@ -+# -*- coding: utf-8 -*- -+# SPDX-License-Identifier: GPL-2.0-or-later -+# -+# Copyright 2024 Tomas Glozar -+# -+"""tuned sysinfo module""" -+import shutil -+import subprocess -+import sys -+import libxml2 -+from rteval.Log import Log -+ -+TUNED_ADM = "tuned-adm" -+TUNED_LOG_PATH = "/var/log/tuned/tuned.log" -+TUNED_VERIFY_START_LINE = "INFO tuned.daemon.daemon: verifying " \ -+ "profile(s): realtime" -+ -+ -+def tuned_present(): -+ """ -+ Checks if tuned is present on the system -+ :return: True if tuned is present, False otherwise -+ """ -+ return shutil.which(TUNED_ADM) is not None -+ -+ -+def tuned_active_profile(): -+ """ -+ Gets tuned active profile. -+ :return: Tuned profile (as a string) or "unknown" -+ """ -+ try: -+ result = subprocess.check_output([TUNED_ADM, "active"]) -+ except (OSError, subprocess.CalledProcessError): -+ return "unknown" -+ result = result.decode("utf-8") -+ split_result = result.split(": ") -+ if len(split_result) < 2: -+ return "unknown" -+ return split_result[1].strip() -+ -+ -+def tuned_verify(): -+ """ -+ Verifies if tuned profile is applied properly -+ :return: "success", "failure" or "unknown" -+ """ -+ try: -+ result = subprocess.run([TUNED_ADM, "verify"], -+ stdout=subprocess.PIPE, check=False).stdout -+ except (OSError, subprocess.CalledProcessError): -+ return "unknown" -+ result = result.decode("utf-8") -+ if result.startswith("Verification succeeded"): -+ return "success" -+ if result.startswith("Verification failed"): -+ return "failure" -+ return "unknown" -+ -+ -+def tuned_get_log(): -+ """ -+ Read entries related to last profile verification from tuned log -+ :return: List of strings containing the entires, or None if no -+ verification is found in the log -+ """ -+ try: -+ with open(TUNED_LOG_PATH, "r", encoding="utf-8") as file: -+ lines = file.readlines() -+ # Find start of last verification -+ start = None -+ for i in reversed(range(len(lines))): -+ if TUNED_VERIFY_START_LINE in lines[i]: -+ start = i -+ break -+ if start is None: -+ return None -+ return lines[start:] -+ except OSError: -+ return None -+ -+ -+class TunedInfo: -+ """ -+ Gather information about tuned and make an XML report. -+ Collected information: -+ - whether tuned is present -+ - which tuned profile is active -+ - whether the tuned profile is applied correctly -+ - if not applied correctly, collect relevant info from log -+ """ -+ def __init__(self, logger=None): -+ self.__logger = logger -+ -+ def __log(self, logtype, msg): -+ if self.__logger: -+ self.__logger.log(logtype, msg) -+ -+ def tuned_state_get(self): -+ """ -+ Gets the state of tuned on the machine -+ :return: A dictionary describing the tuned state -+ """ -+ result = { -+ "present": tuned_present() -+ } -+ if not result["present"]: -+ self.__log(Log.DEBUG, "tuned-adm not found; skipping tuned " -+ "sysinfo collection") -+ return result -+ result["active_profile"] = tuned_active_profile() -+ if result["active_profile"] == "unknown": -+ self.__log(Log.DEBUG, "could not retrieve tuned active profile") -+ return result -+ result["verified"] = tuned_verify() -+ if result["verified"] == "unknown": -+ self.__log(Log.DEBUG, "could not verify tuned state") -+ if result["verified"] == "failure": -+ # Include log to see cause to failure -+ result["verification_log"] = tuned_get_log() -+ -+ return result -+ -+ def MakeReport(self): -+ """ -+ Create XML report -+ :return: libxml2 node containing the report -+ """ -+ tuned = self.tuned_state_get() -+ -+ rep_n = libxml2.newNode("Tuned") -+ rep_n.newProp("present", str(int(tuned["present"]))) -+ for key, value in tuned.items(): -+ if key == "present": -+ continue -+ child = libxml2.newNode(key) -+ if key == "verification_log": -+ if value is None: -+ self.__log(Log.WARN, "could not get verification log") -+ continue -+ for line in value: -+ #