forked from Minki/linux
754fe00fa6
- Optimize sample parsing for ordering events, where we don't need to parse all the PERF_SAMPLE_ bits, just the ones leading to the timestamp needed to reorder events (Jiri Olsa) - Use a dummy event to ask for PERF_RECORD_{MMAP,COMM,EXEC} with 'perf record --delay', when the events asked by the user will only be enabled after the workload is started and the requested delay passes, so we need to add the dummy event and have it .enabled_on_exec. This then allows us to resolve symbols for the DSO executable MMAPs setup while we wait for the delay (Arnaldo Carvalho de Melo) - Synchronize kcmp.h and prctl.h ABI headers wrt SPDX tags (Arnaldo Carvalho de Melo) - Generalize the annotation code to support other source information besides objdump/DWARF obtained ones, starting with python scripts, that will is slated to be merged soon (Jiri Olsa) - Advance the source code lines to right after the column with the address in asm lines (Jiri Olsa) - Fix terminal dimensions resizing signal handling in 'perf top --stdio' (Jiri Olsa) - Improve error messages for PMU events (Kim Phillips) - Fix 'perf record' -c/-F options for cpu event aliases (Andi Kleen) - Enable type checking for perf_evsel_config_term types (Andi Kleen) - Call machine__exit() at 'perf trace' exit, so as to remove temporary files related to VDSO (Andrei Vagin) - Add "reject" option to parse-events.l, fixing the build with newer flex releases. Noticed with flex 2.6.4 on Alpine Linux 3.6 and Edge (Jiri Olsa) - Document some missing perf.data headers (Andi Kleen) - Allow printing period for non freq mod groups (Andi Kleen) - Do not warn the user about kernel.kptr_restrict when not sampling the kernel (Arnaldo Carvalho de Melo) - Fix bug in 'perf help' introduced during conversion to strstart() (Namhyung Kim) - Do not truncate ASM instruction mnemonics at 6 characters in the annotation output, PowerPC has long ones (Ravi Bangoria) - Document some missing command line options (Sihyeon Jang) - Update POWER9 vendor event tables (Sukadev Bhattiprolu) - Fix 'perf test' shell entries on s390x, where the 'openat' syscall is used instead of 'open' in one of the tests and - No need to use overwrite mmap mode in 'perf test', those tests do not generate massive amount of events to fill the ring buffer (Wang Nan) - Add missing command line options (mostly --force/-f) to the man pages (Sihyeon Jang) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> -----BEGIN PGP SIGNATURE----- iQIzBAABCAAdFiEELb9bqkb7Te0zijNb1lAW81NSqkAFAloPQT8ACgkQ1lAW81NS qkBJKxAAja4hN1lyyfF1Jeu+8XHxroRXRKN4jJcKN/O2egZDt+htPp712zOxL6rB hObOZkvhciaTxmmx1QlDlv68YPMa7P5QppdY17/HPOs/oJD0D3f1fHfNXpg9TilA 5IdWAJVHxTUm9IaNOqIpUP6fV37mR+z2wYd2sCyunJio9OZrm2lgQe9d9WzYOd5j C0pRfjfrS4cuMLxqvXEn8oNv/ITGcuVoRQ6h7AEL+g51iFhTbc61BrUVy9BhffZt eAjoKpkb50SGa4xnpFufSgT8pgKd/JJEY7Xi6eypmLhX28Uhpt880xQaE+5+7/d1 ktlpRfIdMvCz/+RyrZXUredy5pEz2QEY9RhI5cCiMHP6ppTJ9yp2/dU9EDLurqvm vj/cEz9/58OJMS+gmentXJjA06puSNhYzOsG/rcZb6uGELhDDu8qytxaN4diOFPd Kl7kuyryodNl9y/NYMbm3nNL+pwy9BXN8ktN2I6O1WT1aimmdp/UMW6S5YENZUb7 FRz8DyDlkeBaDh58U9iS5c8qQ1LA0fqNuJWBp9aK4iETgeofLViMXWrwaPl9vKeC 3Sk5j6GuAAavgdIuvU9QoAkM9pZClgBvVt00KXVzOGbBHFDNwU2igik4HPwsJtMf Quo/kOMawW9rSei5Q1RRZjLAMRsvb2ktCx9Xll/1faiIdROhnjc= =PVj/ -----END PGP SIGNATURE----- Merge tag 'perf-core-for-mingo-4.15-20171117' of git://git.kernel.org/pub/scm/linux/kernel/git/acme/linux into perf/core Pull perf/core improvements and fixes from Arnaldo Carvalho de Melo: - Optimize sample parsing for ordering events, where we don't need to parse all the PERF_SAMPLE_ bits, just the ones leading to the timestamp needed to reorder events (Jiri Olsa) - Use a dummy event to ask for PERF_RECORD_{MMAP,COMM,EXEC} with 'perf record --delay', when the events asked by the user will only be enabled after the workload is started and the requested delay passes, so we need to add the dummy event and have it .enabled_on_exec. This then allows us to resolve symbols for the DSO executable MMAPs setup while we wait for the delay (Arnaldo Carvalho de Melo) - Synchronize kcmp.h and prctl.h ABI headers wrt SPDX tags (Arnaldo Carvalho de Melo) - Generalize the annotation code to support other source information besides objdump/DWARF obtained ones, starting with python scripts, that will is slated to be merged soon (Jiri Olsa) - Advance the source code lines to right after the column with the address in asm lines (Jiri Olsa) - Fix terminal dimensions resizing signal handling in 'perf top --stdio' (Jiri Olsa) - Improve error messages for PMU events (Kim Phillips) - Fix 'perf record' -c/-F options for cpu event aliases (Andi Kleen) - Enable type checking for perf_evsel_config_term types (Andi Kleen) - Call machine__exit() at 'perf trace' exit, so as to remove temporary files related to VDSO (Andrei Vagin) - Add "reject" option to parse-events.l, fixing the build with newer flex releases. Noticed with flex 2.6.4 on Alpine Linux 3.6 and Edge (Jiri Olsa) - Document some missing perf.data headers (Andi Kleen) - Allow printing period for non freq mod groups (Andi Kleen) - Do not warn the user about kernel.kptr_restrict when not sampling the kernel (Arnaldo Carvalho de Melo) - Fix bug in 'perf help' introduced during conversion to strstart() (Namhyung Kim) - Do not truncate ASM instruction mnemonics at 6 characters in the annotation output, PowerPC has long ones (Ravi Bangoria) - Document some missing command line options (Sihyeon Jang) - Update POWER9 vendor event tables (Sukadev Bhattiprolu) - Fix 'perf test' shell entries on s390x, where the 'openat' syscall is used instead of 'open' in one of the tests and - No need to use overwrite mmap mode in 'perf test', those tests do not generate massive amount of events to fill the ring buffer (Wang Nan) - Add missing command line options (mostly --force/-f) to the man pages (Sihyeon Jang) Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
133 lines
3.9 KiB
C
133 lines
3.9 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
#ifndef __PERF_SESSION_H
|
|
#define __PERF_SESSION_H
|
|
|
|
#include "trace-event.h"
|
|
#include "event.h"
|
|
#include "header.h"
|
|
#include "machine.h"
|
|
#include "data.h"
|
|
#include "ordered-events.h"
|
|
#include <linux/kernel.h>
|
|
#include <linux/rbtree.h>
|
|
#include <linux/perf_event.h>
|
|
|
|
struct ip_callchain;
|
|
struct symbol;
|
|
struct thread;
|
|
|
|
struct auxtrace;
|
|
struct itrace_synth_opts;
|
|
|
|
struct perf_session {
|
|
struct perf_header header;
|
|
struct machines machines;
|
|
struct perf_evlist *evlist;
|
|
struct auxtrace *auxtrace;
|
|
struct itrace_synth_opts *itrace_synth_opts;
|
|
struct list_head auxtrace_index;
|
|
struct trace_event tevent;
|
|
struct time_conv_event time_conv;
|
|
bool repipe;
|
|
bool one_mmap;
|
|
void *one_mmap_addr;
|
|
u64 one_mmap_offset;
|
|
struct ordered_events ordered_events;
|
|
struct perf_data *data;
|
|
struct perf_tool *tool;
|
|
};
|
|
|
|
struct perf_tool;
|
|
|
|
struct perf_session *perf_session__new(struct perf_data *data,
|
|
bool repipe, struct perf_tool *tool);
|
|
void perf_session__delete(struct perf_session *session);
|
|
|
|
void perf_event_header__bswap(struct perf_event_header *hdr);
|
|
|
|
int perf_session__peek_event(struct perf_session *session, off_t file_offset,
|
|
void *buf, size_t buf_sz,
|
|
union perf_event **event_ptr,
|
|
struct perf_sample *sample);
|
|
|
|
int perf_session__process_events(struct perf_session *session);
|
|
|
|
int perf_session__queue_event(struct perf_session *s, union perf_event *event,
|
|
u64 timestamp, u64 file_offset);
|
|
|
|
void perf_tool__fill_defaults(struct perf_tool *tool);
|
|
|
|
int perf_session__resolve_callchain(struct perf_session *session,
|
|
struct perf_evsel *evsel,
|
|
struct thread *thread,
|
|
struct ip_callchain *chain,
|
|
struct symbol **parent);
|
|
|
|
bool perf_session__has_traces(struct perf_session *session, const char *msg);
|
|
|
|
void perf_event__attr_swap(struct perf_event_attr *attr);
|
|
|
|
int perf_session__create_kernel_maps(struct perf_session *session);
|
|
|
|
void perf_session__set_id_hdr_size(struct perf_session *session);
|
|
|
|
static inline
|
|
struct machine *perf_session__find_machine(struct perf_session *session, pid_t pid)
|
|
{
|
|
return machines__find(&session->machines, pid);
|
|
}
|
|
|
|
static inline
|
|
struct machine *perf_session__findnew_machine(struct perf_session *session, pid_t pid)
|
|
{
|
|
return machines__findnew(&session->machines, pid);
|
|
}
|
|
|
|
struct thread *perf_session__findnew(struct perf_session *session, pid_t pid);
|
|
int perf_session__register_idle_thread(struct perf_session *session);
|
|
|
|
size_t perf_session__fprintf(struct perf_session *session, FILE *fp);
|
|
|
|
size_t perf_session__fprintf_dsos(struct perf_session *session, FILE *fp);
|
|
|
|
size_t perf_session__fprintf_dsos_buildid(struct perf_session *session, FILE *fp,
|
|
bool (fn)(struct dso *dso, int parm), int parm);
|
|
|
|
size_t perf_session__fprintf_nr_events(struct perf_session *session, FILE *fp);
|
|
|
|
struct perf_evsel *perf_session__find_first_evtype(struct perf_session *session,
|
|
unsigned int type);
|
|
|
|
int perf_session__cpu_bitmap(struct perf_session *session,
|
|
const char *cpu_list, unsigned long *cpu_bitmap);
|
|
|
|
void perf_session__fprintf_info(struct perf_session *s, FILE *fp, bool full);
|
|
|
|
struct perf_evsel_str_handler;
|
|
|
|
int __perf_session__set_tracepoints_handlers(struct perf_session *session,
|
|
const struct perf_evsel_str_handler *assocs,
|
|
size_t nr_assocs);
|
|
|
|
#define perf_session__set_tracepoints_handlers(session, array) \
|
|
__perf_session__set_tracepoints_handlers(session, array, ARRAY_SIZE(array))
|
|
|
|
extern volatile int session_done;
|
|
|
|
#define session_done() READ_ONCE(session_done)
|
|
|
|
int perf_session__deliver_synth_event(struct perf_session *session,
|
|
union perf_event *event,
|
|
struct perf_sample *sample);
|
|
|
|
int perf_event__process_id_index(struct perf_tool *tool,
|
|
union perf_event *event,
|
|
struct perf_session *session);
|
|
|
|
int perf_event__synthesize_id_index(struct perf_tool *tool,
|
|
perf_event__handler_t process,
|
|
struct perf_evlist *evlist,
|
|
struct machine *machine);
|
|
|
|
#endif /* __PERF_SESSION_H */
|