rt-tests: hwlatdetect: Remove unused class Kmod

- Remove class Kmod
  Kmod was used for loading and unloading of a kernel module, but
  hwlatdetect uses ftrace now so this class is unneeded.
- Improve the spacing in the code

Signed-off-by: John Kacur <jkacur@redhat.com>
This commit is contained in:
John Kacur 2021-11-11 12:48:16 -05:00
parent d8d954f896
commit 6293cf61fb
1 changed files with 19 additions and 88 deletions

View File

@ -20,14 +20,17 @@ debugging = False
quiet = False
watch = False
def debug(str):
if debugging:
print(str)
def info(str):
if not quiet:
print(str)
#
# Class used to manage mounting and umounting the debugfs
# filesystem. Note that if an instance of this class mounts
@ -78,7 +81,7 @@ class DebugFS:
with open(path) as f:
val = f.readline()
else:
f = os.fdopen(os.open(path, os.O_RDONLY|os.O_NONBLOCK), "r")
f = os.fdopen(os.open(path, os.O_RDONLY | os.O_NONBLOCK), "r")
try:
val = f.readline()
except OSError as e:
@ -104,89 +107,19 @@ class DebugFS:
def getpath(self, item):
return os.path.join(self.mountpoint, item)
# Exception class for when tracer is not available
class DetectorNotAvailable(Exception):
""" Exception class for when tracer is not available """
def __init__(self, name, msg):
self.args = (name, msg)
self.name = name
self.msg = msg
#
# Class used to manage loading and unloading of the
# hwlat kernel module. Like the debugfs class
# above, if the module is already loaded, this class will
# leave it alone when cleaning up.
#
class Kmod:
''' class to manage loading and unloading of kernel modules'''
names = ("hwlat_detector", "smi_detector")
def __check_builtin(self):
for l in open(os.path.join('/lib/modules', os.uname()[2], 'modules.builtin'), "r"):
if self.name in l:
debug("found %s as builtin" % self.namename)
return True
return False
def __find_module(self):
debug("looking for module %s" % self.name)
path = os.path.join("/lib/modules",
os.uname()[2],
"kernel/drivers/misc")
debug("module path: %s" % path)
mpath = os.path.join(path, self.name) + ".ko"
debug("checking %s" % mpath)
if os.path.exists(mpath):
return True
return False
def __init__(self, name):
if name not in Kmod.names:
raise RuntimeError("unsupported module name: %s" % name)
if name == "smi_detector":
raise RuntimeError("smi_detector module no longer supported!")
self.name = name
self.preloaded = False
self.builtin = False
# check for builtin
if self.__check_builtin():
self.builtin = True
return
# now look for already loaded module
for l in open('/proc/modules'):
field = l.split()
if self.name in field[0]:
self.preloaded = True
debug("using already loaded %s" % self.name)
return
if not self.__find_module():
raise DetectorNotAvailable(name, "module %s does not exist!" % self.name)
def load(self):
if self.builtin:
debug("not loading %s (builtin)" % self.name)
return True
if self.preloaded:
debug("not loading %s (already loaded)" % self.name)
return True
cmd = ['/sbin/modprobe', self.name]
return subprocess.call(cmd) == 0
def unload(self):
if self.preloaded or self.builtin:
debug("Not unloading %s" % self.name)
return True
cmd = ['/sbin/modprobe', '-r', self.name]
return subprocess.call(cmd) == 0
#
# base class for detection modules
#
class Detector:
'''base class for detector modules'''
""" base class for detector modules """
def __init__(self):
self.type = "unknown"
if os.getuid() != 0:
@ -195,7 +128,7 @@ class Detector:
if not self.debugfs.mount():
raise RuntimeError("failed to mount debugfs")
self.samples = []
self.testduration = 30 # ten seconds
self.testduration = 30 # ten seconds
self.have_msr = False
self.initsmi = []
if os.path.exists('/usr/sbin/rdmsr'):
@ -283,11 +216,11 @@ class Detector:
@abc.abstractmethod
def detect(self):
''' get detector output '''
#
# class to handle running the hwlat tracer module of ftrace
#
class Tracer(Detector):
'''class to wrap access to ftrace hwlat tracer'''
""" Class to handle running the hwlat tracer module of ftrace """
__field_translation = {
'width' : "hwlat_detector/width",
'window' : "hwlat_detector/window",
@ -298,9 +231,10 @@ class Tracer(Detector):
class Sample:
'private class for tracer sample data'
__slots__ = 'timestamp', 'inner', 'outer'
def __init__(self, line):
fields = line.split()
i,o = fields[6].split('/')
i, o = fields[6].split('/')
ts = fields[7][3:]
self.timestamp = str(ts)
self.inner = int(i)
@ -383,7 +317,6 @@ class Tracer(Detector):
f.write("%s\n" % str(s))
print("report saved to %s (%d samples)" % (output, len(self.samples)))
def display(self):
for s in self.samples:
s.display()
@ -414,6 +347,7 @@ def seconds(str):
else:
raise RuntimeError("invalid input for seconds: '%s'" % str)
def milliseconds(str):
"convert input string to millsecond value"
if str.isdigit():
@ -443,9 +377,6 @@ def microseconds(str):
else:
raise RuntimeError("invalid input for microseconds: '%s'" % str)
#
# main starts here
#
if __name__ == '__main__':
from argparse import ArgumentParser
@ -533,7 +464,7 @@ if __name__ == '__main__':
if args.duration:
detect.testduration = seconds(args.duration)
else:
detect.testduration = 120 # 2 minutes
detect.testduration = 120 # 2 minutes
debug("test duration is %ds" % detect.testduration)
if args.watch:
@ -569,7 +500,7 @@ if __name__ == '__main__':
if detect.have_msr:
finishsmi = detect.getsmicounts()
total_smis = 0
for i,count in enumerate(finishsmi):
for i, count in enumerate(finishsmi):
if count > detect.initsmi[i]:
smis = count - detect.initsmi[i]
total_smis += smis