aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrederic Weisbecker <fweisbec@gmail.com>2010-04-14 13:42:07 -0400
committerFrederic Weisbecker <fweisbec@gmail.com>2010-04-14 22:12:51 -0400
commit7865e817e9b4b378ac57ab7f16183100b95466ce (patch)
treeb3fd7772abc44491b884b780f5cac364a2ace563
parenta1e2f60e3efc812bf66a2be0d8530ee175003f6d (diff)
perf: Make -f the default for perf record
Force the overwriting mode by default if append mode is not explicit. Adding -f every time one uses perf on a daily basis quickly becomes a burden. Keep the -f among the options though to avoid breaking some random users scripts. Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com> Cc: Arnaldo Carvalho de Melo <acme@redhat.com> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Cc: Paul Mackerras <paulus@samba.org> Cc: Ingo Molnar <mingo@elte.hu> Cc: Thomas Gleixner <tglx@linutronix.de>
-rw-r--r--tools/perf/Documentation/perf-record.txt2
-rw-r--r--tools/perf/builtin-record.c40
2 files changed, 26 insertions, 16 deletions
diff --git a/tools/perf/Documentation/perf-record.txt b/tools/perf/Documentation/perf-record.txt
index fc46c0b40f6e..b29bd2db6a49 100644
--- a/tools/perf/Documentation/perf-record.txt
+++ b/tools/perf/Documentation/perf-record.txt
@@ -58,7 +58,7 @@ OPTIONS
58 58
59-f:: 59-f::
60--force:: 60--force::
61 Overwrite existing data file. 61 Overwrite existing data file. (deprecated)
62 62
63-c:: 63-c::
64--count=:: 64--count=::
diff --git a/tools/perf/builtin-record.c b/tools/perf/builtin-record.c
index 9a9513687235..dcda8993082d 100644
--- a/tools/perf/builtin-record.c
+++ b/tools/perf/builtin-record.c
@@ -26,6 +26,11 @@
26#include <unistd.h> 26#include <unistd.h>
27#include <sched.h> 27#include <sched.h>
28 28
29enum write_mode_t {
30 WRITE_FORCE,
31 WRITE_APPEND
32};
33
29static int *fd[MAX_NR_CPUS][MAX_COUNTERS]; 34static int *fd[MAX_NR_CPUS][MAX_COUNTERS];
30 35
31static long default_interval = 0; 36static long default_interval = 0;
@@ -47,8 +52,7 @@ static pid_t *all_tids = NULL;
47static int thread_num = 0; 52static int thread_num = 0;
48static pid_t child_pid = -1; 53static pid_t child_pid = -1;
49static bool inherit = true; 54static bool inherit = true;
50static bool force = false; 55static enum write_mode_t write_mode = WRITE_FORCE;
51static bool append_file = false;
52static bool call_graph = false; 56static bool call_graph = false;
53static bool inherit_stat = false; 57static bool inherit_stat = false;
54static bool no_samples = false; 58static bool no_samples = false;
@@ -450,26 +454,19 @@ static int __cmd_record(int argc, const char **argv)
450 } 454 }
451 455
452 if (!stat(output_name, &st) && st.st_size) { 456 if (!stat(output_name, &st) && st.st_size) {
453 if (!force) { 457 if (write_mode == WRITE_FORCE) {
454 if (!append_file) {
455 pr_err("Error, output file %s exists, use -A "
456 "to append or -f to overwrite.\n",
457 output_name);
458 exit(-1);
459 }
460 } else {
461 char oldname[PATH_MAX]; 458 char oldname[PATH_MAX];
462 snprintf(oldname, sizeof(oldname), "%s.old", 459 snprintf(oldname, sizeof(oldname), "%s.old",
463 output_name); 460 output_name);
464 unlink(oldname); 461 unlink(oldname);
465 rename(output_name, oldname); 462 rename(output_name, oldname);
466 } 463 }
467 } else { 464 } else if (write_mode == WRITE_APPEND) {
468 append_file = false; 465 write_mode = WRITE_FORCE;
469 } 466 }
470 467
471 flags = O_CREAT|O_RDWR; 468 flags = O_CREAT|O_RDWR;
472 if (append_file) 469 if (write_mode == WRITE_APPEND)
473 file_new = 0; 470 file_new = 0;
474 else 471 else
475 flags |= O_TRUNC; 472 flags |= O_TRUNC;
@@ -480,7 +477,8 @@ static int __cmd_record(int argc, const char **argv)
480 exit(-1); 477 exit(-1);
481 } 478 }
482 479
483 session = perf_session__new(output_name, O_WRONLY, force); 480 session = perf_session__new(output_name, O_WRONLY,
481 write_mode == WRITE_FORCE);
484 if (session == NULL) { 482 if (session == NULL) {
485 pr_err("Not enough memory for reading perf file header\n"); 483 pr_err("Not enough memory for reading perf file header\n");
486 return -1; 484 return -1;
@@ -667,6 +665,8 @@ static const char * const record_usage[] = {
667 NULL 665 NULL
668}; 666};
669 667
668static bool force, append_file;
669
670static const struct option options[] = { 670static const struct option options[] = {
671 OPT_CALLBACK('e', "event", NULL, "event", 671 OPT_CALLBACK('e', "event", NULL, "event",
672 "event selector. use 'perf list' to list available events", 672 "event selector. use 'perf list' to list available events",
@@ -688,7 +688,7 @@ static const struct option options[] = {
688 OPT_INTEGER('C', "profile_cpu", &profile_cpu, 688 OPT_INTEGER('C', "profile_cpu", &profile_cpu,
689 "CPU to profile on"), 689 "CPU to profile on"),
690 OPT_BOOLEAN('f', "force", &force, 690 OPT_BOOLEAN('f', "force", &force,
691 "overwrite existing data file"), 691 "overwrite existing data file (deprecated)"),
692 OPT_LONG('c', "count", &default_interval, 692 OPT_LONG('c', "count", &default_interval,
693 "event period to sample"), 693 "event period to sample"),
694 OPT_STRING('o', "output", &output_name, "file", 694 OPT_STRING('o', "output", &output_name, "file",
@@ -725,6 +725,16 @@ int cmd_record(int argc, const char **argv, const char *prefix __used)
725 !system_wide && profile_cpu == -1) 725 !system_wide && profile_cpu == -1)
726 usage_with_options(record_usage, options); 726 usage_with_options(record_usage, options);
727 727
728 if (force && append_file) {
729 fprintf(stderr, "Can't overwrite and append at the same time."
730 " You need to choose between -f and -A");
731 usage_with_options(record_usage, options);
732 } else if (append_file) {
733 write_mode = WRITE_APPEND;
734 } else {
735 write_mode = WRITE_FORCE;
736 }
737
728 symbol__init(); 738 symbol__init();
729 739
730 if (!nr_counters) { 740 if (!nr_counters) {