rteval: Adding stressor validation for stress-ng
PATCH v5 1/1 rteval: Adding stressor validation for stress-ng
Previously stressor names were unvalidated.
This has been changed so that now if the user inputs an invalid stressor name, they get an error message telling them to check "stress-ng --stressors". The list of stressors is created dynamically during "WorkloadPrepare()"
Added error handling for when stress-ng is not installed
Signed-off-by Sana Sharma <[email protected]>
--- rteval/modules/loads/stressng.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
rteval/modules/loads/stressng.py +23 -0
@@ -5,11 +5,33 @@ import os.path import time import subprocess import signal +import sys from rteval.modules.loads import CommandLineLoad from rteval.Log import Log from rteval.systopology import SysTopology from rteval.cpulist_utils import CpuList +def get_valid_stressors(): + """Query stress-ng for list of valid stressor names.""" + try: + result = subprocess.run(['stress-ng', '--stressors'], + capture_output=True, text=True, check=True) + return result.stdout.strip().split() + except FileNotFoundError: + print("stress-ng is not installed. Please install the stress-ng package.") + sys.exit(1) + except subprocess.CalledProcessError as e: + print(f"Failed to query stress-ng stressors: {e}") + sys.exit(1) + +def validate_stressor(stressor_name): + """Validate a single stressor name against stress-ng's available stressors.""" + valid = get_valid_stressors() + if stressor_name not in valid: + print(f"Invalid stress-ng stressor: '{stressor_name}'. " + f"Run 'stress-ng --stressors' to see valid options.") + sys.exit(1) + class Stressng(CommandLineLoad): " This class creates a load module that runs stress-ng " def __init__(self, config, logger):
@@ -51,6 +73,7 @@ class Stressng(CommandLineLoad): # stress-ng is only run if the user specifies an stressor self.args = ['stress-ng'] + validate_stressor(self.cfg.stressor) self.args.append(f'--{str(self.cfg.stressor)}') if self.cfg.workers is not None: self.args.append(self.cfg.workers) #default is 0
Signature · 5 lines
2.54.0 -- Sana Sharma <[email protected]>
Quoted 12 lines · Sana Sharma
Previously stressor names were unvalidated.
This has been changed so that now if the user inputs an invalid stressor name, they get an error message telling them to check "stress-ng --stressors". The list of stressors is created dynamically during "WorkloadPrepare()"Added error handling for when stress-ng is not installed
Signed-off-by Sana Sharma <[email protected]>--- rteval/modules/loads/stressng.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+)
[snip]
Signed-off-by John Kacur <[email protected]>