Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

perf record: Remove -A/--append option

It's no longer working and needed.

Quite straightforward discussion/vote was in here:
http://marc.info/?t=137028288300004&r=1&w=2

Signed-off-by: Jiri Olsa <jolsa@redhat.com>
Cc: Andi Kleen <ak@linux.intel.com>
Cc: Corey Ashford <cjashfor@linux.vnet.ibm.com>
Cc: David Ahern <dsahern@gmail.com>
Cc: Frederic Weisbecker <fweisbec@gmail.com>
Cc: Ingo Molnar <mingo@elte.hu>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Paul Mackerras <paulus@samba.org>
Cc: Peter Zijlstra <a.p.zijlstra@chello.nl>
Link: http://lkml.kernel.org/n/tip-8fgdva12hl8w3xzzpsvvg7nx@git.kernel.org
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>

authored by

Jiri Olsa and committed by
Arnaldo Carvalho de Melo
563aecb2 d07f0b12

+11 -88
+1 -3
tools/perf/Documentation/perf-record.txt
··· 65 65 -r:: 66 66 --realtime=:: 67 67 Collect data with this RT SCHED_FIFO priority. 68 + 68 69 -D:: 69 70 --no-delay:: 70 71 Collect data without buffering. 71 - -A:: 72 - --append:: 73 - Append to the output file to do incremental profiling. 74 72 75 73 -f:: 76 74 --force::
+9 -73
tools/perf/builtin-record.c
··· 61 61 } 62 62 #endif 63 63 64 - enum write_mode_t { 65 - WRITE_FORCE, 66 - WRITE_APPEND 67 - }; 68 - 69 64 struct perf_record { 70 65 struct perf_tool tool; 71 66 struct perf_record_opts opts; ··· 72 77 int output; 73 78 unsigned int page_size; 74 79 int realtime_prio; 75 - enum write_mode_t write_mode; 76 80 bool no_buildid; 77 81 bool no_buildid_cache; 78 82 bool force; 79 - bool file_new; 80 - bool append_file; 81 83 long samples; 82 84 off_t post_processing_offset; 83 85 }; ··· 192 200 signal(signr, SIG_DFL); 193 201 } 194 202 195 - static bool perf_evlist__equal(struct perf_evlist *evlist, 196 - struct perf_evlist *other) 197 - { 198 - struct perf_evsel *pos, *pair; 199 - 200 - if (evlist->nr_entries != other->nr_entries) 201 - return false; 202 - 203 - pair = perf_evlist__first(other); 204 - 205 - list_for_each_entry(pos, &evlist->entries, node) { 206 - if (memcmp(&pos->attr, &pair->attr, sizeof(pos->attr) != 0)) 207 - return false; 208 - pair = perf_evsel__next(pair); 209 - } 210 - 211 - return true; 212 - } 213 - 214 203 static int perf_record__open(struct perf_record *rec) 215 204 { 216 205 char msg[512]; ··· 246 273 goto out; 247 274 } 248 275 249 - if (rec->file_new) 250 - session->evlist = evlist; 251 - else { 252 - if (!perf_evlist__equal(session->evlist, evlist)) { 253 - fprintf(stderr, "incompatible append\n"); 254 - rc = -1; 255 - goto out; 256 - } 257 - } 258 - 276 + session->evlist = evlist; 259 277 perf_session__set_id_hdr_size(session); 260 278 out: 261 279 return rc; ··· 379 415 if (!strcmp(output_name, "-")) 380 416 opts->pipe_output = true; 381 417 else if (!stat(output_name, &st) && st.st_size) { 382 - if (rec->write_mode == WRITE_FORCE) { 383 - char oldname[PATH_MAX]; 384 - snprintf(oldname, sizeof(oldname), "%s.old", 385 - output_name); 386 - unlink(oldname); 387 - rename(output_name, oldname); 388 - } 389 - } else if (rec->write_mode == WRITE_APPEND) { 390 - rec->write_mode = WRITE_FORCE; 418 + char oldname[PATH_MAX]; 419 + snprintf(oldname, sizeof(oldname), "%s.old", 420 + output_name); 421 + unlink(oldname); 422 + rename(output_name, oldname); 391 423 } 392 424 } 393 425 394 - flags = O_CREAT|O_RDWR; 395 - if (rec->write_mode == WRITE_APPEND) 396 - rec->file_new = 0; 397 - else 398 - flags |= O_TRUNC; 426 + flags = O_CREAT|O_RDWR|O_TRUNC; 399 427 400 428 if (opts->pipe_output) 401 429 output = STDOUT_FILENO; ··· 401 445 rec->output = output; 402 446 403 447 session = perf_session__new(output_name, O_WRONLY, 404 - rec->write_mode == WRITE_FORCE, false, NULL); 448 + true, false, NULL); 405 449 if (session == NULL) { 406 450 pr_err("Not enough memory for reading perf file header\n"); 407 451 return -1; ··· 420 464 421 465 if (!rec->opts.branch_stack) 422 466 perf_header__clear_feat(&session->header, HEADER_BRANCH_STACK); 423 - 424 - if (!rec->file_new) { 425 - err = perf_session__read_header(session, output); 426 - if (err < 0) 427 - goto out_delete_session; 428 - } 429 467 430 468 if (forks) { 431 469 err = perf_evlist__prepare_workload(evsel_list, &opts->target, ··· 448 498 err = perf_header__write_pipe(output); 449 499 if (err < 0) 450 500 goto out_delete_session; 451 - } else if (rec->file_new) { 501 + } else { 452 502 err = perf_session__write_header(session, evsel_list, 453 503 output, false); 454 504 if (err < 0) ··· 819 869 .uses_mmap = true, 820 870 }, 821 871 }, 822 - .write_mode = WRITE_FORCE, 823 - .file_new = true, 824 872 }; 825 873 826 874 #define CALLCHAIN_HELP "do call-graph (stack chain/backtrace) recording: " ··· 854 906 "collect raw sample records from all opened counters"), 855 907 OPT_BOOLEAN('a', "all-cpus", &record.opts.target.system_wide, 856 908 "system-wide collection from all CPUs"), 857 - OPT_BOOLEAN('A', "append", &record.append_file, 858 - "append to the output file to do incremental profiling"), 859 909 OPT_STRING('C', "cpu", &record.opts.target.cpu_list, "cpu", 860 910 "list of cpus to monitor"), 861 911 OPT_BOOLEAN('f', "force", &record.force, ··· 922 976 PARSE_OPT_STOP_AT_NON_OPTION); 923 977 if (!argc && perf_target__none(&rec->opts.target)) 924 978 usage_with_options(record_usage, record_options); 925 - 926 - if (rec->force && rec->append_file) { 927 - ui__error("Can't overwrite and append at the same time." 928 - " You need to choose between -f and -A"); 929 - usage_with_options(record_usage, record_options); 930 - } else if (rec->append_file) { 931 - rec->write_mode = WRITE_APPEND; 932 - } else { 933 - rec->write_mode = WRITE_FORCE; 934 - } 935 979 936 980 if (nr_cgroups && !rec->opts.target.system_wide) { 937 981 ui__error("cgroup monitoring only available in"
+1 -12
tools/perf/util/header.c
··· 2303 2303 struct perf_file_header f_header; 2304 2304 struct perf_file_attr f_attr; 2305 2305 struct perf_header *header = &session->header; 2306 - struct perf_evsel *evsel, *pair = NULL; 2306 + struct perf_evsel *evsel; 2307 2307 int err; 2308 2308 2309 2309 lseek(fd, sizeof(f_header), SEEK_SET); 2310 - 2311 - if (session->evlist != evlist) 2312 - pair = perf_evlist__first(session->evlist); 2313 2310 2314 2311 list_for_each_entry(evsel, &evlist->entries, node) { 2315 2312 evsel->id_offset = lseek(fd, 0, SEEK_CUR); 2316 2313 err = do_write(fd, evsel->id, evsel->ids * sizeof(u64)); 2317 2314 if (err < 0) { 2318 - out_err_write: 2319 2315 pr_debug("failed to write perf header\n"); 2320 2316 return err; 2321 - } 2322 - if (session->evlist != evlist) { 2323 - err = do_write(fd, pair->id, pair->ids * sizeof(u64)); 2324 - if (err < 0) 2325 - goto out_err_write; 2326 - evsel->ids += pair->ids; 2327 - pair = perf_evsel__next(pair); 2328 2317 } 2329 2318 } 2330 2319