trace: Add a new readonly entry to report total buffer size
authorVaibhav Nagarnaik <vnagarnaik@google.com>
Tue, 16 Aug 2011 21:46:15 +0000 (14:46 -0700)
committerSteven Rostedt <rostedt@goodmis.org>
Tue, 30 Aug 2011 16:27:44 +0000 (12:27 -0400)
The current file "buffer_size_kb" reports the size of per-cpu buffer and
not the overall memory allocated which could be misleading. A new file
"buffer_total_size_kb" adds up all the enabled CPU buffer sizes and
reports it. This is only a readonly entry.

Signed-off-by: Vaibhav Nagarnaik <vnagarnaik@google.com>
Cc: Michael Rubin <mrubin@google.com>
Cc: David Sharp <dhsharp@google.com>
Link: http://lkml.kernel.org/r/1313531179-9323-2-git-send-email-vnagarnaik@google.com
Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
kernel/trace/trace.c

index e5df02c69b1d6d0d29c64cd9e2165ddfc6d9a3f6..01176788c387e30d0b72dfc65e245161e901bd71 100644 (file)
@@ -3568,6 +3568,30 @@ tracing_entries_write(struct file *filp, const char __user *ubuf,
        return cnt;
 }
 
+static ssize_t
+tracing_total_entries_read(struct file *filp, char __user *ubuf,
+                               size_t cnt, loff_t *ppos)
+{
+       struct trace_array *tr = filp->private_data;
+       char buf[64];
+       int r, cpu;
+       unsigned long size = 0, expanded_size = 0;
+
+       mutex_lock(&trace_types_lock);
+       for_each_tracing_cpu(cpu) {
+               size += tr->entries >> 10;
+               if (!ring_buffer_expanded)
+                       expanded_size += trace_buf_size >> 10;
+       }
+       if (ring_buffer_expanded)
+               r = sprintf(buf, "%lu\n", size);
+       else
+               r = sprintf(buf, "%lu (expanded: %lu)\n", size, expanded_size);
+       mutex_unlock(&trace_types_lock);
+
+       return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
+}
+
 static ssize_t
 tracing_free_buffer_write(struct file *filp, const char __user *ubuf,
                          size_t cnt, loff_t *ppos)
@@ -3739,6 +3763,12 @@ static const struct file_operations tracing_entries_fops = {
        .llseek         = generic_file_llseek,
 };
 
+static const struct file_operations tracing_total_entries_fops = {
+       .open           = tracing_open_generic,
+       .read           = tracing_total_entries_read,
+       .llseek         = generic_file_llseek,
+};
+
 static const struct file_operations tracing_free_buffer_fops = {
        .write          = tracing_free_buffer_write,
        .release        = tracing_free_buffer_release,
@@ -4450,6 +4480,9 @@ static __init int tracer_init_debugfs(void)
        trace_create_file("buffer_size_kb", 0644, d_tracer,
                        &global_trace, &tracing_entries_fops);
 
+       trace_create_file("buffer_total_size_kb", 0444, d_tracer,
+                       &global_trace, &tracing_total_entries_fops);
+
        trace_create_file("free_buffer", 0644, d_tracer,
                        &global_trace, &tracing_free_buffer_fops);