Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1377643

[PATCH 02/10] perf tools: Add perf_data_file__switch() helper

From Wang Nan <wangnan0@huawei.com>
Newsgroups linux.kernel
Subject [PATCH 02/10] perf tools: Add perf_data_file__switch() helper
Date 2016-04-13 10:30 +0200
Message-ID <rnolt-6Jw-33@gated-at.bofh.it> (permalink)
References <rnols-6Jw-11@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


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>
Signed-off-by: He Kuang <hekuang@huawei.com>
Cc: Arnaldo Carvalho de Melo <acme@redhat.com>
Cc: Jiri Olsa <jolsa@kernel.org>
Cc: Masami Hiramatsu <masami.hiramatsu.pt@hitachi.com>
Cc: Namhyung Kim <namhyung@kernel.org>
Cc: Zefan Li <lizefan@huawei.com>
Cc: pi3orama@163.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 */
-- 
1.8.3.4

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH 00/10] perf tools: Use SIGUSR2 control data dumpping Wang Nan <wangnan0@huawei.com> - 2016-04-13 10:30 +0200
  [PATCH 08/10] perf record: Re-synthesize tracking events after output switching Wang Nan <wangnan0@huawei.com> - 2016-04-13 10:30 +0200
  [PATCH 04/10] perf record: Add '--timestamp-filename' option to append timestamp to output filename Wang Nan <wangnan0@huawei.com> - 2016-04-13 10:30 +0200
    [tip:perf/core] perf record: Add '--timestamp-filename' option to  append timestamp to output file name tip-bot for Wang Nan <tipbot@zytor.com> - 2016-04-14 15:40 +0200
  [PATCH 10/10] perf core: Add backward attribute to perf event Wang Nan <wangnan0@huawei.com> - 2016-04-13 10:30 +0200
  [PATCH 02/10] perf tools: Add perf_data_file__switch() helper Wang Nan <wangnan0@huawei.com> - 2016-04-13 10:30 +0200
    [tip:perf/core] perf data: Add perf_data_file__switch() helper tip-bot for Wang Nan <tipbot@zytor.com> - 2016-04-14 15:40 +0200
    Re: [PATCH 02/10] perf tools: Add perf_data_file__switch() helper Jiri Olsa <jolsa@redhat.com> - 2016-04-15 13:00 +0200
      Re: [PATCH 02/10] perf tools: Add perf_data_file__switch() helper Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-04-15 18:10 +0200
  [PATCH 09/10] perf record: Generate tracking events for process forked by perf Wang Nan <wangnan0@huawei.com> - 2016-04-13 10:30 +0200
  [PATCH 05/10] perf record: Split output into multiple files via '--switch-output' Wang Nan <wangnan0@huawei.com> - 2016-04-13 10:30 +0200
  Re: [PATCH 00/10] perf tools: Use SIGUSR2 control data dumpping Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-04-13 19:20 +0200
  Re: [PATCH 00/10] perf tools: Use SIGUSR2 control data dumpping "Wangnan (F)" <wangnan0@huawei.com> - 2016-04-15 12:50 +0200
    Re: [PATCH 00/10] perf tools: Use SIGUSR2 control data dumpping "Wangnan (F)" <wangnan0@huawei.com> - 2016-04-15 13:50 +0200
      Re: [PATCH 00/10] perf tools: Use SIGUSR2 control data dumpping Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-04-15 15:10 +0200
        Re: [PATCH 00/10] perf tools: Use SIGUSR2 control data dumpping Arnaldo Carvalho de Melo <acme@kernel.org> - 2016-04-15 18:30 +0200
  Re: [PATCH 00/10] perf tools: Use SIGUSR2 control data dumpping Jiri Olsa <jolsa@redhat.com> - 2016-04-15 12:50 +0200

csiph-web