Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 169825
b: refs/heads/master
c: 62daacb
h: refs/heads/master
i:
  169823: 8b27dfd
v: v3
  • Loading branch information
Arnaldo Carvalho de Melo authored and Ingo Molnar committed Nov 27, 2009
1 parent b42998f commit 40a2fc5
Show file tree
Hide file tree
Showing 17 changed files with 184 additions and 426 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 1de8e24520ffdcf2a90c842eed937f59079a2abd
refs/heads/master: 62daacb51a2bf8480e6f6b3696b03f102fc15eb0
2 changes: 0 additions & 2 deletions trunk/tools/perf/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -369,7 +369,6 @@ LIB_H += util/sort.h
LIB_H += util/hist.h
LIB_H += util/thread.h
LIB_H += util/data_map.h
LIB_H += util/process_events.h

LIB_OBJS += util/abspath.o
LIB_OBJS += util/alias.o
Expand Down Expand Up @@ -412,7 +411,6 @@ LIB_OBJS += util/svghelper.o
LIB_OBJS += util/sort.o
LIB_OBJS += util/hist.o
LIB_OBJS += util/data_map.o
LIB_OBJS += util/process_events.o

BUILTIN_OBJS += builtin-annotate.o

Expand Down
63 changes: 15 additions & 48 deletions trunk/tools/perf/builtin-annotate.c
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,12 @@
#include "perf.h"
#include "util/debug.h"

#include "util/event.h"
#include "util/parse-options.h"
#include "util/parse-events.h"
#include "util/thread.h"
#include "util/sort.h"
#include "util/hist.h"
#include "util/process_events.h"

static char const *input_name = "perf.data";

Expand Down Expand Up @@ -136,21 +136,16 @@ static int hist_entry__add(struct thread *thread, struct map *map,
return 0;
}

static int
process_sample_event(event_t *event, unsigned long offset, unsigned long head)
static int process_sample_event(event_t *event)
{
char level;
u64 ip = event->ip.ip;
struct map *map = NULL;
struct symbol *sym = NULL;
struct thread *thread = threads__findnew(event->ip.pid);

dump_printf("%p [%p]: PERF_EVENT (IP, %d): %d: %p\n",
(void *)(offset + head),
(void *)(long)(event->header.size),
event->header.misc,
event->ip.pid,
(void *)(long)ip);
dump_printf("(IP, %d): %d: %p\n", event->header.misc,
event->ip.pid, (void *)(long)ip);

if (thread == NULL) {
fprintf(stderr, "problem processing %d event, skipping it.\n",
Expand Down Expand Up @@ -198,46 +193,24 @@ process_sample_event(event_t *event, unsigned long offset, unsigned long head)
"skipping event\n");
return -1;
}
total++;

return 0;
}

static int
process_comm_event(event_t *event, unsigned long offset, unsigned long head)
static int event__process(event_t *self)
{
struct thread *thread = threads__findnew(event->comm.pid);

dump_printf("%p [%p]: PERF_RECORD_COMM: %s:%d\n",
(void *)(offset + head),
(void *)(long)(event->header.size),
event->comm.comm, event->comm.pid);

if (thread == NULL ||
thread__set_comm(thread, event->comm.comm)) {
dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n");
return -1;
}
total_comm++;

return 0;
}

static int
process_event(event_t *event, unsigned long offset, unsigned long head)
{
switch (event->header.type) {
switch (self->header.type) {
case PERF_RECORD_SAMPLE:
return process_sample_event(event, offset, head);
return process_sample_event(self);

case PERF_RECORD_MMAP:
return process_mmap_event(event, offset, head);
return event__process_mmap(self);

case PERF_RECORD_COMM:
return process_comm_event(event, offset, head);
return event__process_comm(self);

case PERF_RECORD_FORK:
return process_task_event(event, offset, head);
return event__process_task(self);
/*
* We dont process them right now but they are fine:
*/
Expand Down Expand Up @@ -621,15 +594,12 @@ static int __cmd_annotate(void)
(void *)(long)event->header.size,
event->header.type);

if (!size || process_event(event, offset, head) < 0) {
if (!size || event__process(event) < 0) {

dump_printf("%p [%p]: skipping unknown header type: %d\n",
(void *)(offset + head),
(void *)(long)(event->header.size),
event->header.type);

total_unknown++;

/*
* assume we lost track of the stream, check alignment, and
* increment a single u64 in the hope to catch on again 'soon'.
Expand All @@ -649,14 +619,11 @@ static int __cmd_annotate(void)
rc = EXIT_SUCCESS;
close(input);

dump_printf(" IP events: %10ld\n", total);
dump_printf(" mmap events: %10ld\n", total_mmap);
dump_printf(" comm events: %10ld\n", total_comm);
dump_printf(" fork events: %10ld\n", total_fork);
dump_printf(" unknown events: %10ld\n", total_unknown);

if (dump_trace)
if (dump_trace) {
event__print_totals();
return 0;
}

if (verbose > 3)
threads__fprintf(stdout);
Expand All @@ -665,7 +632,7 @@ static int __cmd_annotate(void)
dsos__fprintf(stdout);

collapse__resort();
output__resort(total);
output__resort(event__total[0]);

find_annotations();

Expand Down
33 changes: 4 additions & 29 deletions trunk/tools/perf/builtin-kmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -33,9 +33,6 @@ static bool raw_ip;

static char default_sort_order[] = "frag,hit,bytes";

static char *cwd;
static int cwdlen;

static int *cpunode_map;
static int max_cpu_num;

Expand Down Expand Up @@ -126,25 +123,6 @@ static void setup_cpunode_map(void)
}
}

static int
process_comm_event(event_t *event, unsigned long offset, unsigned long head)
{
struct thread *thread = threads__findnew(event->comm.pid);

dump_printf("%p [%p]: PERF_RECORD_COMM: %s:%d\n",
(void *)(offset + head),
(void *)(long)(event->header.size),
event->comm.comm, event->comm.pid);

if (thread == NULL ||
thread__set_comm(thread, event->comm.comm)) {
dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n");
return -1;
}

return 0;
}

static void insert_alloc_stat(unsigned long call_site, unsigned long ptr,
int bytes_req, int bytes_alloc, int cpu)
{
Expand Down Expand Up @@ -340,8 +318,7 @@ process_raw_event(event_t *raw_event __used, void *more_data,
}
}

static int
process_sample_event(event_t *event, unsigned long offset, unsigned long head)
static int process_sample_event(event_t *event)
{
u64 ip = event->ip.ip;
u64 timestamp = -1;
Expand All @@ -366,9 +343,7 @@ process_sample_event(event_t *event, unsigned long offset, unsigned long head)
more_data += sizeof(u64);
}

dump_printf("%p [%p]: PERF_RECORD_SAMPLE (IP, %d): %d/%d: %p period: %Ld\n",
(void *)(offset + head),
(void *)(long)(event->header.size),
dump_printf("(IP, %d): %d/%d: %p period: %Ld\n",
event->header.misc,
event->ip.pid, event->ip.tid,
(void *)(long)ip,
Expand Down Expand Up @@ -403,7 +378,7 @@ static int sample_type_check(u64 type)

static struct perf_file_handler file_handler = {
.process_sample_event = process_sample_event,
.process_comm_event = process_comm_event,
.process_comm_event = event__process_comm,
.sample_type_check = sample_type_check,
};

Expand All @@ -413,7 +388,7 @@ static int read_events(void)
register_perf_file_handler(&file_handler);

return mmap_dispatch_perf_file(&header, input_name, 0, 0,
&cwdlen, &cwd);
&event__cwdlen, &event__cwd);
}

static double fragmentation(unsigned long n_req, unsigned long n_alloc)
Expand Down
72 changes: 19 additions & 53 deletions trunk/tools/perf/builtin-report.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,6 @@
#include "util/thread.h"
#include "util/sort.h"
#include "util/hist.h"
#include "util/process_events.h"

static char const *input_name = "perf.data";

Expand Down Expand Up @@ -655,8 +654,7 @@ static int validate_chain(struct ip_callchain *chain, event_t *event)
return 0;
}

static int
process_sample_event(event_t *event, unsigned long offset, unsigned long head)
static int process_sample_event(event_t *event)
{
char level;
struct symbol *sym = NULL;
Expand All @@ -673,9 +671,7 @@ process_sample_event(event_t *event, unsigned long offset, unsigned long head)
more_data += sizeof(u64);
}

dump_printf("%p [%p]: PERF_RECORD_SAMPLE (IP, %d): %d/%d: %p period: %Ld\n",
(void *)(offset + head),
(void *)(long)(event->header.size),
dump_printf("(IP, %d): %d/%d: %p period: %Ld\n",
event->header.misc,
event->ip.pid, event->ip.tid,
(void *)(long)ip,
Expand Down Expand Up @@ -743,47 +739,27 @@ process_sample_event(event_t *event, unsigned long offset, unsigned long head)
return -1;
}

total += period;
event__stats.total += period;

return 0;
}

static int
process_comm_event(event_t *event, unsigned long offset, unsigned long head)
static int process_comm_event(event_t *event)
{
struct thread *thread = threads__findnew(event->comm.pid);

dump_printf("%p [%p]: PERF_RECORD_COMM: %s:%d\n",
(void *)(offset + head),
(void *)(long)(event->header.size),
event->comm.comm, event->comm.pid);
dump_printf(": %s:%d\n", event->comm.comm, event->comm.pid);

if (thread == NULL ||
thread__set_comm_adjust(thread, event->comm.comm)) {
dump_printf("problem processing PERF_RECORD_COMM, skipping event.\n");
return -1;
}
total_comm++;

return 0;
}

static int
process_lost_event(event_t *event, unsigned long offset, unsigned long head)
{
dump_printf("%p [%p]: PERF_RECORD_LOST: id:%Ld: lost:%Ld\n",
(void *)(offset + head),
(void *)(long)(event->header.size),
event->lost.id,
event->lost.lost);

total_lost += event->lost.lost;

return 0;
}

static int
process_read_event(event_t *event, unsigned long offset, unsigned long head)
static int process_read_event(event_t *event)
{
struct perf_event_attr *attr;

Expand All @@ -799,14 +775,9 @@ process_read_event(event_t *event, unsigned long offset, unsigned long head)
event->read.value);
}

dump_printf("%p [%p]: PERF_RECORD_READ: %d %d %s %Lu\n",
(void *)(offset + head),
(void *)(long)(event->header.size),
event->read.pid,
event->read.tid,
attr ? __event_name(attr->type, attr->config)
: "FAIL",
event->read.value);
dump_printf(": %d %d %s %Lu\n", event->read.pid, event->read.tid,
attr ? __event_name(attr->type, attr->config) : "FAIL",
event->read.value);

return 0;
}
Expand Down Expand Up @@ -842,11 +813,11 @@ static int sample_type_check(u64 type)

static struct perf_file_handler file_handler = {
.process_sample_event = process_sample_event,
.process_mmap_event = process_mmap_event,
.process_mmap_event = event__process_mmap,
.process_comm_event = process_comm_event,
.process_exit_event = process_task_event,
.process_fork_event = process_task_event,
.process_lost_event = process_lost_event,
.process_exit_event = event__process_task,
.process_fork_event = event__process_task,
.process_lost_event = event__process_lost,
.process_read_event = process_read_event,
.sample_type_check = sample_type_check,
};
Expand All @@ -866,19 +837,14 @@ static int __cmd_report(void)
register_perf_file_handler(&file_handler);

ret = mmap_dispatch_perf_file(&header, input_name, force,
full_paths, &cwdlen, &cwd);
full_paths, &event__cwdlen, &event__cwd);
if (ret)
return ret;

dump_printf(" IP events: %10ld\n", total);
dump_printf(" mmap events: %10ld\n", total_mmap);
dump_printf(" comm events: %10ld\n", total_comm);
dump_printf(" fork events: %10ld\n", total_fork);
dump_printf(" lost events: %10ld\n", total_lost);
dump_printf(" unknown events: %10ld\n", file_handler.total_unknown);

if (dump_trace)
if (dump_trace) {
event__print_totals();
return 0;
}

if (verbose > 3)
threads__fprintf(stdout);
Expand All @@ -887,8 +853,8 @@ static int __cmd_report(void)
dsos__fprintf(stdout);

collapse__resort();
output__resort(total);
output__fprintf(stdout, total);
output__resort(event__stats.total);
output__fprintf(stdout, event__stats.total);

if (show_threads)
perf_read_values_destroy(&show_threads_values);
Expand Down
Loading

0 comments on commit 40a2fc5

Please sign in to comment.