@@ -254,6 +254,23 @@ def get_all_data_lines(input_file_path):
254254 return meta_data_lines , perf_events_lines , perf_data_lines
255255
256256
257+ # return the number of cpus in a set
258+ # example sets:
259+ # simple range: "0-95"
260+ # individual cpus: "1+4+5+9"
261+ # individual cpus and range(s): "1+4-7+9+12-14"
262+ def count_cpus_in_set (cpu_set ):
263+ count = 0
264+ subsets = cpu_set .split ("+" )
265+ for subset in subsets :
266+ if "-" in subset :
267+ low_high = subset .split ("-" )
268+ count += int (low_high [1 ]) - int (low_high [0 ]) + 1
269+ else :
270+ count += 1
271+ return count
272+
273+
257274# get_metadata
258275def get_metadata_as_dict (meta_data_lines , txns = None ):
259276 meta_data = {}
@@ -312,14 +329,7 @@ def get_metadata_as_dict(meta_data_lines, txns=None):
312329 assert len (docker_HASH ) == len (docker_SETS )
313330 meta_data ["CPUSETS" ] = {}
314331 for i , docker_SET in enumerate (docker_SETS ):
315- if "-" in docker_SET : # range of cpus
316- num_of_cpus = (
317- int (docker_SET .split ("-" )[1 ])
318- - int (docker_SET .split ("-" )[0 ])
319- + 1
320- )
321- else : # either one cpu, or a list of cpus separated by + sign
322- num_of_cpus = len (docker_SET .split ("+" ))
332+ num_of_cpus = count_cpus_in_set (docker_SET )
323333 meta_data ["CPUSETS" ][docker_HASH [i ]] = num_of_cpus
324334
325335 elif line .startswith ("Percpu mode" ):
@@ -542,9 +552,11 @@ def extract_dataframe(perf_data_lines, meta_data, perf_mode):
542552
543553 # fix metric name X.1, X.2, etc -> just X
544554 perf_data_df ["metric" ] = perf_data_df .apply (
545- lambda x : "." .join (x ["metric" ].split ("." )[:- 1 ])
546- if len (re .findall (r"^[0-9]*$" , x ["metric" ].split ("." )[- 1 ])) > 0
547- else x ["metric" ],
555+ lambda x : (
556+ "." .join (x ["metric" ].split ("." )[:- 1 ])
557+ if len (re .findall (r"^[0-9]*$" , x ["metric" ].split ("." )[- 1 ])) > 0
558+ else x ["metric" ]
559+ ),
548560 axis = 1 ,
549561 )
550562
@@ -844,11 +856,11 @@ def substitute_event_in_expression(
844856 if event_df .shape == (1 ,): # system wide
845857 if "sys" not in evaluated_expressions :
846858 evaluated_expressions ["sys" ] = exp_to_evaluate .replace (
847- "[" + event + "]" , str (event_df [0 ])
859+ "[" + event + "]" , str (event_df . iloc [0 ])
848860 )
849861 else :
850862 evaluated_expressions ["sys" ] = evaluated_expressions ["sys" ].replace (
851- "[" + event + "]" , str (event_df [0 ])
863+ "[" + event + "]" , str (event_df . iloc [0 ])
852864 )
853865 else :
854866 for index in event_df .index :
@@ -1016,9 +1028,7 @@ def generate_metrics(
10161028 + (
10171029 "System"
10181030 if perf_mode == Mode .System
1019- else "CPU"
1020- if perf_mode == Mode .CPU
1021- else "Socket"
1031+ else "CPU" if perf_mode == Mode .CPU else "Socket"
10221032 )
10231033 + " mode"
10241034 )
0 commit comments