From 768daa63ec8e2299da53afe081e7304b37fc91cf Mon Sep 17 00:00:00 2001 From: Tomas Glozar Date: Wed, 29 Nov 2023 10:34:55 +0100 Subject: [PATCH 2/9] rteval: Minor improvements to CpuList class - Remove unnecessary if-else from online_file_exists - Use cpupath in online_file_exists - In is_online, remove check for n in cpuset and make it static - Mark also the remaining methods static since they do not rely on any fields of the class Signed-off-by: Tomas Glozar - Removed incorrect line from commit message Signed-off-by: John Kacur --- rteval/systopology.py | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/rteval/systopology.py b/rteval/systopology.py index ea8e242..60ac8e8 100644 --- a/rteval/systopology.py +++ b/rteval/systopology.py @@ -82,12 +82,17 @@ class CpuList: def __len__(self): return len(self.cpulist) + def getcpulist(self): + """ return the list of cpus tracked """ + return self.cpulist + @staticmethod def online_file_exists(): """ Check whether machine / kernel is configured with online file """ - if os.path.exists('/sys/devices/system/cpu/cpu1/online'): - return True - return False + # Note: some machines do not have cpu0/online so we check cpu1/online. + # In the case of machines with a single CPU, there is no cpu1, but + # that is not a problem, since a single CPU cannot be offline + return os.path.exists(os.path.join(CpuList.cpupath, "cpu1/online")) @staticmethod def isolated_file_exists(): @@ -147,14 +152,9 @@ class CpuList: result.append(a) return [int(i) for i in list(set(result))] - def getcpulist(self): - """ return the list of cpus tracked """ - return self.cpulist - - def is_online(self, n): + @staticmethod + def is_online(n): """ check whether cpu n is online """ - if n not in self.cpulist: - raise RuntimeError(f"invalid cpu number {n}") path = os.path.join(CpuList.cpupath, f'cpu{n}') # Some hardware doesn't allow cpu0 to be turned off @@ -163,16 +163,17 @@ class CpuList: return sysread(path, "online") == "1" - def online_cpulist(self, cpulist): + @staticmethod + def online_cpulist(cpulist): """ Given a cpulist, return a cpulist of online cpus """ # This only works if the sys online files exist - if not self.online_file_exists(): + if not CpuList.online_file_exists(): return cpulist newlist = [] for cpu in cpulist: - if not self.online_file_exists() and cpu == '0': + if not CpuList.online_file_exists() and cpu == '0': newlist.append(cpu) - elif self.is_online(int(cpu)): + elif CpuList.is_online(int(cpu)): newlist.append(cpu) return newlist -- 2.43.0