[lttng-dev] [PATCH lttng-ust 1/2] Add ust_baddr_statedump start and end events

Mathieu Desnoyers mathieu.desnoyers at efficios.com
Wed May 20 12:33:34 EDT 2015


----- Original Message -----
> These events mark the beginning and end of base addresses state dump,
> which happens once per traced application.

.. once per traced application per session.


> Note that there is no
> guarantee concerning the relative order of multiple start/end events
> in the case of overlapping statedumps.  That is to say. if there are

That is to say, if ...

> two start events, and two end events, the first end event does not
> necessarily correspond to the first start event, and similarly with
> the second events.

For a given (process, session), the pairs of statedump begin/end
should match. The fact that only a single thread is issuing them
ensures that we serialize them over a single (process, session)
tuple.

It's the statedump begin/end across different processes (vpid)
that may be interleaved.

Thanks,

Mathieu

> 
> Signed-off-by: Antoine Busque <abusque at efficios.com>
> ---
>  liblttng-ust/lttng-ust-baddr.c     | 50
>  ++++++++++++++++++++++++++++++++++++++
>  liblttng-ust/ust_baddr_statedump.h | 10 ++++++++
>  2 files changed, 60 insertions(+)
> 
> diff --git a/liblttng-ust/lttng-ust-baddr.c b/liblttng-ust/lttng-ust-baddr.c
> index 922899b..5ec3d40 100644
> --- a/liblttng-ust/lttng-ust-baddr.c
> +++ b/liblttng-ust/lttng-ust-baddr.c
> @@ -89,6 +89,54 @@ int trace_baddr(void *base_addr_ptr,
>  }
>  
>  static
> +int trace_statedump_start(void *owner)
> +{
> +	struct cds_list_head *sessionsp;
> +	struct lttng_session *session;
> +
> +	if (ust_lock()) {
> +		ust_unlock();
> +		return 1;
> +	}
> +
> +	sessionsp = _lttng_get_sessions();
> +	cds_list_for_each_entry(session, sessionsp, node) {
> +		if (session->owner != owner)
> +			continue;
> +		if (!session->statedump_pending)
> +			continue;
> +		tracepoint(ust_baddr_statedump, start,
> +				session);
> +	}
> +	ust_unlock();
> +	return 0;
> +}
> +
> +static
> +int trace_statedump_end(void *owner)
> +{
> +	struct cds_list_head *sessionsp;
> +	struct lttng_session *session;
> +
> +	if (ust_lock()) {
> +		ust_unlock();
> +		return 1;
> +	}
> +
> +	sessionsp = _lttng_get_sessions();
> +	cds_list_for_each_entry(session, sessionsp, node) {
> +		if (session->owner != owner)
> +			continue;
> +		if (!session->statedump_pending)
> +			continue;
> +		tracepoint(ust_baddr_statedump, end,
> +				session);
> +	}
> +	ust_unlock();
> +	return 0;
> +}
> +
> +static
>  int extract_soinfo_events(struct dl_phdr_info *info, size_t size, void
>  *_data)
>  {
>  	int j;
> @@ -179,6 +227,7 @@ int lttng_ust_baddr_statedump(void *owner)
>  	if (getenv("LTTNG_UST_WITHOUT_BADDR_STATEDUMP"))
>  		return 0;
>  
> +	trace_statedump_start(owner);
>  	data.owner = owner;
>  	data.exec_baddr = NULL;
>  	/*
> @@ -194,6 +243,7 @@ int lttng_ust_baddr_statedump(void *owner)
>  	 * iteration.
>  	 */
>  	dump_exec_baddr(&data);
> +	trace_statedump_end(owner);
>  	return 0;
>  }
>  
> diff --git a/liblttng-ust/ust_baddr_statedump.h
> b/liblttng-ust/ust_baddr_statedump.h
> index 77a9af4..99fb849 100644
> --- a/liblttng-ust/ust_baddr_statedump.h
> +++ b/liblttng-ust/ust_baddr_statedump.h
> @@ -37,6 +37,11 @@ extern "C" {
>  #define LTTNG_UST_BADDR_STATEDUMP_PROVIDER
>  #include <lttng/tracepoint.h>
>  
> +TRACEPOINT_EVENT(ust_baddr_statedump, start,
> +	TP_ARGS(struct lttng_session *, session),
> +	TP_FIELDS()
> +)
> +
>  TRACEPOINT_EVENT(ust_baddr_statedump, soinfo,
>  	TP_ARGS(struct lttng_session *, session, void *, baddr, const char*,
>  	sopath, int64_t, size, int64_t, mtime),
>  	TP_FIELDS(
> @@ -47,6 +52,11 @@ TRACEPOINT_EVENT(ust_baddr_statedump, soinfo,
>  	)
>  )
>  
> +TRACEPOINT_EVENT(ust_baddr_statedump, end,
> +	TP_ARGS(struct lttng_session *, session),
> +	TP_FIELDS()
> +)
> +
>  #endif /* _TRACEPOINT_UST_BADDR_STATEDUMP_H */
>  
>  #undef TRACEPOINT_INCLUDE
> --
> 2.4.1
> 
> 
> _______________________________________________
> lttng-dev mailing list
> lttng-dev at lists.lttng.org
> http://lists.lttng.org/cgi-bin/mailman/listinfo/lttng-dev
> 

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



More information about the lttng-dev mailing list