2009-09-24 16:02:18 +00:00
|
|
|
#ifndef __PERF_HEADER_H
|
|
|
|
#define __PERF_HEADER_H
|
2009-06-25 15:05:54 +00:00
|
|
|
|
2012-11-19 22:21:03 +00:00
|
|
|
#include <linux/perf_event.h>
|
2009-06-25 15:05:54 +00:00
|
|
|
#include <sys/types.h>
|
perf symbols: Use the buildids if present
With this change 'perf record' will intercept PERF_RECORD_MMAP
calls, creating a linked list of DSOs, then when the session
finishes, it will traverse this list and read the buildids,
stashing them at the end of the file and will set up a new
feature bit in the header bitmask.
'perf report' will then notice this feature and populate the
'dsos' list and set the build ids.
When reading the symtabs it will refuse to load from a file that
doesn't have the same build id. This improves the
reliability of the profiler output, as symbols and profiling
data is more guaranteed to match.
Example:
[root@doppio ~]# perf report | head
/home/acme/bin/perf with build id b1ea544ac3746e7538972548a09aadecc5753868 not found, continuing without symbols
# Samples: 2621434559
#
# Overhead Command Shared Object Symbol
# ........ ............... ............................. ......
#
7.91% init [kernel] [k] read_hpet
7.64% init [kernel] [k] mwait_idle_with_hints
7.60% swapper [kernel] [k] read_hpet
7.60% swapper [kernel] [k] mwait_idle_with_hints
3.65% init [kernel] [k] 0xffffffffa02339d9
[root@doppio ~]#
In this case the 'perf' binary was an older one, vanished,
so its symbols probably wouldn't match or would cause subtly
different (and misleading) output.
Next patches will support the kernel as well, reading the build
id notes for it and the modules from /sys.
Another patch should also introduce a new plumbing command:
'perf list-buildids'
that will then be used in porcelain that is distro specific to
fetch -debuginfo packages where such buildids are present. This
will in turn allow for one to run 'perf record' in one machine
and 'perf report' in another.
Future work on having the buildid sent directly from the kernel
in the PERF_RECORD_MMAP event is needed to close races, as the
DSO can be changed during a 'perf record' session, but this
patch at least helps with non-corner cases and current/older
kernels.
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
Cc: Christoph Hellwig <hch@infradead.org>
Cc: Frank Ch. Eigler <fche@redhat.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Jason Baron <jbaron@redhat.com>
Cc: Jim Keniston <jkenisto@us.ibm.com>
Cc: K. Prasad <prasad@linux.vnet.ibm.com>
Cc: Masami Hiramatsu <mhiramat@redhat.com>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Roland McGrath <roland@redhat.com>
Cc: Srikar Dronamraju <srikar@linux.vnet.ibm.com>
Cc: Steven Rostedt <rostedt@goodmis.org>
LKML-Reference: <1257367843-26224-1-git-send-email-acme@infradead.org>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
2009-11-04 20:50:43 +00:00
|
|
|
#include <stdbool.h>
|
2009-06-25 15:05:54 +00:00
|
|
|
#include "types.h"
|
2010-01-20 17:28:45 +00:00
|
|
|
#include "event.h"
|
2009-06-25 15:05:54 +00:00
|
|
|
|
2009-10-17 15:57:18 +00:00
|
|
|
#include <linux/bitmap.h>
|
|
|
|
|
2009-11-16 18:32:43 +00:00
|
|
|
enum {
|
2011-12-07 09:02:57 +00:00
|
|
|
HEADER_RESERVED = 0, /* always cleared */
|
2011-12-15 16:32:40 +00:00
|
|
|
HEADER_FIRST_FEATURE = 1,
|
2012-05-15 11:28:13 +00:00
|
|
|
HEADER_TRACING_DATA = 1,
|
2009-11-16 18:32:43 +00:00
|
|
|
HEADER_BUILD_ID,
|
perf tools: Make perf.data more self-descriptive (v8)
The goal of this patch is to include more information about the host
environment into the perf.data so it is more self-descriptive. Overtime,
profiles are captured on various machines and it becomes hard to track
what was recorded, on what machine and when.
This patch provides a way to solve this by extending the perf.data file
with basic information about the host machine. To add those extensions,
we leverage the feature bits capabilities of the perf.data format. The
change is backward compatible with existing perf.data files.
We define the following useful new extensions:
- HEADER_HOSTNAME: the hostname
- HEADER_OSRELEASE: the kernel release number
- HEADER_ARCH: the hw architecture
- HEADER_CPUDESC: generic CPU description
- HEADER_NRCPUS: number of online/avail cpus
- HEADER_CMDLINE: perf command line
- HEADER_VERSION: perf version
- HEADER_TOPOLOGY: cpu topology
- HEADER_EVENT_DESC: full event description (attrs)
- HEADER_CPUID: easy-to-parse low level CPU identication
The small granularity for the entries is to make it easier to extend
without breaking backward compatiblity. Many entries are provided as
ASCII strings.
Perf report/script have been modified to print the basic information as
easy-to-parse ASCII strings. Extended information about CPU and NUMA
topology may be requested with the -I option.
Thanks to David Ahern for reviewing and testing the many versions of
this patch.
$ perf report --stdio
# ========
# captured on : Mon Sep 26 15:22:14 2011
# hostname : quad
# os release : 3.1.0-rc4-tip
# perf version : 3.1.0-rc4
# arch : x86_64
# nrcpus online : 4
# nrcpus avail : 4
# cpudesc : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
# cpuid : GenuineIntel,6,15,11
# total memory : 8105360 kB
# cmdline : /home/eranian/perfmon/official/tip/build/tools/perf/perf record date
# event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, id = { 29, 30, 31,
# HEADER_CPU_TOPOLOGY info available, use -I to display
# HEADER_NUMA_TOPOLOGY info available, use -I to display
# ========
#
...
$ perf report --stdio -I
# ========
# captured on : Mon Sep 26 15:22:14 2011
# hostname : quad
# os release : 3.1.0-rc4-tip
# perf version : 3.1.0-rc4
# arch : x86_64
# nrcpus online : 4
# nrcpus avail : 4
# cpudesc : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
# cpuid : GenuineIntel,6,15,11
# total memory : 8105360 kB
# cmdline : /home/eranian/perfmon/official/tip/build/tools/perf/perf record date
# event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, id = { 29, 30, 31,
# sibling cores : 0-3
# sibling threads : 0
# sibling threads : 1
# sibling threads : 2
# sibling threads : 3
# node0 meminfo : total = 8320608 kB, free = 7571024 kB
# node0 cpu list : 0-3
# ========
#
...
Reviewed-by: David Ahern <dsahern@gmail.com>
Tested-by: David Ahern <dsahern@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Robert Richter <robert.richter@amd.com>
Cc: Andi Kleen <ak@linux.intel.com>
Link: http://lkml.kernel.org/r/20110930134040.GA5575@quad
Signed-off-by: Stephane Eranian <eranian@google.com>
[ committer notes: Use --show-info in the tools as was in the docs, rename
perf_header_fprintf_info to perf_file_section__fprintf_info, fixup
conflict with f69b64f7 "perf: Support setting the disassembler style" ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2011-09-30 13:40:40 +00:00
|
|
|
|
|
|
|
HEADER_HOSTNAME,
|
|
|
|
HEADER_OSRELEASE,
|
|
|
|
HEADER_VERSION,
|
|
|
|
HEADER_ARCH,
|
|
|
|
HEADER_NRCPUS,
|
|
|
|
HEADER_CPUDESC,
|
|
|
|
HEADER_CPUID,
|
|
|
|
HEADER_TOTAL_MEM,
|
|
|
|
HEADER_CMDLINE,
|
|
|
|
HEADER_EVENT_DESC,
|
|
|
|
HEADER_CPU_TOPOLOGY,
|
|
|
|
HEADER_NUMA_TOPOLOGY,
|
2012-03-08 22:47:46 +00:00
|
|
|
HEADER_BRANCH_STACK,
|
2012-08-16 19:10:24 +00:00
|
|
|
HEADER_PMU_MAPPINGS,
|
2013-01-22 09:09:31 +00:00
|
|
|
HEADER_GROUP_DESC,
|
2009-11-16 18:32:43 +00:00
|
|
|
HEADER_LAST_FEATURE,
|
2011-12-07 09:02:57 +00:00
|
|
|
HEADER_FEAT_BITS = 256,
|
2009-11-16 18:32:43 +00:00
|
|
|
};
|
2009-10-17 15:12:34 +00:00
|
|
|
|
2009-11-16 18:32:43 +00:00
|
|
|
struct perf_file_section {
|
|
|
|
u64 offset;
|
|
|
|
u64 size;
|
|
|
|
};
|
|
|
|
|
|
|
|
struct perf_file_header {
|
|
|
|
u64 magic;
|
|
|
|
u64 size;
|
|
|
|
u64 attr_size;
|
|
|
|
struct perf_file_section attrs;
|
|
|
|
struct perf_file_section data;
|
|
|
|
struct perf_file_section event_types;
|
|
|
|
DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS);
|
|
|
|
};
|
|
|
|
|
2010-04-02 04:59:15 +00:00
|
|
|
struct perf_pipe_file_header {
|
|
|
|
u64 magic;
|
|
|
|
u64 size;
|
|
|
|
};
|
|
|
|
|
2009-11-16 18:32:43 +00:00
|
|
|
struct perf_header;
|
|
|
|
|
2011-03-09 11:13:19 +00:00
|
|
|
int perf_file_header__read(struct perf_file_header *header,
|
2009-11-16 18:32:43 +00:00
|
|
|
struct perf_header *ph, int fd);
|
|
|
|
|
2012-09-24 08:14:58 +00:00
|
|
|
struct perf_session_env {
|
|
|
|
char *hostname;
|
|
|
|
char *os_release;
|
|
|
|
char *version;
|
|
|
|
char *arch;
|
|
|
|
int nr_cpus_online;
|
|
|
|
int nr_cpus_avail;
|
|
|
|
char *cpu_desc;
|
|
|
|
char *cpuid;
|
|
|
|
unsigned long long total_mem;
|
|
|
|
|
|
|
|
int nr_cmdline;
|
|
|
|
char *cmdline;
|
|
|
|
int nr_sibling_cores;
|
|
|
|
char *sibling_cores;
|
|
|
|
int nr_sibling_threads;
|
|
|
|
char *sibling_threads;
|
|
|
|
int nr_numa_nodes;
|
|
|
|
char *numa_nodes;
|
|
|
|
int nr_pmu_mappings;
|
|
|
|
char *pmu_mappings;
|
2013-01-22 09:09:31 +00:00
|
|
|
int nr_groups;
|
2012-09-24 08:14:58 +00:00
|
|
|
};
|
|
|
|
|
2009-06-25 15:05:54 +00:00
|
|
|
struct perf_header {
|
2009-10-17 15:12:34 +00:00
|
|
|
int frozen;
|
perf tools: Reorganize some structs to save space
Using 'pahole --packable' I found some structs that could be reorganized
to eliminate alignment holes, in some cases getting them to be cacheline
multiples.
[acme@doppio linux-2.6-tip]$ codiff perf.old ~/bin/perf
builtin-annotate.c:
struct perf_session | -8
struct perf_header | -8
2 structs changed
builtin-diff.c:
struct sample_data | -8
1 struct changed
diff__process_sample_event | -8
1 function changed, 8 bytes removed, diff: -8
builtin-sched.c:
struct sched_atom | -8
1 struct changed
builtin-timechart.c:
struct per_pid | -8
1 struct changed
cmd_timechart | -16
1 function changed, 16 bytes removed, diff: -16
builtin-probe.c:
struct perf_probe_point | -8
struct perf_probe_event | -8
2 structs changed
opt_add_probe_event | -3
1 function changed, 3 bytes removed, diff: -3
util/probe-finder.c:
struct probe_finder | -8
1 struct changed
find_kprobe_trace_events | -16
1 function changed, 16 bytes removed, diff: -16
/home/acme/bin/perf:
4 functions changed, 43 bytes removed, diff: -43
[acme@doppio linux-2.6-tip]$
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>
LKML-Reference: <new-submission>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2010-04-05 15:53:45 +00:00
|
|
|
bool needs_swap;
|
2009-10-17 15:12:34 +00:00
|
|
|
s64 attr_offset;
|
|
|
|
u64 data_offset;
|
|
|
|
u64 data_size;
|
|
|
|
u64 event_offset;
|
|
|
|
u64 event_size;
|
2009-10-17 15:57:18 +00:00
|
|
|
DECLARE_BITMAP(adds_features, HEADER_FEAT_BITS);
|
2012-09-24 08:14:58 +00:00
|
|
|
struct perf_session_env env;
|
2009-06-25 15:05:54 +00:00
|
|
|
};
|
|
|
|
|
2011-01-11 22:56:53 +00:00
|
|
|
struct perf_evlist;
|
2011-11-25 10:19:45 +00:00
|
|
|
struct perf_session;
|
2011-01-11 22:56:53 +00:00
|
|
|
|
2011-03-10 14:15:54 +00:00
|
|
|
int perf_session__read_header(struct perf_session *session, int fd);
|
|
|
|
int perf_session__write_header(struct perf_session *session,
|
|
|
|
struct perf_evlist *evlist,
|
|
|
|
int fd, bool at_exit);
|
2010-04-02 04:59:15 +00:00
|
|
|
int perf_header__write_pipe(int fd);
|
2009-06-25 15:05:54 +00:00
|
|
|
|
2009-12-29 00:48:33 +00:00
|
|
|
int perf_header__push_event(u64 id, const char *name);
|
2009-09-12 05:52:51 +00:00
|
|
|
char *perf_header__find_event(u64 id);
|
|
|
|
|
2011-03-09 11:13:19 +00:00
|
|
|
void perf_header__set_feat(struct perf_header *header, int feat);
|
|
|
|
void perf_header__clear_feat(struct perf_header *header, int feat);
|
|
|
|
bool perf_header__has_feat(const struct perf_header *header, int feat);
|
2009-06-25 15:05:54 +00:00
|
|
|
|
perf tools: Make perf.data more self-descriptive (v8)
The goal of this patch is to include more information about the host
environment into the perf.data so it is more self-descriptive. Overtime,
profiles are captured on various machines and it becomes hard to track
what was recorded, on what machine and when.
This patch provides a way to solve this by extending the perf.data file
with basic information about the host machine. To add those extensions,
we leverage the feature bits capabilities of the perf.data format. The
change is backward compatible with existing perf.data files.
We define the following useful new extensions:
- HEADER_HOSTNAME: the hostname
- HEADER_OSRELEASE: the kernel release number
- HEADER_ARCH: the hw architecture
- HEADER_CPUDESC: generic CPU description
- HEADER_NRCPUS: number of online/avail cpus
- HEADER_CMDLINE: perf command line
- HEADER_VERSION: perf version
- HEADER_TOPOLOGY: cpu topology
- HEADER_EVENT_DESC: full event description (attrs)
- HEADER_CPUID: easy-to-parse low level CPU identication
The small granularity for the entries is to make it easier to extend
without breaking backward compatiblity. Many entries are provided as
ASCII strings.
Perf report/script have been modified to print the basic information as
easy-to-parse ASCII strings. Extended information about CPU and NUMA
topology may be requested with the -I option.
Thanks to David Ahern for reviewing and testing the many versions of
this patch.
$ perf report --stdio
# ========
# captured on : Mon Sep 26 15:22:14 2011
# hostname : quad
# os release : 3.1.0-rc4-tip
# perf version : 3.1.0-rc4
# arch : x86_64
# nrcpus online : 4
# nrcpus avail : 4
# cpudesc : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
# cpuid : GenuineIntel,6,15,11
# total memory : 8105360 kB
# cmdline : /home/eranian/perfmon/official/tip/build/tools/perf/perf record date
# event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, id = { 29, 30, 31,
# HEADER_CPU_TOPOLOGY info available, use -I to display
# HEADER_NUMA_TOPOLOGY info available, use -I to display
# ========
#
...
$ perf report --stdio -I
# ========
# captured on : Mon Sep 26 15:22:14 2011
# hostname : quad
# os release : 3.1.0-rc4-tip
# perf version : 3.1.0-rc4
# arch : x86_64
# nrcpus online : 4
# nrcpus avail : 4
# cpudesc : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
# cpuid : GenuineIntel,6,15,11
# total memory : 8105360 kB
# cmdline : /home/eranian/perfmon/official/tip/build/tools/perf/perf record date
# event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, id = { 29, 30, 31,
# sibling cores : 0-3
# sibling threads : 0
# sibling threads : 1
# sibling threads : 2
# sibling threads : 3
# node0 meminfo : total = 8320608 kB, free = 7571024 kB
# node0 cpu list : 0-3
# ========
#
...
Reviewed-by: David Ahern <dsahern@gmail.com>
Tested-by: David Ahern <dsahern@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Robert Richter <robert.richter@amd.com>
Cc: Andi Kleen <ak@linux.intel.com>
Link: http://lkml.kernel.org/r/20110930134040.GA5575@quad
Signed-off-by: Stephane Eranian <eranian@google.com>
[ committer notes: Use --show-info in the tools as was in the docs, rename
perf_header_fprintf_info to perf_file_section__fprintf_info, fixup
conflict with f69b64f7 "perf: Support setting the disassembler style" ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2011-09-30 13:40:40 +00:00
|
|
|
int perf_header__set_cmdline(int argc, const char **argv);
|
|
|
|
|
2011-03-09 11:13:19 +00:00
|
|
|
int perf_header__process_sections(struct perf_header *header, int fd,
|
perf tools: Make perf.data more self-descriptive (v8)
The goal of this patch is to include more information about the host
environment into the perf.data so it is more self-descriptive. Overtime,
profiles are captured on various machines and it becomes hard to track
what was recorded, on what machine and when.
This patch provides a way to solve this by extending the perf.data file
with basic information about the host machine. To add those extensions,
we leverage the feature bits capabilities of the perf.data format. The
change is backward compatible with existing perf.data files.
We define the following useful new extensions:
- HEADER_HOSTNAME: the hostname
- HEADER_OSRELEASE: the kernel release number
- HEADER_ARCH: the hw architecture
- HEADER_CPUDESC: generic CPU description
- HEADER_NRCPUS: number of online/avail cpus
- HEADER_CMDLINE: perf command line
- HEADER_VERSION: perf version
- HEADER_TOPOLOGY: cpu topology
- HEADER_EVENT_DESC: full event description (attrs)
- HEADER_CPUID: easy-to-parse low level CPU identication
The small granularity for the entries is to make it easier to extend
without breaking backward compatiblity. Many entries are provided as
ASCII strings.
Perf report/script have been modified to print the basic information as
easy-to-parse ASCII strings. Extended information about CPU and NUMA
topology may be requested with the -I option.
Thanks to David Ahern for reviewing and testing the many versions of
this patch.
$ perf report --stdio
# ========
# captured on : Mon Sep 26 15:22:14 2011
# hostname : quad
# os release : 3.1.0-rc4-tip
# perf version : 3.1.0-rc4
# arch : x86_64
# nrcpus online : 4
# nrcpus avail : 4
# cpudesc : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
# cpuid : GenuineIntel,6,15,11
# total memory : 8105360 kB
# cmdline : /home/eranian/perfmon/official/tip/build/tools/perf/perf record date
# event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, id = { 29, 30, 31,
# HEADER_CPU_TOPOLOGY info available, use -I to display
# HEADER_NUMA_TOPOLOGY info available, use -I to display
# ========
#
...
$ perf report --stdio -I
# ========
# captured on : Mon Sep 26 15:22:14 2011
# hostname : quad
# os release : 3.1.0-rc4-tip
# perf version : 3.1.0-rc4
# arch : x86_64
# nrcpus online : 4
# nrcpus avail : 4
# cpudesc : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
# cpuid : GenuineIntel,6,15,11
# total memory : 8105360 kB
# cmdline : /home/eranian/perfmon/official/tip/build/tools/perf/perf record date
# event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, id = { 29, 30, 31,
# sibling cores : 0-3
# sibling threads : 0
# sibling threads : 1
# sibling threads : 2
# sibling threads : 3
# node0 meminfo : total = 8320608 kB, free = 7571024 kB
# node0 cpu list : 0-3
# ========
#
...
Reviewed-by: David Ahern <dsahern@gmail.com>
Tested-by: David Ahern <dsahern@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Robert Richter <robert.richter@amd.com>
Cc: Andi Kleen <ak@linux.intel.com>
Link: http://lkml.kernel.org/r/20110930134040.GA5575@quad
Signed-off-by: Stephane Eranian <eranian@google.com>
[ committer notes: Use --show-info in the tools as was in the docs, rename
perf_header_fprintf_info to perf_file_section__fprintf_info, fixup
conflict with f69b64f7 "perf: Support setting the disassembler style" ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2011-09-30 13:40:40 +00:00
|
|
|
void *data,
|
2011-03-09 11:13:19 +00:00
|
|
|
int (*process)(struct perf_file_section *section,
|
perf tools: Make perf.data more self-descriptive (v8)
The goal of this patch is to include more information about the host
environment into the perf.data so it is more self-descriptive. Overtime,
profiles are captured on various machines and it becomes hard to track
what was recorded, on what machine and when.
This patch provides a way to solve this by extending the perf.data file
with basic information about the host machine. To add those extensions,
we leverage the feature bits capabilities of the perf.data format. The
change is backward compatible with existing perf.data files.
We define the following useful new extensions:
- HEADER_HOSTNAME: the hostname
- HEADER_OSRELEASE: the kernel release number
- HEADER_ARCH: the hw architecture
- HEADER_CPUDESC: generic CPU description
- HEADER_NRCPUS: number of online/avail cpus
- HEADER_CMDLINE: perf command line
- HEADER_VERSION: perf version
- HEADER_TOPOLOGY: cpu topology
- HEADER_EVENT_DESC: full event description (attrs)
- HEADER_CPUID: easy-to-parse low level CPU identication
The small granularity for the entries is to make it easier to extend
without breaking backward compatiblity. Many entries are provided as
ASCII strings.
Perf report/script have been modified to print the basic information as
easy-to-parse ASCII strings. Extended information about CPU and NUMA
topology may be requested with the -I option.
Thanks to David Ahern for reviewing and testing the many versions of
this patch.
$ perf report --stdio
# ========
# captured on : Mon Sep 26 15:22:14 2011
# hostname : quad
# os release : 3.1.0-rc4-tip
# perf version : 3.1.0-rc4
# arch : x86_64
# nrcpus online : 4
# nrcpus avail : 4
# cpudesc : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
# cpuid : GenuineIntel,6,15,11
# total memory : 8105360 kB
# cmdline : /home/eranian/perfmon/official/tip/build/tools/perf/perf record date
# event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, id = { 29, 30, 31,
# HEADER_CPU_TOPOLOGY info available, use -I to display
# HEADER_NUMA_TOPOLOGY info available, use -I to display
# ========
#
...
$ perf report --stdio -I
# ========
# captured on : Mon Sep 26 15:22:14 2011
# hostname : quad
# os release : 3.1.0-rc4-tip
# perf version : 3.1.0-rc4
# arch : x86_64
# nrcpus online : 4
# nrcpus avail : 4
# cpudesc : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
# cpuid : GenuineIntel,6,15,11
# total memory : 8105360 kB
# cmdline : /home/eranian/perfmon/official/tip/build/tools/perf/perf record date
# event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, id = { 29, 30, 31,
# sibling cores : 0-3
# sibling threads : 0
# sibling threads : 1
# sibling threads : 2
# sibling threads : 3
# node0 meminfo : total = 8320608 kB, free = 7571024 kB
# node0 cpu list : 0-3
# ========
#
...
Reviewed-by: David Ahern <dsahern@gmail.com>
Tested-by: David Ahern <dsahern@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Robert Richter <robert.richter@amd.com>
Cc: Andi Kleen <ak@linux.intel.com>
Link: http://lkml.kernel.org/r/20110930134040.GA5575@quad
Signed-off-by: Stephane Eranian <eranian@google.com>
[ committer notes: Use --show-info in the tools as was in the docs, rename
perf_header_fprintf_info to perf_file_section__fprintf_info, fixup
conflict with f69b64f7 "perf: Support setting the disassembler style" ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2011-09-30 13:40:40 +00:00
|
|
|
struct perf_header *ph,
|
|
|
|
int feat, int fd, void *data));
|
|
|
|
|
|
|
|
int perf_header__fprintf_info(struct perf_session *s, FILE *fp, bool full);
|
2009-11-16 18:32:43 +00:00
|
|
|
|
2010-01-20 17:28:45 +00:00
|
|
|
int build_id_cache__add_s(const char *sbuild_id, const char *debugdir,
|
2012-09-10 16:50:19 +00:00
|
|
|
const char *name, bool is_kallsyms, bool is_vdso);
|
2010-01-20 17:28:45 +00:00
|
|
|
int build_id_cache__remove_s(const char *sbuild_id, const char *debugdir);
|
|
|
|
|
2011-11-28 10:30:20 +00:00
|
|
|
int perf_event__synthesize_attr(struct perf_tool *tool,
|
2012-08-16 19:10:17 +00:00
|
|
|
struct perf_event_attr *attr, u32 ids, u64 *id,
|
2011-11-28 09:56:39 +00:00
|
|
|
perf_event__handler_t process);
|
2011-11-28 10:30:20 +00:00
|
|
|
int perf_event__synthesize_attrs(struct perf_tool *tool,
|
2011-11-25 10:19:45 +00:00
|
|
|
struct perf_session *session,
|
|
|
|
perf_event__handler_t process);
|
2011-11-12 00:45:41 +00:00
|
|
|
int perf_event__process_attr(union perf_event *event, struct perf_evlist **pevlist);
|
2011-01-29 16:01:45 +00:00
|
|
|
|
2011-11-28 10:30:20 +00:00
|
|
|
int perf_event__synthesize_event_type(struct perf_tool *tool,
|
2011-11-25 10:19:45 +00:00
|
|
|
u64 event_id, char *name,
|
2011-01-29 16:01:45 +00:00
|
|
|
perf_event__handler_t process,
|
2011-11-28 09:56:39 +00:00
|
|
|
struct machine *machine);
|
2011-11-28 10:30:20 +00:00
|
|
|
int perf_event__synthesize_event_types(struct perf_tool *tool,
|
2011-11-25 10:19:45 +00:00
|
|
|
perf_event__handler_t process,
|
2011-11-28 09:56:39 +00:00
|
|
|
struct machine *machine);
|
2011-11-28 10:30:20 +00:00
|
|
|
int perf_event__process_event_type(struct perf_tool *tool,
|
2011-11-28 09:56:39 +00:00
|
|
|
union perf_event *event);
|
2010-04-02 04:59:22 +00:00
|
|
|
|
2011-11-28 10:30:20 +00:00
|
|
|
int perf_event__synthesize_tracing_data(struct perf_tool *tool,
|
2011-11-25 10:19:45 +00:00
|
|
|
int fd, struct perf_evlist *evlist,
|
2011-11-28 09:56:39 +00:00
|
|
|
perf_event__handler_t process);
|
2011-01-29 16:01:45 +00:00
|
|
|
int perf_event__process_tracing_data(union perf_event *event,
|
|
|
|
struct perf_session *session);
|
|
|
|
|
2011-11-28 10:30:20 +00:00
|
|
|
int perf_event__synthesize_build_id(struct perf_tool *tool,
|
2011-11-25 10:19:45 +00:00
|
|
|
struct dso *pos, u16 misc,
|
2011-01-29 16:01:45 +00:00
|
|
|
perf_event__handler_t process,
|
2011-11-28 09:56:39 +00:00
|
|
|
struct machine *machine);
|
2011-11-28 10:30:20 +00:00
|
|
|
int perf_event__process_build_id(struct perf_tool *tool,
|
2011-11-25 10:19:45 +00:00
|
|
|
union perf_event *event,
|
2011-01-29 16:01:45 +00:00
|
|
|
struct perf_session *session);
|
2012-10-30 03:56:07 +00:00
|
|
|
bool is_perf_magic(u64 magic);
|
perf tools: Make perf.data more self-descriptive (v8)
The goal of this patch is to include more information about the host
environment into the perf.data so it is more self-descriptive. Overtime,
profiles are captured on various machines and it becomes hard to track
what was recorded, on what machine and when.
This patch provides a way to solve this by extending the perf.data file
with basic information about the host machine. To add those extensions,
we leverage the feature bits capabilities of the perf.data format. The
change is backward compatible with existing perf.data files.
We define the following useful new extensions:
- HEADER_HOSTNAME: the hostname
- HEADER_OSRELEASE: the kernel release number
- HEADER_ARCH: the hw architecture
- HEADER_CPUDESC: generic CPU description
- HEADER_NRCPUS: number of online/avail cpus
- HEADER_CMDLINE: perf command line
- HEADER_VERSION: perf version
- HEADER_TOPOLOGY: cpu topology
- HEADER_EVENT_DESC: full event description (attrs)
- HEADER_CPUID: easy-to-parse low level CPU identication
The small granularity for the entries is to make it easier to extend
without breaking backward compatiblity. Many entries are provided as
ASCII strings.
Perf report/script have been modified to print the basic information as
easy-to-parse ASCII strings. Extended information about CPU and NUMA
topology may be requested with the -I option.
Thanks to David Ahern for reviewing and testing the many versions of
this patch.
$ perf report --stdio
# ========
# captured on : Mon Sep 26 15:22:14 2011
# hostname : quad
# os release : 3.1.0-rc4-tip
# perf version : 3.1.0-rc4
# arch : x86_64
# nrcpus online : 4
# nrcpus avail : 4
# cpudesc : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
# cpuid : GenuineIntel,6,15,11
# total memory : 8105360 kB
# cmdline : /home/eranian/perfmon/official/tip/build/tools/perf/perf record date
# event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, id = { 29, 30, 31,
# HEADER_CPU_TOPOLOGY info available, use -I to display
# HEADER_NUMA_TOPOLOGY info available, use -I to display
# ========
#
...
$ perf report --stdio -I
# ========
# captured on : Mon Sep 26 15:22:14 2011
# hostname : quad
# os release : 3.1.0-rc4-tip
# perf version : 3.1.0-rc4
# arch : x86_64
# nrcpus online : 4
# nrcpus avail : 4
# cpudesc : Intel(R) Core(TM)2 Quad CPU Q6600 @ 2.40GHz
# cpuid : GenuineIntel,6,15,11
# total memory : 8105360 kB
# cmdline : /home/eranian/perfmon/official/tip/build/tools/perf/perf record date
# event : name = cycles, type = 0, config = 0x0, config1 = 0x0, config2 = 0x0, excl_usr = 0, excl_kern = 0, id = { 29, 30, 31,
# sibling cores : 0-3
# sibling threads : 0
# sibling threads : 1
# sibling threads : 2
# sibling threads : 3
# node0 meminfo : total = 8320608 kB, free = 7571024 kB
# node0 cpu list : 0-3
# ========
#
...
Reviewed-by: David Ahern <dsahern@gmail.com>
Tested-by: David Ahern <dsahern@gmail.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Peter Zijlstra <peterz@infradead.org>
Cc: Robert Richter <robert.richter@amd.com>
Cc: Andi Kleen <ak@linux.intel.com>
Link: http://lkml.kernel.org/r/20110930134040.GA5575@quad
Signed-off-by: Stephane Eranian <eranian@google.com>
[ committer notes: Use --show-info in the tools as was in the docs, rename
perf_header_fprintf_info to perf_file_section__fprintf_info, fixup
conflict with f69b64f7 "perf: Support setting the disassembler style" ]
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
2011-09-30 13:40:40 +00:00
|
|
|
|
|
|
|
/*
|
|
|
|
* arch specific callback
|
|
|
|
*/
|
|
|
|
int get_cpuid(char *buffer, size_t sz);
|
|
|
|
|
2009-09-24 16:02:18 +00:00
|
|
|
#endif /* __PERF_HEADER_H */
|