提交 7865e817 编写于 作者: F Frederic Weisbecker

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: NFrederic 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>
上级 a1e2f60e
...@@ -58,7 +58,7 @@ OPTIONS ...@@ -58,7 +58,7 @@ OPTIONS
-f:: -f::
--force:: --force::
Overwrite existing data file. Overwrite existing data file. (deprecated)
-c:: -c::
--count=:: --count=::
......
...@@ -26,6 +26,11 @@ ...@@ -26,6 +26,11 @@
#include <unistd.h> #include <unistd.h>
#include <sched.h> #include <sched.h>
enum write_mode_t {
WRITE_FORCE,
WRITE_APPEND
};
static int *fd[MAX_NR_CPUS][MAX_COUNTERS]; static int *fd[MAX_NR_CPUS][MAX_COUNTERS];
static long default_interval = 0; static long default_interval = 0;
...@@ -47,8 +52,7 @@ static pid_t *all_tids = NULL; ...@@ -47,8 +52,7 @@ static pid_t *all_tids = NULL;
static int thread_num = 0; static int thread_num = 0;
static pid_t child_pid = -1; static pid_t child_pid = -1;
static bool inherit = true; static bool inherit = true;
static bool force = false; static enum write_mode_t write_mode = WRITE_FORCE;
static bool append_file = false;
static bool call_graph = false; static bool call_graph = false;
static bool inherit_stat = false; static bool inherit_stat = false;
static bool no_samples = false; static bool no_samples = false;
...@@ -450,26 +454,19 @@ static int __cmd_record(int argc, const char **argv) ...@@ -450,26 +454,19 @@ static int __cmd_record(int argc, const char **argv)
} }
if (!stat(output_name, &st) && st.st_size) { if (!stat(output_name, &st) && st.st_size) {
if (!force) { if (write_mode == WRITE_FORCE) {
if (!append_file) {
pr_err("Error, output file %s exists, use -A "
"to append or -f to overwrite.\n",
output_name);
exit(-1);
}
} else {
char oldname[PATH_MAX]; char oldname[PATH_MAX];
snprintf(oldname, sizeof(oldname), "%s.old", snprintf(oldname, sizeof(oldname), "%s.old",
output_name); output_name);
unlink(oldname); unlink(oldname);
rename(output_name, oldname); rename(output_name, oldname);
} }
} else { } else if (write_mode == WRITE_APPEND) {
append_file = false; write_mode = WRITE_FORCE;
} }
flags = O_CREAT|O_RDWR; flags = O_CREAT|O_RDWR;
if (append_file) if (write_mode == WRITE_APPEND)
file_new = 0; file_new = 0;
else else
flags |= O_TRUNC; flags |= O_TRUNC;
...@@ -480,7 +477,8 @@ static int __cmd_record(int argc, const char **argv) ...@@ -480,7 +477,8 @@ static int __cmd_record(int argc, const char **argv)
exit(-1); exit(-1);
} }
session = perf_session__new(output_name, O_WRONLY, force); session = perf_session__new(output_name, O_WRONLY,
write_mode == WRITE_FORCE);
if (session == NULL) { if (session == NULL) {
pr_err("Not enough memory for reading perf file header\n"); pr_err("Not enough memory for reading perf file header\n");
return -1; return -1;
...@@ -667,6 +665,8 @@ static const char * const record_usage[] = { ...@@ -667,6 +665,8 @@ static const char * const record_usage[] = {
NULL NULL
}; };
static bool force, append_file;
static const struct option options[] = { static const struct option options[] = {
OPT_CALLBACK('e', "event", NULL, "event", OPT_CALLBACK('e', "event", NULL, "event",
"event selector. use 'perf list' to list available events", "event selector. use 'perf list' to list available events",
...@@ -688,7 +688,7 @@ static const struct option options[] = { ...@@ -688,7 +688,7 @@ static const struct option options[] = {
OPT_INTEGER('C', "profile_cpu", &profile_cpu, OPT_INTEGER('C', "profile_cpu", &profile_cpu,
"CPU to profile on"), "CPU to profile on"),
OPT_BOOLEAN('f', "force", &force, OPT_BOOLEAN('f', "force", &force,
"overwrite existing data file"), "overwrite existing data file (deprecated)"),
OPT_LONG('c', "count", &default_interval, OPT_LONG('c', "count", &default_interval,
"event period to sample"), "event period to sample"),
OPT_STRING('o', "output", &output_name, "file", OPT_STRING('o', "output", &output_name, "file",
...@@ -725,6 +725,16 @@ int cmd_record(int argc, const char **argv, const char *prefix __used) ...@@ -725,6 +725,16 @@ int cmd_record(int argc, const char **argv, const char *prefix __used)
!system_wide && profile_cpu == -1) !system_wide && profile_cpu == -1)
usage_with_options(record_usage, options); usage_with_options(record_usage, options);
if (force && append_file) {
fprintf(stderr, "Can't overwrite and append at the same time."
" You need to choose between -f and -A");
usage_with_options(record_usage, options);
} else if (append_file) {
write_mode = WRITE_APPEND;
} else {
write_mode = WRITE_FORCE;
}
symbol__init(); symbol__init();
if (!nr_counters) { if (!nr_counters) {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册