1b96f97cfSPawel Wodkowski#!/usr/bin/env python3 2*17538bdcSpaul luse# SPDX-License-Identifier: BSD-3-Clause 3*17538bdcSpaul luse# Copyright (C) 2017 Intel Corporation 4*17538bdcSpaul luse# All rights reserved. 5*17538bdcSpaul luse# 6*17538bdcSpaul luse 71edd9bf3SJim Harrisfrom collections import namedtuple 81edd9bf3SJim Harrisfrom itertools import islice 91edd9bf3SJim Harrisimport operator 101edd9bf3SJim Harrisimport sys 111edd9bf3SJim Harris 121edd9bf3SJim Harristotal_samples = 0 131edd9bf3SJim Harristhread_module_samples = {} 141edd9bf3SJim Harrisfunction_module_samples = {} 151edd9bf3SJim Harrismodule_samples = {} 161edd9bf3SJim Harristhreads = set() 171edd9bf3SJim Harris 181edd9bf3SJim HarrisThreadModule = namedtuple('ThreadModule', ['thread', 'module']) 191edd9bf3SJim HarrisFunctionModule = namedtuple('FunctionModule', ['function', 'module']) 201edd9bf3SJim Harris 211edd9bf3SJim Harriswith open(sys.argv[1] + "/" + sys.argv[2] + ".perf.txt") as f: 221edd9bf3SJim Harris for line in f: 231edd9bf3SJim Harris fields = line.split() 241edd9bf3SJim Harris total_samples += int(fields[1]) 251edd9bf3SJim Harris key = ThreadModule(fields[2], fields[3]) 261edd9bf3SJim Harris thread_module_samples.setdefault(key, 0) 271edd9bf3SJim Harris thread_module_samples[key] += int(fields[1]) 281edd9bf3SJim Harris key = FunctionModule(fields[5], fields[3]) 291edd9bf3SJim Harris function_module_samples.setdefault(key, 0) 301edd9bf3SJim Harris function_module_samples[key] += int(fields[1]) 311edd9bf3SJim Harris threads.add(fields[2]) 321edd9bf3SJim Harris 331edd9bf3SJim Harris key = fields[3] 341edd9bf3SJim Harris module_samples.setdefault(key, 0) 351edd9bf3SJim Harris module_samples[key] += int(fields[1]) 361edd9bf3SJim Harris 371edd9bf3SJim Harrisfor thread in sorted(threads): 381edd9bf3SJim Harris thread_pct = 0 39b96f97cfSPawel Wodkowski print("") 401edd9bf3SJim Harris print("Thread: {:s}".format(thread)) 411edd9bf3SJim Harris print(" Percent Module") 421edd9bf3SJim Harris print("============================") 43b96f97cfSPawel Wodkowski for key, value in sorted(list(thread_module_samples.items()), key=operator.itemgetter(1), reverse=True): 441edd9bf3SJim Harris if key.thread == thread: 451edd9bf3SJim Harris print("{:8.4f} {:20s}".format(float(value) * 100 / total_samples, key.module)) 461edd9bf3SJim Harris thread_pct += float(value) * 100 / total_samples 471edd9bf3SJim Harris print("============================") 481edd9bf3SJim Harris print("{:8.4f} Total".format(thread_pct)) 491edd9bf3SJim Harris 50b96f97cfSPawel Wodkowskiprint("") 511edd9bf3SJim Harrisprint(" Percent Module Function") 521edd9bf3SJim Harrisprint("=================================================================") 53b96f97cfSPawel Wodkowskifor key, value in islice(sorted(list(function_module_samples.items()), key=operator.itemgetter(1), reverse=True), 100): 54b96f97cfSPawel Wodkowski print(("{:8.4f} {:20s} {:s}".format(float(value) * 100 / total_samples, key.module, key.function))) 551edd9bf3SJim Harris 56b96f97cfSPawel Wodkowskiprint("") 57b96f97cfSPawel Wodkowskiprint("") 581edd9bf3SJim Harrisprint(" Percent Module") 591edd9bf3SJim Harrisprint("=================================") 60b96f97cfSPawel Wodkowskifor key, value in sorted(list(module_samples.items()), key=operator.itemgetter(1), reverse=True): 611edd9bf3SJim Harris print("{:8.4f} {:s}".format(float(value) * 100 / total_samples, key)) 621edd9bf3SJim Harris 63b96f97cfSPawel Wodkowskiprint("") 641edd9bf3SJim Harriswith open(sys.argv[1] + "/" + sys.argv[2] + "_db_bench.txt") as f: 651edd9bf3SJim Harris for line in f: 661edd9bf3SJim Harris if "maxresident" in line: 671edd9bf3SJim Harris fields = line.split() 681edd9bf3SJim Harris print("Wall time elapsed: {:s}".format(fields[2].split("e")[0])) 691edd9bf3SJim Harris print("CPU utilization: {:s}".format(fields[3].split('C')[0])) 701edd9bf3SJim Harris user = float(fields[0].split('u')[0]) 711edd9bf3SJim Harris system = float(fields[1].split('s')[0]) 721edd9bf3SJim Harris print("User: {:8.2f} ({:5.2f}%)".format(user, user * 100 / (user + system))) 731edd9bf3SJim Harris print("System: {:8.2f} ({:5.2f}%)".format(system, system * 100 / (user + system))) 741edd9bf3SJim Harris 75b96f97cfSPawel Wodkowskiprint("") 76