Received: by 2002:a05:6a10:6744:0:0:0:0 with SMTP id w4csp4239914pxu; Mon, 12 Oct 2020 13:21:18 -0700 (PDT) X-Google-Smtp-Source: ABdhPJx7lzXS4yJKyOknW4mBk89kGsnHIz4y6bne6PeFHL6rIqaPSEFGLXYkllTt6fdGxuyQM8EF X-Received: by 2002:a17:906:eb02:: with SMTP id mb2mr28881110ejb.506.1602534078637; Mon, 12 Oct 2020 13:21:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1602534078; cv=none; d=google.com; s=arc-20160816; b=b32aFTrh8JvuzR4xg5GCzD6h72p8JuvDdxu/CjS0lCmG6eUa62IZ4TBd3FkfsvgW9W XPZySupK15QSjQPo2UMR7qXM3jWob5QpiGaM6OGUNLwI1R8rm8Uqp1mJe0z0QYzZMElH 3TEXdb8Ot8fudH4pSkR0Ea74Efhx6Q1mHz8l0LsX47apwux+xew1qt3sYuJGlef7dxzw v6UAgzq5pd3hneRcgBNyOmpKAOYoKq1k4M7dF43uxiADdtiTPd+lEiyT85tvlCuocDww +NpqrtYxoU4LFOibmfEs8uTMCLvMExNIGM3QWjSM24xqI3hLWp1RYPndPVr/0xWgNasJ 2dlg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:user-agent:date:message-id:organization :from:references:cc:to:subject:ironport-sdr:ironport-sdr; bh=+OAMqsd82ADWFc0m5nalkNsaWaMR3SHr7SrJ2FjnQyg=; b=gleSJhDUxbGrnEvrVV5PKRBXuAZMsevgGo2x+VEPXdEIXSFyppCVhwy2synloxyWtK zRNWrqxhpKgQKaG/aiccWhxo8uqVxnV1dMdPnVjDljaySq/Ex8uWgG9L0lJG/lC93xtG hx17TH/pBx7CgCSG+7HNEBWxY3CmOMlEfosbx51NCI5jxIiK1XpNxty6tDAoccAssUMc JEy0ippDzMVoqyi8rs/Le3ClbfMGz+v3PyLgVVA7R3htOk09cNrItaC4e3gV7j6xEccJ RdLH1nDlMxeQdOLubLEaCMg5cSu1B7ewc+b5RH6ey4Rbgrkof3jGczNu+oDrCPeVrA4H 5mmw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id v13si9422247edl.492.2020.10.12.13.20.55; Mon, 12 Oct 2020 13:21:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=intel.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727498AbgJLIy3 (ORCPT + 99 others); Mon, 12 Oct 2020 04:54:29 -0400 Received: from mga05.intel.com ([192.55.52.43]:28062 "EHLO mga05.intel.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727121AbgJLIy3 (ORCPT ); Mon, 12 Oct 2020 04:54:29 -0400 IronPort-SDR: fjrj7q8yi3u1/b0lE9IhNrs2N89E8hac4qjKeVIwOUwi972U1kDeb2cvRf+lvljiUulrUO1ube PCJmZvD3w3+g== X-IronPort-AV: E=McAfee;i="6000,8403,9771"; a="250403110" X-IronPort-AV: E=Sophos;i="5.77,366,1596524400"; d="scan'208";a="250403110" X-Amp-Result: SKIPPED(no attachment in message) X-Amp-File-Uploaded: False Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga105.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 12 Oct 2020 01:54:28 -0700 IronPort-SDR: ozv2exok5L/lG8pcfB8WBm2nLpcjv2WbMU7BPqM6ktGx6eGJOi3AGefUPU0AejZK8VeN8PiFER YBl073tTDRsw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.77,366,1596524400"; d="scan'208";a="356551515" Received: from linux.intel.com ([10.54.29.200]) by orsmga007.jf.intel.com with ESMTP; 12 Oct 2020 01:54:28 -0700 Received: from [10.249.225.186] (abudanko-mobl.ccr.corp.intel.com [10.249.225.186]) by linux.intel.com (Postfix) with ESMTP id AD0AB580814; Mon, 12 Oct 2020 01:54:25 -0700 (PDT) Subject: [PATCH v1 02/15] perf report: output trace file name in raw trace dump To: Arnaldo Carvalho de Melo , Jiri Olsa Cc: Namhyung Kim , Alexander Shishkin , Andi Kleen , Adrian Hunter , Peter Zijlstra , Ingo Molnar , linux-kernel References: <810f3a69-0004-9dff-a911-b7ff97220ae0@linux.intel.com> From: Alexey Budankov Organization: Intel Corp. Message-ID: <87e2050b-37e6-8ed8-e1e0-cfa074b030fa@linux.intel.com> Date: Mon, 12 Oct 2020 11:54:24 +0300 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.12.1 MIME-Version: 1.0 In-Reply-To: <810f3a69-0004-9dff-a911-b7ff97220ae0@linux.intel.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Output path of a trace file into raw dump (-D) @. Print offset of PERF_RECORD_COMPRESSED record instead of zero for decompressed records: 0x2226a@perf.data [0x30]: event: 9 or 0x15cc36@perf.data/data.7 [0x30]: event: 9 Signed-off-by: Alexey Budankov --- tools/perf/util/session.c | 75 +++++++++++++++++++++++---------------- tools/perf/util/tool.h | 3 +- 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/tools/perf/util/session.c b/tools/perf/util/session.c index 4478ddae485b..6f09d506b2f6 100644 --- a/tools/perf/util/session.c +++ b/tools/perf/util/session.c @@ -36,7 +36,8 @@ #ifdef HAVE_ZSTD_SUPPORT static int perf_session__process_compressed_event(struct perf_session *session, - union perf_event *event, u64 file_offset) + union perf_event *event, u64 file_offset, + const char *file_path) { void *src; size_t decomp_size, src_size; @@ -58,6 +59,7 @@ static int perf_session__process_compressed_event(struct perf_session *session, } decomp->file_pos = file_offset; + decomp->file_path = file_path; decomp->mmap_len = mmap_len; decomp->head = 0; @@ -98,7 +100,8 @@ static int perf_session__process_compressed_event(struct perf_session *session, static int perf_session__deliver_event(struct perf_session *session, union perf_event *event, struct perf_tool *tool, - u64 file_offset); + u64 file_offset, + const char *file_path); static int perf_session__open(struct perf_session *session) { @@ -180,7 +183,8 @@ static int ordered_events__deliver_event(struct ordered_events *oe, ordered_events); return perf_session__deliver_event(session, event->event, - session->tool, event->file_offset); + session->tool, event->file_offset, + event->file_path); } struct perf_session *perf_session__new(struct perf_data *data, @@ -452,7 +456,8 @@ static int process_stat_round_stub(struct perf_session *perf_session __maybe_unu static int perf_session__process_compressed_event_stub(struct perf_session *session __maybe_unused, union perf_event *event __maybe_unused, - u64 file_offset __maybe_unused) + u64 file_offset __maybe_unused, + const char *file_path __maybe_unused) { dump_printf(": unhandled!\n"); return 0; @@ -1227,13 +1232,14 @@ static void sample_read__printf(struct perf_sample *sample, u64 read_format) } static void dump_event(struct evlist *evlist, union perf_event *event, - u64 file_offset, struct perf_sample *sample) + u64 file_offset, struct perf_sample *sample, + const char *file_path) { if (!dump_trace) return; - printf("\n%#" PRIx64 " [%#x]: event: %d\n", - file_offset, event->header.size, event->header.type); + printf("\n%#" PRIx64 "@%s [%#x]: event: %d\n", + file_offset, file_path, event->header.size, event->header.type); trace_event(event); if (event->header.type == PERF_RECORD_SAMPLE && evlist->trace_event_sample_raw) @@ -1424,12 +1430,13 @@ static int machines__deliver_event(struct machines *machines, struct evlist *evlist, union perf_event *event, struct perf_sample *sample, - struct perf_tool *tool, u64 file_offset) + struct perf_tool *tool, u64 file_offset, + const char *file_path) { struct evsel *evsel; struct machine *machine; - dump_event(evlist, event, file_offset, sample); + dump_event(evlist, event, file_offset, sample, file_path); evsel = perf_evlist__id2evsel(evlist, sample->id); @@ -1506,7 +1513,8 @@ static int machines__deliver_event(struct machines *machines, static int perf_session__deliver_event(struct perf_session *session, union perf_event *event, struct perf_tool *tool, - u64 file_offset) + u64 file_offset, + const char *file_path) { struct perf_sample sample; int ret; @@ -1524,7 +1532,7 @@ static int perf_session__deliver_event(struct perf_session *session, return 0; ret = machines__deliver_event(&session->machines, session->evlist, - event, &sample, tool, file_offset); + event, &sample, tool, file_offset, file_path); if (dump_trace && sample.aux_sample.size) auxtrace__dump_auxtrace_sample(session, &sample); @@ -1534,7 +1542,8 @@ static int perf_session__deliver_event(struct perf_session *session, static s64 perf_session__process_user_event(struct perf_session *session, union perf_event *event, - u64 file_offset) + u64 file_offset, + const char *file_path) { struct ordered_events *oe = &session->ordered_events; struct perf_tool *tool = session->tool; @@ -1544,7 +1553,7 @@ static s64 perf_session__process_user_event(struct perf_session *session, if (event->header.type != PERF_RECORD_COMPRESSED || tool->compressed == perf_session__process_compressed_event_stub) - dump_event(session->evlist, event, file_offset, &sample); + dump_event(session->evlist, event, file_offset, &sample, file_path); /* These events are processed right away */ switch (event->header.type) { @@ -1603,9 +1612,9 @@ static s64 perf_session__process_user_event(struct perf_session *session, case PERF_RECORD_HEADER_FEATURE: return tool->feature(session, event); case PERF_RECORD_COMPRESSED: - err = tool->compressed(session, event, file_offset); + err = tool->compressed(session, event, file_offset, file_path); if (err) - dump_event(session->evlist, event, file_offset, &sample); + dump_event(session->evlist, event, file_offset, &sample, file_path); return err; default: return -EINVAL; @@ -1622,9 +1631,9 @@ int perf_session__deliver_synth_event(struct perf_session *session, events_stats__inc(&evlist->stats, event->header.type); if (event->header.type >= PERF_RECORD_USER_TYPE_START) - return perf_session__process_user_event(session, event, 0); + return perf_session__process_user_event(session, event, 0, NULL); - return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0); + return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0, NULL); } static void event_swap(union perf_event *event, bool sample_id_all) @@ -1720,7 +1729,8 @@ int perf_session__peek_events(struct perf_session *session, u64 offset, } static s64 perf_session__process_event(struct perf_session *session, - union perf_event *event, u64 file_offset) + union perf_event *event, u64 file_offset, + const char *file_path) { struct evlist *evlist = session->evlist; struct perf_tool *tool = session->tool; @@ -1735,7 +1745,7 @@ static s64 perf_session__process_event(struct perf_session *session, events_stats__inc(&evlist->stats, event->header.type); if (event->header.type >= PERF_RECORD_USER_TYPE_START) - return perf_session__process_user_event(session, event, file_offset); + return perf_session__process_user_event(session, event, file_offset, file_path); if (tool->ordered_events) { u64 timestamp = -1ULL; @@ -1749,7 +1759,7 @@ static s64 perf_session__process_event(struct perf_session *session, return ret; } - return perf_session__deliver_event(session, event, tool, file_offset); + return perf_session__deliver_event(session, event, tool, file_offset, file_path); } void perf_event_header__bswap(struct perf_event_header *hdr) @@ -1987,7 +1997,8 @@ static int __perf_session__process_pipe_events(struct perf_session *session) } } - if ((skip = perf_session__process_event(session, event, head)) < 0) { + skip = perf_session__process_event(session, event, head, "pipe"); + if (skip < 0) { pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n", head, event->header.size, event->header.type); err = -EINVAL; @@ -2068,7 +2079,7 @@ fetch_decomp_event(u64 head, size_t mmap_size, char *buf, bool needs_swap) static int __perf_session__process_decomp_events(struct perf_session *session) { s64 skip; - u64 size, file_pos = 0; + u64 size; struct decomp *decomp = session->decomp_last; if (!decomp) @@ -2082,9 +2093,9 @@ static int __perf_session__process_decomp_events(struct perf_session *session) break; size = event->header.size; - - if (size < sizeof(struct perf_event_header) || - (skip = perf_session__process_event(session, event, file_pos)) < 0) { + skip = perf_session__process_event(session, event, decomp->file_pos, + decomp->file_path); + if (size < sizeof(struct perf_event_header) || skip < 0) { pr_err("%#" PRIx64 " [%#x]: failed to process type: %d\n", decomp->file_pos + decomp->head, event->header.size, event->header.type); return -EINVAL; @@ -2115,7 +2126,8 @@ struct reader; typedef s64 (*reader_cb_t)(struct perf_session *session, union perf_event *event, - u64 file_offset); + u64 file_offset, + const char *file_path); struct reader { int fd; @@ -2198,9 +2210,9 @@ reader__process_events(struct reader *rd, struct perf_session *session, skip = -EINVAL; if (size < sizeof(struct perf_event_header) || - (skip = rd->process(session, event, file_pos)) < 0) { - pr_err("%#" PRIx64 " [%#x]: failed to process type: %d [%s]\n", - file_offset + head, event->header.size, + (skip = rd->process(session, event, file_pos, rd->path)) < 0) { + pr_err("%#" PRIx64 " [%s] [%#x]: failed to process type: %d [%s]\n", + file_offset + head, rd->path, event->header.size, event->header.type, strerror(-skip)); err = skip; goto out; @@ -2230,9 +2242,10 @@ reader__process_events(struct reader *rd, struct perf_session *session, static s64 process_simple(struct perf_session *session, union perf_event *event, - u64 file_offset) + u64 file_offset, + const char *file_path) { - return perf_session__process_event(session, event, file_offset); + return perf_session__process_event(session, event, file_offset, file_path); } static int __perf_session__process_events(struct perf_session *session) diff --git a/tools/perf/util/tool.h b/tools/perf/util/tool.h index bbbc0dcd461f..c966531d3eca 100644 --- a/tools/perf/util/tool.h +++ b/tools/perf/util/tool.h @@ -28,7 +28,8 @@ typedef int (*event_attr_op)(struct perf_tool *tool, typedef int (*event_op2)(struct perf_session *session, union perf_event *event); typedef s64 (*event_op3)(struct perf_session *session, union perf_event *event); -typedef int (*event_op4)(struct perf_session *session, union perf_event *event, u64 data); +typedef int (*event_op4)(struct perf_session *session, union perf_event *event, u64 data, + const char *str); typedef int (*event_oe)(struct perf_tool *tool, union perf_event *event, struct ordered_events *oe); -- 2.24.1