From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753465AbbLNRra (ORCPT ); Mon, 14 Dec 2015 12:47:30 -0500 Received: from mail.kernel.org ([198.145.29.136]:48812 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753287AbbLNRr1 (ORCPT ); Mon, 14 Dec 2015 12:47:27 -0500 Date: Mon, 14 Dec 2015 14:47:23 -0300 From: Arnaldo Carvalho de Melo To: Namhyung Kim Cc: Ingo Molnar , Peter Zijlstra , Jiri Olsa , LKML , David Ahern , Steven Rostedt , Frederic Weisbecker , Andi Kleen , Wang Nan Subject: Re: [RFC/PATCHSET 0/6] perf tools: Support dynamic sort keys for tracepoints (v1) Message-ID: <20151214174723.GT6843@kernel.org> References: <1450107973-2447-1-git-send-email-namhyung@kernel.org> MIME-Version: 1.0 Content-Type: text/plain; charset=us-ascii Content-Disposition: inline In-Reply-To: <1450107973-2447-1-git-send-email-namhyung@kernel.org> X-Url: http://acmel.wordpress.com User-Agent: Mutt/1.5.23 (2014-03-12) Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Em Tue, Dec 15, 2015 at 12:46:07AM +0900, Namhyung Kim escreveu: > Hello, > > This is an attempt to improve perf to deal with tracepoint events > better. The perf tools can handle tracepoint events but perf report > on them is less useful since they're always sampled in a fixed > location and not provide event specific info. We can use perf script > but I always wishes there's more convenient way to see the result. > > I suggest dynamic sort keys created for each event.field on demand. > Consider following example: > > # Overhead Command Shared Object Symbol > # ........ ............... ................ .............. > # > 47.22% swapper [kernel.vmlinux] [k] __schedule > 21.67% transmission-gt [kernel.vmlinux] [k] __schedule > 8.23% netctl-auto [kernel.vmlinux] [k] __schedule > 5.53% kworker/0:1H [kernel.vmlinux] [k] __schedule > 1.98% Xephyr [kernel.vmlinux] [k] __schedule > 1.33% irq/33-iwlwifi [kernel.vmlinux] [k] __schedule > 1.17% wpa_cli [kernel.vmlinux] [k] __schedule > 1.13% rcu_preempt [kernel.vmlinux] [k] __schedule > 0.85% ksoftirqd/0 [kernel.vmlinux] [k] __schedule > 0.77% Timer [kernel.vmlinux] [k] __schedule > ... > > Currently perf report only shows this but important info is on the > event fields, that is: > > # sudo cat /sys/kernel/debug/tracing/events/sched/sched_switch/format > name: sched_switch > ID: 268 > format: > field:unsigned short common_type; offset:0; size:2; signed:0; > field:unsigned char common_flags; offset:2; size:1; signed:0; > field:unsigned char common_preempt_count; offset:3; size:1; signed:0; > field:int common_pid; offset:4; size:4; signed:1; > > field:char prev_comm[16]; offset:8; size:16; signed:1; > field:pid_t prev_pid; offset:24; size:4; signed:1; > field:int prev_prio; offset:28; size:4; signed:1; > field:long prev_state; offset:32; size:8; signed:1; > field:char next_comm[16]; offset:40; size:16; signed:1; > field:pid_t next_pid; offset:56; size:4; signed:1; > field:int next_prio; offset:60; size:4; signed:1; > > print fmt: "prev_comm=%s prev_pid=%d prev_prio=%d prev_state=%s%s ==> > next_comm=%s next_pid=%d next_prio=%d", > REC->prev_comm, REC->prev_pid, REC->prev_prio, > REC->prev_state & (2048-1) ? __print_flags(REC->prev_state & (2048-1), > "|", { 1, "S"} , { 2, "D" }, { 4, "T" }, { 8, "t" }, { 16, "Z" }, { 32, "X" }, > { 64, "x" }, { 128, "K"}, { 256, "W" }, { 512, "P" }, { 1024, "N" }) : "R", > REC->prev_state & 2048 ? "+" : "", REC->next_comm, REC->next_pid, REC->next_prio > > With dynamic sort keys, you can use as a sort key. Those > dynamic keys are checked and created on demand. For instance, below is > to sort by next_pid field on the same data file. > > $ perf report -s comm,sched:sched_switch.next_pid --stdio > ... > # Overhead Command next_pid > # ........ ............... .......... > # > 21.23% transmission-gt 0 > 20.86% swapper 17773 > 6.62% netctl-auto 0 > 5.25% swapper 109 > 5.21% kworker/0:1H 0 > 1.98% Xephyr 0 > 1.98% swapper 6524 > 1.98% swapper 27478 > 1.37% swapper 27476 > 1.17% swapper 233 > > Multiple dynamic sort keys are also supported: > > $ perf report -s comm,sched:sched_switch.next_pid,sched:sched_switch.next_comm --stdio > ... > # Overhead Command next_pid next_comm > # ........ ............... .......... ................ > # > 20.86% swapper 17773 transmission-gt > 9.64% transmission-gt 0 swapper/0 > 9.16% transmission-gt 0 swapper/2 > 5.25% swapper 109 kworker/0:1H > 5.21% kworker/0:1H 0 swapper/0 > 2.14% netctl-auto 0 swapper/2 > 1.98% netctl-auto 0 swapper/0 > 1.98% swapper 6524 Xephyr > 1.98% swapper 27478 netctl-auto > 1.78% transmission-gt 0 swapper/3 > 1.53% Xephyr 0 swapper/0 > 1.29% netctl-auto 0 swapper/1 > 1.29% swapper 27476 netctl-auto > 1.21% netctl-auto 0 swapper/3 > 1.17% swapper 233 irq/33-iwlwifi > > Note that pid 0 exists for each cpu so have comm of 'swapper/N'. > This is available on 'perf/dynamic-sort-v1' branch in my tree > > git://git.kernel.org/pub/scm/linux/kernel/git/namhyung/linux-perf.git > > Any comments are welcome, thanks! > Namhyung I'll look at the patches for style, but the idea is so nice and natural I thought about blind merging it :-) - Arnaldo