Message ID | 7c776914f3316cf6b5c21ec01b1e4eae497bb510.1635535309.git.bristot@kernel.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | RTLA: An interface for osnoise/timerlat tracers | expand |
On Fri, 29 Oct 2021 21:26:04 +0200 Daniel Bristot de Oliveira <bristot@kernel.org> wrote: > 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. > > Cc: Steven Rostedt <rostedt@goodmis.org> > 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> > --- > tools/tracing/rtla/Makefile | 76 +++++++++++++++++++++++++++++++++++ > tools/tracing/rtla/src/rtla.c | 72 +++++++++++++++++++++++++++++++++ > 2 files changed, 148 insertions(+) > create mode 100644 tools/tracing/rtla/Makefile > create mode 100644 tools/tracing/rtla/src/rtla.c > > diff --git a/tools/tracing/rtla/Makefile b/tools/tracing/rtla/Makefile > new file mode 100644 > index 000000000000..33f154f86519 > --- /dev/null > +++ b/tools/tracing/rtla/Makefile > @@ -0,0 +1,76 @@ > +NAME := rtla > +VERSION := 0.3 > + > +# 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 := -ltracefs -ltraceevent -lprocps For the -ltracefs and -ltracevent, you could use: $$($PKG_CONFIG) --libs libtracefs) which would be more robust. -- Steve > + > +SRC := $(wildcard src/*.c) > +HDR := $(wildcard src/*.h) > +OBJ := $(SRC:.c=.o) > +DIRS := src > +FILES := Makefile > +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 > +
On 11/24/21 22:28, Steven Rostedt wrote: > On Fri, 29 Oct 2021 21:26:04 +0200 > Daniel Bristot de Oliveira <bristot@kernel.org> wrote: > >> 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. >> >> Cc: Steven Rostedt <rostedt@goodmis.org> >> 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> >> --- >> tools/tracing/rtla/Makefile | 76 +++++++++++++++++++++++++++++++++++ >> tools/tracing/rtla/src/rtla.c | 72 +++++++++++++++++++++++++++++++++ >> 2 files changed, 148 insertions(+) >> create mode 100644 tools/tracing/rtla/Makefile >> create mode 100644 tools/tracing/rtla/src/rtla.c >> >> diff --git a/tools/tracing/rtla/Makefile b/tools/tracing/rtla/Makefile >> new file mode 100644 >> index 000000000000..33f154f86519 >> --- /dev/null >> +++ b/tools/tracing/rtla/Makefile >> @@ -0,0 +1,76 @@ >> +NAME := rtla >> +VERSION := 0.3 >> + >> +# 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 := -ltracefs -ltraceevent -lprocps > > For the -ltracefs and -ltracevent, you could use: > > $$($PKG_CONFIG) --libs libtracefs) > > which would be more robust. Will use! -- Daniel > -- Steve >
diff --git a/tools/tracing/rtla/Makefile b/tools/tracing/rtla/Makefile new file mode 100644 index 000000000000..33f154f86519 --- /dev/null +++ b/tools/tracing/rtla/Makefile @@ -0,0 +1,76 @@ +NAME := rtla +VERSION := 0.3 + +# 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 := -ltracefs -ltraceevent -lprocps + +SRC := $(wildcard src/*.c) +HDR := $(wildcard src/*.h) +OBJ := $(SRC:.c=.o) +DIRS := src +FILES := Makefile +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) diff --git a/tools/tracing/rtla/src/rtla.c b/tools/tracing/rtla/src/rtla.c new file mode 100644 index 000000000000..5ae2664ed47d --- /dev/null +++ b/tools/tracing/rtla/src/rtla.c @@ -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); +}
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. Cc: Steven Rostedt <rostedt@goodmis.org> 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> --- tools/tracing/rtla/Makefile | 76 +++++++++++++++++++++++++++++++++++ tools/tracing/rtla/src/rtla.c | 72 +++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 tools/tracing/rtla/Makefile create mode 100644 tools/tracing/rtla/src/rtla.c