menu "LITMUS^RT"
menu "Tracing"
config FEATHER_TRACE
bool "Feather-Trace Infrastructure"
depends on !RELOCATABLE
default y
help
Feather-Trace basic tracing infrastructure. Includes device file
driver and instrumentation point support.
There are actually two implementations of Feather-Trace.
1) A slower, but portable, default implementation.
2) Architecture-specific implementations that rewrite kernel .text at runtime.
If enabled, Feather-Trace will be based on 2) if available (currently only for x86).
However, if DEBUG_RODATA=y, then Feather-Trace will choose option 1) in any case
to avoid problems with write-protected .text pages.
Bottom line: to avoid increased overheads, choose DEBUG_RODATA=n.
Note that this option only enables the basic Feather-Trace infrastructure;
you still need to enable SCHED_TASK_TRACE and/or SCHED_OVERHEAD_TRACE to
actually enable any events.
config SCHED_TASK_TRACE
bool "Trace real-time tasks"
depends on FEATHER_TRACE
default y
help
Include support for the sched_trace_XXX() tracing functions. This
allows the collection of real-time task events such as job
completions, job releases, early completions, etc. This results in a
small overhead in the scheduling code. Disable if the overhead is not
acceptable (e.g., benchmarking).
Say Yes for debugging.
Say No for overhead tracing.
config SCHED_TASK_TRACE_SHIFT
int "Buffer size for sched_trace_xxx() events"
depends on SCHED_TASK_TRACE
range 8 13
default 9
help
Select the buffer size of sched_trace_xxx() events as a power of two.
These buffers are statically allocated as per-CPU data. Each event
requires 24 bytes storage plus one additional flag byte. Too large
buffers can cause issues with the per-cpu allocator (and waste
memory). Too small buffers can cause scheduling events to be lost. The
"right" size is workload dependent and depends on the number of tasks,
each task's period, each task's number of suspensions, and how often
the buffer is flushed.
Examples: 12 => 4k events
10 => 1k events
8 => 512 events
config SCHED_LITMUS_TRACEPOINT
bool "Enable Event/Tracepoint Tracing for real-time task tracing"
depends on TRACEPOINTS
default n
help
Enable kernel-style events (tracepoint) for Litmus. Litmus events
trace the same functions as the above sched_trace_XXX(), but can
be enabled independently.
Litmus tracepoints can be recorded and analyzed together (single
time reference) with all other kernel tracing events (e.g.,
sched:sched_switch, etc.).
This also enables a quick way to visualize schedule traces using
trace-cmd utility and kernelshark visualizer.
Say Yes for debugging and visualization purposes.
Say No for overhead tracing.
config SCHED_OVERHEAD_TRACE
bool "Record timestamps for overhead measurements"
depends on FEATHER_TRACE
default y
help
Export event stream for overhead tracing.
Say Yes for overhead tracing.
config SCHED_OVERHEAD_TRACE_SHIFT
int "Buffer size for Feather-Trace overhead data"
depends on SCHED_OVERHEAD_TRACE
range 15 32
default 22
help
Select the buffer size for the Feather-Trace overhead tracing
infrastructure (/dev/litmus/ft_trace0 & ftcat) as a power of two. The
larger the buffer, the less likely the chance of buffer overflows if
the ftcat process is starved by real-time activity. In machines with
large memories, large buffer sizes are recommended.
Examples: 16 => 2 MB
24 => 512 MB
26 => 2G MB
config SCHED_DEBUG_TRACE
bool "TRACE() debugging"
default n
help
Include support for sched_trace_log_messageg(), which is used to
implement TRACE(). If disabled, no TRACE() messages will be included
in the kernel, and no overheads due to debugging statements will be
incurred by the scheduler. Disable if the overhead is not acceptable
(e.g. benchmarking).
Say Yes for debugging.
Say No for overhead tracing.
config SCHED_DEBUG_TRACE_SHIFT
int "Buffer size for TRACE() buffer"
depends on SCHED_DEBUG_TRACE
range 14 22
default 18
help
Select the amount of memory needed per for the TRACE() buffer, as a
power of two. The TRACE() buffer is global and statically allocated. If
the buffer is too small, there will be holes in the TRACE() log if the
buffer-flushing task is starved.
The default should be sufficient for most systems. Increase the buffer
size if the log contains holes. Reduce the buffer size when running on
a memory-constrained system.
Examples: 14 => 16KB
18 => 256KB
20 => 1MB
This buffer is exported to usespace using a misc device as
'litmus/log'. On a system with default udev rules, a corresponding
character device node should be created at /dev/litmus/log. The buffer
can be flushed using cat, e.g., 'cat /dev/litmus/log > my_log_file.txt'.
config SCHED_DEBUG_TRACE_CALLER
bool "Include [function@file:line] tag in TRACE() log"
depends on SCHED_DEBUG_TRACE
default n
help
With this option enabled, TRACE() prepends
"[<function name>@<filename>:<line number>]"
to each message in the debug log. Enable this to aid in figuring out
what was called in which order. The downside is that it adds a lot of
clutter.
If unsure, say No.
endmenu
endmenu