* [PATCH 1/3] perf tools: unify event type description
@ 2009-12-29 8:37 Liming Wang
2009-12-29 8:37 ` [PATCH 2/3] perf tools: remove pid option from stat Liming Wang
2009-12-30 12:22 ` [tip:perf/core] perf tools: Unify event type description tip-bot for Liming Wang
0 siblings, 2 replies; 11+ messages in thread
From: Liming Wang @ 2009-12-29 8:37 UTC (permalink / raw)
To: Ingo Molnar
Cc: Frederic Weisbecker, Masami Hiramatsu, Paul Mackerras,
Thomas Gleixner, Peter Zijlstra, linux-kernel, Liming Wang
make event type description to a unified array and
the array index consistent to perf_type_id.
Signed-off-by: Liming Wang <liming.wang@windriver.com>
---
tools/perf/util/parse-events.c | 19 ++++++++++---------
1 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index e5bc0fb..dc585a8 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -835,11 +835,12 @@ int parse_filter(const struct option *opt __used, const char *str,
}
static const char * const event_type_descriptors[] = {
- "",
"Hardware event",
"Software event",
"Tracepoint event",
"Hardware cache event",
+ "Raw hardware event descriptor",
+ "Hardware breakpoint",
};
/*
@@ -872,7 +873,7 @@ static void print_tracepoint_events(void)
snprintf(evt_path, MAXPATHLEN, "%s:%s",
sys_dirent.d_name, evt_dirent.d_name);
printf(" %-42s [%s]\n", evt_path,
- event_type_descriptors[PERF_TYPE_TRACEPOINT+1]);
+ event_type_descriptors[PERF_TYPE_TRACEPOINT]);
}
closedir(evt_dir);
}
@@ -892,9 +893,7 @@ void print_events(void)
printf("List of pre-defined events (to be used in -e):\n");
for (i = 0; i < ARRAY_SIZE(event_symbols); i++, syms++) {
- type = syms->type + 1;
- if (type >= ARRAY_SIZE(event_type_descriptors))
- type = 0;
+ type = syms->type;
if (type != prev_type)
printf("\n");
@@ -919,17 +918,19 @@ void print_events(void)
for (i = 0; i < PERF_COUNT_HW_CACHE_RESULT_MAX; i++) {
printf(" %-42s [%s]\n",
event_cache_name(type, op, i),
- event_type_descriptors[4]);
+ event_type_descriptors[PERF_TYPE_HW_CACHE]);
}
}
}
printf("\n");
- printf(" %-42s [raw hardware event descriptor]\n",
- "rNNN");
+ printf(" %-42s [%s]\n",
+ "rNNN", event_type_descriptors[PERF_TYPE_RAW]);
printf("\n");
- printf(" %-42s [hardware breakpoint]\n", "mem:<addr>[:access]");
+ printf(" %-42s [%s]\n",
+ "mem:<addr>[:access]",
+ event_type_descriptors[PERF_TYPE_BREAKPOINT]);
printf("\n");
print_tracepoint_events();
--
1.6.0.3
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/3] perf tools: remove pid option from stat
2009-12-29 8:37 [PATCH 1/3] perf tools: unify event type description Liming Wang
@ 2009-12-29 8:37 ` Liming Wang
2009-12-29 8:37 ` [PATCH 3/3] perf probe: change CONFIG_KPROBE_TRACER to CONFIG_KPROBE_EVENT Liming Wang
2009-12-29 12:04 ` [PATCH 2/3] perf tools: remove pid option from stat Peter Zijlstra
2009-12-30 12:22 ` [tip:perf/core] perf tools: Unify event type description tip-bot for Liming Wang
1 sibling, 2 replies; 11+ messages in thread
From: Liming Wang @ 2009-12-29 8:37 UTC (permalink / raw)
To: Ingo Molnar
Cc: Frederic Weisbecker, Masami Hiramatsu, Paul Mackerras,
Thomas Gleixner, Peter Zijlstra, linux-kernel, Liming Wang
pid option is useless for stat, so remove it.
Signed-off-by: Liming Wang <liming.wang@windriver.com>
---
tools/perf/builtin-stat.c | 3 ---
1 files changed, 0 insertions(+), 3 deletions(-)
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index c70d720..e3b31a3 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -71,7 +71,6 @@ static int run_idx = 0;
static int run_count = 1;
static int inherit = 1;
static int scale = 1;
-static pid_t target_pid = -1;
static pid_t child_pid = -1;
static int null_run = 0;
@@ -471,8 +470,6 @@ static const struct option options[] = {
parse_events),
OPT_BOOLEAN('i', "inherit", &inherit,
"child tasks inherit counters"),
- OPT_INTEGER('p', "pid", &target_pid,
- "stat events on existing pid"),
OPT_BOOLEAN('a', "all-cpus", &system_wide,
"system-wide collection from all CPUs"),
OPT_BOOLEAN('c', "scale", &scale,
--
1.6.0.3
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/3] perf probe: change CONFIG_KPROBE_TRACER to CONFIG_KPROBE_EVENT
2009-12-29 8:37 ` [PATCH 2/3] perf tools: remove pid option from stat Liming Wang
@ 2009-12-29 8:37 ` Liming Wang
2009-12-30 2:32 ` Masami Hiramatsu
2009-12-30 12:23 ` [tip:perf/core] perf probe: Change " tip-bot for Liming Wang
2009-12-29 12:04 ` [PATCH 2/3] perf tools: remove pid option from stat Peter Zijlstra
1 sibling, 2 replies; 11+ messages in thread
From: Liming Wang @ 2009-12-29 8:37 UTC (permalink / raw)
To: Ingo Molnar
Cc: Frederic Weisbecker, Masami Hiramatsu, Paul Mackerras,
Thomas Gleixner, Peter Zijlstra, linux-kernel, Liming Wang
make the config name consistent
Signed-off-by: Liming Wang <liming.wang@windriver.com>
---
tools/perf/util/probe-event.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 29465d4..8e532d9 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -368,7 +368,7 @@ static int open_kprobe_events(int flags, int mode)
if (ret < 0) {
if (errno == ENOENT)
die("kprobe_events file does not exist -"
- " please rebuild with CONFIG_KPROBE_TRACER.");
+ " please rebuild with CONFIG_KPROBE_EVENT.");
else
die("Could not open kprobe_events file: %s",
strerror(errno));
--
1.6.0.3
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] perf tools: remove pid option from stat
2009-12-29 8:37 ` [PATCH 2/3] perf tools: remove pid option from stat Liming Wang
2009-12-29 8:37 ` [PATCH 3/3] perf probe: change CONFIG_KPROBE_TRACER to CONFIG_KPROBE_EVENT Liming Wang
@ 2009-12-29 12:04 ` Peter Zijlstra
2009-12-30 9:23 ` Ingo Molnar
1 sibling, 1 reply; 11+ messages in thread
From: Peter Zijlstra @ 2009-12-29 12:04 UTC (permalink / raw)
To: Liming Wang
Cc: Ingo Molnar, Frederic Weisbecker, Masami Hiramatsu,
Paul Mackerras, Thomas Gleixner, linux-kernel
On Tue, 2009-12-29 at 16:37 +0800, Liming Wang wrote:
> pid option is useless for stat, so remove it.
Hmm, it shouldn't be.. and instead of removing it I would suggesting
fixing this.
> Signed-off-by: Liming Wang <liming.wang@windriver.com>
> ---
> tools/perf/builtin-stat.c | 3 ---
> 1 files changed, 0 insertions(+), 3 deletions(-)
>
> diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
> index c70d720..e3b31a3 100644
> --- a/tools/perf/builtin-stat.c
> +++ b/tools/perf/builtin-stat.c
> @@ -71,7 +71,6 @@ static int run_idx = 0;
> static int run_count = 1;
> static int inherit = 1;
> static int scale = 1;
> -static pid_t target_pid = -1;
> static pid_t child_pid = -1;
> static int null_run = 0;
>
> @@ -471,8 +470,6 @@ static const struct option options[] = {
> parse_events),
> OPT_BOOLEAN('i', "inherit", &inherit,
> "child tasks inherit counters"),
> - OPT_INTEGER('p', "pid", &target_pid,
> - "stat events on existing pid"),
> OPT_BOOLEAN('a', "all-cpus", &system_wide,
> "system-wide collection from all CPUs"),
> OPT_BOOLEAN('c', "scale", &scale,
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 3/3] perf probe: change CONFIG_KPROBE_TRACER to CONFIG_KPROBE_EVENT
2009-12-29 8:37 ` [PATCH 3/3] perf probe: change CONFIG_KPROBE_TRACER to CONFIG_KPROBE_EVENT Liming Wang
@ 2009-12-30 2:32 ` Masami Hiramatsu
2009-12-30 12:23 ` [tip:perf/core] perf probe: Change " tip-bot for Liming Wang
1 sibling, 0 replies; 11+ messages in thread
From: Masami Hiramatsu @ 2009-12-30 2:32 UTC (permalink / raw)
To: Liming Wang
Cc: Ingo Molnar, Frederic Weisbecker, Paul Mackerras, Thomas Gleixner,
Peter Zijlstra, linux-kernel
Liming Wang wrote:
> make the config name consistent
>
> Signed-off-by: Liming Wang <liming.wang@windriver.com>
Ah, right. Thank you!
Acked-by: Masami Hiramatsu <mhiramat@redhat.com>
> ---
> tools/perf/util/probe-event.c | 2 +-
> 1 files changed, 1 insertions(+), 1 deletions(-)
>
> diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
> index 29465d4..8e532d9 100644
> --- a/tools/perf/util/probe-event.c
> +++ b/tools/perf/util/probe-event.c
> @@ -368,7 +368,7 @@ static int open_kprobe_events(int flags, int mode)
> if (ret < 0) {
> if (errno == ENOENT)
> die("kprobe_events file does not exist -"
> - " please rebuild with CONFIG_KPROBE_TRACER.");
> + " please rebuild with CONFIG_KPROBE_EVENT.");
> else
> die("Could not open kprobe_events file: %s",
> strerror(errno));
--
Masami Hiramatsu
Software Engineer
Hitachi Computer Products (America), Inc.
Software Solutions Division
e-mail: mhiramat@redhat.com
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] perf tools: remove pid option from stat
2009-12-29 12:04 ` [PATCH 2/3] perf tools: remove pid option from stat Peter Zijlstra
@ 2009-12-30 9:23 ` Ingo Molnar
2009-12-30 9:29 ` Wang Liming
2009-12-31 8:05 ` [PATCH 1/1] perf tools: fix pid option for stat Liming Wang
0 siblings, 2 replies; 11+ messages in thread
From: Ingo Molnar @ 2009-12-30 9:23 UTC (permalink / raw)
To: Peter Zijlstra
Cc: Liming Wang, Frederic Weisbecker, Masami Hiramatsu,
Paul Mackerras, Thomas Gleixner, linux-kernel
* Peter Zijlstra <peterz@infradead.org> wrote:
> On Tue, 2009-12-29 at 16:37 +0800, Liming Wang wrote:
> > pid option is useless for stat, so remove it.
>
> Hmm, it shouldn't be.. and instead of removing it I would suggesting fixing
> this.
Yes. For exampe something like:
perf stat --repeat 10 --pid $(pidof firefox) sleep 1
Should show firefox's resource usage sampled over 10 seconds.
If this doesnt work it should be fixed. Plus i suspect we should allow:
perf stat --pid $(pidof firefox)
to run until Ctrl-C - like perf record allows.
Ingo
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] perf tools: remove pid option from stat
2009-12-30 9:23 ` Ingo Molnar
@ 2009-12-30 9:29 ` Wang Liming
2009-12-31 8:05 ` [PATCH 1/1] perf tools: fix pid option for stat Liming Wang
1 sibling, 0 replies; 11+ messages in thread
From: Wang Liming @ 2009-12-30 9:29 UTC (permalink / raw)
To: Ingo Molnar
Cc: Peter Zijlstra, Frederic Weisbecker, Masami Hiramatsu,
Paul Mackerras, Thomas Gleixner, linux-kernel
Ingo Molnar wrote:
> * Peter Zijlstra <peterz@infradead.org> wrote:
>
>> On Tue, 2009-12-29 at 16:37 +0800, Liming Wang wrote:
>>> pid option is useless for stat, so remove it.
>> Hmm, it shouldn't be.. and instead of removing it I would suggesting fixing
>> this.
>
> Yes. For exampe something like:
>
> perf stat --repeat 10 --pid $(pidof firefox) sleep 1
>
> Should show firefox's resource usage sampled over 10 seconds.
>
> If this doesnt work it should be fixed. Plus i suspect we should allow:
>
> perf stat --pid $(pidof firefox)
>
> to run until Ctrl-C - like perf record allows.
Yes, perf record works well with "--pid".
I think stat can borrow come code from record.
Please discard this patch.
Liming Wang
>
> Ingo
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [tip:perf/core] perf tools: Unify event type description
2009-12-29 8:37 [PATCH 1/3] perf tools: unify event type description Liming Wang
2009-12-29 8:37 ` [PATCH 2/3] perf tools: remove pid option from stat Liming Wang
@ 2009-12-30 12:22 ` tip-bot for Liming Wang
1 sibling, 0 replies; 11+ messages in thread
From: tip-bot for Liming Wang @ 2009-12-30 12:22 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, paulus, hpa, mingo, peterz, fweisbec, tglx,
liming.wang, mhiramat, mingo
Commit-ID: 41bdcb23dab22bf27361c5f2d89fe895d8904915
Gitweb: http://git.kernel.org/tip/41bdcb23dab22bf27361c5f2d89fe895d8904915
Author: Liming Wang <liming.wang@windriver.com>
AuthorDate: Tue, 29 Dec 2009 16:37:07 +0800
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Wed, 30 Dec 2009 11:58:53 +0100
perf tools: Unify event type description
make event type description to a unified array and
the array index consistent to perf_type_id.
Signed-off-by: Liming Wang <liming.wang@windriver.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <1262075829-16257-1-git-send-email-liming.wang@windriver.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
tools/perf/util/parse-events.c | 19 ++++++++++---------
1 files changed, 10 insertions(+), 9 deletions(-)
diff --git a/tools/perf/util/parse-events.c b/tools/perf/util/parse-events.c
index e5bc0fb..dc585a8 100644
--- a/tools/perf/util/parse-events.c
+++ b/tools/perf/util/parse-events.c
@@ -835,11 +835,12 @@ int parse_filter(const struct option *opt __used, const char *str,
}
static const char * const event_type_descriptors[] = {
- "",
"Hardware event",
"Software event",
"Tracepoint event",
"Hardware cache event",
+ "Raw hardware event descriptor",
+ "Hardware breakpoint",
};
/*
@@ -872,7 +873,7 @@ static void print_tracepoint_events(void)
snprintf(evt_path, MAXPATHLEN, "%s:%s",
sys_dirent.d_name, evt_dirent.d_name);
printf(" %-42s [%s]\n", evt_path,
- event_type_descriptors[PERF_TYPE_TRACEPOINT+1]);
+ event_type_descriptors[PERF_TYPE_TRACEPOINT]);
}
closedir(evt_dir);
}
@@ -892,9 +893,7 @@ void print_events(void)
printf("List of pre-defined events (to be used in -e):\n");
for (i = 0; i < ARRAY_SIZE(event_symbols); i++, syms++) {
- type = syms->type + 1;
- if (type >= ARRAY_SIZE(event_type_descriptors))
- type = 0;
+ type = syms->type;
if (type != prev_type)
printf("\n");
@@ -919,17 +918,19 @@ void print_events(void)
for (i = 0; i < PERF_COUNT_HW_CACHE_RESULT_MAX; i++) {
printf(" %-42s [%s]\n",
event_cache_name(type, op, i),
- event_type_descriptors[4]);
+ event_type_descriptors[PERF_TYPE_HW_CACHE]);
}
}
}
printf("\n");
- printf(" %-42s [raw hardware event descriptor]\n",
- "rNNN");
+ printf(" %-42s [%s]\n",
+ "rNNN", event_type_descriptors[PERF_TYPE_RAW]);
printf("\n");
- printf(" %-42s [hardware breakpoint]\n", "mem:<addr>[:access]");
+ printf(" %-42s [%s]\n",
+ "mem:<addr>[:access]",
+ event_type_descriptors[PERF_TYPE_BREAKPOINT]);
printf("\n");
print_tracepoint_events();
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [tip:perf/core] perf probe: Change CONFIG_KPROBE_TRACER to CONFIG_KPROBE_EVENT
2009-12-29 8:37 ` [PATCH 3/3] perf probe: change CONFIG_KPROBE_TRACER to CONFIG_KPROBE_EVENT Liming Wang
2009-12-30 2:32 ` Masami Hiramatsu
@ 2009-12-30 12:23 ` tip-bot for Liming Wang
1 sibling, 0 replies; 11+ messages in thread
From: tip-bot for Liming Wang @ 2009-12-30 12:23 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, paulus, hpa, mingo, peterz, fweisbec, tglx,
liming.wang, mhiramat, mingo
Commit-ID: 63bbd5e2d539c9290b229c832f62d42aac23db94
Gitweb: http://git.kernel.org/tip/63bbd5e2d539c9290b229c832f62d42aac23db94
Author: Liming Wang <liming.wang@windriver.com>
AuthorDate: Tue, 29 Dec 2009 16:37:09 +0800
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Wed, 30 Dec 2009 11:59:34 +0100
perf probe: Change CONFIG_KPROBE_TRACER to CONFIG_KPROBE_EVENT
make the config name consistent
Signed-off-by: Liming Wang <liming.wang@windriver.com>
Acked-by: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <1262075829-16257-3-git-send-email-liming.wang@windriver.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
tools/perf/util/probe-event.c | 2 +-
1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/tools/perf/util/probe-event.c b/tools/perf/util/probe-event.c
index 29465d4..8e532d9 100644
--- a/tools/perf/util/probe-event.c
+++ b/tools/perf/util/probe-event.c
@@ -368,7 +368,7 @@ static int open_kprobe_events(int flags, int mode)
if (ret < 0) {
if (errno == ENOENT)
die("kprobe_events file does not exist -"
- " please rebuild with CONFIG_KPROBE_TRACER.");
+ " please rebuild with CONFIG_KPROBE_EVENT.");
else
die("Could not open kprobe_events file: %s",
strerror(errno));
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 1/1] perf tools: fix pid option for stat
2009-12-30 9:23 ` Ingo Molnar
2009-12-30 9:29 ` Wang Liming
@ 2009-12-31 8:05 ` Liming Wang
2010-01-13 10:31 ` [tip:perf/core] perf tools: Fix --pid " tip-bot for Liming Wang
1 sibling, 1 reply; 11+ messages in thread
From: Liming Wang @ 2009-12-31 8:05 UTC (permalink / raw)
To: Ingo Molnar
Cc: Frederic Weisbecker, Paul Mackerras, Thomas Gleixner,
Peter Zijlstra, linux-kernel, Liming Wang
current pid option doesn't work for perf stat. Change it to what
perf record --pid acts as.
Signed-off-by: Liming Wang <liming.wang@windriver.com>
---
tools/perf/builtin-stat.c | 106 ++++++++++++++++++++++++++-------------------
1 files changed, 61 insertions(+), 45 deletions(-)
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index c70d720..e8c85d5 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -44,6 +44,7 @@
#include "util/parse-events.h"
#include "util/event.h"
#include "util/debug.h"
+#include "util/header.h"
#include <sys/prctl.h>
#include <math.h>
@@ -79,6 +80,8 @@ static int fd[MAX_NR_CPUS][MAX_COUNTERS];
static int event_scaled[MAX_COUNTERS];
+static volatile int done = 0;
+
struct stats
{
double n, mean, M2;
@@ -247,61 +250,64 @@ static int run_perf_stat(int argc __used, const char **argv)
unsigned long long t0, t1;
int status = 0;
int counter;
- int pid;
+ int pid = target_pid;
int child_ready_pipe[2], go_pipe[2];
+ const bool forks = (target_pid == -1 && argc > 0);
char buf;
if (!system_wide)
nr_cpus = 1;
- if (pipe(child_ready_pipe) < 0 || pipe(go_pipe) < 0) {
+ if (forks && (pipe(child_ready_pipe) < 0 || pipe(go_pipe) < 0)) {
perror("failed to create pipes");
exit(1);
}
- if ((pid = fork()) < 0)
- perror("failed to fork");
+ if (forks) {
+ if ((pid = fork()) < 0)
+ perror("failed to fork");
+
+ if (!pid) {
+ close(child_ready_pipe[0]);
+ close(go_pipe[1]);
+ fcntl(go_pipe[0], F_SETFD, FD_CLOEXEC);
+
+ /*
+ * Do a dummy execvp to get the PLT entry resolved,
+ * so we avoid the resolver overhead on the real
+ * execvp call.
+ */
+ execvp("", (char **)argv);
+
+ /*
+ * Tell the parent we're ready to go
+ */
+ close(child_ready_pipe[1]);
+
+ /*
+ * Wait until the parent tells us to go.
+ */
+ if (read(go_pipe[0], &buf, 1) == -1)
+ perror("unable to read pipe");
+
+ execvp(argv[0], (char **)argv);
+
+ perror(argv[0]);
+ exit(-1);
+ }
- if (!pid) {
- close(child_ready_pipe[0]);
- close(go_pipe[1]);
- fcntl(go_pipe[0], F_SETFD, FD_CLOEXEC);
+ child_pid = pid;
/*
- * Do a dummy execvp to get the PLT entry resolved,
- * so we avoid the resolver overhead on the real
- * execvp call.
- */
- execvp("", (char **)argv);
-
- /*
- * Tell the parent we're ready to go
+ * Wait for the child to be ready to exec.
*/
close(child_ready_pipe[1]);
-
- /*
- * Wait until the parent tells us to go.
- */
- if (read(go_pipe[0], &buf, 1) == -1)
+ close(go_pipe[0]);
+ if (read(child_ready_pipe[0], &buf, 1) == -1)
perror("unable to read pipe");
-
- execvp(argv[0], (char **)argv);
-
- perror(argv[0]);
- exit(-1);
+ close(child_ready_pipe[0]);
}
- child_pid = pid;
-
- /*
- * Wait for the child to be ready to exec.
- */
- close(child_ready_pipe[1]);
- close(go_pipe[0]);
- if (read(child_ready_pipe[0], &buf, 1) == -1)
- perror("unable to read pipe");
- close(child_ready_pipe[0]);
-
for (counter = 0; counter < nr_counters; counter++)
create_perf_stat_counter(counter, pid);
@@ -310,8 +316,12 @@ static int run_perf_stat(int argc __used, const char **argv)
*/
t0 = rdclock();
- close(go_pipe[1]);
- wait(&status);
+ if (forks) {
+ close(go_pipe[1]);
+ wait(&status);
+ } else {
+ while(!done);
+ }
t1 = rdclock();
@@ -417,10 +427,13 @@ static void print_stat(int argc, const char **argv)
fflush(stdout);
fprintf(stderr, "\n");
- fprintf(stderr, " Performance counter stats for \'%s", argv[0]);
-
- for (i = 1; i < argc; i++)
- fprintf(stderr, " %s", argv[i]);
+ fprintf(stderr, " Performance counter stats for ");
+ if(target_pid == -1) {
+ fprintf(stderr, "\'%s", argv[0]);
+ for (i = 1; i < argc; i++)
+ fprintf(stderr, " %s", argv[i]);
+ }else
+ fprintf(stderr, "task pid \'%d", target_pid);
fprintf(stderr, "\'");
if (run_count > 1)
@@ -445,6 +458,9 @@ static volatile int signr = -1;
static void skip_signal(int signo)
{
+ if(target_pid != -1)
+ done = 1;
+
signr = signo;
}
@@ -461,7 +477,7 @@ static void sig_atexit(void)
}
static const char * const stat_usage[] = {
- "perf stat [<options>] <command>",
+ "perf stat [<options>] [<command>]",
NULL
};
@@ -492,7 +508,7 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used)
argc = parse_options(argc, argv, options, stat_usage,
PARSE_OPT_STOP_AT_NON_OPTION);
- if (!argc)
+ if (!argc && target_pid == -1)
usage_with_options(stat_usage, options);
if (run_count <= 0)
usage_with_options(stat_usage, options);
--
1.6.0.3
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [tip:perf/core] perf tools: Fix --pid option for stat
2009-12-31 8:05 ` [PATCH 1/1] perf tools: fix pid option for stat Liming Wang
@ 2010-01-13 10:31 ` tip-bot for Liming Wang
0 siblings, 0 replies; 11+ messages in thread
From: tip-bot for Liming Wang @ 2010-01-13 10:31 UTC (permalink / raw)
To: linux-tip-commits
Cc: linux-kernel, paulus, hpa, mingo, peterz, fweisbec, tglx,
liming.wang, mingo
Commit-ID: 60666c630bdb33983a894b050b588b663f38f368
Gitweb: http://git.kernel.org/tip/60666c630bdb33983a894b050b588b663f38f368
Author: Liming Wang <liming.wang@windriver.com>
AuthorDate: Thu, 31 Dec 2009 16:05:50 +0800
Committer: Ingo Molnar <mingo@elte.hu>
CommitDate: Wed, 13 Jan 2010 10:09:08 +0100
perf tools: Fix --pid option for stat
current pid option doesn't work for perf stat. Change it to what
perf record --pid acts as.
Signed-off-by: Liming Wang <liming.wang@windriver.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <peterz@infradead.org>
LKML-Reference: <1262246750-2191-1-git-send-email-liming.wang@windriver.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
---
tools/perf/builtin-stat.c | 106 ++++++++++++++++++++++++++-------------------
1 files changed, 61 insertions(+), 45 deletions(-)
diff --git a/tools/perf/builtin-stat.c b/tools/perf/builtin-stat.c
index c70d720..e8c85d5 100644
--- a/tools/perf/builtin-stat.c
+++ b/tools/perf/builtin-stat.c
@@ -44,6 +44,7 @@
#include "util/parse-events.h"
#include "util/event.h"
#include "util/debug.h"
+#include "util/header.h"
#include <sys/prctl.h>
#include <math.h>
@@ -79,6 +80,8 @@ static int fd[MAX_NR_CPUS][MAX_COUNTERS];
static int event_scaled[MAX_COUNTERS];
+static volatile int done = 0;
+
struct stats
{
double n, mean, M2;
@@ -247,61 +250,64 @@ static int run_perf_stat(int argc __used, const char **argv)
unsigned long long t0, t1;
int status = 0;
int counter;
- int pid;
+ int pid = target_pid;
int child_ready_pipe[2], go_pipe[2];
+ const bool forks = (target_pid == -1 && argc > 0);
char buf;
if (!system_wide)
nr_cpus = 1;
- if (pipe(child_ready_pipe) < 0 || pipe(go_pipe) < 0) {
+ if (forks && (pipe(child_ready_pipe) < 0 || pipe(go_pipe) < 0)) {
perror("failed to create pipes");
exit(1);
}
- if ((pid = fork()) < 0)
- perror("failed to fork");
+ if (forks) {
+ if ((pid = fork()) < 0)
+ perror("failed to fork");
+
+ if (!pid) {
+ close(child_ready_pipe[0]);
+ close(go_pipe[1]);
+ fcntl(go_pipe[0], F_SETFD, FD_CLOEXEC);
+
+ /*
+ * Do a dummy execvp to get the PLT entry resolved,
+ * so we avoid the resolver overhead on the real
+ * execvp call.
+ */
+ execvp("", (char **)argv);
+
+ /*
+ * Tell the parent we're ready to go
+ */
+ close(child_ready_pipe[1]);
+
+ /*
+ * Wait until the parent tells us to go.
+ */
+ if (read(go_pipe[0], &buf, 1) == -1)
+ perror("unable to read pipe");
+
+ execvp(argv[0], (char **)argv);
+
+ perror(argv[0]);
+ exit(-1);
+ }
- if (!pid) {
- close(child_ready_pipe[0]);
- close(go_pipe[1]);
- fcntl(go_pipe[0], F_SETFD, FD_CLOEXEC);
+ child_pid = pid;
/*
- * Do a dummy execvp to get the PLT entry resolved,
- * so we avoid the resolver overhead on the real
- * execvp call.
- */
- execvp("", (char **)argv);
-
- /*
- * Tell the parent we're ready to go
+ * Wait for the child to be ready to exec.
*/
close(child_ready_pipe[1]);
-
- /*
- * Wait until the parent tells us to go.
- */
- if (read(go_pipe[0], &buf, 1) == -1)
+ close(go_pipe[0]);
+ if (read(child_ready_pipe[0], &buf, 1) == -1)
perror("unable to read pipe");
-
- execvp(argv[0], (char **)argv);
-
- perror(argv[0]);
- exit(-1);
+ close(child_ready_pipe[0]);
}
- child_pid = pid;
-
- /*
- * Wait for the child to be ready to exec.
- */
- close(child_ready_pipe[1]);
- close(go_pipe[0]);
- if (read(child_ready_pipe[0], &buf, 1) == -1)
- perror("unable to read pipe");
- close(child_ready_pipe[0]);
-
for (counter = 0; counter < nr_counters; counter++)
create_perf_stat_counter(counter, pid);
@@ -310,8 +316,12 @@ static int run_perf_stat(int argc __used, const char **argv)
*/
t0 = rdclock();
- close(go_pipe[1]);
- wait(&status);
+ if (forks) {
+ close(go_pipe[1]);
+ wait(&status);
+ } else {
+ while(!done);
+ }
t1 = rdclock();
@@ -417,10 +427,13 @@ static void print_stat(int argc, const char **argv)
fflush(stdout);
fprintf(stderr, "\n");
- fprintf(stderr, " Performance counter stats for \'%s", argv[0]);
-
- for (i = 1; i < argc; i++)
- fprintf(stderr, " %s", argv[i]);
+ fprintf(stderr, " Performance counter stats for ");
+ if(target_pid == -1) {
+ fprintf(stderr, "\'%s", argv[0]);
+ for (i = 1; i < argc; i++)
+ fprintf(stderr, " %s", argv[i]);
+ }else
+ fprintf(stderr, "task pid \'%d", target_pid);
fprintf(stderr, "\'");
if (run_count > 1)
@@ -445,6 +458,9 @@ static volatile int signr = -1;
static void skip_signal(int signo)
{
+ if(target_pid != -1)
+ done = 1;
+
signr = signo;
}
@@ -461,7 +477,7 @@ static void sig_atexit(void)
}
static const char * const stat_usage[] = {
- "perf stat [<options>] <command>",
+ "perf stat [<options>] [<command>]",
NULL
};
@@ -492,7 +508,7 @@ int cmd_stat(int argc, const char **argv, const char *prefix __used)
argc = parse_options(argc, argv, options, stat_usage,
PARSE_OPT_STOP_AT_NON_OPTION);
- if (!argc)
+ if (!argc && target_pid == -1)
usage_with_options(stat_usage, options);
if (run_count <= 0)
usage_with_options(stat_usage, options);
^ permalink raw reply related [flat|nested] 11+ messages in thread
end of thread, other threads:[~2010-01-13 10:32 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2009-12-29 8:37 [PATCH 1/3] perf tools: unify event type description Liming Wang
2009-12-29 8:37 ` [PATCH 2/3] perf tools: remove pid option from stat Liming Wang
2009-12-29 8:37 ` [PATCH 3/3] perf probe: change CONFIG_KPROBE_TRACER to CONFIG_KPROBE_EVENT Liming Wang
2009-12-30 2:32 ` Masami Hiramatsu
2009-12-30 12:23 ` [tip:perf/core] perf probe: Change " tip-bot for Liming Wang
2009-12-29 12:04 ` [PATCH 2/3] perf tools: remove pid option from stat Peter Zijlstra
2009-12-30 9:23 ` Ingo Molnar
2009-12-30 9:29 ` Wang Liming
2009-12-31 8:05 ` [PATCH 1/1] perf tools: fix pid option for stat Liming Wang
2010-01-13 10:31 ` [tip:perf/core] perf tools: Fix --pid " tip-bot for Liming Wang
2009-12-30 12:22 ` [tip:perf/core] perf tools: Unify event type description tip-bot for Liming Wang
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.