From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.0 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6C82DC28CC5 for ; Thu, 6 Jun 2019 01:05:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 41B5220874 for ; Thu, 6 Jun 2019 01:05:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726729AbfFFBFV (ORCPT ); Wed, 5 Jun 2019 21:05:21 -0400 Received: from mga04.intel.com ([192.55.52.120]:56005 "EHLO mga04.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726543AbfFFBFU (ORCPT ); Wed, 5 Jun 2019 21:05:20 -0400 X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga104.fm.intel.com with ESMTP/TLS/DHE-RSA-AES256-GCM-SHA384; 05 Jun 2019 18:05:20 -0700 X-ExtLoop1: 1 Received: from yjin15-mobl.ccr.corp.intel.com (HELO [10.239.196.71]) ([10.239.196.71]) by orsmga002.jf.intel.com with ESMTP; 05 Jun 2019 18:05:17 -0700 Subject: Re: [PATCH v2 0/7] perf diff: diff cycles at basic block level To: Jiri Olsa Cc: acme@kernel.org, jolsa@kernel.org, peterz@infradead.org, mingo@redhat.com, alexander.shishkin@linux.intel.com, Linux-kernel@vger.kernel.org, ak@linux.intel.com, kan.liang@intel.com, yao.jin@intel.com References: <1559572577-25436-1-git-send-email-yao.jin@linux.intel.com> <20190605114424.GC5868@krava> From: "Jin, Yao" Message-ID: <71cb247c-495f-b90c-1645-2957c351602a@linux.intel.com> Date: Thu, 6 Jun 2019 09:05:16 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 MIME-Version: 1.0 In-Reply-To: <20190605114424.GC5868@krava> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 6/5/2019 7:44 PM, Jiri Olsa wrote: > On Mon, Jun 03, 2019 at 10:36:10PM +0800, Jin Yao wrote: >> In some cases small changes in hot loops can show big differences. >> But it's difficult to identify these differences. >> >> perf diff currently can only diff symbols (functions). We can also expand >> it to diff cycles of individual programs blocks as reported by timed LBR. >> This would allow to identify changes in specific code accurately. > > can't compile on Fedora 30 > > builtin-diff.c: In function ‘block_cycles_diff_cmp’: > builtin-diff.c:544:6: error: absolute value function ‘abs’ given an argument of type ‘s64’ {aka ‘long int’} but has parameter of type ‘int’ which may cause truncation of value [-Werror=absolute-value] > 544 | l = abs(left->diff.cycles); > | ^~~ > builtin-diff.c:545:6: error: absolute value function ‘abs’ given an argument of type ‘s64’ {aka ‘long int’} but has parameter of type ‘int’ which may cause truncation of value [-Werror=absolute-value] > 545 | r = abs(right->diff.cycles); > | ^~~ > > [jolsa@krava perf]$ gcc --version > gcc (GCC) 9.1.1 20190503 (Red Hat 9.1.1-1) > > jirka > Thanks for pointing out this issue. I should use labs() Thanks Jin Yao >> >> With this patch set, for example, >> >> # perf record -b ./div >> # perf record -b ./div >> # perf diff -s cycles >> >> # Event 'cycles' >> # >> # Baseline Block cycles diff [start:end] Shared Object Symbol >> # ........ .................................... ................ .................................... >> # >> 49.03% -9 [ 4ef: 520] div [.] main >> 49.03% 0 [ 4e8: 4ea] div [.] main >> 49.03% 0 [ 4ef: 500] div [.] main >> 49.03% 0 [ 4ef: 51c] div [.] main >> 49.03% 0 [ 4ef: 535] div [.] main >> 18.82% 0 [ 3ac40: 3ac4d] libc-2.23.so [.] __random_r >> 18.82% 0 [ 3ac40: 3ac5c] libc-2.23.so [.] __random_r >> 18.82% 0 [ 3ac40: 3ac76] libc-2.23.so [.] __random_r >> 18.82% 0 [ 3ac40: 3ac88] libc-2.23.so [.] __random_r >> 18.82% 0 [ 3ac90: 3ac9c] libc-2.23.so [.] __random_r >> 16.29% -8 [ 3aac0: 3aac0] libc-2.23.so [.] __random >> 16.29% 0 [ 3aac0: 3aad2] libc-2.23.so [.] __random >> 16.29% 0 [ 3aae0: 3aae7] libc-2.23.so [.] __random >> 16.29% 0 [ 3ab03: 3ab0f] libc-2.23.so [.] __random >> 16.29% 0 [ 3ab14: 3ab1b] libc-2.23.so [.] __random >> 16.29% 0 [ 3ab28: 3ab2e] libc-2.23.so [.] __random >> 16.29% 0 [ 3ab4a: 3ab53] libc-2.23.so [.] __random >> 8.11% 0 [ 640: 644] div [.] compute_flag >> 8.11% 0 [ 649: 659] div [.] compute_flag >> 5.46% 0 [ 3af60: 3af60] libc-2.23.so [.] rand >> 5.46% 0 [ 3af60: 3af64] libc-2.23.so [.] rand >> 2.25% 0 [ 490: 490] div [.] rand@plt >> 0.01% 26 [ c00a27: c00a27] [kernel.vmlinux] [k] native_irq_return_iret >> 0.00% -157 [ 2bf9f2: 2bfa63] [kernel.vmlinux] [k] update_blocked_averages >> 0.00% -56 [ 2bf980: 2bf9d3] [kernel.vmlinux] [k] update_blocked_averages >> 0.00% 48 [ 2bf934: 2bf942] [kernel.vmlinux] [k] update_blocked_averages >> 0.00% 3 [ 2bfb38: 2bfb67] [kernel.vmlinux] [k] update_blocked_averages >> >> The 'cycles' is a new perf-diff computation selection, which enables >> the displaying of cycles difference of same program basic block amongst >> two perf.data. The program basic block is the code block between two >> branches in a function. >> >> v2: >> --- >> Keep standard perf diff format. >> >> Following is the v1 output. >> >> # perf diff --basic-block >> >> # Cycles diff Basic block (start:end) >> # ........... ....................... >> # >> -208 hrtimer_interrupt (30b9e0:30ba42) >> -157 update_blocked_averages (2bf9f2:2bfa63) >> -126 interrupt_entry (c00880:c0093a) >> -86 hrtimer_interrupt (30bb29:30bb32) >> -74 hrtimer_interrupt (30ba65:30bac4) >> -56 update_blocked_averages (2bf980:2bf9d3) >> 48 update_blocked_averages (2bf934:2bf942) >> -35 native_write_msr (267900:26790b) >> 26 native_irq_return_iret (c00a27:c00a27) >> 22 rcu_check_callbacks (2febb6:2febdc) >> -21 __hrtimer_run_queues (30b220:30b2a3) >> 19 pvclock_gtod_notify (14ba0:14c1b) >> -18 task_tick_fair (2c5d29:2c5d41) >> >> Jin Yao (7): >> perf util: Create block_info structure >> perf util: Add block_info in hist_entry >> perf diff: Check if all data files with branch stacks >> perf diff: Use hists to manage basic blocks per symbol >> perf diff: Link same basic blocks among different data files >> perf diff: Print the basic block cycles diff >> perf diff: Documentation -c cycles option >> >> tools/perf/Documentation/perf-diff.txt | 14 +- >> tools/perf/builtin-diff.c | 373 ++++++++++++++++++++++++++++++++- >> tools/perf/ui/stdio/hist.c | 26 +++ >> tools/perf/util/hist.c | 42 +++- >> tools/perf/util/hist.h | 9 + >> tools/perf/util/sort.h | 8 + >> tools/perf/util/symbol.c | 22 ++ >> tools/perf/util/symbol.h | 23 ++ >> 8 files changed, 509 insertions(+), 8 deletions(-) >> >> -- >> 2.7.4 >>