Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751592AbdCAHQd (ORCPT ); Wed, 1 Mar 2017 02:16:33 -0500 Received: from mail-wm0-f46.google.com ([74.125.82.46]:38903 "EHLO mail-wm0-f46.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750813AbdCAHQb (ORCPT ); Wed, 1 Mar 2017 02:16:31 -0500 MIME-Version: 1.0 In-Reply-To: References: <20170224074325.2451-1-ravi.bangoria@linux.vnet.ibm.com> <20170224074325.2451-3-ravi.bangoria@linux.vnet.ibm.com> From: Brendan Gregg Date: Tue, 28 Feb 2017 21:04:33 -0800 Message-ID: Subject: Re: [PATCH v3 2/2] perf/sdt: Directly record SDT events with 'perf record' To: Ravi Bangoria Cc: Ingo Molnar , Arnaldo Carvalho de Melo , Peter Zijlstra , Alexander Shishkin , Wang Nan , Jiri Olsa , Andi Kleen , treeze.taeung@gmail.com, Mathieu Poirier , He Kuang , sukadev@linux.vnet.ibm.com, ananth@in.ibm.com, "Naveen N. Rao" , Adrian Hunter , LKML , Hemant Kumar , Masami Hiramatsu Content-Type: text/plain; charset=UTF-8 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 2656 Lines: 75 On Tue, Feb 28, 2017 at 2:31 PM, Brendan Gregg wrote: > G'Day Ravi, > [...] > Now retrying perf: > > # ./perf record -e sdt_node:http__server__request -a > ^C[ perf record: Woken up 1 times to write data ] > [ perf record: Captured and wrote 0.446 MB perf.data (3 samples) ] > # ./perf script > node 7646 [002] 361.012364: > sdt_node:http__server__request: (dc2e69) > node 7646 [002] 361.204718: > sdt_node:http__server__request: (dc2e69) > node 7646 [002] 361.363043: > sdt_node:http__server__request: (dc2e69) > > Now perf works. > > If I restart the node process, it goes back to the broken state. > Oh sorry, I forgot about that these Node.js probes are behind an is-enabled semaphore. $ readelf -n `which node` [...] stapsdt 0x00000089 NT_STAPSDT (SystemTap probe descriptors) Provider: node Name: http__server__request Location: 0x0000000000dc2e69, Base: 0x000000000112e064, Semaphore: 0x0000000001470954 Arguments: 8@%r14 8@%rax 8@-4344(%rbp) -4@-4348(%rbp) 8@-4304(%rbp) 8@-4312(%rbp) -4@-4352(%rbp) # dd if=/proc/31695/mem bs=1 count=1 skip=$(( 0x0000000001470954 )) 2>/dev/null | xxd 00000000: 00 . # printf "\x1" | dd of=/proc/31695/mem bs=1 count=1 seek=$(( 0x0000000001470954 )) 2>/dev/null # dd if=/proc/31695/mem bs=1 count=1 skip=$(( 0x0000000001470954 )) 2>/dev/null | xxd 00000000: 01 . # ./perf record -e sdt_node:http__server__request -a Matching event(s) from uprobe_events: sdt_node:http__server__request 0x9c2e69@/usr/local/bin/node Use 'perf probe -d ' to delete event(s). ^C[ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.280 MB perf.data (3 samples) ] # ./perf script node 31695 [003] 24947.168761: sdt_node:http__server__request: (dc2e69) node 31695 [003] 24947.476143: sdt_node:http__server__request: (dc2e69) node 31695 [003] 24947.679090: sdt_node:http__server__request: (dc2e69) So setting that to 1 made the probe work from perf. I guess this is not a problem with this patch set, but rather a feature request for the next one: is-enabled SDT support. Were probe arguments supposed to work? I don't notice them in the perf script output. PS, if it's helpful, here's the commands to build node with these SDT probes: $ sudo apt-get install systemtap-sdt-dev # adds "dtrace", used by node build $ wget https://nodejs.org/dist/v4.4.1/node-v4.4.1.tar.gz $ tar xvf node-v4.4.1.tar.gz $ cd node-v4.4.1 $ ./configure --with-dtrace $ make -j 8 Brendan