This adds an option '-m/--buffer-size' to allow us set the size of per-cpu
tracing buffer.

Signed-off-by: Changbin Du <[email protected]>
---
 tools/perf/Documentation/perf-ftrace.txt |  4 ++++
 tools/perf/builtin-ftrace.c              | 22 ++++++++++++++++++++++
 2 files changed, 26 insertions(+)

diff --git a/tools/perf/Documentation/perf-ftrace.txt 
b/tools/perf/Documentation/perf-ftrace.txt
index fd1776deebd7..a18d640e90bb 100644
--- a/tools/perf/Documentation/perf-ftrace.txt
+++ b/tools/perf/Documentation/perf-ftrace.txt
@@ -60,6 +60,10 @@ OPTIONS
        Ranges of CPUs are specified with -: 0-2.
        Default is to trace on all online CPUs.
 
+-m::
+--buffer-size::
+       Set the size of per-cpu tracing buffer in KB.
+
 -T::
 --trace-funcs=::
        Only trace functions given by the argument.  Multiple functions
diff --git a/tools/perf/builtin-ftrace.c b/tools/perf/builtin-ftrace.c
index 003efa756322..e45496012611 100644
--- a/tools/perf/builtin-ftrace.c
+++ b/tools/perf/builtin-ftrace.c
@@ -39,6 +39,7 @@ struct perf_ftrace {
        struct list_head        nograph_funcs;
        int                     graph_depth;
        unsigned                initial_delay;
+       unsigned                buffer_size_kb;
 };
 
 struct filter_entry {
@@ -321,6 +322,20 @@ static int set_tracing_depth(struct perf_ftrace *ftrace)
        return 0;
 }
 
+static int set_tracing_buffer_size_kb(struct perf_ftrace *ftrace)
+{
+       int ret;
+
+       if (ftrace->buffer_size_kb == 0)
+               return 0;
+
+       ret = write_tracing_file_int("buffer_size_kb", ftrace->buffer_size_kb);
+       if (ret < 0)
+               return ret;
+
+       return 0;
+}
+
 static int __cmd_ftrace(struct perf_ftrace *ftrace, int argc, const char 
**argv)
 {
        char *trace_file;
@@ -385,6 +400,11 @@ static int __cmd_ftrace(struct perf_ftrace *ftrace, int 
argc, const char **argv)
                goto out_reset;
        }
 
+       if (set_tracing_buffer_size_kb(ftrace) < 0) {
+               pr_err("failed to set tracing per-cpu buffer size\n");
+               goto out_reset;
+       }
+
        if (write_tracing_file("current_tracer", ftrace->tracer) < 0) {
                pr_err("failed to set current_tracer to %s\n", ftrace->tracer);
                goto out_reset;
@@ -555,6 +575,8 @@ int cmd_ftrace(int argc, const char **argv)
                    "Max depth for function graph tracer"),
        OPT_UINTEGER('d', "delay", &ftrace.initial_delay,
                     "ms to wait before starting tracing after program start"),
+       OPT_UINTEGER('m', "buffer-size", &ftrace.buffer_size_kb,
+                    "size of per cpu buffer in kb"),
        OPT_END()
        };
 
-- 
2.25.1

Reply via email to