forked from Minki/linux
c4937a91ea
This patch modifies the perf tool to handle the new RECORD type, PERF_RECORD_LOST_SAMPLES. The number of lost-sample events is stored in .nr_events[PERF_RECORD_LOST_SAMPLES]. The exact number of samples which the kernel dropped is stored in total_lost_samples. When the percentage of dropped samples is greater than 5%, a warning is printed. Here are some examples: Eg 1, Recording different frequently-occurring events is safe with the patch. Only a very low drop rate is associated with such actions. $ perf record -e '{cycles:p,instructions:p}' -c 20003 --no-time ~/tchain ~/tchain $ perf report -D | tail SAMPLE events: 120243 MMAP2 events: 5 LOST_SAMPLES events: 24 FINISHED_ROUND events: 15 cycles:p stats: TOTAL events: 59348 SAMPLE events: 59348 instructions:p stats: TOTAL events: 60895 SAMPLE events: 60895 $ perf report --stdio --group # To display the perf.data header info, please use --header/--header-only options. # # # Total Lost Samples: 24 # # Samples: 120K of event 'anon group { cycles:p, instructions:p }' # Event count (approx.): 24048600000 # # Overhead Command Shared Object Symbol # ................ ........... ................ .................................. # 99.74% 99.86% tchain_edit tchain_edit [.] f3 0.09% 0.02% tchain_edit tchain_edit [.] f2 0.04% 0.00% tchain_edit [kernel.vmlinux] [k] ixgbe_read_reg Eg 2, Recording the same thing multiple times can lead to high drop rate, but it is not a useful configuration. $ perf record -e '{cycles:p,cycles:p}' -c 20003 --no-time ~/tchain Warning: Processed 600592 samples and lost 99.73% samples! [perf record: Woken up 148 times to write data] [perf record: Captured and wrote 36.922 MB perf.data (1206322 samples)] [perf record: Woken up 1 times to write data] [perf record: Captured and wrote 0.121 MB perf.data (1629 samples)] Signed-off-by: Kan Liang <kan.liang@intel.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: acme@infradead.org Cc: eranian@google.com Link: http://lkml.kernel.org/r/1431285195-14269-9-git-send-email-kan.liang@intel.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
64 lines
1.4 KiB
C
64 lines
1.4 KiB
C
#ifndef __PERF_TOOL_H
|
|
#define __PERF_TOOL_H
|
|
|
|
#include <stdbool.h>
|
|
|
|
#include <linux/types.h>
|
|
|
|
struct perf_session;
|
|
union perf_event;
|
|
struct perf_evlist;
|
|
struct perf_evsel;
|
|
struct perf_sample;
|
|
struct perf_tool;
|
|
struct machine;
|
|
struct ordered_events;
|
|
|
|
typedef int (*event_sample)(struct perf_tool *tool, union perf_event *event,
|
|
struct perf_sample *sample,
|
|
struct perf_evsel *evsel, struct machine *machine);
|
|
|
|
typedef int (*event_op)(struct perf_tool *tool, union perf_event *event,
|
|
struct perf_sample *sample, struct machine *machine);
|
|
|
|
typedef int (*event_attr_op)(struct perf_tool *tool,
|
|
union perf_event *event,
|
|
struct perf_evlist **pevlist);
|
|
|
|
typedef int (*event_op2)(struct perf_tool *tool, union perf_event *event,
|
|
struct perf_session *session);
|
|
|
|
typedef int (*event_oe)(struct perf_tool *tool, union perf_event *event,
|
|
struct ordered_events *oe);
|
|
|
|
typedef s64 (*event_op3)(struct perf_tool *tool, union perf_event *event,
|
|
struct perf_session *session);
|
|
|
|
struct perf_tool {
|
|
event_sample sample,
|
|
read;
|
|
event_op mmap,
|
|
mmap2,
|
|
comm,
|
|
fork,
|
|
exit,
|
|
lost,
|
|
lost_samples,
|
|
aux,
|
|
itrace_start,
|
|
throttle,
|
|
unthrottle;
|
|
event_attr_op attr;
|
|
event_op2 tracing_data;
|
|
event_oe finished_round;
|
|
event_op2 build_id,
|
|
id_index,
|
|
auxtrace_info,
|
|
auxtrace_error;
|
|
event_op3 auxtrace;
|
|
bool ordered_events;
|
|
bool ordering_requires_timestamps;
|
|
};
|
|
|
|
#endif /* __PERF_TOOL_H */
|