Cc: Gu Ping <[email protected]>
Signed-off-by: Hitoshi Mitake <[email protected]>
---
 lib/Makefile.am          |  8 +++++
 lib/tracepoint/work_tp.c | 13 +++++++
 lib/tracepoint/work_tp.h | 93 ++++++++++++++++++++++++++++++++++++++++++++++++
 lib/work.c               | 10 ++++++
 4 files changed, 124 insertions(+)
 create mode 100644 lib/tracepoint/work_tp.c
 create mode 100644 lib/tracepoint/work_tp.h

diff --git a/lib/Makefile.am b/lib/Makefile.am
index a43076e..bb68430 100644
--- a/lib/Makefile.am
+++ b/lib/Makefile.am
@@ -35,6 +35,14 @@ if BUILD_TRACE
 AM_CPPFLAGS            += -DENABLE_TRACE
 endif
 
+# for LTTng ust tracepoints
+AM_CPPFLAGS            = -I$(top_srcdir)/lib/tracepoint
+noinst_HEADERS         =  tracepoint/work_tp.h
+
+if BUILD_LTTNG_UST
+libsheepdog_a_SOURCES  += tracepoint/work_tp.c
+endif
+
 # support for GNU Flymake
 check-syntax:
        $(COMPILE) -fsyntax-only $(CHK_SOURCES)
diff --git a/lib/tracepoint/work_tp.c b/lib/tracepoint/work_tp.c
new file mode 100644
index 0000000..7df6020
--- /dev/null
+++ b/lib/tracepoint/work_tp.c
@@ -0,0 +1,13 @@
+/*
+ * Copyright (C) 2015 Nippon Telegraph and Telephone Corporation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version
+ * 2 as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define TRACEPOINT_CREATE_PROBES
+#include "work_tp.h"
diff --git a/lib/tracepoint/work_tp.h b/lib/tracepoint/work_tp.h
new file mode 100644
index 0000000..4f4608a
--- /dev/null
+++ b/lib/tracepoint/work_tp.h
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2015 Nippon Telegraph and Telephone Corporation.
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License version
+ * 2 as published by the Free Software Foundation.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifdef ENABLE_LTTNG_UST
+
+#undef TRACEPOINT_PROVIDER
+#define TRACEPOINT_PROVIDER work
+
+#undef TRACEPOINT_INCLUDE
+#define TRACEPOINT_INCLUDE "./work_tp.h"
+
+#if !defined(WORK_TRACEPOINT_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
+#define WORK_TRACEPOINT_H
+
+#include <lttng/tracepoint.h>
+
+TRACEPOINT_EVENT(
+       work,
+       queue_work,
+       TP_ARGS(void *, wi, void *, work),
+       TP_FIELDS(
+               ctf_integer_hex(void *, worker_info_ptr, wi)
+               ctf_integer_hex(void *, work_ptr, work)
+               )
+       )
+
+TRACEPOINT_EVENT(
+       work,
+       do_work,
+       TP_ARGS(void *, wi, void *, work),
+       TP_FIELDS(
+               ctf_integer_hex(void *, worker_info_ptr, wi)
+               ctf_integer_hex(void *, work_ptr, work)
+               )
+       )
+
+TRACEPOINT_EVENT(
+       work,
+       request_done,
+       TP_ARGS(void *, wi, void *, work),
+       TP_FIELDS(
+               ctf_integer_hex(void *, worker_info_ptr, wi)
+               ctf_integer_hex(void *, work_ptr, work)
+               )
+       )
+
+TRACEPOINT_EVENT(
+       work,
+       create_queue,
+       TP_ARGS(const char *, name, void *, wi, int, control),
+       TP_FIELDS(
+               ctf_string(queue_name, name)
+               ctf_integer_hex(void *, worker_info_ptr, wi)
+               ctf_integer(int, thread_control_policy, control)
+               )
+       )
+
+TRACEPOINT_EVENT(
+       work,
+       exit_for_shrink,
+       TP_ARGS(void *, wi),
+       TP_FIELDS(
+               ctf_integer_hex(void *, worker_info_ptr, wi)
+               )
+       )
+
+TRACEPOINT_EVENT(
+       work,
+       grow_queue,
+       TP_ARGS(void *, wi, int, nr_threads),
+       TP_FIELDS(
+               ctf_integer_hex(void *, worker_info_ptr, wi)
+               ctf_integer(int, next_nr_threads, nr_threads)
+               )
+       )
+
+#endif /* WORK_TRACEPOINT_H */
+
+#include <lttng/tracepoint-event.h>
+
+#else /* ENABLE_LTTNG_UST */
+
+#include "lttng_disable.h"
+
+#endif
diff --git a/lib/work.c b/lib/work.c
index 7938d42..f10ddaa 100644
--- a/lib/work.c
+++ b/lib/work.c
@@ -33,6 +33,9 @@
 #include "work.h"
 #include "event.h"
 
+#define TRACEPOINT_DEFINE
+#include "work_tp.h"
+
 /*
  * The protection period from shrinking work queue.  This is necessary
  * to avoid many calls of pthread_create.  Without it, threads are
@@ -263,6 +266,8 @@ void queue_work(struct work_queue *q, struct work *work)
 {
        struct wq_info *wi = container_of(q, struct wq_info, q);
 
+       tracepoint(work, queue_work, wi, work);
+
        uatomic_inc(&wi->nr_queued_work);
        sd_mutex_lock(&wi->pending_lock);
 
@@ -296,6 +301,8 @@ static void worker_thread_request_done(int fd, int events, 
void *data)
                        work = list_first_entry(&list, struct work, w_list);
                        list_del(&work->w_list);
 
+                       tracepoint(work, request_done, wi, work);
+
                        work->done(work);
                        uatomic_dec(&wi->nr_queued_work);
                }
@@ -336,6 +343,8 @@ retest:
                list_del(&work->w_list);
                sd_mutex_unlock(&wi->pending_lock);
 
+               tracepoint(work, do_work, wi, work);
+
                if (work->fn)
                        work->fn(work);
 
@@ -409,6 +418,7 @@ struct work_queue *create_work_queue(const char *name,
 
        list_add(&wi->list, &wq_info_list);
 
+       tracepoint(work, create_queue, wi->name, wi, tc);
        return &wi->q;
 destroy_threads:
        sd_destroy_cond(&wi->pending_cond);
-- 
1.9.1

-- 
sheepdog mailing list
[email protected]
https://lists.wpkg.org/mailman/listinfo/sheepdog

Reply via email to