Lines Matching refs:rec
126 static bool switch_output_signal(struct record *rec) in switch_output_signal() argument
128 return rec->switch_output.signal && in switch_output_signal()
132 static bool switch_output_size(struct record *rec) in switch_output_size() argument
134 return rec->switch_output.size && in switch_output_size()
136 (rec->bytes_written >= rec->switch_output.size); in switch_output_size()
139 static bool switch_output_time(struct record *rec) in switch_output_time() argument
141 return rec->switch_output.time && in switch_output_time()
145 static bool record__output_max_size_exceeded(struct record *rec) in record__output_max_size_exceeded() argument
147 return rec->output_max_size && in record__output_max_size_exceeded()
148 (rec->bytes_written >= rec->output_max_size); in record__output_max_size_exceeded()
151 static int record__write(struct record *rec, struct mmap *map __maybe_unused, in record__write() argument
154 struct perf_data_file *file = &rec->session->data->file; in record__write()
161 rec->bytes_written += size; in record__write()
163 if (record__output_max_size_exceeded(rec) && !done) { in record__write()
166 rec->bytes_written >> 10); in record__write()
170 if (switch_output_size(rec)) in record__write()
176 static int record__aio_enabled(struct record *rec);
177 static int record__comp_enabled(struct record *rec);
289 struct record *rec; member
312 if (record__comp_enabled(aio->rec)) { in record__aio_pushfn()
313 size = zstd_compress(aio->rec->session, aio->data + aio->size, in record__aio_pushfn()
339 static int record__aio_push(struct record *rec, struct mmap *map, off_t *off) in record__aio_push() argument
342 int trace_fd = rec->session->data->file.fd; in record__aio_push()
343 struct record_aio aio = { .rec = rec, .size = 0 }; in record__aio_push()
356 rec->samples++; in record__aio_push()
360 rec->bytes_written += aio.size; in record__aio_push()
361 if (switch_output_size(rec)) in record__aio_push()
386 static void record__aio_mmap_read_sync(struct record *rec) in record__aio_mmap_read_sync() argument
389 struct evlist *evlist = rec->evlist; in record__aio_mmap_read_sync()
392 if (!record__aio_enabled(rec)) in record__aio_mmap_read_sync()
426 static int record__aio_push(struct record *rec __maybe_unused, struct mmap *map __maybe_unused, in record__aio_push()
441 static void record__aio_mmap_read_sync(struct record *rec __maybe_unused) in record__aio_mmap_read_sync()
446 static int record__aio_enabled(struct record *rec) in record__aio_enabled() argument
448 return rec->opts.nr_cblocks > 0; in record__aio_enabled()
507 static int record__comp_enabled(struct record *rec) in record__comp_enabled() argument
509 return rec->opts.comp_level > 0; in record__comp_enabled()
517 struct record *rec = container_of(tool, struct record, tool); in process_synthesized_event() local
518 return record__write(rec, NULL, event, event->header.size); in process_synthesized_event()
537 struct record *rec = to; in record__pushfn() local
539 if (record__comp_enabled(rec)) { in record__pushfn()
540 size = zstd_compress(rec->session, map->data, mmap__mmap_len(map), bf, size); in record__pushfn()
544 rec->samples++; in record__pushfn()
545 return record__write(rec, map, bf, size); in record__pushfn()
601 struct record *rec = container_of(tool, struct record, tool); in record__process_auxtrace() local
602 struct perf_data *data = &rec->data; in record__process_auxtrace()
614 err = auxtrace_index__auxtrace_event(&rec->session->auxtrace_index, in record__process_auxtrace()
625 record__write(rec, map, event, event->header.size); in record__process_auxtrace()
626 record__write(rec, map, data1, len1); in record__process_auxtrace()
628 record__write(rec, map, data2, len2); in record__process_auxtrace()
629 record__write(rec, map, &pad, padding); in record__process_auxtrace()
634 static int record__auxtrace_mmap_read(struct record *rec, in record__auxtrace_mmap_read() argument
639 ret = auxtrace_mmap__read(map, rec->itr, &rec->tool, in record__auxtrace_mmap_read()
645 rec->samples++; in record__auxtrace_mmap_read()
650 static int record__auxtrace_mmap_read_snapshot(struct record *rec, in record__auxtrace_mmap_read_snapshot() argument
655 ret = auxtrace_mmap__read_snapshot(map, rec->itr, &rec->tool, in record__auxtrace_mmap_read_snapshot()
657 rec->opts.auxtrace_snapshot_size); in record__auxtrace_mmap_read_snapshot()
662 rec->samples++; in record__auxtrace_mmap_read_snapshot()
667 static int record__auxtrace_read_snapshot_all(struct record *rec) in record__auxtrace_read_snapshot_all() argument
672 for (i = 0; i < rec->evlist->core.nr_mmaps; i++) { in record__auxtrace_read_snapshot_all()
673 struct mmap *map = &rec->evlist->mmap[i]; in record__auxtrace_read_snapshot_all()
678 if (record__auxtrace_mmap_read_snapshot(rec, map) != 0) { in record__auxtrace_read_snapshot_all()
687 static void record__read_auxtrace_snapshot(struct record *rec, bool on_exit) in record__read_auxtrace_snapshot() argument
690 if (record__auxtrace_read_snapshot_all(rec) < 0) { in record__read_auxtrace_snapshot()
693 if (auxtrace_record__snapshot_finish(rec->itr, on_exit)) in record__read_auxtrace_snapshot()
700 static int record__auxtrace_snapshot_exit(struct record *rec) in record__auxtrace_snapshot_exit() argument
706 auxtrace_record__snapshot_start(rec->itr)) in record__auxtrace_snapshot_exit()
709 record__read_auxtrace_snapshot(rec, true); in record__auxtrace_snapshot_exit()
716 static int record__auxtrace_init(struct record *rec) in record__auxtrace_init() argument
720 if (!rec->itr) { in record__auxtrace_init()
721 rec->itr = auxtrace_record__init(rec->evlist, &err); in record__auxtrace_init()
726 err = auxtrace_parse_snapshot_options(rec->itr, &rec->opts, in record__auxtrace_init()
727 rec->opts.auxtrace_snapshot_opts); in record__auxtrace_init()
731 err = auxtrace_parse_sample_options(rec->itr, rec->evlist, &rec->opts, in record__auxtrace_init()
732 rec->opts.auxtrace_sample_opts); in record__auxtrace_init()
736 auxtrace_regroup_aux_output(rec->evlist); in record__auxtrace_init()
738 return auxtrace_parse_filters(rec->evlist); in record__auxtrace_init()
744 int record__auxtrace_mmap_read(struct record *rec __maybe_unused, in record__auxtrace_mmap_read()
751 void record__read_auxtrace_snapshot(struct record *rec __maybe_unused, in record__read_auxtrace_snapshot()
763 int record__auxtrace_snapshot_exit(struct record *rec __maybe_unused) in record__auxtrace_snapshot_exit()
768 static int record__auxtrace_init(struct record *rec __maybe_unused) in record__auxtrace_init()
843 static int record__mmap_evlist(struct record *rec, in record__mmap_evlist() argument
846 struct record_opts *opts = &rec->opts; in record__mmap_evlist()
879 static int record__mmap(struct record *rec) in record__mmap() argument
881 return record__mmap_evlist(rec, rec->evlist); in record__mmap()
884 static int record__open(struct record *rec) in record__open() argument
888 struct evlist *evlist = rec->evlist; in record__open()
889 struct perf_session *session = rec->session; in record__open()
890 struct record_opts *opts = &rec->opts; in record__open()
964 rc = record__mmap(rec); in record__open()
974 static void set_timestamp_boundary(struct record *rec, u64 sample_time) in set_timestamp_boundary() argument
976 if (rec->evlist->first_sample_time == 0) in set_timestamp_boundary()
977 rec->evlist->first_sample_time = sample_time; in set_timestamp_boundary()
980 rec->evlist->last_sample_time = sample_time; in set_timestamp_boundary()
989 struct record *rec = container_of(tool, struct record, tool); in process_sample_event() local
991 set_timestamp_boundary(rec, sample->time); in process_sample_event()
993 if (rec->buildid_all) in process_sample_event()
996 rec->samples++; in process_sample_event()
1000 static int process_buildids(struct record *rec) in process_buildids() argument
1002 struct perf_session *session = rec->session; in process_buildids()
1004 if (perf_data__size(&rec->data) == 0) in process_buildids()
1024 if (rec->buildid_all && !rec->timestamp_boundary) in process_buildids()
1025 rec->tool.sample = NULL; in process_buildids()
1064 static void record__adjust_affinity(struct record *rec, struct mmap *map) in record__adjust_affinity() argument
1066 if (rec->opts.affinity != PERF_AFFINITY_SYS && in record__adjust_affinity()
1067 !bitmap_equal(rec->affinity_mask.bits, map->affinity_mask.bits, in record__adjust_affinity()
1068 rec->affinity_mask.nbits)) { in record__adjust_affinity()
1069 bitmap_zero(rec->affinity_mask.bits, rec->affinity_mask.nbits); in record__adjust_affinity()
1070 bitmap_or(rec->affinity_mask.bits, rec->affinity_mask.bits, in record__adjust_affinity()
1071 map->affinity_mask.bits, rec->affinity_mask.nbits); in record__adjust_affinity()
1072 sched_setaffinity(0, MMAP_CPU_MASK_BYTES(&rec->affinity_mask), in record__adjust_affinity()
1073 (cpu_set_t *)rec->affinity_mask.bits); in record__adjust_affinity()
1075 mmap_cpu_mask__scnprintf(&rec->affinity_mask, "thread"); in record__adjust_affinity()
1110 static int record__mmap_read_evlist(struct record *rec, struct evlist *evlist, in record__mmap_read_evlist() argument
1113 u64 bytes_written = rec->bytes_written; in record__mmap_read_evlist()
1117 int trace_fd = rec->data.file.fd; in record__mmap_read_evlist()
1130 if (record__aio_enabled(rec)) in record__mmap_read_evlist()
1138 record__adjust_affinity(rec, map); in record__mmap_read_evlist()
1143 if (!record__aio_enabled(rec)) { in record__mmap_read_evlist()
1144 if (perf_mmap__push(map, rec, record__pushfn) < 0) { in record__mmap_read_evlist()
1151 if (record__aio_push(rec, map, &off) < 0) { in record__mmap_read_evlist()
1163 if (map->auxtrace_mmap.base && !rec->opts.auxtrace_snapshot_mode && in record__mmap_read_evlist()
1164 !rec->opts.auxtrace_sample_mode && in record__mmap_read_evlist()
1165 record__auxtrace_mmap_read(rec, map) != 0) { in record__mmap_read_evlist()
1171 if (record__aio_enabled(rec)) in record__mmap_read_evlist()
1178 if (bytes_written != rec->bytes_written) in record__mmap_read_evlist()
1179 rc = record__write(rec, NULL, &finished_round_event, sizeof(finished_round_event)); in record__mmap_read_evlist()
1187 static int record__mmap_read_all(struct record *rec, bool synch) in record__mmap_read_all() argument
1191 err = record__mmap_read_evlist(rec, rec->evlist, false, synch); in record__mmap_read_all()
1195 return record__mmap_read_evlist(rec, rec->evlist, true, synch); in record__mmap_read_all()
1198 static void record__init_features(struct record *rec) in record__init_features() argument
1200 struct perf_session *session = rec->session; in record__init_features()
1206 if (rec->no_buildid) in record__init_features()
1209 if (!have_tracepoints(&rec->evlist->core.entries)) in record__init_features()
1212 if (!rec->opts.branch_stack) in record__init_features()
1215 if (!rec->opts.full_auxtrace) in record__init_features()
1218 if (!(rec->opts.use_clockid && rec->opts.clockid_res_ns)) in record__init_features()
1221 if (!rec->opts.use_clockid) in record__init_features()
1225 if (!record__comp_enabled(rec)) in record__init_features()
1232 record__finish_output(struct record *rec) in record__finish_output() argument
1234 struct perf_data *data = &rec->data; in record__finish_output()
1240 rec->session->header.data_size += rec->bytes_written; in record__finish_output()
1243 if (!rec->no_buildid) { in record__finish_output()
1244 process_buildids(rec); in record__finish_output()
1246 if (rec->buildid_all) in record__finish_output()
1247 dsos__hit_all(rec->session); in record__finish_output()
1249 perf_session__write_header(rec->session, rec->evlist, fd, true); in record__finish_output()
1254 static int record__synthesize_workload(struct record *rec, bool tail) in record__synthesize_workload() argument
1259 if (rec->opts.tail_synthesize != tail) in record__synthesize_workload()
1262 thread_map = thread_map__new_by_tid(rec->evlist->workload.pid); in record__synthesize_workload()
1266 err = perf_event__synthesize_thread_map(&rec->tool, thread_map, in record__synthesize_workload()
1268 &rec->session->machines.host, in record__synthesize_workload()
1269 rec->opts.sample_address); in record__synthesize_workload()
1274 static int record__synthesize(struct record *rec, bool tail);
1277 record__switch_output(struct record *rec, bool at_exit) in record__switch_output() argument
1279 struct perf_data *data = &rec->data; in record__switch_output()
1286 record__aio_mmap_read_sync(rec); in record__switch_output()
1288 record__synthesize(rec, true); in record__switch_output()
1289 if (target__none(&rec->opts.target)) in record__switch_output()
1290 record__synthesize_workload(rec, true); in record__switch_output()
1292 rec->samples = 0; in record__switch_output()
1293 record__finish_output(rec); in record__switch_output()
1301 rec->session->header.data_offset, in record__switch_output()
1304 rec->bytes_written = 0; in record__switch_output()
1305 rec->session->header.data_size = 0; in record__switch_output()
1312 if (rec->switch_output.num_files) { in record__switch_output()
1313 int n = rec->switch_output.cur_file + 1; in record__switch_output()
1315 if (n >= rec->switch_output.num_files) in record__switch_output()
1317 rec->switch_output.cur_file = n; in record__switch_output()
1318 if (rec->switch_output.filenames[n]) { in record__switch_output()
1319 remove(rec->switch_output.filenames[n]); in record__switch_output()
1320 zfree(&rec->switch_output.filenames[n]); in record__switch_output()
1322 rec->switch_output.filenames[n] = new_filename; in record__switch_output()
1329 record__synthesize(rec, false); in record__switch_output()
1340 if (target__none(&rec->opts.target)) in record__switch_output()
1341 record__synthesize_workload(rec, false); in record__switch_output()
1376 static const struct perf_event_mmap_page *record__pick_pc(struct record *rec) in record__pick_pc() argument
1378 const struct perf_event_mmap_page *pc = evlist__pick_pc(rec->evlist); in record__pick_pc()
1384 static int record__synthesize(struct record *rec, bool tail) in record__synthesize() argument
1386 struct perf_session *session = rec->session; in record__synthesize()
1388 struct perf_data *data = &rec->data; in record__synthesize()
1389 struct record_opts *opts = &rec->opts; in record__synthesize()
1390 struct perf_tool *tool = &rec->tool; in record__synthesize()
1394 if (rec->opts.tail_synthesize != tail) in record__synthesize()
1403 rec->bytes_written += err; in record__synthesize()
1406 err = perf_event__synth_time_conv(record__pick_pc(rec), tool, in record__synthesize()
1412 if (rec->opts.auxtrace_sample_mode) { in record__synthesize()
1420 if (rec->opts.full_auxtrace) { in record__synthesize()
1421 err = perf_event__synthesize_auxtrace_info(rec->itr, tool, in record__synthesize()
1427 if (!evlist__exclude_kernel(rec->evlist)) { in record__synthesize()
1446 err = perf_event__synthesize_extra_attr(&rec->tool, in record__synthesize()
1447 rec->evlist, in record__synthesize()
1453 err = perf_event__synthesize_thread_map2(&rec->tool, rec->evlist->core.threads, in record__synthesize()
1461 err = perf_event__synthesize_cpu_map(&rec->tool, rec->evlist->core.cpus, in record__synthesize()
1478 if (rec->opts.nr_threads_synthesize > 1) { in record__synthesize()
1483 err = __machine__synthesize_threads(machine, tool, &opts->target, rec->evlist->core.threads, in record__synthesize()
1485 rec->opts.nr_threads_synthesize); in record__synthesize()
1487 if (rec->opts.nr_threads_synthesize > 1) in record__synthesize()
1496 struct record *rec = data; in record__process_signal_event() local
1497 pthread_kill(rec->thread_id, SIGUSR2); in record__process_signal_event()
1501 static int record__setup_sb_evlist(struct record *rec) in record__setup_sb_evlist() argument
1503 struct record_opts *opts = &rec->opts; in record__setup_sb_evlist()
1505 if (rec->sb_evlist != NULL) { in record__setup_sb_evlist()
1511 evlist__set_cb(rec->sb_evlist, record__process_signal_event, rec); in record__setup_sb_evlist()
1512 rec->thread_id = pthread_self(); in record__setup_sb_evlist()
1516 if (rec->sb_evlist == NULL) { in record__setup_sb_evlist()
1517 rec->sb_evlist = evlist__new(); in record__setup_sb_evlist()
1519 if (rec->sb_evlist == NULL) { in record__setup_sb_evlist()
1525 if (evlist__add_bpf_sb_event(rec->sb_evlist, &rec->session->header.env)) { in record__setup_sb_evlist()
1531 if (evlist__start_sb_thread(rec->sb_evlist, &rec->opts.target)) { in record__setup_sb_evlist()
1539 static int record__init_clock(struct record *rec) in record__init_clock() argument
1541 struct perf_session *session = rec->session; in record__init_clock()
1546 if (!rec->opts.use_clockid) in record__init_clock()
1549 if (rec->opts.use_clockid && rec->opts.clockid_res_ns) in record__init_clock()
1550 session->header.env.clock.clockid_res_ns = rec->opts.clockid_res_ns; in record__init_clock()
1552 session->header.env.clock.clockid = rec->opts.clockid; in record__init_clock()
1559 if (clock_gettime(rec->opts.clockid, &ref_clockid)) { in record__init_clock()
1576 static void hit_auxtrace_snapshot_trigger(struct record *rec) in hit_auxtrace_snapshot_trigger() argument
1581 if (auxtrace_record__snapshot_start(rec->itr)) in hit_auxtrace_snapshot_trigger()
1586 static void record__uniquify_name(struct record *rec) in record__uniquify_name() argument
1589 struct evlist *evlist = rec->evlist; in record__uniquify_name()
1612 static int __cmd_record(struct record *rec, int argc, const char **argv) in __cmd_record() argument
1618 struct perf_tool *tool = &rec->tool; in __cmd_record()
1619 struct record_opts *opts = &rec->opts; in __cmd_record()
1620 struct perf_data *data = &rec->data; in __cmd_record()
1633 if (rec->opts.record_namespaces) in __cmd_record()
1636 if (rec->opts.record_cgroup) { in __cmd_record()
1645 if (rec->opts.auxtrace_snapshot_mode || rec->switch_output.enabled) { in __cmd_record()
1647 if (rec->opts.auxtrace_snapshot_mode) in __cmd_record()
1649 if (rec->switch_output.enabled) in __cmd_record()
1662 rec->session = session; in __cmd_record()
1664 if (zstd_init(&session->zstd_data, rec->opts.comp_level) < 0) { in __cmd_record()
1675 err = evlist__add_wakeup_eventfd(rec->evlist, done_fd); in __cmd_record()
1684 session->header.env.comp_level = rec->opts.comp_level; in __cmd_record()
1686 if (rec->opts.kcore && in __cmd_record()
1692 if (record__init_clock(rec)) in __cmd_record()
1695 record__init_features(rec); in __cmd_record()
1698 err = evlist__prepare_workload(rec->evlist, &opts->target, argv, data->is_pipe, in __cmd_record()
1713 if (data->is_pipe && rec->evlist->core.nr_entries == 1) in __cmd_record()
1714 rec->opts.sample_id = true; in __cmd_record()
1716 record__uniquify_name(rec); in __cmd_record()
1718 if (record__open(rec) != 0) { in __cmd_record()
1724 if (rec->opts.kcore) { in __cmd_record()
1746 if (rec->tool.ordered_events && !evlist__sample_id_all(rec->evlist)) { in __cmd_record()
1748 rec->tool.ordered_events = false; in __cmd_record()
1751 if (!rec->evlist->core.nr_groups) in __cmd_record()
1759 err = perf_session__write_header(session, rec->evlist, fd, false); in __cmd_record()
1765 if (!rec->no_buildid in __cmd_record()
1772 err = record__setup_sb_evlist(rec); in __cmd_record()
1776 err = record__synthesize(rec, false); in __cmd_record()
1780 if (rec->realtime_prio) { in __cmd_record()
1783 param.sched_priority = rec->realtime_prio; in __cmd_record()
1797 evlist__enable(rec->evlist); in __cmd_record()
1820 rec->evlist->workload.pid, in __cmd_record()
1840 rec->evlist->workload.pid, in __cmd_record()
1845 evlist__start_workload(rec->evlist); in __cmd_record()
1848 if (evlist__initialize_ctlfd(rec->evlist, opts->ctl_fd, opts->ctl_fd_ack)) in __cmd_record()
1855 evlist__enable(rec->evlist); in __cmd_record()
1864 unsigned long long hits = rec->samples; in __cmd_record()
1875 evlist__toggle_bkw_mmap(rec->evlist, BKW_MMAP_DATA_PENDING); in __cmd_record()
1877 if (record__mmap_read_all(rec, false) < 0) { in __cmd_record()
1887 record__read_auxtrace_snapshot(rec, false); in __cmd_record()
1905 if (rec->evlist->bkw_mmap_state == BKW_MMAP_RUNNING) in __cmd_record()
1914 evlist__toggle_bkw_mmap(rec->evlist, BKW_MMAP_RUNNING); in __cmd_record()
1920 fd = record__switch_output(rec, false); in __cmd_record()
1929 if (rec->switch_output.time) in __cmd_record()
1930 alarm(rec->switch_output.time); in __cmd_record()
1933 if (hits == rec->samples) { in __cmd_record()
1936 err = evlist__poll(rec->evlist, -1); in __cmd_record()
1945 if (evlist__filter_pollfd(rec->evlist, POLLERR | POLLHUP) == 0) in __cmd_record()
1949 if (evlist__ctlfd_process(rec->evlist, &cmd) > 0) { in __cmd_record()
1952 hit_auxtrace_snapshot_trigger(rec); in __cmd_record()
1953 evlist__ctlfd_ack(rec->evlist); in __cmd_record()
1976 evlist__disable(rec->evlist); in __cmd_record()
1985 record__auxtrace_snapshot_exit(rec); in __cmd_record()
1991 evlist__scnprintf_evsels(rec->evlist, sizeof(strevsels), strevsels); in __cmd_record()
2002 if (target__none(&rec->opts.target)) in __cmd_record()
2003 record__synthesize_workload(rec, true); in __cmd_record()
2006 evlist__finalize_ctlfd(rec->evlist); in __cmd_record()
2007 record__mmap_read_all(rec, true); in __cmd_record()
2008 record__aio_mmap_read_sync(rec); in __cmd_record()
2010 if (rec->session->bytes_transferred && rec->session->bytes_compressed) { in __cmd_record()
2011 ratio = (float)rec->session->bytes_transferred/(float)rec->session->bytes_compressed; in __cmd_record()
2019 kill(rec->evlist->workload.pid, SIGTERM); in __cmd_record()
2032 record__synthesize(rec, true); in __cmd_record()
2034 rec->samples = 0; in __cmd_record()
2037 if (!rec->timestamp_filename) { in __cmd_record()
2038 record__finish_output(rec); in __cmd_record()
2040 fd = record__switch_output(rec, true); in __cmd_record()
2052 const char *postfix = rec->timestamp_filename ? in __cmd_record()
2055 if (rec->samples && !rec->opts.full_auxtrace) in __cmd_record()
2057 " (%" PRIu64 " samples)", rec->samples); in __cmd_record()
2066 rec->session->bytes_transferred / 1024.0 / 1024.0, in __cmd_record()
2081 evlist__stop_sb_thread(rec->sb_evlist); in __cmd_record()
2145 struct record *rec = cb; in perf_record_config() local
2149 rec->no_buildid_cache = false; in perf_record_config()
2151 rec->no_buildid_cache = true; in perf_record_config()
2153 rec->no_buildid = true; in perf_record_config()
2155 rec->buildid_mmap = true; in perf_record_config()
2166 rec->opts.nr_cblocks = strtol(value, NULL, 0); in perf_record_config()
2167 if (!rec->opts.nr_cblocks) in perf_record_config()
2168 rec->opts.nr_cblocks = nr_cblocks_default; in perf_record_config()
2270 static void switch_output_size_warn(struct record *rec) in switch_output_size_warn() argument
2272 u64 wakeup_size = evlist__mmap_size(rec->opts.mmap_pages); in switch_output_size_warn()
2273 struct switch_output *s = &rec->switch_output; in switch_output_size_warn()
2287 static int switch_output_setup(struct record *rec) in switch_output_setup() argument
2289 struct switch_output *s = &rec->switch_output; in switch_output_setup()
2311 if (rec->switch_output_event_set) in switch_output_setup()
2342 rec->timestamp_filename = true; in switch_output_setup()
2345 if (s->size && !rec->opts.no_buffering) in switch_output_setup()
2346 switch_output_size_warn(rec); in switch_output_setup()
2388 struct record *rec = container_of(tool, struct record, tool); in process_timestamp_boundary() local
2390 set_timestamp_boundary(rec, sample->time); in process_timestamp_boundary()
2642 struct record *rec = &record; in cmd_record() local
2668 rec->opts.affinity = PERF_AFFINITY_SYS; in cmd_record()
2670 rec->evlist = evlist__new(); in cmd_record()
2671 if (rec->evlist == NULL) in cmd_record()
2674 err = perf_config(perf_record_config, rec); in cmd_record()
2684 if (!argc && target__none(&rec->opts.target)) in cmd_record()
2685 rec->opts.target.system_wide = true; in cmd_record()
2687 if (nr_cgroups && !rec->opts.target.system_wide) { in cmd_record()
2693 if (rec->buildid_mmap) { in cmd_record()
2703 rec->opts.build_id = true; in cmd_record()
2705 rec->no_buildid = true; in cmd_record()
2708 if (rec->opts.record_cgroup && !perf_can_record_cgroup()) { in cmd_record()
2714 if (rec->opts.kcore) in cmd_record()
2715 rec->data.is_dir = true; in cmd_record()
2717 if (rec->opts.comp_level != 0) { in cmd_record()
2719 rec->no_buildid = true; in cmd_record()
2722 if (rec->opts.record_switch_events && in cmd_record()
2730 if (switch_output_setup(rec)) { in cmd_record()
2736 if (rec->switch_output.time) { in cmd_record()
2738 alarm(rec->switch_output.time); in cmd_record()
2741 if (rec->switch_output.num_files) { in cmd_record()
2742 rec->switch_output.filenames = calloc(sizeof(char *), in cmd_record()
2743 rec->switch_output.num_files); in cmd_record()
2744 if (!rec->switch_output.filenames) { in cmd_record()
2758 if (rec->opts.affinity != PERF_AFFINITY_SYS) { in cmd_record()
2759 rec->affinity_mask.nbits = cpu__max_cpu(); in cmd_record()
2760 rec->affinity_mask.bits = bitmap_zalloc(rec->affinity_mask.nbits); in cmd_record()
2761 if (!rec->affinity_mask.bits) { in cmd_record()
2762 pr_err("Failed to allocate thread mask for %zd cpus\n", rec->affinity_mask.nbits); in cmd_record()
2766 pr_debug2("thread mask[%zd]: empty\n", rec->affinity_mask.nbits); in cmd_record()
2769 err = record__auxtrace_init(rec); in cmd_record()
2776 err = bpf__setup_stdout(rec->evlist); in cmd_record()
2778 bpf__strerror_setup_stdout(rec->evlist, err, errbuf, sizeof(errbuf)); in cmd_record()
2786 if (rec->no_buildid_cache || rec->no_buildid) { in cmd_record()
2788 } else if (rec->switch_output.enabled) { in cmd_record()
2806 if (rec->no_buildid_set && !rec->no_buildid) in cmd_record()
2808 if (rec->no_buildid_cache_set && !rec->no_buildid_cache) in cmd_record()
2811 rec->no_buildid = true; in cmd_record()
2812 rec->no_buildid_cache = true; in cmd_record()
2820 if (rec->evlist->core.nr_entries == 0) { in cmd_record()
2822 err = evlist__add_default_hybrid(rec->evlist, in cmd_record()
2825 err = __evlist__add_default(rec->evlist, in cmd_record()
2835 if (rec->opts.target.tid && !rec->opts.no_inherit_set) in cmd_record()
2836 rec->opts.no_inherit = true; in cmd_record()
2838 err = target__validate(&rec->opts.target); in cmd_record()
2840 target__strerror(&rec->opts.target, err, errbuf, BUFSIZ); in cmd_record()
2844 err = target__parse_uid(&rec->opts.target); in cmd_record()
2848 target__strerror(&rec->opts.target, err, errbuf, BUFSIZ); in cmd_record()
2856 rec->opts.ignore_missing_thread = rec->opts.target.uid != UINT_MAX || rec->opts.target.pid; in cmd_record()
2858 if (evlist__fix_hybrid_cpus(rec->evlist, rec->opts.target.cpu_list)) { in cmd_record()
2860 rec->opts.target.cpu_list); in cmd_record()
2864 rec->opts.target.hybrid = perf_pmu__has_hybrid(); in cmd_record()
2866 if (evlist__create_maps(rec->evlist, &rec->opts.target) < 0) in cmd_record()
2869 err = auxtrace_record__options(rec->itr, rec->evlist, &rec->opts); in cmd_record()
2878 if (rec->opts.full_auxtrace) in cmd_record()
2879 rec->buildid_all = true; in cmd_record()
2881 if (rec->opts.text_poke) { in cmd_record()
2882 err = record__config_text_poke(rec->evlist); in cmd_record()
2889 if (record_opts__config(&rec->opts)) { in cmd_record()
2894 if (rec->opts.nr_cblocks > nr_cblocks_max) in cmd_record()
2895 rec->opts.nr_cblocks = nr_cblocks_max; in cmd_record()
2896 pr_debug("nr_cblocks: %d\n", rec->opts.nr_cblocks); in cmd_record()
2898 pr_debug("affinity: %s\n", affinity_tags[rec->opts.affinity]); in cmd_record()
2899 pr_debug("mmap flush: %d\n", rec->opts.mmap_flush); in cmd_record()
2901 if (rec->opts.comp_level > comp_level_max) in cmd_record()
2902 rec->opts.comp_level = comp_level_max; in cmd_record()
2903 pr_debug("comp level: %d\n", rec->opts.comp_level); in cmd_record()
2907 bitmap_free(rec->affinity_mask.bits); in cmd_record()
2908 evlist__delete(rec->evlist); in cmd_record()
2910 auxtrace_record__free(rec->itr); in cmd_record()
2912 evlist__close_control(rec->opts.ctl_fd, rec->opts.ctl_fd_ack, &rec->opts.ctl_fd_close); in cmd_record()
2918 struct record *rec = &record; in snapshot_sig_handler() local
2920 hit_auxtrace_snapshot_trigger(rec); in snapshot_sig_handler()
2922 if (switch_output_signal(rec)) in snapshot_sig_handler()
2928 struct record *rec = &record; in alarm_sig_handler() local
2930 if (switch_output_time(rec)) in alarm_sig_handler()