Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S932367AbdCFP3l (ORCPT ); Mon, 6 Mar 2017 10:29:41 -0500 Received: from mx0b-001b2d01.pphosted.com ([148.163.158.5]:41743 "EHLO mx0a-001b2d01.pphosted.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1753491AbdCFP3X (ORCPT ); Mon, 6 Mar 2017 10:29:23 -0500 From: Ravi Bangoria To: mingo@redhat.com, acme@kernel.org, mhiramat@kernel.org Cc: brendan.d.gregg@gmail.com, peterz@infradead.org, alexander.shishkin@linux.intel.com, wangnan0@huawei.com, jolsa@kernel.org, ak@linux.intel.com, treeze.taeung@gmail.com, mathieu.poirier@linaro.org, hekuang@huawei.com, sukadev@linux.vnet.ibm.com, ananth@in.ibm.com, naveen.n.rao@linux.vnet.ibm.com, adrian.hunter@intel.com, linux-kernel@vger.kernel.org, hemant@linux.vnet.ibm.com, Ravi Bangoria Subject: [PATCH v4 0/7] perf/sdt: Directly record SDT events with 'perf record' Date: Mon, 6 Mar 2017 18:42:57 +0530 X-Mailer: git-send-email 2.9.3 X-TM-AS-MML: disable X-Content-Scanned: Fidelis XPS MAILER x-cbid: 17030613-0004-0000-0000-0000054A79BC X-IBM-AV-DETECTION: SAVI=unused REMOTE=unused XFE=unused x-cbparentid: 17030613-0005-0000-0000-00001346EE3B Message-Id: <20170306131304.1625-1-ravi.bangoria@linux.vnet.ibm.com> X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10432:,, definitions=2017-03-06_11:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 suspectscore=0 malwarescore=0 phishscore=0 adultscore=0 bulkscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1702020001 definitions=main-1703060111 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 5383 Lines: 124 All events from 'perf list', except SDT events, can be directly recorded with 'perf record'. But, the flow is little different for SDT events. Probe point for SDT event needs to be created using 'perf probe' before recording it using 'perf record'. As suggested by Ingo[1], it's better to make this process simple by creating probe point automatically with 'perf record' for SDT events. Features: - Allow both 'perf probe' and 'perf record' on sdt events without changing current functionality. - Event starting with 'sdt_' or '%' will be considered as SDT event. - Always prioritize events from uprobe_events by first checking if event exists with exact name. If not found and user has used pattern, again try to find pattern matching entries from uprobe_events. If found use them. If not, lookup into probe-cache. If events found from probe-cache, again check if any event exists in uprobe_events by matching filepath+address, as it might exists in uprobe_events but with different name. Reuse those events which exists in uprobe_events and create new entries for missing one. Also maintain list for new entries being created and at the end of the session, delete them. - Show various warnings/hints to help user understand _which_ events are being recorded and _why_. For ex, When multiple events of same name found and all are being recorded: $ sudo ./perf record -a -e sdt_libpthread:mutex_entry Warning: Recording on 2 occurrences of sdt_libpthread:mutex_entry Events being reused from uprobe_events is listed as 'name addr@file' followed by hint on how to delete them: $ sudo ./perf record -a -e sdt_libpthread:mutex_entry Matching event(s) from uprobe_events: sdt_libpthread:mutex_entry 0x9ddb@/usr/lib64/libpthread-2.24.so Use 'perf probe -d ' to delete event(s). If number of events found from cache is not equal to number of events being recorded: $ sudo ./perf record -a -e sdt_libpthread:mutex_entry Warning: Found 2 events from probe-cache with name 'sdt_libpthread:mutex_entry'. Since 1 probe point already exists, recording only it. Hint: Please use 'perf probe -d sdt_libpthread:mutex_entry' to allow record on all events. Changes in v4: - Moved util function is_sdt_event() from tools/perf/util/util.c to tools/perf/util/parse-events.h. [PATCH 1/7] - Split hunk into multiple patches. - Changed pr_err() to pr_debug() (only where Masami has suggested). - Removed unnecessary wrapper func find_sdt_events_from_cache() by exposing find_cached_events_all(). - Removed 'struct exst_sdt_event_list', instead using array of existing data structure 'struct probe_trace_event'. - No hint will be shown at 'perf probe' for SDT events. - Functionality change. If all events found from probe-cache are not present in uprobe_events, v3 was recording all events found from cache. That has been changed in v4. If user has used pattern to specify event, v4 will record only those events which are present in uprobe_events. This is to make perf semantics consistent across normal and SDT events. And If user has not used pattern, it will record all events found from probe-cache by reusing name for existing one and adding entries for missing one. For ex (with v4), $ sudo ./perf probe sdt_libpthread:mutex_release Added new events: sdt_libpthread:mutex_release (on %mutex_release in /usr/lib64/libpthread-2.24.so) sdt_libpthread:mutex_release_1 (on %mutex_release in /usr/lib64/libpthread-2.24.so) sdt_libpthread:mutex_release_2 (on %mutex_release in /usr/lib64/libpthread-2.24.so) sdt_libpthread:mutex_release_3 (on %mutex_release in /usr/lib64/libpthread-2.24.so) $ sudo ./perf probe -d sdt_libpthread:mutex_release $ sudo ./perf probe -d sdt_libpthread:mutex_release_2 $ sudo ./perf record -a -e sdt_libpthread:mutex_release* Warning: Recording on 2 occurrences of sdt_libpthread:mutex_release* $ sudo ./perf record -a -e sdt_libpthread:mutex_release Warning: Recording on 4 occurrences of sdt_libpthread:mutex_release This patchset is prepared on top of acme/perf/core. v3 link: https://lkml.org/lkml/2017/2/24/27 [1] https://lkml.org/lkml/2017/2/7/59 [2] https://lkml.org/lkml/2016/5/3/810 Hemant Kumar (1): perf/sdt: Directly record SDT events with 'perf record' Ravi Bangoria (6): perf/sdt: Introduce util func is_sdt_event() perf/sdt: Allow recording of existing events perf/sdt: Clean uprobe_events when event(out of multiple events) parsing fails perf/sdt: Warn when number of events recorded are not equal to cached events perf/sdt: List events fetched from uprobe_events perf/sdt: Remove stale warning tools/lib/api/fs/tracing_path.c | 17 +-- tools/perf/builtin-record.c | 23 +++ tools/perf/perf.h | 2 + tools/perf/util/parse-events.c | 56 +++++++- tools/perf/util/parse-events.h | 14 ++ tools/perf/util/probe-event.c | 100 +++++++++++-- tools/perf/util/probe-event.h | 9 ++ tools/perf/util/probe-file.c | 310 ++++++++++++++++++++++++++++++++++++++++ tools/perf/util/probe-file.h | 9 ++ 9 files changed, 513 insertions(+), 27 deletions(-) -- 2.9.3