ftrace: show buffer size in kilobytes

Impact: change the units of buffer_size_kb to kilobytes

This patch changes the units of the buffer_size_kb file to kilobytes.
Reading and writing to the file uses kilobytes as units. To help
users to know what units are used, the output of the file now
looks like:

  # cat /debug/tracing/buffer_size_kb
  1408

Signed-off-by: Steven Rostedt <srostedt@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
Steven Rostedt 2008-11-13 00:09:35 -05:00 committed by Ingo Molnar
parent a94c80e78b
commit 1696b2b0f4
2 changed files with 9 additions and 18 deletions

View File

@ -94,10 +94,10 @@ of ftrace. Here is a list of some of the key files:
only be recorded if the latency is greater than only be recorded if the latency is greater than
the value in this file. (in microseconds) the value in this file. (in microseconds)
buffer_size_kb: This sets or displays the number of bytes each CPU buffer_size_kb: This sets or displays the number of kilobytes each CPU
buffer can hold. The tracer buffers are the same size buffer can hold. The tracer buffers are the same size
for each CPU. The displayed number is the size of the for each CPU. The displayed number is the size of the
CPU buffer and not total size of all buffers. The CPU buffer and not total size of all buffers. The
trace buffers are allocated in pages (blocks of memory trace buffers are allocated in pages (blocks of memory
that the kernel uses for allocation, usually 4 KB in size). that the kernel uses for allocation, usually 4 KB in size).
If the last page allocated has room for more bytes If the last page allocated has room for more bytes
@ -1306,28 +1306,16 @@ the full size, multiply the number of possible CPUS with the
number of entries. number of entries.
# cat /debug/tracing/buffer_size_kb # cat /debug/tracing/buffer_size_kb
65620 1408 (units kilobytes)
Note, to modify this, you must have tracing completely disabled. To do that, Note, to modify this, you must have tracing completely disabled. To do that,
echo "nop" into the current_tracer. If the current_tracer is not set echo "nop" into the current_tracer. If the current_tracer is not set
to "nop", an EINVAL error will be returned. to "nop", an EINVAL error will be returned.
# echo nop > /debug/tracing/current_tracer # echo nop > /debug/tracing/current_tracer
# echo 100000 > /debug/tracing/buffer_size_kb # echo 10000 > /debug/tracing/buffer_size_kb
# cat /debug/tracing/buffer_size_kb # cat /debug/tracing/buffer_size_kb
100045 10000 (units kilobytes)
Notice that we echoed in 100,000 but the size is 100,045. The entries
are held in individual pages. It allocates the number of pages it takes
to fulfill the request. If more entries may fit on the last page
then they will be added.
# echo 1 > /debug/tracing/buffer_size_kb
# cat /debug/tracing/buffer_size_kb
85
This shows us that 85 entries can fit in a single page.
The number of pages which will be allocated is limited to a percentage The number of pages which will be allocated is limited to a percentage
of available memory. Allocating too much will produce an error. of available memory. Allocating too much will produce an error.

View File

@ -2905,7 +2905,7 @@ tracing_entries_read(struct file *filp, char __user *ubuf,
char buf[64]; char buf[64];
int r; int r;
r = sprintf(buf, "%lu\n", tr->entries); r = sprintf(buf, "%lu\n", tr->entries >> 10);
return simple_read_from_buffer(ubuf, cnt, ppos, buf, r); return simple_read_from_buffer(ubuf, cnt, ppos, buf, r);
} }
@ -2945,6 +2945,9 @@ tracing_entries_write(struct file *filp, const char __user *ubuf,
atomic_inc(&max_tr.data[cpu]->disabled); atomic_inc(&max_tr.data[cpu]->disabled);
} }
/* value is in KB */
val <<= 10;
if (val != global_trace.entries) { if (val != global_trace.entries) {
ret = ring_buffer_resize(global_trace.buffer, val); ret = ring_buffer_resize(global_trace.buffer, val);
if (ret < 0) { if (ret < 0) {