From: tip-bot for Wang Nan <tipbot@zytor.com>
To: linux-tip-commits@vger.kernel.org
Cc: hekuang@huawei.com, acme@redhat.com, tglx@linutronix.de,
wangnan0@huawei.com, mingo@kernel.org, jolsa@kernel.org,
linux-kernel@vger.kernel.org, namhyung@kernel.org, hpa@zytor.com,
mhiramat@kernel.org, lizefan@huawei.com
Subject: [tip:perf/core] perf data: Add perf_data_file__switch() helper
Date: Thu, 14 Apr 2016 06:36:10 -0700 [thread overview]
Message-ID: <tip-040f9915e99e604688c2880e0b1e5b59dbfefa54@git.kernel.org> (raw)
In-Reply-To: <1460535673-159866-3-git-send-email-wangnan0@huawei.com>
Commit-ID: 040f9915e99e604688c2880e0b1e5b59dbfefa54
Gitweb: http://git.kernel.org/tip/040f9915e99e604688c2880e0b1e5b59dbfefa54
Author: Wang Nan <wangnan0@huawei.com>
AuthorDate: Wed, 13 Apr 2016 08:21:05 +0000
Committer: Arnaldo Carvalho de Melo <acme@redhat.com>
CommitDate: Thu, 14 Apr 2016 08:57:54 -0300
perf data: Add perf_data_file__switch() helper
perf_data_file__switch() closes current output file, renames it, then
open a new one to continue recording. It will be used by 'perf record'
to split output into multiple perf.data files.
Signed-off-by: Wang Nan <wangnan0@huawei.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <mhiramat@kernel.org>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.com
Link: http://lkml.kernel.org/r/1460535673-159866-3-git-send-email-wangnan0@huawei.com
Signed-off-by: He Kuang <hekuang@huawei.com>
Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
---
tools/perf/util/data.c | 41 +++++++++++++++++++++++++++++++++++++++++
tools/perf/util/data.h | 11 ++++++++++-
2 files changed, 51 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/data.c b/tools/perf/util/data.c
index 1921942..be835161 100644
--- a/tools/perf/util/data.c
+++ b/tools/perf/util/data.c
@@ -136,3 +136,44 @@ ssize_t perf_data_file__write(struct perf_data_file *file,
{
return writen(file->fd, buf, size);
}
+
+int perf_data_file__switch(struct perf_data_file *file,
+ const char *postfix,
+ size_t pos, bool at_exit)
+{
+ char *new_filepath;
+ int ret;
+
+ if (check_pipe(file))
+ return -EINVAL;
+ if (perf_data_file__is_read(file))
+ return -EINVAL;
+
+ if (asprintf(&new_filepath, "%s.%s", file->path, postfix) < 0)
+ return -ENOMEM;
+
+ /*
+ * Only fire a warning, don't return error, continue fill
+ * original file.
+ */
+ if (rename(file->path, new_filepath))
+ pr_warning("Failed to rename %s to %s\n", file->path, new_filepath);
+
+ if (!at_exit) {
+ close(file->fd);
+ ret = perf_data_file__open(file);
+ if (ret < 0)
+ goto out;
+
+ if (lseek(file->fd, pos, SEEK_SET) == (off_t)-1) {
+ ret = -errno;
+ pr_debug("Failed to lseek to %zu: %s",
+ pos, strerror(errno));
+ goto out;
+ }
+ }
+ ret = file->fd;
+out:
+ free(new_filepath);
+ return ret;
+}
diff --git a/tools/perf/util/data.h b/tools/perf/util/data.h
index 2b15d0c..ae510ce 100644
--- a/tools/perf/util/data.h
+++ b/tools/perf/util/data.h
@@ -46,5 +46,14 @@ int perf_data_file__open(struct perf_data_file *file);
void perf_data_file__close(struct perf_data_file *file);
ssize_t perf_data_file__write(struct perf_data_file *file,
void *buf, size_t size);
-
+/*
+ * If at_exit is set, only rename current perf.data to
+ * perf.data.<postfix>, continue write on original file.
+ * Set at_exit when flushing the last output.
+ *
+ * Return value is fd of new output.
+ */
+int perf_data_file__switch(struct perf_data_file *file,
+ const char *postfix,
+ size_t pos, bool at_exit);
#endif /* __PERF_DATA_H */
next prev parent reply other threads:[~2016-04-14 13:36 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2016-04-13 8:21 [PATCH 00/10] perf tools: Use SIGUSR2 control data dumpping Wang Nan
2016-04-13 8:21 ` [PATCH 01/10] perf tools: Make ordered_events reusable Wang Nan
2016-04-13 15:24 ` Arnaldo Carvalho de Melo
2016-04-14 13:35 ` [tip:perf/core] perf ordered_events: Introduce reinit() tip-bot for Wang Nan
2016-04-14 13:35 ` [tip:perf/core] perf session: Make ordered_events reusable tip-bot for Wang Nan
2016-04-13 8:21 ` [PATCH 02/10] perf tools: Add perf_data_file__switch() helper Wang Nan
2016-04-14 13:36 ` tip-bot for Wang Nan [this message]
2016-04-15 10:41 ` Jiri Olsa
2016-04-15 16:00 ` Arnaldo Carvalho de Melo
2016-04-13 8:21 ` [PATCH 03/10] perf record: Turns auxtrace_snapshot_enable into 3 states Wang Nan
2016-04-13 15:55 ` Arnaldo Carvalho de Melo
2016-04-14 7:15 ` Adrian Hunter
2016-04-14 7:50 ` Wangnan (F)
2016-04-14 8:30 ` Adrian Hunter
2016-04-14 9:07 ` Wangnan (F)
2016-04-14 10:21 ` Adrian Hunter
2016-04-14 13:36 ` [tip:perf/core] " tip-bot for Wang Nan
2016-04-13 8:21 ` [PATCH 04/10] perf record: Add '--timestamp-filename' option to append timestamp to output filename Wang Nan
2016-04-14 13:36 ` [tip:perf/core] perf record: Add '--timestamp-filename' option to append timestamp to output file name tip-bot for Wang Nan
2016-04-13 8:21 ` [PATCH 05/10] perf record: Split output into multiple files via '--switch-output' Wang Nan
2016-04-13 8:21 ` [PATCH 06/10] perf record: Force enable --timestamp-filename when --switch-output is provided Wang Nan
2016-04-13 8:21 ` [PATCH 07/10] perf record: Disable buildid cache options by default in switch output mode Wang Nan
2016-04-13 8:21 ` [PATCH 08/10] perf record: Re-synthesize tracking events after output switching Wang Nan
2016-04-13 8:21 ` [PATCH 09/10] perf record: Generate tracking events for process forked by perf Wang Nan
2016-04-13 8:21 ` [PATCH 10/10] perf core: Add backward attribute to perf event Wang Nan
2016-04-13 17:15 ` [PATCH 00/10] perf tools: Use SIGUSR2 control data dumpping Arnaldo Carvalho de Melo
2016-04-15 10:40 ` Jiri Olsa
2016-04-15 10:45 ` Wangnan (F)
2016-04-15 11:40 ` Wangnan (F)
2016-04-15 13:09 ` Arnaldo Carvalho de Melo
2016-04-15 16:26 ` Arnaldo Carvalho de Melo
2016-04-15 16:48 ` Wangnan (F)
2016-04-15 17:56 ` Wangnan (F)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=tip-040f9915e99e604688c2880e0b1e5b59dbfefa54@git.kernel.org \
--to=tipbot@zytor.com \
--cc=acme@redhat.com \
--cc=hekuang@huawei.com \
--cc=hpa@zytor.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=lizefan@huawei.com \
--cc=mhiramat@kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=tglx@linutronix.de \
--cc=wangnan0@huawei.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.