86a9eee047
I guess it is enough to show some examples: [root@doppio linux-2.6-tip]# rm -f perf.data* [root@doppio linux-2.6-tip]# ls -la perf.data* ls: cannot access perf.data*: No such file or directory [root@doppio linux-2.6-tip]# perf record -f find / > /dev/null [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.062 MB perf.data (~2699 samples) ] [root@doppio linux-2.6-tip]# ls -la perf.data* -rw------- 1 root root 74440 2009-12-14 20:03 perf.data [root@doppio linux-2.6-tip]# perf record -f find / > /dev/null [ perf record: Woken up 1 times to write data ] [ perf record: Captured and wrote 0.062 MB perf.data (~2692 samples) ] [root@doppio linux-2.6-tip]# ls -la perf.data* -rw------- 1 root root 74280 2009-12-14 20:03 perf.data -rw------- 1 root root 74440 2009-12-14 20:03 perf.data.old [root@doppio linux-2.6-tip]# perf diff | head -5 1 -34994580 /lib64/libc-2.10.1.so _IO_vfprintf_internal 2 -15307806 [kernel.kallsyms] __kmalloc 3 +1 +3665941 /lib64/libc-2.10.1.so __GI_memmove 4 +4 +23508995 /lib64/libc-2.10.1.so _int_malloc 5 +7 +38538813 [kernel.kallsyms] __d_lookup [root@doppio linux-2.6-tip]# perf diff -p | head -5 1 +1.00% /lib64/libc-2.10.1.so _IO_vfprintf_internal 2 [kernel.kallsyms] __kmalloc 3 +1 /lib64/libc-2.10.1.so __GI_memmove 4 +4 /lib64/libc-2.10.1.so _int_malloc 5 +7 -1.00% [kernel.kallsyms] __d_lookup [root@doppio linux-2.6-tip]# perf diff -v | head -5 1 361449551 326454971 -34994580 /lib64/libc-2.10.1.so _IO_vfprintf_internal 2 151009241 135701435 -15307806 [kernel.kallsyms] __kmalloc 3 +1 101805328 105471269 +3665941 /lib64/libc-2.10.1.so __GI_memmove 4 +4 78041440 101550435 +23508995 /lib64/libc-2.10.1.so _int_malloc 5 +7 59536172 98074985 +38538813 [kernel.kallsyms] __d_lookup [root@doppio linux-2.6-tip]# perf diff -vp | head -5 1 9.00% 8.00% +1.00% /lib64/libc-2.10.1.so _IO_vfprintf_internal 2 3.00% 3.00% [kernel.kallsyms] __kmalloc 3 +1 2.00% 2.00% /lib64/libc-2.10.1.so __GI_memmove 4 +4 2.00% 2.00% /lib64/libc-2.10.1.so _int_malloc 5 +7 1.00% 2.00% -1.00% [kernel.kallsyms] __d_lookup [root@doppio linux-2.6-tip]# This should be enough for diffs where the system is non volatile, i.e. when one doesn't updates binaries. For volatile environments, stay tuned for the next perf tool feature: a buildid cache populated by 'perf record', managed by 'perf buildid-cache' a-la ccache, and used by all the report tools. Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com> Cc: Stephen Hemminger <shemminger@vyatta.com> Cc: Frédéric Weisbecker <fweisbec@gmail.com> Cc: Mike Galbraith <efault@gmx.de> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> Cc: Paul E. McKenney <paulmck@linux.vnet.ibm.com> LKML-Reference: <1260828571-3613-3-git-send-email-acme@infradead.org> Signed-off-by: Ingo Molnar <mingo@elte.hu>
106 lines
2.8 KiB
C
106 lines
2.8 KiB
C
#ifndef __PERF_SORT_H
|
|
#define __PERF_SORT_H
|
|
#include "../builtin.h"
|
|
|
|
#include "util.h"
|
|
|
|
#include "color.h"
|
|
#include <linux/list.h>
|
|
#include "cache.h"
|
|
#include <linux/rbtree.h>
|
|
#include "symbol.h"
|
|
#include "string.h"
|
|
#include "callchain.h"
|
|
#include "strlist.h"
|
|
#include "values.h"
|
|
|
|
#include "../perf.h"
|
|
#include "debug.h"
|
|
#include "header.h"
|
|
|
|
#include "parse-options.h"
|
|
#include "parse-events.h"
|
|
|
|
#include "thread.h"
|
|
#include "sort.h"
|
|
|
|
extern regex_t parent_regex;
|
|
extern char *sort_order;
|
|
extern char default_parent_pattern[];
|
|
extern char *parent_pattern;
|
|
extern char default_sort_order[];
|
|
extern int sort__need_collapse;
|
|
extern int sort__has_parent;
|
|
extern char *field_sep;
|
|
extern struct sort_entry sort_comm;
|
|
extern struct sort_entry sort_dso;
|
|
extern struct sort_entry sort_sym;
|
|
extern struct sort_entry sort_parent;
|
|
extern unsigned int dsos__col_width;
|
|
extern unsigned int comms__col_width;
|
|
extern unsigned int threads__col_width;
|
|
extern enum sort_type sort__first_dimension;
|
|
|
|
struct hist_entry {
|
|
struct rb_node rb_node;
|
|
u64 count;
|
|
struct thread *thread;
|
|
struct map *map;
|
|
struct symbol *sym;
|
|
u64 ip;
|
|
char level;
|
|
struct symbol *parent;
|
|
struct callchain_node callchain;
|
|
union {
|
|
unsigned long position;
|
|
struct hist_entry *pair;
|
|
struct rb_root sorted_chain;
|
|
};
|
|
};
|
|
|
|
enum sort_type {
|
|
SORT_PID,
|
|
SORT_COMM,
|
|
SORT_DSO,
|
|
SORT_SYM,
|
|
SORT_PARENT
|
|
};
|
|
|
|
/*
|
|
* configurable sorting bits
|
|
*/
|
|
|
|
struct sort_entry {
|
|
struct list_head list;
|
|
|
|
const char *header;
|
|
|
|
int64_t (*cmp)(struct hist_entry *, struct hist_entry *);
|
|
int64_t (*collapse)(struct hist_entry *, struct hist_entry *);
|
|
size_t (*print)(FILE *fp, struct hist_entry *, unsigned int width);
|
|
unsigned int *width;
|
|
bool elide;
|
|
};
|
|
|
|
extern struct sort_entry sort_thread;
|
|
extern struct list_head hist_entry__sort_list;
|
|
|
|
void setup_sorting(const char * const usagestr[], const struct option *opts);
|
|
|
|
extern int repsep_fprintf(FILE *fp, const char *fmt, ...);
|
|
extern size_t sort__thread_print(FILE *, struct hist_entry *, unsigned int);
|
|
extern size_t sort__comm_print(FILE *, struct hist_entry *, unsigned int);
|
|
extern size_t sort__dso_print(FILE *, struct hist_entry *, unsigned int);
|
|
extern size_t sort__sym_print(FILE *, struct hist_entry *, unsigned int __used);
|
|
extern int64_t cmp_null(void *, void *);
|
|
extern int64_t sort__thread_cmp(struct hist_entry *, struct hist_entry *);
|
|
extern int64_t sort__comm_cmp(struct hist_entry *, struct hist_entry *);
|
|
extern int64_t sort__comm_collapse(struct hist_entry *, struct hist_entry *);
|
|
extern int64_t sort__dso_cmp(struct hist_entry *, struct hist_entry *);
|
|
extern int64_t sort__sym_cmp(struct hist_entry *, struct hist_entry *);
|
|
extern int64_t sort__parent_cmp(struct hist_entry *, struct hist_entry *);
|
|
extern size_t sort__parent_print(FILE *, struct hist_entry *, unsigned int);
|
|
extern int sort_dimension__add(const char *);
|
|
|
|
#endif /* __PERF_SORT_H */
|