 c4937a91ea
			
		
	
	
	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>
		
	
			
		
			
				
	
	
		
			63 lines
		
	
	
	
		
			1.4 KiB
			
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			63 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 */
 |