mirror of
				https://github.com/ClusterCockpit/cc-metric-collector.git
				synced 2025-11-04 02:35:07 +01:00 
			
		
		
		
	Add script to help create configs for LikwidCollector
This commit is contained in:
		
							
								
								
									
										83
									
								
								scripts/likwid_perfgroup_to_cc_config.py
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										83
									
								
								scripts/likwid_perfgroup_to_cc_config.py
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,83 @@
 | 
			
		||||
#!/usr/bin/env python3
 | 
			
		||||
 | 
			
		||||
import os, os.path, sys, getopt, re, json
 | 
			
		||||
 | 
			
		||||
def which(cmd):
 | 
			
		||||
    ospath = os.environ.get("PATH", "")
 | 
			
		||||
    for p in ospath.split(":"):
 | 
			
		||||
        testcmd = os.path.join(p, cmd)
 | 
			
		||||
        if os.access(testcmd, os.X_OK):
 | 
			
		||||
            return testcmd
 | 
			
		||||
    return None
 | 
			
		||||
 | 
			
		||||
def group_to_json(groupfile):
 | 
			
		||||
    gdata = []
 | 
			
		||||
    with open(groupfile, "r") as fp:
 | 
			
		||||
        gdata = fp.read().strip().split("\n")
 | 
			
		||||
    events = {}
 | 
			
		||||
    metrics = []
 | 
			
		||||
    parse_events = False
 | 
			
		||||
    parse_metrics = False
 | 
			
		||||
    for line in gdata:
 | 
			
		||||
        if line == "EVENTSET":
 | 
			
		||||
            parse_events = True
 | 
			
		||||
            parse_metrics = False
 | 
			
		||||
            continue
 | 
			
		||||
        if line == "METRICS":
 | 
			
		||||
            parse_events = False
 | 
			
		||||
            parse_metrics = True
 | 
			
		||||
            continue
 | 
			
		||||
        if len(line) == 0 or line.startswith("SHORT") or line == "LONG":
 | 
			
		||||
            parse_events = False
 | 
			
		||||
            parse_metrics = False
 | 
			
		||||
            continue
 | 
			
		||||
        if parse_events:
 | 
			
		||||
            m = re.match("([\w\d]+)\s+([\w\d_]+)", line)
 | 
			
		||||
            if m:
 | 
			
		||||
                events[m.group(1)] = m.group(2)
 | 
			
		||||
        if parse_metrics:
 | 
			
		||||
            llist = re.split("\s+", line)
 | 
			
		||||
            calc = llist[-1]
 | 
			
		||||
            metric = " ".join(llist[:-1])
 | 
			
		||||
            scope = "hwthread"
 | 
			
		||||
            if "BOX" in calc:
 | 
			
		||||
                scope = "socket"
 | 
			
		||||
            if "PWR" in calc:
 | 
			
		||||
                scope = "socket"
 | 
			
		||||
 | 
			
		||||
            m = {"name" : metric, "calc": calc, "scope" : scope, "publish" : True}
 | 
			
		||||
            metrics.append(m)
 | 
			
		||||
    return {"events" : events, "metrics" : metrics}
 | 
			
		||||
 | 
			
		||||
if len(sys.argv) != 3:
 | 
			
		||||
    print("Usage: $0 <likwid-arch> <group-name>")
 | 
			
		||||
    sys.exit(1)
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
arch = sys.argv[1]
 | 
			
		||||
group = sys.argv[2]
 | 
			
		||||
 | 
			
		||||
ltopo = which("likwid-topology")
 | 
			
		||||
if not ltopo:
 | 
			
		||||
    print("Cannot find LIKWID installation. Please add LIKWID bin folder to your PATH.")
 | 
			
		||||
    sys.exit(1)
 | 
			
		||||
 | 
			
		||||
bindir = os.path.dirname(ltopo)
 | 
			
		||||
 | 
			
		||||
groupdir = os.path.normpath(os.path.join(bindir, "../share/likwid/perfgroups"))
 | 
			
		||||
if not os.path.exists(groupdir):
 | 
			
		||||
    print("Cannot find LIKWID performance groups in default install location")
 | 
			
		||||
    sys.exit(1)
 | 
			
		||||
 | 
			
		||||
archdir = os.path.join(groupdir, arch)
 | 
			
		||||
if not os.path.exists(archdir):
 | 
			
		||||
    print("Cannot find LIKWID performance groups for architecture {}".format(arch))
 | 
			
		||||
    sys.exit(1)
 | 
			
		||||
 | 
			
		||||
groupfile = os.path.join(archdir, "{}.txt".format(group))
 | 
			
		||||
if not os.path.exists(groupfile):
 | 
			
		||||
    print("Cannot find LIKWID performance group {} for architecture {}".format(group, arch))
 | 
			
		||||
    sys.exit(1)
 | 
			
		||||
 | 
			
		||||
gdata = group_to_json(groupfile)
 | 
			
		||||
print(json.dumps(gdata, sort_keys=True, indent=2))
 | 
			
		||||
		Reference in New Issue
	
	Block a user