• Home
  • Raw
  • Download

Lines Matching refs:rec

123 static bool switch_output_signal(struct record *rec)  in switch_output_signal()  argument
125 return rec->switch_output.signal && in switch_output_signal()
129 static bool switch_output_size(struct record *rec) in switch_output_size() argument
131 return rec->switch_output.size && in switch_output_size()
133 (rec->bytes_written >= rec->switch_output.size); in switch_output_size()
136 static bool switch_output_time(struct record *rec) in switch_output_time() argument
138 return rec->switch_output.time && in switch_output_time()
142 static bool record__output_max_size_exceeded(struct record *rec) in record__output_max_size_exceeded() argument
144 return rec->output_max_size && in record__output_max_size_exceeded()
145 (rec->bytes_written >= rec->output_max_size); in record__output_max_size_exceeded()
148 static int record__write(struct record *rec, struct mmap *map __maybe_unused, in record__write() argument
151 struct perf_data_file *file = &rec->session->data->file; in record__write()
158 rec->bytes_written += size; in record__write()
160 if (record__output_max_size_exceeded(rec) && !done) { in record__write()
163 rec->bytes_written >> 10); in record__write()
167 if (switch_output_size(rec)) in record__write()
173 static int record__aio_enabled(struct record *rec);
174 static int record__comp_enabled(struct record *rec);
286 struct record *rec; member
309 if (record__comp_enabled(aio->rec)) { in record__aio_pushfn()
310 size = zstd_compress(aio->rec->session, aio->data + aio->size, in record__aio_pushfn()
336 static int record__aio_push(struct record *rec, struct mmap *map, off_t *off) in record__aio_push() argument
339 int trace_fd = rec->session->data->file.fd; in record__aio_push()
340 struct record_aio aio = { .rec = rec, .size = 0 }; in record__aio_push()
353 rec->samples++; in record__aio_push()
357 rec->bytes_written += aio.size; in record__aio_push()
358 if (switch_output_size(rec)) in record__aio_push()
383 static void record__aio_mmap_read_sync(struct record *rec) in record__aio_mmap_read_sync() argument
386 struct evlist *evlist = rec->evlist; in record__aio_mmap_read_sync()
389 if (!record__aio_enabled(rec)) in record__aio_mmap_read_sync()
423 static int record__aio_push(struct record *rec __maybe_unused, struct mmap *map __maybe_unused, in record__aio_push()
438 static void record__aio_mmap_read_sync(struct record *rec __maybe_unused) in record__aio_mmap_read_sync()
443 static int record__aio_enabled(struct record *rec) in record__aio_enabled() argument
445 return rec->opts.nr_cblocks > 0; in record__aio_enabled()
504 static int record__comp_enabled(struct record *rec) in record__comp_enabled() argument
506 return rec->opts.comp_level > 0; in record__comp_enabled()
514 struct record *rec = container_of(tool, struct record, tool); in process_synthesized_event() local
515 return record__write(rec, NULL, event, event->header.size); in process_synthesized_event()
534 struct record *rec = to; in record__pushfn() local
536 if (record__comp_enabled(rec)) { in record__pushfn()
537 size = zstd_compress(rec->session, map->data, mmap__mmap_len(map), bf, size); in record__pushfn()
541 rec->samples++; in record__pushfn()
542 return record__write(rec, map, bf, size); in record__pushfn()
598 struct record *rec = container_of(tool, struct record, tool); in record__process_auxtrace() local
599 struct perf_data *data = &rec->data; in record__process_auxtrace()
611 err = auxtrace_index__auxtrace_event(&rec->session->auxtrace_index, in record__process_auxtrace()
622 record__write(rec, map, event, event->header.size); in record__process_auxtrace()
623 record__write(rec, map, data1, len1); in record__process_auxtrace()
625 record__write(rec, map, data2, len2); in record__process_auxtrace()
626 record__write(rec, map, &pad, padding); in record__process_auxtrace()
631 static int record__auxtrace_mmap_read(struct record *rec, in record__auxtrace_mmap_read() argument
636 ret = auxtrace_mmap__read(map, rec->itr, &rec->tool, in record__auxtrace_mmap_read()
642 rec->samples++; in record__auxtrace_mmap_read()
647 static int record__auxtrace_mmap_read_snapshot(struct record *rec, in record__auxtrace_mmap_read_snapshot() argument
652 ret = auxtrace_mmap__read_snapshot(map, rec->itr, &rec->tool, in record__auxtrace_mmap_read_snapshot()
654 rec->opts.auxtrace_snapshot_size); in record__auxtrace_mmap_read_snapshot()
659 rec->samples++; in record__auxtrace_mmap_read_snapshot()
664 static int record__auxtrace_read_snapshot_all(struct record *rec) in record__auxtrace_read_snapshot_all() argument
669 for (i = 0; i < rec->evlist->core.nr_mmaps; i++) { in record__auxtrace_read_snapshot_all()
670 struct mmap *map = &rec->evlist->mmap[i]; in record__auxtrace_read_snapshot_all()
675 if (record__auxtrace_mmap_read_snapshot(rec, map) != 0) { in record__auxtrace_read_snapshot_all()
684 static void record__read_auxtrace_snapshot(struct record *rec, bool on_exit) in record__read_auxtrace_snapshot() argument
687 if (record__auxtrace_read_snapshot_all(rec) < 0) { in record__read_auxtrace_snapshot()
690 if (auxtrace_record__snapshot_finish(rec->itr, on_exit)) in record__read_auxtrace_snapshot()
697 static int record__auxtrace_snapshot_exit(struct record *rec) in record__auxtrace_snapshot_exit() argument
703 auxtrace_record__snapshot_start(rec->itr)) in record__auxtrace_snapshot_exit()
706 record__read_auxtrace_snapshot(rec, true); in record__auxtrace_snapshot_exit()
713 static int record__auxtrace_init(struct record *rec) in record__auxtrace_init() argument
717 if (!rec->itr) { in record__auxtrace_init()
718 rec->itr = auxtrace_record__init(rec->evlist, &err); in record__auxtrace_init()
723 err = auxtrace_parse_snapshot_options(rec->itr, &rec->opts, in record__auxtrace_init()
724 rec->opts.auxtrace_snapshot_opts); in record__auxtrace_init()
728 err = auxtrace_parse_sample_options(rec->itr, rec->evlist, &rec->opts, in record__auxtrace_init()
729 rec->opts.auxtrace_sample_opts); in record__auxtrace_init()
733 return auxtrace_parse_filters(rec->evlist); in record__auxtrace_init()
739 int record__auxtrace_mmap_read(struct record *rec __maybe_unused, in record__auxtrace_mmap_read()
746 void record__read_auxtrace_snapshot(struct record *rec __maybe_unused, in record__read_auxtrace_snapshot()
758 int record__auxtrace_snapshot_exit(struct record *rec __maybe_unused) in record__auxtrace_snapshot_exit()
763 static int record__auxtrace_init(struct record *rec __maybe_unused) in record__auxtrace_init()
838 static int record__mmap_evlist(struct record *rec, in record__mmap_evlist() argument
841 struct record_opts *opts = &rec->opts; in record__mmap_evlist()
874 static int record__mmap(struct record *rec) in record__mmap() argument
876 return record__mmap_evlist(rec, rec->evlist); in record__mmap()
879 static int record__open(struct record *rec) in record__open() argument
883 struct evlist *evlist = rec->evlist; in record__open()
884 struct perf_session *session = rec->session; in record__open()
885 struct record_opts *opts = &rec->opts; in record__open()
957 rc = record__mmap(rec); in record__open()
973 struct record *rec = container_of(tool, struct record, tool); in process_sample_event() local
975 if (rec->evlist->first_sample_time == 0) in process_sample_event()
976 rec->evlist->first_sample_time = sample->time; in process_sample_event()
978 rec->evlist->last_sample_time = sample->time; in process_sample_event()
980 if (rec->buildid_all) in process_sample_event()
983 rec->samples++; in process_sample_event()
987 static int process_buildids(struct record *rec) in process_buildids() argument
989 struct perf_session *session = rec->session; in process_buildids()
991 if (perf_data__size(&rec->data) == 0) in process_buildids()
1011 if (rec->buildid_all && !rec->timestamp_boundary) in process_buildids()
1012 rec->tool.sample = NULL; in process_buildids()
1051 static void record__adjust_affinity(struct record *rec, struct mmap *map) in record__adjust_affinity() argument
1053 if (rec->opts.affinity != PERF_AFFINITY_SYS && in record__adjust_affinity()
1054 !bitmap_equal(rec->affinity_mask.bits, map->affinity_mask.bits, in record__adjust_affinity()
1055 rec->affinity_mask.nbits)) { in record__adjust_affinity()
1056 bitmap_zero(rec->affinity_mask.bits, rec->affinity_mask.nbits); in record__adjust_affinity()
1057 bitmap_or(rec->affinity_mask.bits, rec->affinity_mask.bits, in record__adjust_affinity()
1058 map->affinity_mask.bits, rec->affinity_mask.nbits); in record__adjust_affinity()
1059 sched_setaffinity(0, MMAP_CPU_MASK_BYTES(&rec->affinity_mask), in record__adjust_affinity()
1060 (cpu_set_t *)rec->affinity_mask.bits); in record__adjust_affinity()
1062 mmap_cpu_mask__scnprintf(&rec->affinity_mask, "thread"); in record__adjust_affinity()
1097 static int record__mmap_read_evlist(struct record *rec, struct evlist *evlist, in record__mmap_read_evlist() argument
1100 u64 bytes_written = rec->bytes_written; in record__mmap_read_evlist()
1104 int trace_fd = rec->data.file.fd; in record__mmap_read_evlist()
1117 if (record__aio_enabled(rec)) in record__mmap_read_evlist()
1125 record__adjust_affinity(rec, map); in record__mmap_read_evlist()
1130 if (!record__aio_enabled(rec)) { in record__mmap_read_evlist()
1131 if (perf_mmap__push(map, rec, record__pushfn) < 0) { in record__mmap_read_evlist()
1138 if (record__aio_push(rec, map, &off) < 0) { in record__mmap_read_evlist()
1150 if (map->auxtrace_mmap.base && !rec->opts.auxtrace_snapshot_mode && in record__mmap_read_evlist()
1151 !rec->opts.auxtrace_sample_mode && in record__mmap_read_evlist()
1152 record__auxtrace_mmap_read(rec, map) != 0) { in record__mmap_read_evlist()
1158 if (record__aio_enabled(rec)) in record__mmap_read_evlist()
1165 if (bytes_written != rec->bytes_written) in record__mmap_read_evlist()
1166 rc = record__write(rec, NULL, &finished_round_event, sizeof(finished_round_event)); in record__mmap_read_evlist()
1174 static int record__mmap_read_all(struct record *rec, bool synch) in record__mmap_read_all() argument
1178 err = record__mmap_read_evlist(rec, rec->evlist, false, synch); in record__mmap_read_all()
1182 return record__mmap_read_evlist(rec, rec->evlist, true, synch); in record__mmap_read_all()
1185 static void record__init_features(struct record *rec) in record__init_features() argument
1187 struct perf_session *session = rec->session; in record__init_features()
1193 if (rec->no_buildid) in record__init_features()
1196 if (!have_tracepoints(&rec->evlist->core.entries)) in record__init_features()
1199 if (!rec->opts.branch_stack) in record__init_features()
1202 if (!rec->opts.full_auxtrace) in record__init_features()
1205 if (!(rec->opts.use_clockid && rec->opts.clockid_res_ns)) in record__init_features()
1208 if (!rec->opts.use_clockid) in record__init_features()
1212 if (!record__comp_enabled(rec)) in record__init_features()
1219 record__finish_output(struct record *rec) in record__finish_output() argument
1221 struct perf_data *data = &rec->data; in record__finish_output()
1227 rec->session->header.data_size += rec->bytes_written; in record__finish_output()
1230 if (!rec->no_buildid) { in record__finish_output()
1231 process_buildids(rec); in record__finish_output()
1233 if (rec->buildid_all) in record__finish_output()
1234 dsos__hit_all(rec->session); in record__finish_output()
1236 perf_session__write_header(rec->session, rec->evlist, fd, true); in record__finish_output()
1241 static int record__synthesize_workload(struct record *rec, bool tail) in record__synthesize_workload() argument
1246 if (rec->opts.tail_synthesize != tail) in record__synthesize_workload()
1249 thread_map = thread_map__new_by_tid(rec->evlist->workload.pid); in record__synthesize_workload()
1253 err = perf_event__synthesize_thread_map(&rec->tool, thread_map, in record__synthesize_workload()
1255 &rec->session->machines.host, in record__synthesize_workload()
1256 rec->opts.sample_address); in record__synthesize_workload()
1261 static int record__synthesize(struct record *rec, bool tail);
1264 record__switch_output(struct record *rec, bool at_exit) in record__switch_output() argument
1266 struct perf_data *data = &rec->data; in record__switch_output()
1273 record__aio_mmap_read_sync(rec); in record__switch_output()
1275 record__synthesize(rec, true); in record__switch_output()
1276 if (target__none(&rec->opts.target)) in record__switch_output()
1277 record__synthesize_workload(rec, true); in record__switch_output()
1279 rec->samples = 0; in record__switch_output()
1280 record__finish_output(rec); in record__switch_output()
1288 rec->session->header.data_offset, in record__switch_output()
1291 rec->bytes_written = 0; in record__switch_output()
1292 rec->session->header.data_size = 0; in record__switch_output()
1299 if (rec->switch_output.num_files) { in record__switch_output()
1300 int n = rec->switch_output.cur_file + 1; in record__switch_output()
1302 if (n >= rec->switch_output.num_files) in record__switch_output()
1304 rec->switch_output.cur_file = n; in record__switch_output()
1305 if (rec->switch_output.filenames[n]) { in record__switch_output()
1306 remove(rec->switch_output.filenames[n]); in record__switch_output()
1307 zfree(&rec->switch_output.filenames[n]); in record__switch_output()
1309 rec->switch_output.filenames[n] = new_filename; in record__switch_output()
1316 record__synthesize(rec, false); in record__switch_output()
1327 if (target__none(&rec->opts.target)) in record__switch_output()
1328 record__synthesize_workload(rec, false); in record__switch_output()
1364 static const struct perf_event_mmap_page *record__pick_pc(struct record *rec) in record__pick_pc() argument
1368 pc = perf_evlist__pick_pc(rec->evlist); in record__pick_pc()
1374 static int record__synthesize(struct record *rec, bool tail) in record__synthesize() argument
1376 struct perf_session *session = rec->session; in record__synthesize()
1378 struct perf_data *data = &rec->data; in record__synthesize()
1379 struct record_opts *opts = &rec->opts; in record__synthesize()
1380 struct perf_tool *tool = &rec->tool; in record__synthesize()
1385 if (rec->opts.tail_synthesize != tail) in record__synthesize()
1393 err = perf_event__synthesize_attrs(tool, rec->evlist, in record__synthesize()
1400 err = perf_event__synthesize_features(tool, session, rec->evlist, in record__synthesize()
1407 if (have_tracepoints(&rec->evlist->core.entries)) { in record__synthesize()
1416 err = perf_event__synthesize_tracing_data(tool, fd, rec->evlist, in record__synthesize()
1422 rec->bytes_written += err; in record__synthesize()
1426 err = perf_event__synth_time_conv(record__pick_pc(rec), tool, in record__synthesize()
1432 if (rec->opts.auxtrace_sample_mode) { in record__synthesize()
1440 if (rec->opts.full_auxtrace) { in record__synthesize()
1441 err = perf_event__synthesize_auxtrace_info(rec->itr, tool, in record__synthesize()
1447 if (!perf_evlist__exclude_kernel(rec->evlist)) { in record__synthesize()
1466 err = perf_event__synthesize_extra_attr(&rec->tool, in record__synthesize()
1467 rec->evlist, in record__synthesize()
1473 err = perf_event__synthesize_thread_map2(&rec->tool, rec->evlist->core.threads, in record__synthesize()
1481 err = perf_event__synthesize_cpu_map(&rec->tool, rec->evlist->core.cpus, in record__synthesize()
1498 if (rec->opts.nr_threads_synthesize > 1) { in record__synthesize()
1503 err = __machine__synthesize_threads(machine, tool, &opts->target, rec->evlist->core.threads, in record__synthesize()
1505 rec->opts.nr_threads_synthesize); in record__synthesize()
1507 if (rec->opts.nr_threads_synthesize > 1) in record__synthesize()
1516 struct record *rec = data; in record__process_signal_event() local
1517 pthread_kill(rec->thread_id, SIGUSR2); in record__process_signal_event()
1521 static int record__setup_sb_evlist(struct record *rec) in record__setup_sb_evlist() argument
1523 struct record_opts *opts = &rec->opts; in record__setup_sb_evlist()
1525 if (rec->sb_evlist != NULL) { in record__setup_sb_evlist()
1531 evlist__set_cb(rec->sb_evlist, record__process_signal_event, rec); in record__setup_sb_evlist()
1532 rec->thread_id = pthread_self(); in record__setup_sb_evlist()
1536 if (rec->sb_evlist == NULL) { in record__setup_sb_evlist()
1537 rec->sb_evlist = evlist__new(); in record__setup_sb_evlist()
1539 if (rec->sb_evlist == NULL) { in record__setup_sb_evlist()
1545 if (evlist__add_bpf_sb_event(rec->sb_evlist, &rec->session->header.env)) { in record__setup_sb_evlist()
1551 if (perf_evlist__start_sb_thread(rec->sb_evlist, &rec->opts.target)) { in record__setup_sb_evlist()
1559 static int record__init_clock(struct record *rec) in record__init_clock() argument
1561 struct perf_session *session = rec->session; in record__init_clock()
1566 if (!rec->opts.use_clockid) in record__init_clock()
1569 if (rec->opts.use_clockid && rec->opts.clockid_res_ns) in record__init_clock()
1570 session->header.env.clock.clockid_res_ns = rec->opts.clockid_res_ns; in record__init_clock()
1572 session->header.env.clock.clockid = rec->opts.clockid; in record__init_clock()
1579 if (clock_gettime(rec->opts.clockid, &ref_clockid)) { in record__init_clock()
1596 static void hit_auxtrace_snapshot_trigger(struct record *rec) in hit_auxtrace_snapshot_trigger() argument
1601 if (auxtrace_record__snapshot_start(rec->itr)) in hit_auxtrace_snapshot_trigger()
1606 static int __cmd_record(struct record *rec, int argc, const char **argv) in __cmd_record() argument
1612 struct perf_tool *tool = &rec->tool; in __cmd_record()
1613 struct record_opts *opts = &rec->opts; in __cmd_record()
1614 struct perf_data *data = &rec->data; in __cmd_record()
1627 if (rec->opts.record_namespaces) in __cmd_record()
1630 if (rec->opts.record_cgroup) { in __cmd_record()
1639 if (rec->opts.auxtrace_snapshot_mode || rec->switch_output.enabled) { in __cmd_record()
1641 if (rec->opts.auxtrace_snapshot_mode) in __cmd_record()
1643 if (rec->switch_output.enabled) in __cmd_record()
1656 rec->session = session; in __cmd_record()
1658 if (zstd_init(&session->zstd_data, rec->opts.comp_level) < 0) { in __cmd_record()
1669 err = evlist__add_wakeup_eventfd(rec->evlist, done_fd); in __cmd_record()
1678 session->header.env.comp_level = rec->opts.comp_level; in __cmd_record()
1680 if (rec->opts.kcore && in __cmd_record()
1686 if (record__init_clock(rec)) in __cmd_record()
1689 record__init_features(rec); in __cmd_record()
1692 err = perf_evlist__prepare_workload(rec->evlist, &opts->target, in __cmd_record()
1708 if (data->is_pipe && rec->evlist->core.nr_entries == 1) in __cmd_record()
1709 rec->opts.sample_id = true; in __cmd_record()
1711 if (record__open(rec) != 0) { in __cmd_record()
1717 if (rec->opts.kcore) { in __cmd_record()
1739 if (rec->tool.ordered_events && !evlist__sample_id_all(rec->evlist)) { in __cmd_record()
1741 rec->tool.ordered_events = false; in __cmd_record()
1744 if (!rec->evlist->nr_groups) in __cmd_record()
1752 err = perf_session__write_header(session, rec->evlist, fd, false); in __cmd_record()
1758 if (!rec->no_buildid in __cmd_record()
1765 err = record__setup_sb_evlist(rec); in __cmd_record()
1769 err = record__synthesize(rec, false); in __cmd_record()
1773 if (rec->realtime_prio) { in __cmd_record()
1776 param.sched_priority = rec->realtime_prio; in __cmd_record()
1790 evlist__enable(rec->evlist); in __cmd_record()
1813 rec->evlist->workload.pid, in __cmd_record()
1833 rec->evlist->workload.pid, in __cmd_record()
1838 perf_evlist__start_workload(rec->evlist); in __cmd_record()
1841 if (evlist__initialize_ctlfd(rec->evlist, opts->ctl_fd, opts->ctl_fd_ack)) in __cmd_record()
1848 evlist__enable(rec->evlist); in __cmd_record()
1857 unsigned long long hits = rec->samples; in __cmd_record()
1868 perf_evlist__toggle_bkw_mmap(rec->evlist, BKW_MMAP_DATA_PENDING); in __cmd_record()
1870 if (record__mmap_read_all(rec, false) < 0) { in __cmd_record()
1880 record__read_auxtrace_snapshot(rec, false); in __cmd_record()
1898 if (rec->evlist->bkw_mmap_state == BKW_MMAP_RUNNING) in __cmd_record()
1907 perf_evlist__toggle_bkw_mmap(rec->evlist, BKW_MMAP_RUNNING); in __cmd_record()
1913 fd = record__switch_output(rec, false); in __cmd_record()
1922 if (rec->switch_output.time) in __cmd_record()
1923 alarm(rec->switch_output.time); in __cmd_record()
1926 if (hits == rec->samples) { in __cmd_record()
1929 err = evlist__poll(rec->evlist, -1); in __cmd_record()
1938 if (evlist__filter_pollfd(rec->evlist, POLLERR | POLLHUP) == 0) in __cmd_record()
1942 if (evlist__ctlfd_process(rec->evlist, &cmd) > 0) { in __cmd_record()
1951 hit_auxtrace_snapshot_trigger(rec); in __cmd_record()
1952 evlist__ctlfd_ack(rec->evlist); in __cmd_record()
1968 evlist__disable(rec->evlist); in __cmd_record()
1977 record__auxtrace_snapshot_exit(rec); in __cmd_record()
1990 if (target__none(&rec->opts.target)) in __cmd_record()
1991 record__synthesize_workload(rec, true); in __cmd_record()
1994 evlist__finalize_ctlfd(rec->evlist); in __cmd_record()
1995 record__mmap_read_all(rec, true); in __cmd_record()
1996 record__aio_mmap_read_sync(rec); in __cmd_record()
1998 if (rec->session->bytes_transferred && rec->session->bytes_compressed) { in __cmd_record()
1999 ratio = (float)rec->session->bytes_transferred/(float)rec->session->bytes_compressed; in __cmd_record()
2007 kill(rec->evlist->workload.pid, SIGTERM); in __cmd_record()
2020 record__synthesize(rec, true); in __cmd_record()
2022 rec->samples = 0; in __cmd_record()
2025 if (!rec->timestamp_filename) { in __cmd_record()
2026 record__finish_output(rec); in __cmd_record()
2028 fd = record__switch_output(rec, true); in __cmd_record()
2040 const char *postfix = rec->timestamp_filename ? in __cmd_record()
2043 if (rec->samples && !rec->opts.full_auxtrace) in __cmd_record()
2045 " (%" PRIu64 " samples)", rec->samples); in __cmd_record()
2054 rec->session->bytes_transferred / 1024.0 / 1024.0, in __cmd_record()
2069 perf_evlist__stop_sb_thread(rec->sb_evlist); in __cmd_record()
2133 struct record *rec = cb; in perf_record_config() local
2137 rec->no_buildid_cache = false; in perf_record_config()
2139 rec->no_buildid_cache = true; in perf_record_config()
2141 rec->no_buildid = true; in perf_record_config()
2152 rec->opts.nr_cblocks = strtol(value, NULL, 0); in perf_record_config()
2153 if (!rec->opts.nr_cblocks) in perf_record_config()
2154 rec->opts.nr_cblocks = nr_cblocks_default; in perf_record_config()
2256 static void switch_output_size_warn(struct record *rec) in switch_output_size_warn() argument
2258 u64 wakeup_size = evlist__mmap_size(rec->opts.mmap_pages); in switch_output_size_warn()
2259 struct switch_output *s = &rec->switch_output; in switch_output_size_warn()
2273 static int switch_output_setup(struct record *rec) in switch_output_setup() argument
2275 struct switch_output *s = &rec->switch_output; in switch_output_setup()
2297 if (rec->switch_output_event_set) in switch_output_setup()
2328 rec->timestamp_filename = true; in switch_output_setup()
2331 if (s->size && !rec->opts.no_buffering) in switch_output_setup()
2332 switch_output_size_warn(rec); in switch_output_setup()
2609 struct record *rec = &record; in cmd_record() local
2635 rec->opts.affinity = PERF_AFFINITY_SYS; in cmd_record()
2637 rec->evlist = evlist__new(); in cmd_record()
2638 if (rec->evlist == NULL) in cmd_record()
2641 err = perf_config(perf_record_config, rec); in cmd_record()
2651 if (!argc && target__none(&rec->opts.target)) in cmd_record()
2652 rec->opts.target.system_wide = true; in cmd_record()
2654 if (nr_cgroups && !rec->opts.target.system_wide) { in cmd_record()
2660 if (rec->opts.kcore) in cmd_record()
2661 rec->data.is_dir = true; in cmd_record()
2663 if (rec->opts.comp_level != 0) { in cmd_record()
2665 rec->no_buildid = true; in cmd_record()
2668 if (rec->opts.record_switch_events && in cmd_record()
2676 if (switch_output_setup(rec)) { in cmd_record()
2682 if (rec->switch_output.time) { in cmd_record()
2684 alarm(rec->switch_output.time); in cmd_record()
2687 if (rec->switch_output.num_files) { in cmd_record()
2688 rec->switch_output.filenames = calloc(sizeof(char *), in cmd_record()
2689 rec->switch_output.num_files); in cmd_record()
2690 if (!rec->switch_output.filenames) { in cmd_record()
2704 if (rec->opts.affinity != PERF_AFFINITY_SYS) { in cmd_record()
2705 rec->affinity_mask.nbits = cpu__max_cpu(); in cmd_record()
2706 rec->affinity_mask.bits = bitmap_alloc(rec->affinity_mask.nbits); in cmd_record()
2707 if (!rec->affinity_mask.bits) { in cmd_record()
2708 pr_err("Failed to allocate thread mask for %zd cpus\n", rec->affinity_mask.nbits); in cmd_record()
2712 pr_debug2("thread mask[%zd]: empty\n", rec->affinity_mask.nbits); in cmd_record()
2715 err = record__auxtrace_init(rec); in cmd_record()
2722 err = bpf__setup_stdout(rec->evlist); in cmd_record()
2724 bpf__strerror_setup_stdout(rec->evlist, err, errbuf, sizeof(errbuf)); in cmd_record()
2732 if (rec->no_buildid_cache || rec->no_buildid) { in cmd_record()
2734 } else if (rec->switch_output.enabled) { in cmd_record()
2752 if (rec->no_buildid_set && !rec->no_buildid) in cmd_record()
2754 if (rec->no_buildid_cache_set && !rec->no_buildid_cache) in cmd_record()
2757 rec->no_buildid = true; in cmd_record()
2758 rec->no_buildid_cache = true; in cmd_record()
2766 if (rec->evlist->core.nr_entries == 0 && in cmd_record()
2767 __evlist__add_default(rec->evlist, !record.opts.no_samples) < 0) { in cmd_record()
2772 if (rec->opts.target.tid && !rec->opts.no_inherit_set) in cmd_record()
2773 rec->opts.no_inherit = true; in cmd_record()
2775 err = target__validate(&rec->opts.target); in cmd_record()
2777 target__strerror(&rec->opts.target, err, errbuf, BUFSIZ); in cmd_record()
2781 err = target__parse_uid(&rec->opts.target); in cmd_record()
2785 target__strerror(&rec->opts.target, err, errbuf, BUFSIZ); in cmd_record()
2793 rec->opts.ignore_missing_thread = rec->opts.target.uid != UINT_MAX || rec->opts.target.pid; in cmd_record()
2796 if (perf_evlist__create_maps(rec->evlist, &rec->opts.target) < 0) in cmd_record()
2799 err = auxtrace_record__options(rec->itr, rec->evlist, &rec->opts); in cmd_record()
2808 if (rec->opts.full_auxtrace) in cmd_record()
2809 rec->buildid_all = true; in cmd_record()
2811 if (rec->opts.text_poke) { in cmd_record()
2812 err = record__config_text_poke(rec->evlist); in cmd_record()
2819 if (record_opts__config(&rec->opts)) { in cmd_record()
2824 if (rec->opts.nr_cblocks > nr_cblocks_max) in cmd_record()
2825 rec->opts.nr_cblocks = nr_cblocks_max; in cmd_record()
2826 pr_debug("nr_cblocks: %d\n", rec->opts.nr_cblocks); in cmd_record()
2828 pr_debug("affinity: %s\n", affinity_tags[rec->opts.affinity]); in cmd_record()
2829 pr_debug("mmap flush: %d\n", rec->opts.mmap_flush); in cmd_record()
2831 if (rec->opts.comp_level > comp_level_max) in cmd_record()
2832 rec->opts.comp_level = comp_level_max; in cmd_record()
2833 pr_debug("comp level: %d\n", rec->opts.comp_level); in cmd_record()
2837 bitmap_free(rec->affinity_mask.bits); in cmd_record()
2838 evlist__delete(rec->evlist); in cmd_record()
2840 auxtrace_record__free(rec->itr); in cmd_record()
2842 evlist__close_control(rec->opts.ctl_fd, rec->opts.ctl_fd_ack, &rec->opts.ctl_fd_close); in cmd_record()
2848 struct record *rec = &record; in snapshot_sig_handler() local
2850 hit_auxtrace_snapshot_trigger(rec); in snapshot_sig_handler()
2852 if (switch_output_signal(rec)) in snapshot_sig_handler()
2858 struct record *rec = &record; in alarm_sig_handler() local
2860 if (switch_output_time(rec)) in alarm_sig_handler()