in perfrunbook/utilities/measure_and_plot_basic_pmu_counters.py [0:0]
def perfstat(time, period, cpus, counter_numerator, counter_denominator, __unused__):
"""
Measure performance counters using perf-stat in a subprocess. Return a CSV buffer of the values measured.
"""
try:
if not cpus:
res = subprocess.run(["lscpu", "-p=CPU"], check=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
output = io.StringIO(res.stdout.decode('utf-8'))
cpus = []
for line in output.readlines():
match = re.search(r'''^(\d+)$''', line)
if match is not None:
cpus.append(match.group(1))
res = subprocess.run(["perf", "stat", f"-C{','.join(cpus)}", f"-I{period}", "-x|", "-a", "-e", f"{counter_numerator}", "-e", f"{counter_denominator}", "--", "sleep", f"{time}"],
check=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
return io.StringIO(res.stdout.decode('utf-8'))
except subprocess.CalledProcessError:
print("Failed to measure performance counters.")
print("Please check that perf is installed using install_perfrunbook_dependencies.sh and in your PATH")
return None