* [PATCH 0/3] ftrace updates for tip
@ 2008-11-12 22:52 Steven Rostedt
2008-11-12 22:52 ` [PATCH 1/3] ftrace: rename trace_entries to buffer_size Steven Rostedt
` (3 more replies)
0 siblings, 4 replies; 18+ messages in thread
From: Steven Rostedt @ 2008-11-12 22:52 UTC (permalink / raw)
To: linux-kernel
Cc: Ingo Molnar, Andrew Morton, Thomas Gleixner, Peter Zijlstra,
David Miller, Frederic Weisbecker, Arjan van de Ven,
Pekka Paalanen
[
I added a bit more people to the Cc so that they are aware
of the pending renames that are coming.
Namely, trace_entries will be renamed to buffer_size
iter_ctrl will be renamed to trace_options
]
Ingo,
The following patches are in:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
branch: tip/devel
Steven Rostedt (3):
ftrace: rename trace_entries to buffer_size
ftrace: rename iter_ctrl to trace_options
ftrace: CPU buffer start annotation clean ups
----
Documentation/ftrace.txt | 32 ++++++++++++++++----------------
kernel/trace/trace.c | 38 ++++++++++++++++++++++++++------------
kernel/trace/trace.h | 1 +
3 files changed, 43 insertions(+), 28 deletions(-)
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 1/3] ftrace: rename trace_entries to buffer_size
2008-11-12 22:52 [PATCH 0/3] ftrace updates for tip Steven Rostedt
@ 2008-11-12 22:52 ` Steven Rostedt
2008-11-12 23:14 ` Frédéric Weisbecker
2008-11-12 22:52 ` [PATCH 2/3] ftrace: rename iter_ctrl to trace_options Steven Rostedt
` (2 subsequent siblings)
3 siblings, 1 reply; 18+ messages in thread
From: Steven Rostedt @ 2008-11-12 22:52 UTC (permalink / raw)
To: linux-kernel
Cc: Ingo Molnar, Andrew Morton, Thomas Gleixner, Peter Zijlstra,
David Miller, Frederic Weisbecker, Arjan van de Ven,
Pekka Paalanen, Steven Rostedt
[-- Attachment #1: 0001-ftrace-rename-trace_entries-to-buffer_size.patch --]
[-- Type: text/plain, Size: 3825 bytes --]
Impact: rename of debugfs file trace_entries to buffer_size
The original ftrace had fixed size entries, and the number of entries
was shown and modified via the file called trace_entries. By converting
to the unified trace buffer, we now allow for variable size entries
which makes the meaning of trace_entries pointless.
Since trace_size might be confused to the size of the trace, this patch
names it "buffer_size" (thanks to Arjan van de Ven for this idea).
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
---
Documentation/ftrace.txt | 18 +++++++++---------
kernel/trace/trace.c | 4 ++--
2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/Documentation/ftrace.txt b/Documentation/ftrace.txt
index 9cc4d68..58cba1f 100644
--- a/Documentation/ftrace.txt
+++ b/Documentation/ftrace.txt
@@ -94,7 +94,7 @@ of ftrace. Here is a list of some of the key files:
only be recorded if the latency is greater than
the value in this file. (in microseconds)
- trace_entries: This sets or displays the number of bytes each CPU
+ buffer_size: This sets or displays the number of bytes each CPU
buffer can hold. The tracer buffers are the same size
for each CPU. The displayed number is the size of the
CPU buffer and not total size of all buffers. The
@@ -1299,13 +1299,13 @@ trace entries
-------------
Having too much or not enough data can be troublesome in diagnosing
-an issue in the kernel. The file trace_entries is used to modify
+an issue in the kernel. The file buffer_size is used to modify
the size of the internal trace buffers. The number listed
is the number of entries that can be recorded per CPU. To know
the full size, multiply the number of possible CPUS with the
number of entries.
- # cat /debug/tracing/trace_entries
+ # cat /debug/tracing/buffer_size
65620
Note, to modify this, you must have tracing completely disabled. To do that,
@@ -1313,8 +1313,8 @@ echo "nop" into the current_tracer. If the current_tracer is not set
to "nop", an EINVAL error will be returned.
# echo nop > /debug/tracing/current_tracer
- # echo 100000 > /debug/tracing/trace_entries
- # cat /debug/tracing/trace_entries
+ # echo 100000 > /debug/tracing/buffer_size
+ # cat /debug/tracing/buffer_size
100045
@@ -1323,8 +1323,8 @@ 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/trace_entries
- # cat /debug/tracing/trace_entries
+ # echo 1 > /debug/tracing/buffer_size
+ # cat /debug/tracing/buffer_size
85
This shows us that 85 entries can fit in a single page.
@@ -1332,8 +1332,8 @@ 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
of available memory. Allocating too much will produce an error.
- # echo 1000000000000 > /debug/tracing/trace_entries
+ # echo 1000000000000 > /debug/tracing/buffer_size
-bash: echo: write error: Cannot allocate memory
- # cat /debug/tracing/trace_entries
+ # cat /debug/tracing/buffer_size
85
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 4bf070b..c681778 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -3198,11 +3198,11 @@ static __init int tracer_init_debugfs(void)
pr_warning("Could not create debugfs "
"'trace_pipe' entry\n");
- entry = debugfs_create_file("trace_entries", 0644, d_tracer,
+ entry = debugfs_create_file("buffer_size", 0644, d_tracer,
&global_trace, &tracing_entries_fops);
if (!entry)
pr_warning("Could not create debugfs "
- "'trace_entries' entry\n");
+ "'buffer_size' entry\n");
entry = debugfs_create_file("trace_marker", 0220, d_tracer,
NULL, &tracing_mark_fops);
--
1.5.6.5
--
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 2/3] ftrace: rename iter_ctrl to trace_options
2008-11-12 22:52 [PATCH 0/3] ftrace updates for tip Steven Rostedt
2008-11-12 22:52 ` [PATCH 1/3] ftrace: rename trace_entries to buffer_size Steven Rostedt
@ 2008-11-12 22:52 ` Steven Rostedt
2008-11-12 22:52 ` [PATCH 3/3] ftrace: CPU buffer start annotation clean ups Steven Rostedt
2008-11-13 8:50 ` [PATCH 0/3] ftrace updates for tip Ingo Molnar
3 siblings, 0 replies; 18+ messages in thread
From: Steven Rostedt @ 2008-11-12 22:52 UTC (permalink / raw)
To: linux-kernel
Cc: Ingo Molnar, Andrew Morton, Thomas Gleixner, Peter Zijlstra,
David Miller, Frederic Weisbecker, Arjan van de Ven,
Pekka Paalanen, Steven Rostedt
[-- Attachment #1: 0002-ftrace-rename-iter_ctrl-to-trace_options.patch --]
[-- Type: text/plain, Size: 4531 bytes --]
Impact: debugfs file iter_ctrl renamed to trace_options
The original ftrace had a file called "iter_ctrl" that would control
the way the output was iterated. But this file grew into a catch all
for different trace options. This patch renames the file from iter_ctrl
to trace_options to reflect this change.
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
---
Documentation/ftrace.txt | 14 +++++++-------
kernel/trace/trace.c | 18 +++++++++---------
2 files changed, 16 insertions(+), 16 deletions(-)
diff --git a/Documentation/ftrace.txt b/Documentation/ftrace.txt
index 58cba1f..01ac404 100644
--- a/Documentation/ftrace.txt
+++ b/Documentation/ftrace.txt
@@ -82,7 +82,7 @@ of ftrace. Here is a list of some of the key files:
tracer is not adding more data, they will display
the same information every time they are read.
- iter_ctrl: This file lets the user control the amount of data
+ trace_options: This file lets the user control the amount of data
that is displayed in one of the above output
files.
@@ -316,23 +316,23 @@ The above is mostly meaningful for kernel developers.
The rest is the same as the 'trace' file.
-iter_ctrl
----------
+trace_options
+-------------
-The iter_ctrl file is used to control what gets printed in the trace
+The trace_options file is used to control what gets printed in the trace
output. To see what is available, simply cat the file:
- cat /debug/tracing/iter_ctrl
+ cat /debug/tracing/trace_options
print-parent nosym-offset nosym-addr noverbose noraw nohex nobin \
noblock nostacktrace nosched-tree
To disable one of the options, echo in the option prepended with "no".
- echo noprint-parent > /debug/tracing/iter_ctrl
+ echo noprint-parent > /debug/tracing/trace_options
To enable an option, leave off the "no".
- echo sym-offset > /debug/tracing/iter_ctrl
+ echo sym-offset > /debug/tracing/trace_options
Here are the available options:
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index c681778..32cef26 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -204,7 +204,7 @@ static DEFINE_MUTEX(trace_types_lock);
/* trace_wait is a waitqueue for tasks blocked on trace_poll */
static DECLARE_WAIT_QUEUE_HEAD(trace_wait);
-/* trace_flags holds iter_ctrl options */
+/* trace_flags holds trace_options default values */
unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK;
/**
@@ -2411,7 +2411,7 @@ static struct file_operations tracing_cpumask_fops = {
};
static ssize_t
-tracing_iter_ctrl_read(struct file *filp, char __user *ubuf,
+tracing_trace_options_read(struct file *filp, char __user *ubuf,
size_t cnt, loff_t *ppos)
{
char *buf;
@@ -2448,7 +2448,7 @@ tracing_iter_ctrl_read(struct file *filp, char __user *ubuf,
}
static ssize_t
-tracing_iter_ctrl_write(struct file *filp, const char __user *ubuf,
+tracing_trace_options_write(struct file *filp, const char __user *ubuf,
size_t cnt, loff_t *ppos)
{
char buf[64];
@@ -2493,8 +2493,8 @@ tracing_iter_ctrl_write(struct file *filp, const char __user *ubuf,
static struct file_operations tracing_iter_fops = {
.open = tracing_open_generic,
- .read = tracing_iter_ctrl_read,
- .write = tracing_iter_ctrl_write,
+ .read = tracing_trace_options_read,
+ .write = tracing_trace_options_write,
};
static const char readme_msg[] =
@@ -2508,9 +2508,9 @@ static const char readme_msg[] =
"# echo sched_switch > /debug/tracing/current_tracer\n"
"# cat /debug/tracing/current_tracer\n"
"sched_switch\n"
- "# cat /debug/tracing/iter_ctrl\n"
+ "# cat /debug/tracing/trace_options\n"
"noprint-parent nosym-offset nosym-addr noverbose\n"
- "# echo print-parent > /debug/tracing/iter_ctrl\n"
+ "# echo print-parent > /debug/tracing/trace_options\n"
"# echo 1 > /debug/tracing/tracing_enabled\n"
"# cat /debug/tracing/trace > /tmp/trace.txt\n"
"echo 0 > /debug/tracing/tracing_enabled\n"
@@ -3145,10 +3145,10 @@ static __init int tracer_init_debugfs(void)
if (!entry)
pr_warning("Could not create debugfs 'tracing_enabled' entry\n");
- entry = debugfs_create_file("iter_ctrl", 0644, d_tracer,
+ entry = debugfs_create_file("trace_options", 0644, d_tracer,
NULL, &tracing_iter_fops);
if (!entry)
- pr_warning("Could not create debugfs 'iter_ctrl' entry\n");
+ pr_warning("Could not create debugfs 'trace_options' entry\n");
entry = debugfs_create_file("tracing_cpumask", 0644, d_tracer,
NULL, &tracing_cpumask_fops);
--
1.5.6.5
--
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 3/3] ftrace: CPU buffer start annotation clean ups
2008-11-12 22:52 [PATCH 0/3] ftrace updates for tip Steven Rostedt
2008-11-12 22:52 ` [PATCH 1/3] ftrace: rename trace_entries to buffer_size Steven Rostedt
2008-11-12 22:52 ` [PATCH 2/3] ftrace: rename iter_ctrl to trace_options Steven Rostedt
@ 2008-11-12 22:52 ` Steven Rostedt
2008-11-13 8:50 ` [PATCH 0/3] ftrace updates for tip Ingo Molnar
3 siblings, 0 replies; 18+ messages in thread
From: Steven Rostedt @ 2008-11-12 22:52 UTC (permalink / raw)
To: linux-kernel
Cc: Ingo Molnar, Andrew Morton, Thomas Gleixner, Peter Zijlstra,
David Miller, Frederic Weisbecker, Arjan van de Ven,
Pekka Paalanen, Steven Rostedt
[-- Attachment #1: 0003-ftrace-CPU-buffer-start-annotation-clean-ups.patch --]
[-- Type: text/plain, Size: 3152 bytes --]
Impact: better handling of CPU buffer start annotation
Because of the confusion with the per CPU buffers wrapping where
one CPU might be more active at the end of the trace than the other
CPUs causing that one CPU to have a shorter history. Kernel
developers were confused by the "missing" data of that one CPU
at the beginning of the trace output. An annotation was added to
the trace output to show that the buffer had started:
# tracer: function
#
# TASK-PID CPU# TIMESTAMP FUNCTION
# | | | | |
##### CPU 3 buffer started ####
<idle>-0 [003] 158.192959: smp_apic_timer_interrupt
[...]
<idle>-0 [003] 161.556520: default_idle
##### CPU 1 buffer started ####
<idle>-0 [001] 161.592494: hrtimer_force_reprogram
[etc]
But this annotation gets a bit messy when tracers do not fill the
buffers. This patch does a couple of things:
One) it adds a flag to trace_options to disable these annotations
Two) it does not annotate if the tracer did not overflow its buffer.
This makes the output much cleaner.
Signed-off-by: Steven Rostedt <srostedt@redhat.com>
---
kernel/trace/trace.c | 16 +++++++++++++++-
kernel/trace/trace.h | 1 +
2 files changed, 16 insertions(+), 1 deletions(-)
diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
index 32cef26..40c9cc1 100644
--- a/kernel/trace/trace.c
+++ b/kernel/trace/trace.c
@@ -205,7 +205,8 @@ static DEFINE_MUTEX(trace_types_lock);
static DECLARE_WAIT_QUEUE_HEAD(trace_wait);
/* trace_flags holds trace_options default values */
-unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK;
+unsigned long trace_flags = TRACE_ITER_PRINT_PARENT | TRACE_ITER_PRINTK |
+ TRACE_ITER_ANNOTATE;
/**
* trace_wake_up - wake up tasks waiting for trace input
@@ -261,6 +262,7 @@ static const char *trace_options[] = {
#ifdef CONFIG_BRANCH_TRACER
"branch",
#endif
+ "annotate",
NULL
};
@@ -1113,6 +1115,7 @@ void tracing_stop_function_trace(void)
enum trace_file_type {
TRACE_FILE_LAT_FMT = 1,
+ TRACE_FILE_ANNOTATE = 2,
};
static void trace_iterator_increment(struct trace_iterator *iter, int cpu)
@@ -1532,6 +1535,12 @@ static void test_cpu_buff_start(struct trace_iterator *iter)
{
struct trace_seq *s = &iter->seq;
+ if (!(trace_flags & TRACE_ITER_ANNOTATE))
+ return;
+
+ if (!(iter->iter_flags & TRACE_FILE_ANNOTATE))
+ return;
+
if (cpu_isset(iter->cpu, iter->started))
return;
@@ -2132,6 +2141,11 @@ __tracing_open(struct inode *inode, struct file *file, int *ret)
iter->trace = current_trace;
iter->pos = -1;
+ /* Annotate start of buffers if we had overruns */
+ if (ring_buffer_overruns(iter->tr->buffer))
+ iter->iter_flags |= TRACE_FILE_ANNOTATE;
+
+
for_each_tracing_cpu(cpu) {
iter->buffer_iter[cpu] =
diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
index 9e015f5..790ea8c 100644
--- a/kernel/trace/trace.h
+++ b/kernel/trace/trace.h
@@ -473,6 +473,7 @@ enum trace_iterator_flags {
#ifdef CONFIG_BRANCH_TRACER
TRACE_ITER_BRANCH = 0x1000,
#endif
+ TRACE_ITER_ANNOTATE = 0x2000,
};
/*
--
1.5.6.5
--
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 1/3] ftrace: rename trace_entries to buffer_size
2008-11-12 22:52 ` [PATCH 1/3] ftrace: rename trace_entries to buffer_size Steven Rostedt
@ 2008-11-12 23:14 ` Frédéric Weisbecker
0 siblings, 0 replies; 18+ messages in thread
From: Frédéric Weisbecker @ 2008-11-12 23:14 UTC (permalink / raw)
To: Steven Rostedt
Cc: linux-kernel, Ingo Molnar, Andrew Morton, Thomas Gleixner,
Peter Zijlstra, David Miller, Arjan van de Ven, Pekka Paalanen,
Steven Rostedt
2008/11/12 Steven Rostedt <rostedt@goodmis.org>:
> Impact: rename of debugfs file trace_entries to buffer_size
>
> The original ftrace had fixed size entries, and the number of entries
> was shown and modified via the file called trace_entries. By converting
> to the unified trace buffer, we now allow for variable size entries
> which makes the meaning of trace_entries pointless.
>
> Since trace_size might be confused to the size of the trace, this patch
> names it "buffer_size" (thanks to Arjan van de Ven for this idea).
>
> Signed-off-by: Steven Rostedt <srostedt@redhat.com>
> ---
> Documentation/ftrace.txt | 18 +++++++++---------
> kernel/trace/trace.c | 4 ++--
> 2 files changed, 11 insertions(+), 11 deletions(-)
>
> diff --git a/Documentation/ftrace.txt b/Documentation/ftrace.txt
> index 9cc4d68..58cba1f 100644
> --- a/Documentation/ftrace.txt
> +++ b/Documentation/ftrace.txt
> @@ -94,7 +94,7 @@ of ftrace. Here is a list of some of the key files:
> only be recorded if the latency is greater than
> the value in this file. (in microseconds)
>
> - trace_entries: This sets or displays the number of bytes each CPU
> + buffer_size: This sets or displays the number of bytes each CPU
> buffer can hold. The tracer buffers are the same size
> for each CPU. The displayed number is the size of the
> CPU buffer and not total size of all buffers. The
> @@ -1299,13 +1299,13 @@ trace entries
> -------------
>
> Having too much or not enough data can be troublesome in diagnosing
> -an issue in the kernel. The file trace_entries is used to modify
> +an issue in the kernel. The file buffer_size is used to modify
> the size of the internal trace buffers. The number listed
> is the number of entries that can be recorded per CPU. To know
> the full size, multiply the number of possible CPUS with the
> number of entries.
>
> - # cat /debug/tracing/trace_entries
> + # cat /debug/tracing/buffer_size
> 65620
>
> Note, to modify this, you must have tracing completely disabled. To do that,
> @@ -1313,8 +1313,8 @@ echo "nop" into the current_tracer. If the current_tracer is not set
> to "nop", an EINVAL error will be returned.
>
> # echo nop > /debug/tracing/current_tracer
> - # echo 100000 > /debug/tracing/trace_entries
> - # cat /debug/tracing/trace_entries
> + # echo 100000 > /debug/tracing/buffer_size
> + # cat /debug/tracing/buffer_size
> 100045
>
>
> @@ -1323,8 +1323,8 @@ 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/trace_entries
> - # cat /debug/tracing/trace_entries
> + # echo 1 > /debug/tracing/buffer_size
> + # cat /debug/tracing/buffer_size
> 85
>
> This shows us that 85 entries can fit in a single page.
> @@ -1332,8 +1332,8 @@ 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
> of available memory. Allocating too much will produce an error.
>
> - # echo 1000000000000 > /debug/tracing/trace_entries
> + # echo 1000000000000 > /debug/tracing/buffer_size
> -bash: echo: write error: Cannot allocate memory
> - # cat /debug/tracing/trace_entries
> + # cat /debug/tracing/buffer_size
> 85
>
> diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
> index 4bf070b..c681778 100644
> --- a/kernel/trace/trace.c
> +++ b/kernel/trace/trace.c
> @@ -3198,11 +3198,11 @@ static __init int tracer_init_debugfs(void)
> pr_warning("Could not create debugfs "
> "'trace_pipe' entry\n");
>
> - entry = debugfs_create_file("trace_entries", 0644, d_tracer,
> + entry = debugfs_create_file("buffer_size", 0644, d_tracer,
> &global_trace, &tracing_entries_fops);
> if (!entry)
> pr_warning("Could not create debugfs "
> - "'trace_entries' entry\n");
> + "'buffer_size' entry\n");
>
> entry = debugfs_create_file("trace_marker", 0220, d_tracer,
> NULL, &tracing_mark_fops);
> --
> 1.5.6.5
>
> --
>
Yes this name is much more obvious.
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 0/3] ftrace updates for tip
2008-11-12 22:52 [PATCH 0/3] ftrace updates for tip Steven Rostedt
` (2 preceding siblings ...)
2008-11-12 22:52 ` [PATCH 3/3] ftrace: CPU buffer start annotation clean ups Steven Rostedt
@ 2008-11-13 8:50 ` Ingo Molnar
3 siblings, 0 replies; 18+ messages in thread
From: Ingo Molnar @ 2008-11-13 8:50 UTC (permalink / raw)
To: Steven Rostedt
Cc: linux-kernel, Andrew Morton, Thomas Gleixner, Peter Zijlstra,
David Miller, Frederic Weisbecker, Arjan van de Ven,
Pekka Paalanen
* Steven Rostedt <rostedt@goodmis.org> wrote:
> [
> I added a bit more people to the Cc so that they are aware
> of the pending renames that are coming.
>
> Namely, trace_entries will be renamed to buffer_size
> iter_ctrl will be renamed to trace_options
> ]
>
> Ingo,
>
> The following patches are in:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
>
> branch: tip/devel
>
>
> Steven Rostedt (3):
> ftrace: rename trace_entries to buffer_size
> ftrace: rename iter_ctrl to trace_options
> ftrace: CPU buffer start annotation clean ups
i've applied them to tip/tracing/ftrace, with some small changes:
12ef7d4: ftrace: CPU buffer start annotation clean ups
ee6bce5: ftrace: rename iter_ctrl to trace_options
1696b2b: ftrace: show buffer size in kilobytes
a94c80e: ftrace: rename trace_entries to buffer_size_kb
as per Arjan's suggestion i changed buffer_size to buffer_size_kb -
and also removed the kilobytes string from its output.
thanks Steve!
Ingo
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 0/3] ftrace: updates for tip
2009-02-05 6:13 Steven Rostedt
@ 2009-02-05 13:37 ` Ingo Molnar
0 siblings, 0 replies; 18+ messages in thread
From: Ingo Molnar @ 2009-02-05 13:37 UTC (permalink / raw)
To: Steven Rostedt
Cc: linux-kernel, Andrew Morton, Arnaldo Carvalho de Melo,
Frederic Weisbecker
* Steven Rostedt <rostedt@goodmis.org> wrote:
> Ingo,
>
> Arnaldo was nice enough to do something that was on my todo list
> for quite some time.
>
> I also included the change you asked for.
>
> The following patches are in:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
>
> branch: tip/devel
>
>
> Arnaldo Carvalho de Melo (2):
> trace_branch: Remove unused function
> trace: Remove unused trace_array_cpu parameter
>
> Steven Rostedt (1):
> trace: code style clean up
>
> ----
> block/blktrace.c | 2 +-
> kernel/trace/trace.c | 76 ++++++++++++++++---------------------
> kernel/trace/trace.h | 4 --
> kernel/trace/trace_branch.c | 17 --------
> kernel/trace/trace_functions.c | 8 ++--
> kernel/trace/trace_irqsoff.c | 10 ++--
> kernel/trace/trace_sched_switch.c | 4 +-
> kernel/trace/trace_sched_wakeup.c | 12 ++---
> 8 files changed, 50 insertions(+), 83 deletions(-)
Applied to tip:tracing/ftrace, thanks guys!
Ingo
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 0/3] ftrace: updates for tip
@ 2009-02-05 6:13 Steven Rostedt
2009-02-05 13:37 ` Ingo Molnar
0 siblings, 1 reply; 18+ messages in thread
From: Steven Rostedt @ 2009-02-05 6:13 UTC (permalink / raw)
To: linux-kernel
Cc: Ingo Molnar, Andrew Morton, Arnaldo Carvalho de Melo,
Frederic Weisbecker
Ingo,
Arnaldo was nice enough to do something that was on my todo list
for quite some time.
I also included the change you asked for.
The following patches are in:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
branch: tip/devel
Arnaldo Carvalho de Melo (2):
trace_branch: Remove unused function
trace: Remove unused trace_array_cpu parameter
Steven Rostedt (1):
trace: code style clean up
----
block/blktrace.c | 2 +-
kernel/trace/trace.c | 76 ++++++++++++++++---------------------
kernel/trace/trace.h | 4 --
kernel/trace/trace_branch.c | 17 --------
kernel/trace/trace_functions.c | 8 ++--
kernel/trace/trace_irqsoff.c | 10 ++--
kernel/trace/trace_sched_switch.c | 4 +-
kernel/trace/trace_sched_wakeup.c | 12 ++---
8 files changed, 50 insertions(+), 83 deletions(-)
--
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 0/3] ftrace: updates for tip
@ 2009-02-03 2:38 Steven Rostedt
0 siblings, 0 replies; 18+ messages in thread
From: Steven Rostedt @ 2009-02-03 2:38 UTC (permalink / raw)
To: linux-kernel
Cc: Ingo Molnar, Andrew Morton, Peter Zijlstra, Frederic Weisbecker,
Arjan van de Ven
Ingo,
The first patch here is to disable the branch tracer on ALPHA.
There has been several reports that the branch tracer breaks the
compile on ALPHA. Alpha uses ifs extern inlines, and the injecting
of static elements breaks the build.
The next patch fixes the selecting of a tracer for bootup.
Now you can select the default tracer from the kernel command line.
i.e.
ftrace=function
Will start the function tracer as soon as it is registered.
Now that we have the kernel command line tracer selection working
we can use it for he boot "initcall" tracer. Instead of having the
initcall tracer disable selftests, it now needs to be selected
in the kernel command line as the default tracer to be implemented.
This means we can keep both selftest and boot initcall tracer configured
at the same time.
ftrace=initcall
Will now enable the boot initcall tracer. No need to recompile.
-- Steve
The following patches are in:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
branch: tip/devel
Steven Rostedt (3):
trace: disable branch tracer on alpha
trace: fix default boot up tracer
trace: let boot trace be chosen by command line
----
kernel/trace/Kconfig | 9 +++---
kernel/trace/trace.c | 65 ++++++++++++++++++++++++++++++++++++++-------
kernel/trace/trace_boot.c | 11 +++++---
3 files changed, 67 insertions(+), 18 deletions(-)
--
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 0/3] ftrace: updates for tip
2008-12-24 4:24 Steven Rostedt
2008-12-24 23:13 ` Frederic Weisbecker
2008-12-24 23:24 ` Frederic Weisbecker
@ 2008-12-29 11:46 ` Ingo Molnar
2 siblings, 0 replies; 18+ messages in thread
From: Ingo Molnar @ 2008-12-29 11:46 UTC (permalink / raw)
To: Steven Rostedt
Cc: linux-kernel, Andrew Morton, Frederic Weisbecker, Pekka Paalanen
* Steven Rostedt <rostedt@goodmis.org> wrote:
> This series restructures the output functions of trace.c.
>
> Events are now registered and maintaining an event output is
> simplified by keeping the output close together.
>
> The following patches are in:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
>
> branch: tip/devel
>
>
> Steven Rostedt (3):
> ftrace: remove obsolete print continue functionality
> ftrace: set up trace event hash infrastructure
> ftrace: change trace.c to use registered events
pulled, thanks Steve!
Ingo
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 0/3] ftrace: updates for tip
2008-12-24 4:24 Steven Rostedt
2008-12-24 23:13 ` Frederic Weisbecker
@ 2008-12-24 23:24 ` Frederic Weisbecker
2008-12-29 11:46 ` Ingo Molnar
2 siblings, 0 replies; 18+ messages in thread
From: Frederic Weisbecker @ 2008-12-24 23:24 UTC (permalink / raw)
To: Steven Rostedt; +Cc: linux-kernel, Ingo Molnar, Andrew Morton, Pekka Paalanen
Steven Rostedt wrote:
> This series restructures the output functions of trace.c.
>
> Events are now registered and maintaining an event output is
> simplified by keeping the output close together.
>
> The following patches are in:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
>
> branch: tip/devel
BTW it seems to be more likely on devel than tip/devel ...
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 0/3] ftrace: updates for tip
2008-12-24 4:24 Steven Rostedt
@ 2008-12-24 23:13 ` Frederic Weisbecker
2008-12-24 23:24 ` Frederic Weisbecker
2008-12-29 11:46 ` Ingo Molnar
2 siblings, 0 replies; 18+ messages in thread
From: Frederic Weisbecker @ 2008-12-24 23:13 UTC (permalink / raw)
To: Steven Rostedt; +Cc: linux-kernel, Ingo Molnar, Andrew Morton, Pekka Paalanen
Steven Rostedt wrote:
> This series restructures the output functions of trace.c.
>
> Events are now registered and maintaining an event output is
> simplified by keeping the output close together.
>
> The following patches are in:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
>
> branch: tip/devel
>
>
> Steven Rostedt (3):
> ftrace: remove obsolete print continue functionality
> ftrace: set up trace event hash infrastructure
> ftrace: change trace.c to use registered events
>
Which does mean that a tracer will now be able to build as a module?
That's all good news!
I'm testing a bit these patches...
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 0/3] ftrace: updates for tip
@ 2008-12-24 4:24 Steven Rostedt
2008-12-24 23:13 ` Frederic Weisbecker
` (2 more replies)
0 siblings, 3 replies; 18+ messages in thread
From: Steven Rostedt @ 2008-12-24 4:24 UTC (permalink / raw)
To: linux-kernel
Cc: Ingo Molnar, Andrew Morton, Frederic Weisbecker, Pekka Paalanen
This series restructures the output functions of trace.c.
Events are now registered and maintaining an event output is
simplified by keeping the output close together.
The following patches are in:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
branch: tip/devel
Steven Rostedt (3):
ftrace: remove obsolete print continue functionality
ftrace: set up trace event hash infrastructure
ftrace: change trace.c to use registered events
----
kernel/trace/Makefile | 1 +
kernel/trace/trace.c | 738 ++----------------------------
kernel/trace/trace.h | 15 +-
kernel/trace/trace_boot.c | 1 +
kernel/trace/trace_branch.c | 53 +++
kernel/trace/trace_functions_graph.c | 4 +-
kernel/trace/trace_hw_branches.c | 1 +
kernel/trace/trace_mmiotrace.c | 4 +-
kernel/trace/trace_output.c | 832 ++++++++++++++++++++++++++++++++++
kernel/trace/trace_output.h | 59 +++
kernel/trace/trace_power.c | 1 +
11 files changed, 990 insertions(+), 719 deletions(-)
--
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 0/3] ftrace: updates for tip
2008-12-04 8:35 ` Ingo Molnar
@ 2008-12-04 13:30 ` Steven Rostedt
0 siblings, 0 replies; 18+ messages in thread
From: Steven Rostedt @ 2008-12-04 13:30 UTC (permalink / raw)
To: Ingo Molnar
Cc: linux-kernel, Andrew Morton, Frederic Weisbecker, Peter Zijlstra,
Arjan van de Ven, Dave Hansen, containers, Eric Biederman,
Sukadev Bhattiprolu, Serge E. Hallyn
On Thu, 4 Dec 2008, Ingo Molnar wrote:
>
> * Steven Rostedt <rostedt@goodmis.org> wrote:
>
> > Ingo,
> >
> > This series has three patches.
> >
> > The first patch adds a new feature that I've been wanting to have for
> > some time and Arjan even requested. That is to pick a function and only
> > trace that function and its children. Dynamic ftrace and function graph
> > needs to be enabled for this.
> >
> > To do the above, I added a "trace" flags field in the task structure.
> > The second patch uses this for the ftrace pid code. It searches for the
> > task based on the pid and sets the trace flag, then in the ftrace
> > function caller it only needs to check this flag.
>
> Btw., i'd love to see this done via the regular regexp interface though,
> if possible - instead of the add-on interface you added.
So would I. Unfortunately the regex is tightly coupled to turning on or
off the function. This needs all functions enabled because we do not
know which functions the flagged one will call.
I could reuse the regex code if I add a call back to handle what to do on
a match. This is a bit more work, and will take some time to do.
If someone else has the time to do it, I would offer suggestions and
review the code. Right now I do not have the time myself.
>
> ( Also perhaps enable to toggle tracing via the /proc/<PID>/ hierarchy -
> a /proc/<PID>/tracing_enabled switch or so. )
>
> Regarding the filter functions, the basic principle should be
> mathematical set operations, like we have it now: add and remove, union,
> wildcards, etc.
>
> I'd suggest a natural and intuitive extension of the current syntax.
> (while keeping all the current bits)
>
> I already suggested a 'inverse' filter in a previous mail:
>
> echo "-schedule*" >> set_ftrace_filter
Ah, I did not see the '>>' that might be easier to do. I think you first
suggested this with a "!sched*" > set_ftrace_filter where the '>' would
truncate. But doing it with append '>>', might work.
>
> This rule operates on the current set of filter functions: it strikes out
> all existing filter functions that match this pattern.
>
> To handle PIDs, we could do something like:
>
> echo "sshd-312:schedule" > set_ftrace_filter
>
> This would restrict tracing to the sshd-pid:312 task.
>
> Note: the PID portion of the filter rules still stay separate from the
> function names - we dont want per task function filter rules.
Yep, agreed, A function is traced if the following conditions are true:
- function tracing is enabled
- the function is set to trace (not in set_ftrace_notrace)
- the pid filter is on and the current task has its trace bit set
or the pid filter is off.
- the function filter is on and the function is in the trace array
or the function filter is off
>
> A natural variation would be:
>
> echo "312:schedule" > set_ftrace_filter
>
> to only specify the PID, or:
>
> echo "312,313:schedule" > set_ftrace_filter
>
> to specify two PIDs, or:
>
> echo "sshd:schedule" > set_ftrace_filter
>
> to only specify the 'comm' part, which expands to all PIDs where
> task->comm matches sshd. Another variation would be:
>
> echo "loop*:schedule" > set_ftrace_filter
>
> that matches all PIDs where task->comm matches loop*.
>
> To specify recursive tracing, we could use something like:
>
> echo "loop*+schedule" > set_ftrace_filter
>
> the '+' would signal that the 'schedule' function is 'expanded' and all
> its child functions are traced as well.
>
> btw., maybe it makes sense to separate the regexp rule-set from the set
> of functions that we are tracing right now. For example:
>
> $ echo "schedule*" > set_ftrace_filter
> $ echo "time*" >> set_ftrace_filter
> $ echo "sys_*" >> set_ftrace_filter
>
> $ cat set_ftrace_filter
> schedule*
> time*
> sys_*
>
> We'd also have a separate, current_ftrace_functions file as well which
> shows all traced functions. (on a global basis - with possible PID filter
> rules added where applicable)
>
> I know this will be hellishly hard to implement, but it would be _very_
> elegant, and _very_ usable.
>
> What do you think?
Hmm, that is starting to get quite complex, just to use. This is something
we need to experiment with to find the best solution. I'd like to know use
cases first. Currently I have a simple program that forks, traces itself
and execs code to trace. It is exectued like:
./trace-func ls -ltr
to trace "ls -lrt", this code would become a little more complex with the
above methods. But I'm not set in stone in any of these options. I just
do not want to spend the days coding this to find out no one uses any of
it but what is already there.
-- Steve
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 0/3] ftrace: updates for tip
2008-12-03 20:36 Steven Rostedt
2008-12-04 8:19 ` Ingo Molnar
@ 2008-12-04 8:35 ` Ingo Molnar
2008-12-04 13:30 ` Steven Rostedt
1 sibling, 1 reply; 18+ messages in thread
From: Ingo Molnar @ 2008-12-04 8:35 UTC (permalink / raw)
To: Steven Rostedt
Cc: linux-kernel, Andrew Morton, Frederic Weisbecker, Peter Zijlstra,
Arjan van de Ven, Dave Hansen, containers, Eric Biederman,
Sukadev Bhattiprolu, Serge E. Hallyn
* Steven Rostedt <rostedt@goodmis.org> wrote:
> Ingo,
>
> This series has three patches.
>
> The first patch adds a new feature that I've been wanting to have for
> some time and Arjan even requested. That is to pick a function and only
> trace that function and its children. Dynamic ftrace and function graph
> needs to be enabled for this.
>
> To do the above, I added a "trace" flags field in the task structure.
> The second patch uses this for the ftrace pid code. It searches for the
> task based on the pid and sets the trace flag, then in the ftrace
> function caller it only needs to check this flag.
Btw., i'd love to see this done via the regular regexp interface though,
if possible - instead of the add-on interface you added.
( Also perhaps enable to toggle tracing via the /proc/<PID>/ hierarchy -
a /proc/<PID>/tracing_enabled switch or so. )
Regarding the filter functions, the basic principle should be
mathematical set operations, like we have it now: add and remove, union,
wildcards, etc.
I'd suggest a natural and intuitive extension of the current syntax.
(while keeping all the current bits)
I already suggested a 'inverse' filter in a previous mail:
echo "-schedule*" >> set_ftrace_filter
This rule operates on the current set of filter functions: it strikes out
all existing filter functions that match this pattern.
To handle PIDs, we could do something like:
echo "sshd-312:schedule" > set_ftrace_filter
This would restrict tracing to the sshd-pid:312 task.
Note: the PID portion of the filter rules still stay separate from the
function names - we dont want per task function filter rules.
A natural variation would be:
echo "312:schedule" > set_ftrace_filter
to only specify the PID, or:
echo "312,313:schedule" > set_ftrace_filter
to specify two PIDs, or:
echo "sshd:schedule" > set_ftrace_filter
to only specify the 'comm' part, which expands to all PIDs where
task->comm matches sshd. Another variation would be:
echo "loop*:schedule" > set_ftrace_filter
that matches all PIDs where task->comm matches loop*.
To specify recursive tracing, we could use something like:
echo "loop*+schedule" > set_ftrace_filter
the '+' would signal that the 'schedule' function is 'expanded' and all
its child functions are traced as well.
btw., maybe it makes sense to separate the regexp rule-set from the set
of functions that we are tracing right now. For example:
$ echo "schedule*" > set_ftrace_filter
$ echo "time*" >> set_ftrace_filter
$ echo "sys_*" >> set_ftrace_filter
$ cat set_ftrace_filter
schedule*
time*
sys_*
We'd also have a separate, current_ftrace_functions file as well which
shows all traced functions. (on a global basis - with possible PID filter
rules added where applicable)
I know this will be hellishly hard to implement, but it would be _very_
elegant, and _very_ usable.
What do you think?
Ingo
^ permalink raw reply [flat|nested] 18+ messages in thread
* Re: [PATCH 0/3] ftrace: updates for tip
2008-12-03 20:36 Steven Rostedt
@ 2008-12-04 8:19 ` Ingo Molnar
2008-12-04 8:35 ` Ingo Molnar
1 sibling, 0 replies; 18+ messages in thread
From: Ingo Molnar @ 2008-12-04 8:19 UTC (permalink / raw)
To: Steven Rostedt
Cc: linux-kernel, Andrew Morton, Frederic Weisbecker, Peter Zijlstra,
Arjan van de Ven, Dave Hansen, containers, Eric Biederman,
Sukadev Bhattiprolu, Serge E. Hallyn
* Steven Rostedt <rostedt@goodmis.org> wrote:
> Ingo,
>
> This series has three patches.
>
> The first patch adds a new feature that I've been wanting to have for some
> time and Arjan even requested. That is to pick a function and only
> trace that function and its children. Dynamic ftrace and function
> graph needs to be enabled for this.
>
> To do the above, I added a "trace" flags field in the task structure.
> The second patch uses this for the ftrace pid code. It searches for
> the task based on the pid and sets the trace flag, then in the
> ftrace function caller it only needs to check this flag.
>
> This means we can now trace more than one pid without any more overhead.
> It also means that we should be able to use the name space code that
> the container guys want us to. But since I'm not very up on the
> namespace code, I'm still using just the normal 'pid'. I've Cc'd the
> container folks so perhaps they could write up a patch for me ;-)
>
> Note: When writing to the set_ftrace_pid two things happen.
> - The task with the matching pid gets the trace flag set.
> - Any other task has its trace flag cleared.
> #2 needs to be addressed when converting to pid name spaces.
> Just because it is not enough to simply find the matching task.
> It may be good enough to just clear all tasks and then find the
> one that matches.
>
> The last patch makes the function graph tracer honor the set_ftrace_pid.
>
> The following patches are in:
>
> git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
>
> branch: tip/devel
>
>
> Steven Rostedt (3):
> ftrace: graph of a single function
> ftrace: use task struct trace flag to filter on pid
> ftrace: trace single pid for function graph tracer
>
> ----
> include/linux/ftrace.h | 46 +++++++++
> include/linux/sched.h | 4 +
> kernel/trace/ftrace.c | 257 +++++++++++++++++++++++++++++++++++++++++++++++-
> kernel/trace/trace.c | 11 ++
> kernel/trace/trace.h | 40 +++++++-
> 5 files changed, 353 insertions(+), 5 deletions(-)
> --
pulled, thanks Steve!
These are some very nice changes!
Ingo
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 0/3] ftrace: updates for tip
@ 2008-12-03 20:36 Steven Rostedt
2008-12-04 8:19 ` Ingo Molnar
2008-12-04 8:35 ` Ingo Molnar
0 siblings, 2 replies; 18+ messages in thread
From: Steven Rostedt @ 2008-12-03 20:36 UTC (permalink / raw)
To: linux-kernel
Cc: Ingo Molnar, Andrew Morton, Frederic Weisbecker, Peter Zijlstra,
Arjan van de Ven, Dave Hansen, containers, Eric Biederman,
Sukadev Bhattiprolu, Serge E. Hallyn
Ingo,
This series has three patches.
The first patch adds a new feature that I've been wanting to have for some
time and Arjan even requested. That is to pick a function and only
trace that function and its children. Dynamic ftrace and function
graph needs to be enabled for this.
To do the above, I added a "trace" flags field in the task structure.
The second patch uses this for the ftrace pid code. It searches for
the task based on the pid and sets the trace flag, then in the
ftrace function caller it only needs to check this flag.
This means we can now trace more than one pid without any more overhead.
It also means that we should be able to use the name space code that
the container guys want us to. But since I'm not very up on the
namespace code, I'm still using just the normal 'pid'. I've Cc'd the
container folks so perhaps they could write up a patch for me ;-)
Note: When writing to the set_ftrace_pid two things happen.
- The task with the matching pid gets the trace flag set.
- Any other task has its trace flag cleared.
#2 needs to be addressed when converting to pid name spaces.
Just because it is not enough to simply find the matching task.
It may be good enough to just clear all tasks and then find the
one that matches.
The last patch makes the function graph tracer honor the set_ftrace_pid.
The following patches are in:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
branch: tip/devel
Steven Rostedt (3):
ftrace: graph of a single function
ftrace: use task struct trace flag to filter on pid
ftrace: trace single pid for function graph tracer
----
include/linux/ftrace.h | 46 +++++++++
include/linux/sched.h | 4 +
kernel/trace/ftrace.c | 257 +++++++++++++++++++++++++++++++++++++++++++++++-
kernel/trace/trace.c | 11 ++
kernel/trace/trace.h | 40 +++++++-
5 files changed, 353 insertions(+), 5 deletions(-)
--
^ permalink raw reply [flat|nested] 18+ messages in thread
* [PATCH 0/3] ftrace: updates for tip
@ 2008-11-15 0:45 Steven Rostedt
0 siblings, 0 replies; 18+ messages in thread
From: Steven Rostedt @ 2008-11-15 0:45 UTC (permalink / raw)
To: linux-kernel
Cc: Ingo Molnar, Andrew Morton, Frederic Weisbecker, Peter Zijlstra
Ingo,
The following patches are in:
git://git.kernel.org/pub/scm/linux/kernel/git/rostedt/linux-2.6-trace.git
branch: tip/devel
Steven Rostedt (3):
ftrace: remove condition from ftrace_record_ip
ftrace: disable ftrace on anomalies in trace start and stop
ftrace: do not process freed records
----
kernel/trace/ftrace.c | 91 +++++++++++++++++++++++++++---------------------
1 files changed, 51 insertions(+), 40 deletions(-)
^ permalink raw reply [flat|nested] 18+ messages in thread
end of thread, other threads:[~2009-02-05 13:37 UTC | newest]
Thread overview: 18+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2008-11-12 22:52 [PATCH 0/3] ftrace updates for tip Steven Rostedt
2008-11-12 22:52 ` [PATCH 1/3] ftrace: rename trace_entries to buffer_size Steven Rostedt
2008-11-12 23:14 ` Frédéric Weisbecker
2008-11-12 22:52 ` [PATCH 2/3] ftrace: rename iter_ctrl to trace_options Steven Rostedt
2008-11-12 22:52 ` [PATCH 3/3] ftrace: CPU buffer start annotation clean ups Steven Rostedt
2008-11-13 8:50 ` [PATCH 0/3] ftrace updates for tip Ingo Molnar
2008-11-15 0:45 [PATCH 0/3] ftrace: " Steven Rostedt
2008-12-03 20:36 Steven Rostedt
2008-12-04 8:19 ` Ingo Molnar
2008-12-04 8:35 ` Ingo Molnar
2008-12-04 13:30 ` Steven Rostedt
2008-12-24 4:24 Steven Rostedt
2008-12-24 23:13 ` Frederic Weisbecker
2008-12-24 23:24 ` Frederic Weisbecker
2008-12-29 11:46 ` Ingo Molnar
2009-02-03 2:38 Steven Rostedt
2009-02-05 6:13 Steven Rostedt
2009-02-05 13:37 ` Ingo Molnar
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®