Change adds CPU stats module for tracing hooks. Module provides information about percent of CPU usage based on tracing hooks for threads switching in and out, interrupts enters and exits. cpu_stats only distinguishes between idle thread, non idle thread and scheduler. Signed-off-by: Marek Pieta <Marek.Pieta@nordicsemi.no>
259 lines
8.4 KiB
Plaintext
259 lines
8.4 KiB
Plaintext
# Kconfig - debug configuration options
|
|
|
|
#
|
|
# Copyright (c) 2015 Wind River Systems, Inc.
|
|
#
|
|
# SPDX-License-Identifier: Apache-2.0
|
|
#
|
|
|
|
menu "System Monitoring Options"
|
|
|
|
config PERFORMANCE_METRICS
|
|
bool "Enable performance metrics [EXPERIMENTAL]"
|
|
help
|
|
Enable Performance Metrics.
|
|
|
|
config BOOT_TIME_MEASUREMENT
|
|
bool "Boot time measurements [EXPERIMENTAL]"
|
|
depends on PERFORMANCE_METRICS
|
|
help
|
|
This option enables the recording of timestamps during system start
|
|
up. The global variable __start_time_stamp records the time kernel begins
|
|
executing, while __main_time_stamp records when main() begins executing,
|
|
and __idle_time_stamp records when the CPU becomes idle. All values are
|
|
recorded in terms of CPU clock cycles since system reset.
|
|
|
|
config CPU_CLOCK_FREQ_MHZ
|
|
int "CPU Clock Frequency in MHz"
|
|
default 20
|
|
depends on BOOT_TIME_MEASUREMENT
|
|
help
|
|
This option specifies the CPU Clock Frequency in MHz in order to
|
|
convert Intel RDTSC timestamp to microseconds.
|
|
|
|
config STATS
|
|
bool "Statistics support"
|
|
help
|
|
Enable per-module event counters for troubleshooting, maintenance,
|
|
and usage monitoring. Statistics can be retrieved with the mcumgr
|
|
management subsystem.
|
|
|
|
config STATS_NAMES
|
|
bool "Statistic names"
|
|
depends on STATS
|
|
help
|
|
Include a full name string for each statistic in the build. If this
|
|
setting is disabled, statistics are assigned generic names of the
|
|
form "s0", "s1", etc. Enabling this setting simplifies debugging,
|
|
but results in a larger code size.
|
|
endmenu
|
|
|
|
menu "Debugging Options"
|
|
|
|
config DEBUG
|
|
bool "Build kernel with debugging enabled"
|
|
help
|
|
Build a kernel suitable for debugging. Right now, this option
|
|
only disables optimization, more debugging variants can be selected
|
|
from here to allow more debugging.
|
|
|
|
config TRACING
|
|
bool "Enabling Tracing"
|
|
help
|
|
Enable system tracing. This requires a backend such as SEGGER
|
|
Systemview to be enabled as well.
|
|
config ASAN
|
|
bool "Build with address sanitizer"
|
|
depends on ARCH_POSIX
|
|
help
|
|
Builds Zephyr with Address Sanitizer enabled. This is currently
|
|
only supported by the native_posix port, and requires a recent-ish
|
|
compiler with the `-fsanitize=address` command line option, and
|
|
the libasan library.
|
|
|
|
config STACK_USAGE
|
|
bool "Generate stack usage information"
|
|
help
|
|
Generate an extra file that specifies the maximum amount of stack used,
|
|
on a per-function basis.
|
|
|
|
config STACK_SENTINEL
|
|
bool "Enable stack sentinel"
|
|
select THREAD_STACK_INFO
|
|
depends on !USERSPACE
|
|
help
|
|
Store a magic value at the lowest addresses of a thread's stack.
|
|
Periodically check that this value is still present and kill the
|
|
thread gracefully if it isn't. This is currently checked in four
|
|
places:
|
|
|
|
1) Upon any context switch for the outgoing thread
|
|
2) Any hardware interrupt that doesn't context switch, the check is
|
|
performed for the interrupted thread
|
|
3) When a thread returns from its entry point
|
|
4) When a thread calls k_yield() but doesn't context switch
|
|
|
|
This feature doesn't prevent corruption and the system may be
|
|
in an unusable state. However, given the bizarre behavior associated
|
|
with stack overflows, knowledge that this is happening is very
|
|
useful.
|
|
|
|
This feature is intended for those systems which lack hardware support
|
|
for stack overflow protection, or have insufficient system resources
|
|
to use that hardware support.
|
|
|
|
config PRINTK
|
|
bool "Send printk() to console"
|
|
default y
|
|
help
|
|
This option directs printk() debugging output to the supported
|
|
console device, rather than suppressing the generation
|
|
of printk() output entirely. Output is sent immediately, without
|
|
any mutual exclusion or buffering.
|
|
|
|
config PRINTK_BUFFER_SIZE
|
|
int "printk() buffer size"
|
|
depends on PRINTK
|
|
depends on USERSPACE
|
|
default 32
|
|
help
|
|
If userspace is enabled, printk() calls are buffered so that we do
|
|
not have to make a system call for every character emitted. Specify
|
|
the size of this buffer.
|
|
|
|
config EARLY_CONSOLE
|
|
bool "Send stdout at the earliest stage possible"
|
|
help
|
|
This option will enable stdout as early as possible, for debugging
|
|
purpose. For instance, in case of STDOUT_CONSOLE being set it will
|
|
initialize its driver earlier than normal, in order to get the stdout
|
|
sent through the console at the earliest stage possible.
|
|
|
|
config ASSERT
|
|
bool "Enable __ASSERT() macro"
|
|
default y if TEST
|
|
help
|
|
This enables the __ASSERT() macro in the kernel code. If an assertion
|
|
fails, the calling thread is put on an infinite tight loop. Since
|
|
enabling this adds a significant footprint, it should only be enabled
|
|
in a non-production system.
|
|
|
|
config ASSERT_LEVEL
|
|
int "__ASSERT() level"
|
|
default 2
|
|
range 0 2
|
|
depends on ASSERT
|
|
help
|
|
This option specifies the assertion level used by the __ASSERT()
|
|
macro. It can be set to one of three possible values:
|
|
|
|
Level 0: off
|
|
Level 1: on + warning in every file that includes __assert.h
|
|
Level 2: on + no warning
|
|
|
|
config FORCE_NO_ASSERT
|
|
bool "Force-disable no assertions"
|
|
help
|
|
This boolean option disables Zephyr assertion testing even
|
|
in circumstances (sanitycheck) where it is enabled via
|
|
CFLAGS and not Kconfig. Added solely to be able to work
|
|
around compiler bugs for specific tests.
|
|
|
|
config OBJECT_TRACING
|
|
bool "Kernel object tracing"
|
|
help
|
|
This option enable the feature for tracing kernel objects. This option
|
|
is for debug purposes and increases the memory footprint of the kernel.
|
|
|
|
config OVERRIDE_FRAME_POINTER_DEFAULT
|
|
bool "Override compiler defaults for -fomit-frame-pointer"
|
|
help
|
|
Omitting the frame pointer prevents the compiler from putting the stack
|
|
frame pointer into a register. Saves a few instructions in function
|
|
prologues/epilogues and frees up a register for general-purpose use,
|
|
which can provide good performance improvements on register-constrained
|
|
architectures like x86. On some architectures (including x86) omitting
|
|
frame pointers impedes debugging as local variables are harder to
|
|
locate. At -O1 and above gcc will enable -fomit-frame-pointer
|
|
automatically but only if the architecture does not require if for
|
|
effective debugging.
|
|
|
|
Choose Y if you want to override the default frame pointer behavior
|
|
of your compiler, otherwise choose N.
|
|
|
|
config OMIT_FRAME_POINTER
|
|
bool "Omit frame pointer"
|
|
depends on OVERRIDE_FRAME_POINTER_DEFAULT
|
|
help
|
|
Choose Y for best performance. On some architectures (including x86)
|
|
this will favor code size and performance over debugability.
|
|
|
|
Choose N in you wish to retain the frame pointer. This option may
|
|
be useful if your application uses runtime backtracing and does not
|
|
support parsing unwind tables.
|
|
|
|
If unsure, disable OVERRIDE_FRAME_POINTER_DEFAULT to allow the compiler
|
|
to adopt sensible defaults for your architecture.
|
|
|
|
|
|
#
|
|
# Generic Debugging Options
|
|
#
|
|
config DEBUG_INFO
|
|
bool "Enable system debugging information"
|
|
help
|
|
This option enables the addition of various information that can be
|
|
used by debuggers in debugging the system, or enable additional
|
|
debugging information to be reported at runtime.
|
|
|
|
config EXCEPTION_STACK_TRACE
|
|
bool "Attempt to print stack traces upon exceptions"
|
|
default y
|
|
depends on PRINTK
|
|
depends on DEBUG_INFO
|
|
depends on !OMIT_FRAME_POINTER
|
|
help
|
|
If the architecture fatal handling code supports it, attempt to
|
|
print a stack trace of function memory addresses when an
|
|
exception is reported.
|
|
|
|
#
|
|
# Miscellaneous debugging options
|
|
#
|
|
|
|
config OPENOCD_SUPPORT
|
|
bool "OpenOCD support [EXPERIMENTAL]"
|
|
select THREAD_MONITOR
|
|
select THREAD_NAME
|
|
help
|
|
This option exports an array of offsets to kernel structs, used by
|
|
OpenOCD to determine the state of running threads. (This option
|
|
selects CONFIG_THREAD_MONITOR, so all of its caveats are implied.)
|
|
|
|
config TRACING_CPU_STATS
|
|
bool "Enable CPU usage tracing"
|
|
select THREAD_MONITOR
|
|
select THREAD_STACK_INFO
|
|
select TRACING
|
|
help
|
|
Module provides information about percent of CPU usage based on
|
|
tracing hooks for threads switching in and out, interrupts enters
|
|
and exits (only distinguishes between idle thread, non idle thread
|
|
and scheduler). Use provided API or enable automatical logging to
|
|
get values.
|
|
|
|
config TRACING_CPU_STATS_LOG
|
|
bool "Enable current CPU usage logging"
|
|
depends on TRACING_CPU_STATS
|
|
help
|
|
Periodically displays information about CPU usage.
|
|
|
|
config TRACING_CPU_STATS_INTERVAL
|
|
int "Logging interval for CPU measurements [ms]"
|
|
default 2000
|
|
depends on TRACING_CPU_STATS_LOG
|
|
help
|
|
Time period of displaying information about CPU usage.
|
|
|
|
endmenu
|