[lttng-dev] [lttng-ust PATCH v4] Add -ust to the name of UST threads of the application

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Sun Jun 5 23:04:45 UTC 2016


merged with small modifications, 

Thanks! 

Mathieu 

----- On Jun 5, 2016, at 6:56 PM, Raphaël Beamonte <raphael.beamonte at gmail.com> wrote: 

> On Jun 5, 2016 6:46 PM, "Mathieu Desnoyers" < mathieu.desnoyers at efficios.com >
> wrote:

>> ----- On Jun 5, 2016, at 6:00 PM, Raphaël Beamonte raphael.beamonte at gmail.com
> > wrote:

> > > Add the required functions to change the thread name of the UST
> > > threads and add the -ust string at its end. This will help to
> > > identify LTTng-UST processes when analyzing the trace of a process.

> > > Signed-off-by: Raphaël Beamonte < raphael.beamonte at gmail.com >
> > > ---
> > > configure.ac | 5 ++++
> > > liblttng-ust/Makefile.am | 1 +
> > > liblttng-ust/compat.h | 67 ++++++++++++++++++++++++++++++++++++++++++-
> > > liblttng-ust/lttng-ust-comm.c | 9 ++++++
> > > 4 files changed, 81 insertions(+), 1 deletion(-)

> > > diff --git a/ configure.ac b/ configure.ac
> > > index 5692553..de462ff 100644
> > > --- a/ configure.ac
> > > +++ b/ configure.ac
> > > @@ -135,6 +135,11 @@ AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBDL], [test
> > > "x$have_libdl" = "xyes"])
> > > AM_CONDITIONAL([LTTNG_UST_BUILD_WITH_LIBC_DL], [test "x$have_libc_dl" = "xyes"])

> > > AC_CHECK_LIB([pthread], [pthread_create])
> > > +AC_CHECK_LIB([pthread], [pthread_setname_np],
> > > + AC_DEFINE([HAVE_PTHREAD_SETNAME_NP], [1], [Define to 1 if pthread_setname_np
> > > is available.]),
> > > + AC_CHECK_LIB([pthread], [pthread_set_name_np],
> > > + AC_DEFINE([HAVE_PTHREAD_SET_NAME_NP], [1], [Define to 1 if
> > > pthread_set_name_np is available.]),
> > > + AC_MSG_RESULT([pthread setname/set_name not found.])))

> > > # Check for dlfcn.h
> > > AC_CHECK_HEADER([dlfcn.h])
> > > diff --git a/liblttng-ust/Makefile.am b/liblttng-ust/Makefile.am
> > > index f1801cf..05929be 100644
> > > --- a/liblttng-ust/Makefile.am
> > > +++ b/liblttng-ust/Makefile.am
> > > @@ -14,6 +14,7 @@ liblttng_ust_tracepoint_la_SOURCES = \
> > > error.h
> > > liblttng_ust_tracepoint_la_LIBADD = \
> > > -lurcu-bp \
> > > + -lpthread \
> > > $(top_builddir)/snprintf/ libustsnprintf.la
> > > liblttng_ust_tracepoint_la_LDFLAGS = -no-undefined -version-info
> > > $(LTTNG_UST_LIBRARY_VERSION)
> > > liblttng_ust_tracepoint_la_CFLAGS = -DUST_COMPONENT="liblttng_ust_tracepoint"
> > > -fno-strict-aliasing
> > > diff --git a/liblttng-ust/compat.h b/liblttng-ust/compat.h
> > > index 43b2223..fff668b 100644
> > > --- a/liblttng-ust/compat.h
> > > +++ b/liblttng-ust/compat.h
> > > @@ -3,6 +3,7 @@

> > > /*
> > > * Copyright (C) 2011 Mathieu Desnoyers < mathieu.desnoyers at efficios.com >
> > > + * Copyright (C) 2016 Raphaël Beamonte < raphael.beamonte at gmail.com >
> > > *
> > > * This library is free software; you can redistribute it and/or
> > > * modify it under the terms of the GNU Lesser General Public
> > > @@ -23,7 +24,6 @@
> > > * lttng_ust_getprocname.
> > > */
> > > #ifdef __linux__
> > > -

> > Why remove this newline ?

> Mistake that comes from the first version of the patch (I was including pthread
> there). I must have replicated the spacing of the FreeBSD elif when updating
> the patch and didn't see that mistake!


> > > #include <sys/prctl.h>

> > > #define LTTNG_UST_PROCNAME_LEN 17
> > > @@ -34,6 +34,17 @@ void lttng_ust_getprocname(char *name)
> > > (void) prctl(PR_GET_NAME, (unsigned long) name, 0, 0, 0);
> > > }

> > > +/*
> > > + * if pthread_setname_np is available.

> > Comments should be complete sentences, starting with a capital letter,
> > ending with a dot.

> > I'll fix those on my end.

> Ok, thanks!
> I'll remember that for next time!

> Raphaël


> > Thanks,

> > Mathieu

> > > + */
> > > +#ifdef HAVE_PTHREAD_SETNAME_NP
> > > +static inline
> > > +int lttng_pthread_setname_np(pthread_t thread, const char *name)
> > > +{
> > > + return pthread_setname_np(thread, name);
> > > +}
> > > +#endif
> > > +
> > > #elif defined(__FreeBSD__)
> > > #include <stdlib.h>
> > > #include <string.h>
> > > @@ -59,6 +70,60 @@ void lttng_ust_getprocname(char *name)
> > > strncpy(name, bsd_name, LTTNG_UST_PROCNAME_LEN - 1);
> > > }

> > > +/*
> > > + * if pthread_set_name_np is available.
> > > + */
> > > +#ifdef HAVE_PTHREAD_SET_NAME_NP
> > > +static inline
> > > +int lttng_pthread_setname_np(pthread_t thread, const char *name)
> > > +{
> > > + return pthread_set_name_np(thread, name);
> > > +}
> > > +#endif
> > > +
> > > +#endif
> > > +
> > > +/*
> > > + * If a pthread setname/set_name function is available, declare
> > > + * the setustprocname() function that will add '-ust' to the end
> > > + * of the current process name, while truncating it if needed.
> > > + */
> > > +#if defined(HAVE_PTHREAD_SETNAME_NP) || defined(HAVE_PTHREAD_SETNAME_NP)
> > > +#define LTTNG_UST_PROCNAME_SUFFIX "-ust"
> > > +
> > > +#include <pthread.h>
> > > +
> > > +static inline
> > > +int lttng_ust_setustprocname(void)
> > > +{
> > > + int ret = 0;
> > > + char name[LTTNG_UST_PROCNAME_LEN];
> > > + int limit = LTTNG_UST_PROCNAME_LEN - strlen(LTTNG_UST_PROCNAME_SUFFIX);
> > > + int len;
> > > +
> > > + lttng_ust_getprocname(name);
> > > +
> > > + len = strlen(name);
> > > + if (len > limit) {
> > > + len = limit;
> > > + }
> > > +
> > > + ret = sprintf(name + len, LTTNG_UST_PROCNAME_SUFFIX);
> > > + if (ret) {
> > > + goto error;
> > > + }
> > > +
> > > + ret = lttng_pthread_setname_np(pthread_self(), name);
> > > +
> > > +error:
> > > + return ret;
> > > +}
> > > +#else
> > > +static inline
> > > +int lttng_ust_setustprocname(void)
> > > +{
> > > + return 0;
> > > +}
> > > #endif

> > > #include <errno.h>
> > > diff --git a/liblttng-ust/lttng-ust-comm.c b/liblttng-ust/lttng-ust-comm.c
> > > index e00a22c..6105403 100644
> > > --- a/liblttng-ust/lttng-ust-comm.c
> > > +++ b/liblttng-ust/lttng-ust-comm.c
> > > @@ -1295,6 +1295,15 @@ void *ust_listener_thread(void *arg)
> > > int sock, ret, prev_connect_failed = 0, has_waited = 0;
> > > long timeout;

> > > + /*
> > > + * If available, add '-ust' to the end of this thread's
> > > + * process name
> > > + */
> > > + ret = lttng_ust_setustprocname();
> > > + if (ret) {
> > > + ERR("Unable to set UST process name");
> > > + }
> > > +
> > > /* Restart trying to connect to the session daemon */
> > > restart:
> > > if (prev_connect_failed) {
> > > --
> > > 2.8.1

> > --
> > Mathieu Desnoyers
> > EfficiOS Inc.
> > http://www.efficios.com

-- 
Mathieu Desnoyers 
EfficiOS Inc. 
http://www.efficios.com 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.lttng.org/pipermail/lttng-dev/attachments/20160605/8ac3587d/attachment.html>


More information about the lttng-dev mailing list