Received: by 2002:ac0:a594:0:0:0:0:0 with SMTP id m20-v6csp2993769imm; Sun, 13 May 2018 01:43:54 -0700 (PDT) X-Google-Smtp-Source: AB8JxZq+44h5+b1gFYQ9PI4SSATvGvtLbqN4G5DFvjEYoBn1bb8UL6xf6iimI5/LIjmeWgB5E+Di X-Received: by 2002:a62:4fd8:: with SMTP id f85-v6mr5905313pfj.77.1526201034929; Sun, 13 May 2018 01:43:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1526201034; cv=none; d=google.com; s=arc-20160816; b=edyaNcvu2qBAYFjN69I04Coy3pw3UrXi3vZRtkPVdzjKpfZFglojJBDjhvGZDxJOpv BKutHyjRMdlgkoOBLMMrAgV5exyq5OIC6l0/lZ1U6wBVFnjmM87QoulJMiH7uTt+ij+Q kwYGHLIUR/IompTkFiVqCB4wppyG2tQYLhhnS3QBXCmtDl7DcH+ROZIMrN1ermFP0bu/ st18H7RR06g7GkDZZhrHCikJdUAx2elMmEdVYSMEkXoDzT0PLxbIDe8+whEasmL2BWB+ +ahlIlcY3hiquyfTplcZVTriMPIKpFBmwOzs0nwzAEMPOKqMPjzeIBI98d5HfJ+0rDwY /nnQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :arc-authentication-results; bh=g2XLe4nobFzHV+aKnVscVY5HquF3SHeVZdwFwdkyTS4=; b=QbSoNgR3uegI+1FWgS2iK2drm4bjBjp3aI7WD9cL8B4ZXK3he29G+21+ttITTNkTht woVXCM0vsbzbHmx1lt363D+pDz3F0/bROIkrv4FYv8vyq8tf1AKC+RDsaEiZakPTZwoP rRxp5IvS+RU7UaRt7nrtul5yxp+T75l76SeFTNLTL/hYEJJLkxeolEM3EHEAsNVcwLlv eL6oISgdSoQUSYB9phrC14vsuMnijV+0hvtprwe1n9JES22cohhPsDT3ZdnCYfVdzsaa /RCMLh1odOfKIxbdJOBGdFbn63CefRqoLosY7cBtlc9DTDgOEdoz3hJbRO55sx3lHrqm F7Fg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 5-v6si7067200plc.203.2018.05.13.01.43.40; Sun, 13 May 2018 01:43:54 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751182AbeEMInd (ORCPT + 99 others); Sun, 13 May 2018 04:43:33 -0400 Received: from cloudserver094114.home.pl ([79.96.170.134]:64200 "EHLO cloudserver094114.home.pl" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750850AbeEMInc (ORCPT ); Sun, 13 May 2018 04:43:32 -0400 Received: from 79.184.255.167.ipv4.supernova.orange.pl (79.184.255.167) (HELO aspire.rjw.lan) by serwer1319399.home.pl (79.96.170.134) with SMTP (IdeaSmtpServer 0.83) id aebf76a7f1603da9; Sun, 13 May 2018 10:43:30 +0200 From: "Rafael J. Wysocki" To: Doug Smythies , srinivas.pandruvada@linux.intel.com Cc: dsmythies@telus.net, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org Subject: Re: [PATCH] tools/power/x86/intel_pstate_tracer: Add optional setting of trace buffer memory allocation Date: Sun, 13 May 2018 10:43:02 +0200 Message-ID: <23851272.hyr4RImLsD@aspire.rjw.lan> In-Reply-To: <1525441582-23855-1-git-send-email-dsmythies@telus.net> References: <1525441582-23855-1-git-send-email-dsmythies@telus.net> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Friday, May 4, 2018 3:46:22 PM CEST Doug Smythies wrote: > Allow the user to override the default trace buffer memory allocation > by adding a command line option to override the default. > > The patch also: > > Adds a SIGINT (i.e. CTRL C exit) handler, > so that things can be cleaned up before exit. > > Moves the postion of some other cleanup from after to > before the potential "No valid data to plot" exit. > > Replaces all quit() calls with sys.exit, because > quit() is not supposed to be used in scripts. > > Signed-off-by: Doug Smythies Srinivas, any comments here? > --- > .../x86/intel_pstate_tracer/intel_pstate_tracer.py | 54 ++++++++++++++-------- > 1 file changed, 35 insertions(+), 19 deletions(-) > > diff --git a/tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py b/tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py > index 29f50d4..84e2b64 100755 > --- a/tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py > +++ b/tools/power/x86/intel_pstate_tracer/intel_pstate_tracer.py > @@ -28,6 +28,7 @@ import subprocess > import os > import time > import re > +import signal > import sys > import getopt > import Gnuplot > @@ -78,11 +79,12 @@ def print_help(): > print(' Or') > print(' ./intel_pstate_tracer.py [--cpu cpus] ---trace_file --name ') > print(' To generate trace file, parse and plot, use (sudo required):') > - print(' sudo ./intel_pstate_tracer.py [-c cpus] -i -n ') > + print(' sudo ./intel_pstate_tracer.py [-c cpus] -i -n -m ') > print(' Or') > - print(' sudo ./intel_pstate_tracer.py [--cpu cpus] --interval --name ') > + print(' sudo ./intel_pstate_tracer.py [--cpu cpus] --interval --name --memory ') > print(' Optional argument:') > - print(' cpus: comma separated list of CPUs') > + print(' cpus: comma separated list of CPUs') > + print(' kbytes: Kilo bytes of memory per CPU to allocate to the trace buffer. Default: 10240') > print(' Output:') > print(' If not already present, creates a "results/test_name" folder in the current working directory with:') > print(' cpu.csv - comma seperated values file with trace contents and some additional calculations.') > @@ -379,7 +381,7 @@ def clear_trace_file(): > f_handle.close() > except: > print('IO error clearing trace file ') > - quit() > + sys.exit(2) > > def enable_trace(): > """ Enable trace """ > @@ -389,7 +391,7 @@ def enable_trace(): > , 'w').write("1") > except: > print('IO error enabling trace ') > - quit() > + sys.exit(2) > > def disable_trace(): > """ Disable trace """ > @@ -399,17 +401,17 @@ def disable_trace(): > , 'w').write("0") > except: > print('IO error disabling trace ') > - quit() > + sys.exit(2) > > def set_trace_buffer_size(): > """ Set trace buffer size """ > > try: > - open('/sys/kernel/debug/tracing/buffer_size_kb' > - , 'w').write("10240") > + with open('/sys/kernel/debug/tracing/buffer_size_kb', 'w') as fp: > + fp.write(memory) > except: > - print('IO error setting trace buffer size ') > - quit() > + print('IO error setting trace buffer size ') > + sys.exit(2) > > def free_trace_buffer(): > """ Free the trace buffer memory """ > @@ -418,8 +420,8 @@ def free_trace_buffer(): > open('/sys/kernel/debug/tracing/buffer_size_kb' > , 'w').write("1") > except: > - print('IO error setting trace buffer size ') > - quit() > + print('IO error freeing trace buffer ') > + sys.exit(2) > > def read_trace_data(filename): > """ Read and parse trace data """ > @@ -431,7 +433,7 @@ def read_trace_data(filename): > data = open(filename, 'r').read() > except: > print('Error opening ', filename) > - quit() > + sys.exit(2) > > for line in data.splitlines(): > search_obj = \ > @@ -489,10 +491,22 @@ def read_trace_data(filename): > # Now seperate the main overall csv file into per CPU csv files. > split_csv() > > +def signal_handler(signal, frame): > + print(' SIGINT: Forcing cleanup before exit.') > + if interval: > + disable_trace() > + clear_trace_file() > + # Free the memory > + free_trace_buffer() > + sys.exit(0) > + > +signal.signal(signal.SIGINT, signal_handler) > + > interval = "" > filename = "" > cpu_list = "" > testname = "" > +memory = "10240" > graph_data_present = False; > > valid1 = False > @@ -501,7 +515,7 @@ valid2 = False > cpu_mask = zeros((MAX_CPUS,), dtype=int) > > try: > - opts, args = getopt.getopt(sys.argv[1:],"ht:i:c:n:",["help","trace_file=","interval=","cpu=","name="]) > + opts, args = getopt.getopt(sys.argv[1:],"ht:i:c:n:m:",["help","trace_file=","interval=","cpu=","name=","memory="]) > except getopt.GetoptError: > print_help() > sys.exit(2) > @@ -521,6 +535,8 @@ for opt, arg in opts: > elif opt in ("-n", "--name"): > valid2 = True > testname = arg > + elif opt in ("-m", "--memory"): > + memory = arg > > if not (valid1 and valid2): > print_help() > @@ -569,6 +585,11 @@ current_max_cpu = 0 > > read_trace_data(filename) > > +clear_trace_file() > +# Free the memory > +if interval: > + free_trace_buffer() > + > if graph_data_present == False: > print('No valid data to plot') > sys.exit(2) > @@ -593,9 +614,4 @@ for root, dirs, files in os.walk('.'): > for f in files: > fix_ownership(f) > > -clear_trace_file() > -# Free the memory > -if interval: > - free_trace_buffer() > - > os.chdir('../../') >