perf record: Remove -A/--append option
authorJiri Olsa <jolsa@redhat.com>
Wed, 5 Jun 2013 11:35:06 +0000 (13:35 +0200)
committerArnaldo Carvalho de Melo <acme@redhat.com>
Mon, 8 Jul 2013 20:37:10 +0000 (17:37 -0300)
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>
tools/perf/Documentation/perf-record.txt
tools/perf/builtin-record.c
tools/perf/util/header.c

index d4da111ef53d842619d229a5c57c87352bcbbef1..7e3258066bc9ddf13b627b954275f3d280622dfe 100644 (file)
@@ -65,12 +65,10 @@ OPTIONS
 -r::
 --realtime=::
        Collect data with this RT SCHED_FIFO priority.
+
 -D::
 --no-delay::
        Collect data without buffering.
--A::
---append::
-       Append to the output file to do incremental profiling.
 
 -f::
 --force::
index fff985cf38522cc0cb3a442de32e545529861514..2990570b5c6d8923fa02422883af1e540dcd5d7f 100644 (file)
@@ -61,11 +61,6 @@ static void __handle_on_exit_funcs(void)
 }
 #endif
 
-enum write_mode_t {
-       WRITE_FORCE,
-       WRITE_APPEND
-};
-
 struct perf_record {
        struct perf_tool        tool;
        struct perf_record_opts opts;
@@ -77,12 +72,9 @@ struct perf_record {
        int                     output;
        unsigned int            page_size;
        int                     realtime_prio;
-       enum write_mode_t       write_mode;
        bool                    no_buildid;
        bool                    no_buildid_cache;
        bool                    force;
-       bool                    file_new;
-       bool                    append_file;
        long                    samples;
        off_t                   post_processing_offset;
 };
@@ -200,25 +192,6 @@ static void perf_record__sig_exit(int exit_status __maybe_unused, void *arg)
        signal(signr, SIG_DFL);
 }
 
-static bool perf_evlist__equal(struct perf_evlist *evlist,
-                              struct perf_evlist *other)
-{
-       struct perf_evsel *pos, *pair;
-
-       if (evlist->nr_entries != other->nr_entries)
-               return false;
-
-       pair = perf_evlist__first(other);
-
-       list_for_each_entry(pos, &evlist->entries, node) {
-               if (memcmp(&pos->attr, &pair->attr, sizeof(pos->attr) != 0))
-                       return false;
-               pair = perf_evsel__next(pair);
-       }
-
-       return true;
-}
-
 static int perf_record__open(struct perf_record *rec)
 {
        char msg[512];
@@ -273,16 +246,7 @@ try_again:
                goto out;
        }
 
-       if (rec->file_new)
-               session->evlist = evlist;
-       else {
-               if (!perf_evlist__equal(session->evlist, evlist)) {
-                       fprintf(stderr, "incompatible append\n");
-                       rc = -1;
-                       goto out;
-               }
-       }
-
+       session->evlist = evlist;
        perf_session__set_id_hdr_size(session);
 out:
        return rc;
@@ -415,23 +379,15 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
                if (!strcmp(output_name, "-"))
                        opts->pipe_output = true;
                else if (!stat(output_name, &st) && st.st_size) {
-                       if (rec->write_mode == WRITE_FORCE) {
-                               char oldname[PATH_MAX];
-                               snprintf(oldname, sizeof(oldname), "%s.old",
-                                        output_name);
-                               unlink(oldname);
-                               rename(output_name, oldname);
-                       }
-               } else if (rec->write_mode == WRITE_APPEND) {
-                       rec->write_mode = WRITE_FORCE;
+                       char oldname[PATH_MAX];
+                       snprintf(oldname, sizeof(oldname), "%s.old",
+                                output_name);
+                       unlink(oldname);
+                       rename(output_name, oldname);
                }
        }
 
-       flags = O_CREAT|O_RDWR;
-       if (rec->write_mode == WRITE_APPEND)
-               rec->file_new = 0;
-       else
-               flags |= O_TRUNC;
+       flags = O_CREAT|O_RDWR|O_TRUNC;
 
        if (opts->pipe_output)
                output = STDOUT_FILENO;
@@ -445,7 +401,7 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
        rec->output = output;
 
        session = perf_session__new(output_name, O_WRONLY,
-                                   rec->write_mode == WRITE_FORCE, false, NULL);
+                                   true, false, NULL);
        if (session == NULL) {
                pr_err("Not enough memory for reading perf file header\n");
                return -1;
@@ -465,12 +421,6 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
        if (!rec->opts.branch_stack)
                perf_header__clear_feat(&session->header, HEADER_BRANCH_STACK);
 
-       if (!rec->file_new) {
-               err = perf_session__read_header(session, output);
-               if (err < 0)
-                       goto out_delete_session;
-       }
-
        if (forks) {
                err = perf_evlist__prepare_workload(evsel_list, &opts->target,
                                                    argv, opts->pipe_output,
@@ -498,7 +448,7 @@ static int __cmd_record(struct perf_record *rec, int argc, const char **argv)
                err = perf_header__write_pipe(output);
                if (err < 0)
                        goto out_delete_session;
-       } else if (rec->file_new) {
+       } else {
                err = perf_session__write_header(session, evsel_list,
                                                 output, false);
                if (err < 0)
@@ -869,8 +819,6 @@ static struct perf_record record = {
                        .uses_mmap   = true,
                },
        },
-       .write_mode = WRITE_FORCE,
-       .file_new   = true,
 };
 
 #define CALLCHAIN_HELP "do call-graph (stack chain/backtrace) recording: "
@@ -906,8 +854,6 @@ const struct option record_options[] = {
                    "collect raw sample records from all opened counters"),
        OPT_BOOLEAN('a', "all-cpus", &record.opts.target.system_wide,
                            "system-wide collection from all CPUs"),
-       OPT_BOOLEAN('A', "append", &record.append_file,
-                           "append to the output file to do incremental profiling"),
        OPT_STRING('C', "cpu", &record.opts.target.cpu_list, "cpu",
                    "list of cpus to monitor"),
        OPT_BOOLEAN('f', "force", &record.force,
@@ -977,16 +923,6 @@ int cmd_record(int argc, const char **argv, const char *prefix __maybe_unused)
        if (!argc && perf_target__none(&rec->opts.target))
                usage_with_options(record_usage, record_options);
 
-       if (rec->force && rec->append_file) {
-               ui__error("Can't overwrite and append at the same time."
-                         " You need to choose between -f and -A");
-               usage_with_options(record_usage, record_options);
-       } else if (rec->append_file) {
-               rec->write_mode = WRITE_APPEND;
-       } else {
-               rec->write_mode = WRITE_FORCE;
-       }
-
        if (nr_cgroups && !rec->opts.target.system_wide) {
                ui__error("cgroup monitoring only available in"
                          " system-wide mode\n");
index 738d3b8d97459e12418bdcbcdf7eb8cbbc319b2d..93dd31573fb5bbd17a061630af4234dd6e93af53 100644 (file)
@@ -2303,29 +2303,18 @@ int perf_session__write_header(struct perf_session *session,
        struct perf_file_header f_header;
        struct perf_file_attr   f_attr;
        struct perf_header *header = &session->header;
-       struct perf_evsel *evsel, *pair = NULL;
+       struct perf_evsel *evsel;
        int err;
 
        lseek(fd, sizeof(f_header), SEEK_SET);
 
-       if (session->evlist != evlist)
-               pair = perf_evlist__first(session->evlist);
-
        list_for_each_entry(evsel, &evlist->entries, node) {
                evsel->id_offset = lseek(fd, 0, SEEK_CUR);
                err = do_write(fd, evsel->id, evsel->ids * sizeof(u64));
                if (err < 0) {
-out_err_write:
                        pr_debug("failed to write perf header\n");
                        return err;
                }
-               if (session->evlist != evlist) {
-                       err = do_write(fd, pair->id, pair->ids * sizeof(u64));
-                       if (err < 0)
-                               goto out_err_write;
-                       evsel->ids += pair->ids;
-                       pair = perf_evsel__next(pair);
-               }
        }
 
        header->attr_offset = lseek(fd, 0, SEEK_CUR);