package/linux-tools: add rtla

The RealTime Linux Analysis tool includes a set of commands that relies
on the osnoise and timerlat tracers from the ftrace kernel subsystem,
allowing to analyze the lantency sources coming from the hardware and
the kernel itself.

This tool was introduced in v5.17 but until v5.19 it relied on libprocps
that has been deprecated soon. So let's make it available for v5.19+.
Rtla relies on libtracefs and libtraceevent, although libtraceevent itself
is already a dependency for libtracefs.

Signed-off-by: Maxime Chevallier <maxime.chevallier@bootlin.com>
[Giulio: fix install on recent Linux versions]
Signed-off-by: Giulio Benetti <giulio.benetti@benettiengineering.com>
[Andreas: deal with Linux Fixups, musl, SSP]
Signed-off-by: Andreas Ziegler <br015@umbiko.net>
[yann.morin.1998@free.fr: reword and extend help text]
Signed-off-by: Yann E. MORIN <yann.morin.1998@free.fr>
This commit is contained in:
Maxime Chevallier 2023-10-24 16:42:55 +02:00 committed by Yann E. MORIN
parent b1dbd3f679
commit 24f73b85f8
3 changed files with 75 additions and 0 deletions

View File

@ -1237,6 +1237,7 @@ F: package/libnss/
F: package/libnvme/ F: package/libnvme/
F: package/libtraceevent/ F: package/libtraceevent/
F: package/libtracefs F: package/libtracefs
F: package/linux-tools/linux-tool-rtla.mk.in
F: package/mali-driver/ F: package/mali-driver/
F: package/minicom/ F: package/minicom/
F: package/mongoose/ F: package/mongoose/
@ -2136,6 +2137,7 @@ F: package/timescaledb/
N: Maxime Chevallier <maxime.chevallier@bootlin.com> N: Maxime Chevallier <maxime.chevallier@bootlin.com>
F: package/libtraceevent/ F: package/libtraceevent/
F: package/libtracefs F: package/libtracefs
F: package/linux-tools/linux-tool-rtla.mk.in
N: Michael Durrant <mdurrant@arcturusnetworks.com> N: Michael Durrant <mdurrant@arcturusnetworks.com>
F: board/arcturus/ F: board/arcturus/

View File

@ -102,6 +102,27 @@ config BR2_PACKAGE_LINUX_TOOLS_PERF_NEEDS_HOST_PYTHON3
endif endif
config BR2_PACKAGE_LINUX_TOOLS_RTLA
bool "rtla"
select BR2_PACKAGE_LINUX_TOOLS
select BR2_PACKAGE_LIBTRACEFS
help
These tracers allow performing latency analysis, for which the
rtla tool provides wrapper commands to visualize and extract
latency traces and reports.
rtla includes three tracers, which have been introduced in
different kernel versions:
- Linux 5.19 introduced the osnoise and timerlat tracers,
- Linux 6.3 introduced the hwnoise tracer
osnoise and timerlat are always installed, while hwnoise is
installed if your kernel is recent enough.
Note: rtla in kernels before 5.19 had additional dependencies,
not available in Buildroot, so only rtla in kernels 5.19
onwards is actually supported in Buildroot.
config BR2_PACKAGE_LINUX_TOOLS_SELFTESTS config BR2_PACKAGE_LINUX_TOOLS_SELFTESTS
bool"selftests" bool"selftests"
depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # bash depends on BR2_PACKAGE_BUSYBOX_SHOW_OTHERS # bash

View File

@ -0,0 +1,52 @@
################################################################################
#
# rtla
#
################################################################################
LINUX_TOOLS += rtla
RTLA_DEPENDENCIES = host-pkgconf libtracefs
RTLA_MAKE_OPTS = $(LINUX_MAKE_FLAGS) \
CC=$(TARGET_CC) \
EXTRA_CFLAGS="-D_GNU_SOURCE" \
LDFLAGS="$(TARGET_LDFLAGS)" \
PKG_CONFIG_PATH=$(STAGING_DIR)/usr/lib/pkgconfig
ifeq ($(BR2_TOOLCHAIN_HAS_SSP),)
define RTLA_DISABLE_STACK_PROTECTOR
$(SED) 's/-fstack-protector.* //' $(LINUX_DIR)/tools/tracing/rtla/Makefile
endef
endif
define RTLA_LINUX_CONFIG_FIXUPS
$(call KCONFIG_ENABLE_OPT,CONFIG_FTRACE)
$(call KCONFIG_ENABLE_OPT,CONFIG_TIMERLAT_TRACER)
$(call KCONFIG_ENABLE_OPT,CONFIG_HIST_TRIGGERS)
endef
define RTLA_BUILD_CMDS
$(Q)if ! grep install $(LINUX_DIR)/tools/tracing/rtla/Makefile >/dev/null 2>&1 ; then \
echo "Your kernel version is too old and does not implement the rtla tool." ; \
echo "At least kernel 5.19 must be used." ; \
exit 1 ; \
fi
$(RTLA_DISABLE_STACK_PROTECTOR)
$(TARGET_MAKE_ENV) $(MAKE) $(RTLA_MAKE_OPTS) \
-C $(LINUX_DIR)/tools/tracing rtla
endef
# make rtla_install build and install by default documentation using rst2man
# but it's not available in Buildroot and we don't want manual files in target
# folder so let's simply install the resulting rtla binary and create symlinks
# like Linux does in its tools/tracing/rtla/Makefile
define RTLA_INSTALL_TARGET_CMDS
$(INSTALL) -m 0755 -D $(LINUX_DIR)/tools/tracing/rtla/rtla $(TARGET_DIR)/usr/bin
ln -sf rtla $(TARGET_DIR)/usr/bin/osnoise
ln -sf rtla $(TARGET_DIR)/usr/bin/timerlat
# Check if hwnoise is provided or not
if grep -q hwnoise $(LINUX_DIR)/tools/tracing/rtla/Makefile; then \
ln -sf rtla $(TARGET_DIR)/usr/bin/hwnoise ; \
fi
endef