-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
The rtla is a meta-tool that includes a set of commands that aims to analyze the real-time properties of Linux. But instead of testing Linux as a black box, rtla leverages kernel tracing capabilities to provide precise information about the properties and root causes of unexpected results. rtla --help works and provide information about the available options. This is just the "main" and the Makefile, no function yet. Link: https://lkml.kernel.org/r/bf9118ed43a09e6c054c9a491cbe7411ad1acd89.1639158831.git.bristot@kernel.org Cc: Tao Zhou <tao.zhou@linux.dev> Cc: Ingo Molnar <mingo@redhat.com> Cc: Tom Zanussi <zanussi@kernel.org> Cc: Masami Hiramatsu <mhiramat@kernel.org> Cc: Juri Lelli <juri.lelli@redhat.com> Cc: Clark Williams <williams@redhat.com> Cc: John Kacur <jkacur@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Sebastian Andrzej Siewior <bigeasy@linutronix.de> Cc: Daniel Bristot de Oliveira <bristot@kernel.org> Cc: linux-rt-users@vger.kernel.org Cc: linux-trace-devel@vger.kernel.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Daniel Bristot de Oliveira <bristot@kernel.org> Signed-off-by: Steven Rostedt <rostedt@goodmis.org>
- Loading branch information
Daniel Bristot de Oliveira
authored and
Steven Rostedt
committed
Jan 13, 2022
1 parent
0878355
commit 79ce8f4
Showing
3 changed files
with
184 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,76 @@ | ||
NAME := rtla | ||
VERSION := 0.5 | ||
|
||
# From libtracefs: | ||
# Makefiles suck: This macro sets a default value of $(2) for the | ||
# variable named by $(1), unless the variable has been set by | ||
# environment or command line. This is necessary for CC and AR | ||
# because make sets default values, so the simpler ?= approach | ||
# won't work as expected. | ||
define allow-override | ||
$(if $(or $(findstring environment,$(origin $(1))),\ | ||
$(findstring command line,$(origin $(1)))),,\ | ||
$(eval $(1) = $(2))) | ||
endef | ||
|
||
# Allow setting CC and AR, or setting CROSS_COMPILE as a prefix. | ||
$(call allow-override,CC,$(CROSS_COMPILE)gcc) | ||
$(call allow-override,AR,$(CROSS_COMPILE)ar) | ||
$(call allow-override,STRIP,$(CROSS_COMPILE)strip) | ||
$(call allow-override,PKG_CONFIG,pkg-config) | ||
$(call allow-override,LD_SO_CONF_PATH,/etc/ld.so.conf.d/) | ||
$(call allow-override,LDCONFIG,ldconfig) | ||
|
||
INSTALL = install | ||
FOPTS := -flto=auto -ffat-lto-objects -fexceptions -fstack-protector-strong \ | ||
-fasynchronous-unwind-tables -fstack-clash-protection | ||
WOPTS := -Wall -Werror=format-security -Wp,-D_FORTIFY_SOURCE=2 -Wp,-D_GLIBCXX_ASSERTIONS -Wno-maybe-uninitialized | ||
|
||
TRACEFS_HEADERS := $$($(PKG_CONFIG) --cflags libtracefs) | ||
|
||
CFLAGS := -O -g -DVERSION=\"$(VERSION)\" $(FOPTS) $(MOPTS) $(WOPTS) $(TRACEFS_HEADERS) | ||
LDFLAGS := -ggdb | ||
LIBS := $$($(PKG_CONFIG) --libs libtracefs) -lprocps | ||
|
||
SRC := $(wildcard src/*.c) | ||
HDR := $(wildcard src/*.h) | ||
OBJ := $(SRC:.c=.o) | ||
DIRS := src | ||
FILES := Makefile README.txt | ||
CEXT := bz2 | ||
TARBALL := $(NAME)-$(VERSION).tar.$(CEXT) | ||
TAROPTS := -cvjf $(TARBALL) | ||
BINDIR := /usr/bin | ||
DATADIR := /usr/share | ||
DOCDIR := $(DATADIR)/doc | ||
MANDIR := $(DATADIR)/man | ||
LICDIR := $(DATADIR)/licenses | ||
|
||
.PHONY: all | ||
all: rtla | ||
|
||
rtla: $(OBJ) | ||
$(CC) -o rtla $(LDFLAGS) $(OBJ) $(LIBS) | ||
|
||
static: $(OBJ) | ||
$(CC) -o rtla-static $(LDFLAGS) --static $(OBJ) $(LIBS) -lpthread -ldl | ||
|
||
.PHONY: install | ||
install: | ||
$(INSTALL) -d -m 755 $(DESTDIR)$(BINDIR) | ||
$(INSTALL) rtla -m 755 $(DESTDIR)$(BINDIR) | ||
$(STRIP) $(DESTDIR)$(BINDIR)/rtla | ||
|
||
.PHONY: clean tarball | ||
clean: | ||
@test ! -f rtla || rm rtla | ||
@test ! -f rtla-static || rm rtla-static | ||
@test ! -f src/rtla.o || rm src/rtla.o | ||
@test ! -f $(TARBALL) || rm -f $(TARBALL) | ||
@rm -rf *~ $(OBJ) *.tar.$(CEXT) | ||
|
||
tarball: clean | ||
rm -rf $(NAME)-$(VERSION) && mkdir $(NAME)-$(VERSION) | ||
cp -r $(DIRS) $(FILES) $(NAME)-$(VERSION) | ||
tar $(TAROPTS) --exclude='*~' $(NAME)-$(VERSION) | ||
rm -rf $(NAME)-$(VERSION) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,36 @@ | ||
RTLA: Real-Time Linux Analysis tools | ||
|
||
The rtla is a meta-tool that includes a set of commands that | ||
aims to analyze the real-time properties of Linux. But, instead of | ||
testing Linux as a black box, rtla leverages kernel tracing | ||
capabilities to provide precise information about the properties | ||
and root causes of unexpected results. | ||
|
||
Installing RTLA | ||
|
||
RTLA depends on some libraries and tools. More precisely, it depends on the | ||
following libraries: | ||
|
||
- libtracefs | ||
- libtraceevent | ||
- procps | ||
|
||
It also depends on python3-docutils to compile man pages. | ||
|
||
For development, we suggest the following steps for compiling rtla: | ||
|
||
$ git clone git://git.kernel.org/pub/scm/libs/libtrace/libtraceevent.git | ||
$ cd libtraceevent/ | ||
$ make | ||
$ sudo make install | ||
$ cd .. | ||
$ git clone git://git.kernel.org/pub/scm/libs/libtrace/libtracefs.git | ||
$ cd libtracefs/ | ||
$ make | ||
$ sudo make install | ||
$ cd .. | ||
$ cd $rtla_src | ||
$ make | ||
$ sudo make install | ||
|
||
For further information, please refer to the rtla man page. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
// SPDX-License-Identifier: GPL-2.0 | ||
/* | ||
* Copyright (C) 2021 Red Hat Inc, Daniel Bristot de Oliveira <bristot@kernel.org> | ||
*/ | ||
|
||
#include <getopt.h> | ||
#include <stdlib.h> | ||
#include <string.h> | ||
#include <stdio.h> | ||
|
||
/* | ||
* rtla_usage - print rtla usage | ||
*/ | ||
static void rtla_usage(void) | ||
{ | ||
int i; | ||
|
||
static const char *msg[] = { | ||
"", | ||
"rtla version " VERSION, | ||
"", | ||
" usage: rtla COMMAND ...", | ||
"", | ||
" commands:", | ||
"", | ||
NULL, | ||
}; | ||
|
||
for (i = 0; msg[i]; i++) | ||
fprintf(stderr, "%s\n", msg[i]); | ||
exit(1); | ||
} | ||
|
||
/* | ||
* run_command - try to run a rtla tool command | ||
* | ||
* It returns 0 if it fails. The tool's main will generally not | ||
* return as they should call exit(). | ||
*/ | ||
int run_command(int argc, char **argv, int start_position) | ||
{ | ||
return 0; | ||
} | ||
|
||
int main(int argc, char *argv[]) | ||
{ | ||
int retval; | ||
|
||
/* is it an alias? */ | ||
retval = run_command(argc, argv, 0); | ||
if (retval) | ||
exit(0); | ||
|
||
if (argc < 2) | ||
goto usage; | ||
|
||
if (strcmp(argv[1], "-h") == 0) { | ||
rtla_usage(); | ||
exit(0); | ||
} else if (strcmp(argv[1], "--help") == 0) { | ||
rtla_usage(); | ||
exit(0); | ||
} | ||
|
||
retval = run_command(argc, argv, 1); | ||
if (retval) | ||
exit(0); | ||
|
||
usage: | ||
rtla_usage(); | ||
exit(1); | ||
} |