Lines Matching refs:session

44 static int perf_session__deliver_event(struct perf_session *session,
50 static int perf_session__open(struct perf_session *session) in perf_session__open() argument
52 struct perf_data *data = session->data; in perf_session__open()
54 if (perf_session__read_header(session) < 0) { in perf_session__open()
59 if (perf_header__has_feat(&session->header, HEADER_AUXTRACE)) { in perf_session__open()
67 if (perf_header__has_feat(&session->header, HEADER_STAT)) in perf_session__open()
70 if (!evlist__valid_sample_type(session->evlist)) { in perf_session__open()
75 if (!evlist__valid_sample_id_all(session->evlist)) { in perf_session__open()
80 if (!evlist__valid_read_format(session->evlist)) { in perf_session__open()
88 void perf_session__set_id_hdr_size(struct perf_session *session) in perf_session__set_id_hdr_size() argument
90 u16 id_hdr_size = evlist__id_hdr_size(session->evlist); in perf_session__set_id_hdr_size()
92 machines__set_id_hdr_size(&session->machines, id_hdr_size); in perf_session__set_id_hdr_size()
95 int perf_session__create_kernel_maps(struct perf_session *session) in perf_session__create_kernel_maps() argument
97 int ret = machine__create_kernel_maps(&session->machines.host); in perf_session__create_kernel_maps()
100 ret = machines__create_guest_kernel_maps(&session->machines); in perf_session__create_kernel_maps()
104 static void perf_session__destroy_kernel_maps(struct perf_session *session) in perf_session__destroy_kernel_maps() argument
106 machines__destroy_kernel_maps(&session->machines); in perf_session__destroy_kernel_maps()
109 static bool perf_session__has_comm_exec(struct perf_session *session) in perf_session__has_comm_exec() argument
113 evlist__for_each_entry(session->evlist, evsel) { in perf_session__has_comm_exec()
121 static void perf_session__set_comm_exec(struct perf_session *session) in perf_session__set_comm_exec() argument
123 bool comm_exec = perf_session__has_comm_exec(session); in perf_session__set_comm_exec()
125 machines__set_comm_exec(&session->machines, comm_exec); in perf_session__set_comm_exec()
131 struct perf_session *session = container_of(oe, struct perf_session, in ordered_events__deliver_event() local
134 return perf_session__deliver_event(session, event->event, in ordered_events__deliver_event()
135 session->tool, event->file_offset, in ordered_events__deliver_event()
145 struct perf_session *session = zalloc(sizeof(*session)); in __perf_session__new() local
147 if (!session) in __perf_session__new()
150 session->trace_event_repipe = trace_event_repipe; in __perf_session__new()
151 session->tool = tool; in __perf_session__new()
152 session->decomp_data.zstd_decomp = &session->zstd_data; in __perf_session__new()
153 session->active_decomp = &session->decomp_data; in __perf_session__new()
154 INIT_LIST_HEAD(&session->auxtrace_index); in __perf_session__new()
155 machines__init(&session->machines); in __perf_session__new()
156 ordered_events__init(&session->ordered_events, in __perf_session__new()
159 perf_env__init(&session->header.env); in __perf_session__new()
165 session->data = data; in __perf_session__new()
168 ret = perf_session__open(session); in __perf_session__new()
177 perf_session__set_id_hdr_size(session); in __perf_session__new()
178 perf_session__set_comm_exec(session); in __perf_session__new()
181 evlist__init_trace_event_sample_raw(session->evlist, &session->header.env); in __perf_session__new()
196 session->machines.host.env = host_env; in __perf_session__new()
198 if (session->evlist) in __perf_session__new()
199 session->evlist->session = session; in __perf_session__new()
201 session->machines.host.single_address_space = in __perf_session__new()
202 perf_env__single_address_space(session->machines.host.env); in __perf_session__new()
209 if (perf_session__create_kernel_maps(session) < 0) in __perf_session__new()
218 tool->ordered_events && !evlist__sample_id_all(session->evlist)) { in __perf_session__new()
223 return session; in __perf_session__new()
226 perf_session__delete(session); in __perf_session__new()
246 void perf_session__delete(struct perf_session *session) in perf_session__delete() argument
248 if (session == NULL) in perf_session__delete()
250 auxtrace__free(session); in perf_session__delete()
251 auxtrace_index__free(&session->auxtrace_index); in perf_session__delete()
253 perf_session__destroy_kernel_maps(session); in perf_session__delete()
254 perf_decomp__release_events(session->decomp_data.decomp); in perf_session__delete()
255 perf_env__exit(&session->header.env); in perf_session__delete()
256 machines__exit(&session->machines); in perf_session__delete()
257 if (session->data) { in perf_session__delete()
258 if (perf_data__is_read(session->data)) in perf_session__delete()
259 evlist__delete(session->evlist); in perf_session__delete()
260 perf_data__close(session->data); in perf_session__delete()
263 trace_event__cleanup(&session->tevent); in perf_session__delete()
265 free(session); in perf_session__delete()
1356 static int session__flush_deferred_samples(struct perf_session *session, in session__flush_deferred_samples() argument
1359 struct evlist *evlist = session->evlist; in session__flush_deferred_samples()
1360 struct machine *machine = &session->machines.host; in session__flush_deferred_samples()
1499 static int perf_session__deliver_event(struct perf_session *session, in perf_session__deliver_event() argument
1509 ret = evlist__parse_sample(session->evlist, event, &sample); in perf_session__deliver_event()
1515 ret = auxtrace__process_event(session, event, &sample, tool); in perf_session__deliver_event()
1523 ret = machines__deliver_event(&session->machines, session->evlist, in perf_session__deliver_event()
1527 auxtrace__dump_auxtrace_sample(session, &sample); in perf_session__deliver_event()
1533 static s64 perf_session__process_user_event(struct perf_session *session, in perf_session__process_user_event() argument
1538 struct ordered_events *oe = &session->ordered_events; in perf_session__process_user_event()
1539 const struct perf_tool *tool = session->tool; in perf_session__process_user_event()
1541 int fd = perf_data__fd(session->data); in perf_session__process_user_event()
1548 dump_event(session->evlist, event, file_offset, &sample, file_path); in perf_session__process_user_event()
1553 err = tool->attr(tool, event, &session->evlist); in perf_session__process_user_event()
1555 perf_session__set_id_hdr_size(session); in perf_session__process_user_event()
1556 perf_session__set_comm_exec(session); in perf_session__process_user_event()
1560 err = tool->event_update(tool, event, &session->evlist); in perf_session__process_user_event()
1575 if (!perf_data__is_pipe(session->data)) in perf_session__process_user_event()
1577 err = tool->tracing_data(tool, session, event); in perf_session__process_user_event()
1580 err = tool->build_id(tool, session, event); in perf_session__process_user_event()
1586 err = tool->id_index(tool, session, event); in perf_session__process_user_event()
1589 err = tool->auxtrace_info(tool, session, event); in perf_session__process_user_event()
1597 if (!perf_data__is_pipe(session->data)) in perf_session__process_user_event()
1599 err = tool->auxtrace(tool, session, event); in perf_session__process_user_event()
1602 perf_session__auxtrace_error_inc(session, event); in perf_session__process_user_event()
1603 err = tool->auxtrace_error(tool, session, event); in perf_session__process_user_event()
1606 err = tool->thread_map(tool, session, event); in perf_session__process_user_event()
1609 err = tool->cpu_map(tool, session, event); in perf_session__process_user_event()
1612 err = tool->stat_config(tool, session, event); in perf_session__process_user_event()
1615 err = tool->stat(tool, session, event); in perf_session__process_user_event()
1618 err = tool->stat_round(tool, session, event); in perf_session__process_user_event()
1621 session->time_conv = event->time_conv; in perf_session__process_user_event()
1622 err = tool->time_conv(tool, session, event); in perf_session__process_user_event()
1625 err = tool->feature(tool, session, event); in perf_session__process_user_event()
1629 err = tool->compressed(tool, session, event, file_offset, file_path); in perf_session__process_user_event()
1631 dump_event(session->evlist, event, file_offset, &sample, file_path); in perf_session__process_user_event()
1634 err = tool->finished_init(tool, session, event); in perf_session__process_user_event()
1637 err = tool->bpf_metadata(tool, session, event); in perf_session__process_user_event()
1647 int perf_session__deliver_synth_event(struct perf_session *session, in perf_session__deliver_synth_event() argument
1651 struct evlist *evlist = session->evlist; in perf_session__deliver_synth_event()
1652 const struct perf_tool *tool = session->tool; in perf_session__deliver_synth_event()
1657 return perf_session__process_user_event(session, event, 0, NULL); in perf_session__deliver_synth_event()
1659 return machines__deliver_event(&session->machines, evlist, event, sample, tool, 0, NULL); in perf_session__deliver_synth_event()
1662 int perf_session__deliver_synth_attr_event(struct perf_session *session, in perf_session__deliver_synth_attr_event() argument
1683 return perf_session__deliver_synth_event(session, &ev.ev, NULL); in perf_session__deliver_synth_attr_event()
1695 int perf_session__peek_event(struct perf_session *session, off_t file_offset, in perf_session__peek_event() argument
1704 if (session->one_mmap && !session->header.needs_swap) { in perf_session__peek_event()
1705 event = file_offset - session->one_mmap_offset + in perf_session__peek_event()
1706 session->one_mmap_addr; in perf_session__peek_event()
1710 if (perf_data__is_pipe(session->data)) in perf_session__peek_event()
1713 fd = perf_data__fd(session->data); in perf_session__peek_event()
1725 if (session->header.needs_swap) in perf_session__peek_event()
1737 if (session->header.needs_swap) in perf_session__peek_event()
1738 event_swap(event, evlist__sample_id_all(session->evlist)); in perf_session__peek_event()
1743 evlist__parse_sample(session->evlist, event, sample)) in perf_session__peek_event()
1751 int perf_session__peek_events(struct perf_session *session, u64 offset, in perf_session__peek_events() argument
1760 err = perf_session__peek_event(session, offset, buf, in perf_session__peek_events()
1766 err = cb(session, event, offset, data); in perf_session__peek_events()
1779 static s64 perf_session__process_event(struct perf_session *session, in perf_session__process_event() argument
1783 struct evlist *evlist = session->evlist; in perf_session__process_event()
1784 const struct perf_tool *tool = session->tool; in perf_session__process_event()
1787 if (session->header.needs_swap) in perf_session__process_event()
1805 return perf_session__process_user_event(session, event, file_offset, file_path); in perf_session__process_event()
1814 ret = perf_session__queue_event(session, event, timestamp, file_offset, file_path); in perf_session__process_event()
1819 return perf_session__deliver_event(session, event, tool, file_offset, file_path); in perf_session__process_event()
1829 struct thread *perf_session__findnew(struct perf_session *session, pid_t pid) in perf_session__findnew() argument
1831 return machine__findnew_thread(&session->machines.host, -1, pid); in perf_session__findnew()
1834 int perf_session__register_idle_thread(struct perf_session *session) in perf_session__register_idle_thread() argument
1836 struct thread *thread = machine__idle_thread(&session->machines.host); in perf_session__register_idle_thread()
1844 perf_session__warn_order(const struct perf_session *session) in perf_session__warn_order() argument
1846 const struct ordered_events *oe = &session->ordered_events; in perf_session__warn_order()
1850 evlist__for_each_entry(session->evlist, evsel) { in perf_session__warn_order()
1861 static void perf_session__warn_about_errors(const struct perf_session *session) in perf_session__warn_about_errors() argument
1863 const struct events_stats *stats = &session->evlist->stats; in perf_session__warn_about_errors()
1865 if (session->tool->lost == perf_event__process_lost && in perf_session__warn_about_errors()
1873 if (session->tool->lost_samples == perf_event__process_lost_samples) { in perf_session__warn_about_errors()
1885 if (session->tool->aux == perf_event__process_aux && in perf_session__warn_about_errors()
1892 if (session->tool->aux == perf_event__process_aux && in perf_session__warn_about_errors()
1909 if (session->tool->aux == perf_event__process_aux && in perf_session__warn_about_errors()
1944 perf_session__warn_order(session); in perf_session__warn_about_errors()
1966 static int perf_session__flush_thread_stacks(struct perf_session *session) in perf_session__flush_thread_stacks() argument
1968 return machines__for_each_thread(&session->machines, in perf_session__flush_thread_stacks()
1975 static int __perf_session__process_decomp_events(struct perf_session *session);
1977 static int __perf_session__process_pipe_events(struct perf_session *session) in __perf_session__process_pipe_events() argument
1979 struct ordered_events *oe = &session->ordered_events; in __perf_session__process_pipe_events()
1980 const struct perf_tool *tool = session->tool; in __perf_session__process_pipe_events()
1996 if (strcmp(session->data->path, "-") && session->data->file.size) { in __perf_session__process_pipe_events()
1997 ui_progress__init_size(&prog, session->data->file.size, in __perf_session__process_pipe_events()
2011 err = perf_data__read(session->data, event, in __perf_session__process_pipe_events()
2021 if (session->header.needs_swap) in __perf_session__process_pipe_events()
2044 err = perf_data__read(session->data, p, in __perf_session__process_pipe_events()
2057 if ((skip = perf_session__process_event(session, event, head, "pipe")) < 0) { in __perf_session__process_pipe_events()
2069 err = __perf_session__process_decomp_events(session); in __perf_session__process_pipe_events()
2083 err = session__flush_deferred_samples(session, tool); in __perf_session__process_pipe_events()
2086 err = auxtrace__flush_events(session, tool); in __perf_session__process_pipe_events()
2089 err = perf_session__flush_thread_stacks(session); in __perf_session__process_pipe_events()
2095 perf_session__warn_about_errors(session); in __perf_session__process_pipe_events()
2096 ordered_events__free(&session->ordered_events); in __perf_session__process_pipe_events()
2097 auxtrace__free_events(session); in __perf_session__process_pipe_events()
2152 static int __perf_session__process_decomp_events(struct perf_session *session) in __perf_session__process_decomp_events() argument
2156 struct decomp *decomp = session->active_decomp->decomp_last; in __perf_session__process_decomp_events()
2163 session->header.needs_swap); in __perf_session__process_decomp_events()
2171 (skip = perf_session__process_event(session, event, decomp->file_pos, in __perf_session__process_decomp_events()
2201 typedef s64 (*reader_cb_t)(struct perf_session *session,
2259 reader__mmap(struct reader *rd, struct perf_session *session) in reader__mmap() argument
2270 } else if (session->header.needs_swap) { in reader__mmap()
2293 if (session->one_mmap) { in reader__mmap()
2294 session->one_mmap_addr = buf; in reader__mmap()
2295 session->one_mmap_offset = rd->file_offset; in reader__mmap()
2307 reader__read_event(struct reader *rd, struct perf_session *session, in reader__read_event() argument
2316 session->header.needs_swap); in reader__read_event()
2328 (skip = rd->process(session, event, rd->file_pos, rd->path)) < 0) { in reader__read_event()
2343 err = __perf_session__process_decomp_events(session); in reader__read_event()
2360 reader__process_events(struct reader *rd, struct perf_session *session, in reader__process_events() argument
2365 err = reader__init(rd, &session->one_mmap); in reader__process_events()
2369 session->active_decomp = &rd->decomp_data; in reader__process_events()
2372 err = reader__mmap(rd, session); in reader__process_events()
2377 err = reader__read_event(rd, session, prog); in reader__process_events()
2390 session->active_decomp = &session->decomp_data; in reader__process_events()
2394 static s64 process_simple(struct perf_session *session, in process_simple() argument
2399 return perf_session__process_event(session, event, file_offset, file_path); in process_simple()
2402 static int __perf_session__process_events(struct perf_session *session) in __perf_session__process_events() argument
2405 .fd = perf_data__fd(session->data), in __perf_session__process_events()
2406 .path = session->data->file.path, in __perf_session__process_events()
2407 .data_size = session->header.data_size, in __perf_session__process_events()
2408 .data_offset = session->header.data_offset, in __perf_session__process_events()
2410 .in_place_update = session->data->in_place_update, in __perf_session__process_events()
2412 struct ordered_events *oe = &session->ordered_events; in __perf_session__process_events()
2413 const struct perf_tool *tool = session->tool; in __perf_session__process_events()
2422 err = reader__process_events(&rd, session, &prog); in __perf_session__process_events()
2429 err = auxtrace__flush_events(session, tool); in __perf_session__process_events()
2432 err = session__flush_deferred_samples(session, tool); in __perf_session__process_events()
2435 err = perf_session__flush_thread_stacks(session); in __perf_session__process_events()
2439 perf_session__warn_about_errors(session); in __perf_session__process_events()
2444 ordered_events__reinit(&session->ordered_events); in __perf_session__process_events()
2445 auxtrace__free_events(session); in __perf_session__process_events()
2447 session->one_mmap = false; in __perf_session__process_events()
2463 static int __perf_session__process_dir_events(struct perf_session *session) in __perf_session__process_dir_events() argument
2465 struct perf_data *data = session->data; in __perf_session__process_dir_events()
2466 const struct perf_tool *tool = session->tool; in __perf_session__process_dir_events()
2469 u64 total_size = perf_data__size(session->data); in __perf_session__process_dir_events()
2485 .fd = perf_data__fd(session->data), in __perf_session__process_dir_events()
2486 .path = session->data->file.path, in __perf_session__process_dir_events()
2487 .data_size = session->header.data_size, in __perf_session__process_dir_events()
2488 .data_offset = session->header.data_offset, in __perf_session__process_dir_events()
2490 .in_place_update = session->data->in_place_update, in __perf_session__process_dir_events()
2495 ret = reader__mmap(&rd[0], session); in __perf_session__process_dir_events()
2509 .in_place_update = session->data->in_place_update, in __perf_session__process_dir_events()
2514 ret = reader__mmap(&rd[readers], session); in __perf_session__process_dir_events()
2535 session->active_decomp = &rd[i].decomp_data; in __perf_session__process_dir_events()
2536 ret = reader__read_event(&rd[i], session, &prog); in __perf_session__process_dir_events()
2540 ret = reader__mmap(&rd[i], session); in __perf_session__process_dir_events()
2551 ret = ordered_events__flush(&session->ordered_events, OE_FLUSH__FINAL); in __perf_session__process_dir_events()
2555 ret = session__flush_deferred_samples(session, tool); in __perf_session__process_dir_events()
2559 ret = perf_session__flush_thread_stacks(session); in __perf_session__process_dir_events()
2564 perf_session__warn_about_errors(session); in __perf_session__process_dir_events()
2570 ordered_events__reinit(&session->ordered_events); in __perf_session__process_dir_events()
2572 session->one_mmap = false; in __perf_session__process_dir_events()
2574 session->active_decomp = &session->decomp_data; in __perf_session__process_dir_events()
2582 int perf_session__process_events(struct perf_session *session) in perf_session__process_events() argument
2584 if (perf_session__register_idle_thread(session) < 0) in perf_session__process_events()
2587 if (perf_data__is_pipe(session->data)) in perf_session__process_events()
2588 return __perf_session__process_pipe_events(session); in perf_session__process_events()
2590 if (perf_data__is_dir(session->data) && session->data->dir.nr) in perf_session__process_events()
2591 return __perf_session__process_dir_events(session); in perf_session__process_events()
2593 return __perf_session__process_events(session); in perf_session__process_events()
2596 bool perf_session__has_traces(struct perf_session *session, const char *msg) in perf_session__has_traces() argument
2600 evlist__for_each_entry(session->evlist, evsel) { in perf_session__has_traces()
2609 bool perf_session__has_switch_events(struct perf_session *session) in perf_session__has_switch_events() argument
2613 evlist__for_each_entry(session->evlist, evsel) { in perf_session__has_switch_events()
2650 size_t perf_session__fprintf_dsos(struct perf_session *session, FILE *fp) in perf_session__fprintf_dsos() argument
2652 return machines__fprintf_dsos(&session->machines, fp); in perf_session__fprintf_dsos()
2655 size_t perf_session__fprintf_dsos_buildid(struct perf_session *session, FILE *fp, in perf_session__fprintf_dsos_buildid() argument
2658 return machines__fprintf_dsos_buildid(&session->machines, fp, skip, parm); in perf_session__fprintf_dsos_buildid()
2661 size_t perf_session__fprintf_nr_events(struct perf_session *session, FILE *fp) in perf_session__fprintf_nr_events() argument
2666 if (perf_header__has_feat(&session->header, HEADER_AUXTRACE)) in perf_session__fprintf_nr_events()
2671 ret += events_stats__fprintf(&session->evlist->stats, fp); in perf_session__fprintf_nr_events()
2675 size_t perf_session__fprintf(struct perf_session *session, FILE *fp) in perf_session__fprintf() argument
2681 return machine__fprintf(&session->machines.host, fp); in perf_session__fprintf()
2684 void perf_session__dump_kmaps(struct perf_session *session) in perf_session__dump_kmaps() argument
2691 maps__fprintf(machine__kernel_maps(&session->machines.host), stderr); in perf_session__dump_kmaps()
2695 struct evsel *perf_session__find_first_evtype(struct perf_session *session, in perf_session__find_first_evtype() argument
2700 evlist__for_each_entry(session->evlist, pos) { in perf_session__find_first_evtype()
2707 int perf_session__cpu_bitmap(struct perf_session *session, in perf_session__cpu_bitmap() argument
2712 int nr_cpus = min(perf_session__env(session)->nr_cpus_avail, MAX_NR_CPUS); in perf_session__cpu_bitmap()
2718 evsel = perf_session__find_first_evtype(session, i); in perf_session__cpu_bitmap()
2752 void perf_session__fprintf_info(struct perf_session *session, FILE *fp, in perf_session__fprintf_info() argument
2755 if (session == NULL || fp == NULL) in perf_session__fprintf_info()
2759 perf_header__fprintf_info(session, fp, full); in perf_session__fprintf_info()
2763 static int perf_session__register_guest(struct perf_session *session, pid_t machine_pid) in perf_session__register_guest() argument
2765 struct machine *machine = machines__findnew(&session->machines, machine_pid); in perf_session__register_guest()
2771 machine->single_address_space = session->machines.host.single_address_space; in perf_session__register_guest()
2778 machine->kallsyms_filename = perf_data__guest_kallsyms_name(session->data, machine_pid); in perf_session__register_guest()
2783 static int perf_session__set_guest_cpu(struct perf_session *session, pid_t pid, in perf_session__set_guest_cpu() argument
2786 struct machine *machine = &session->machines.host; in perf_session__set_guest_cpu()
2798 struct perf_session *session, in perf_event__process_id_index() argument
2801 struct evlist *evlist = session->evlist; in perf_event__process_id_index()
2868 ret = perf_session__register_guest(session, sid->machine_pid); in perf_event__process_id_index()
2875 ret = perf_session__set_guest_cpu(session, sid->machine_pid, e->tid, e2->vcpu); in perf_event__process_id_index()
2882 int perf_session__dsos_hit_all(struct perf_session *session) in perf_session__dsos_hit_all() argument
2887 err = machine__hit_all_dsos(&session->machines.host); in perf_session__dsos_hit_all()
2891 for (nd = rb_first_cached(&session->machines.guests); nd; in perf_session__dsos_hit_all()
2903 struct perf_env *perf_session__env(struct perf_session *session) in perf_session__env() argument
2905 return &session->header.env; in perf_session__env()