1#!/usr/bin/env python3 2# SPDX-License-Identifier: BSD-3-Clause 3# Copyright (C) 2017 Intel Corporation 4# All rights reserved. 5# 6 7from collections import namedtuple 8from itertools import islice 9import operator 10import sys 11 12total_samples = 0 13thread_module_samples = {} 14function_module_samples = {} 15module_samples = {} 16threads = set() 17 18ThreadModule = namedtuple('ThreadModule', ['thread', 'module']) 19FunctionModule = namedtuple('FunctionModule', ['function', 'module']) 20 21with open(sys.argv[1] + "/" + sys.argv[2] + ".perf.txt") as f: 22 for line in f: 23 fields = line.split() 24 total_samples += int(fields[1]) 25 key = ThreadModule(fields[2], fields[3]) 26 thread_module_samples.setdefault(key, 0) 27 thread_module_samples[key] += int(fields[1]) 28 key = FunctionModule(fields[5], fields[3]) 29 function_module_samples.setdefault(key, 0) 30 function_module_samples[key] += int(fields[1]) 31 threads.add(fields[2]) 32 33 key = fields[3] 34 module_samples.setdefault(key, 0) 35 module_samples[key] += int(fields[1]) 36 37for thread in sorted(threads): 38 thread_pct = 0 39 print("") 40 print("Thread: {:s}".format(thread)) 41 print(" Percent Module") 42 print("============================") 43 for key, value in sorted(list(thread_module_samples.items()), key=operator.itemgetter(1), reverse=True): 44 if key.thread == thread: 45 print("{:8.4f} {:20s}".format(float(value) * 100 / total_samples, key.module)) 46 thread_pct += float(value) * 100 / total_samples 47 print("============================") 48 print("{:8.4f} Total".format(thread_pct)) 49 50print("") 51print(" Percent Module Function") 52print("=================================================================") 53for key, value in islice(sorted(list(function_module_samples.items()), key=operator.itemgetter(1), reverse=True), 100): 54 print(("{:8.4f} {:20s} {:s}".format(float(value) * 100 / total_samples, key.module, key.function))) 55 56print("") 57print("") 58print(" Percent Module") 59print("=================================") 60for key, value in sorted(list(module_samples.items()), key=operator.itemgetter(1), reverse=True): 61 print("{:8.4f} {:s}".format(float(value) * 100 / total_samples, key)) 62 63print("") 64with open(sys.argv[1] + "/" + sys.argv[2] + "_db_bench.txt") as f: 65 for line in f: 66 if "maxresident" in line: 67 fields = line.split() 68 print("Wall time elapsed: {:s}".format(fields[2].split("e")[0])) 69 print("CPU utilization: {:s}".format(fields[3].split('C')[0])) 70 user = float(fields[0].split('u')[0]) 71 system = float(fields[1].split('s')[0]) 72 print("User: {:8.2f} ({:5.2f}%)".format(user, user * 100 / (user + system))) 73 print("System: {:8.2f} ({:5.2f}%)".format(system, system * 100 / (user + system))) 74 75print("") 76