[sheepdog] [PATCH 1/2] sheep: add tracepoints for analyzing request latency
Hitoshi Mitake
mitake.hitoshi at lab.ntt.co.jp
Fri Jan 16 10:30:36 CET 2015
Cc: Gu Ping <guping610 at qq.com>
Signed-off-by: Hitoshi Mitake <mitake.hitoshi at lab.ntt.co.jp>
---
sheep/Makefile.am | 8 ++++
sheep/request.c | 17 +++++++
sheep/tracepoint/request_tp.c | 13 +++++
sheep/tracepoint/request_tp.h | 107 ++++++++++++++++++++++++++++++++++++++++++
4 files changed, 145 insertions(+)
create mode 100644 sheep/tracepoint/request_tp.c
create mode 100644 sheep/tracepoint/request_tp.h
diff --git a/sheep/Makefile.am b/sheep/Makefile.am
index 68c470b..20f1553 100644
--- a/sheep/Makefile.am
+++ b/sheep/Makefile.am
@@ -72,6 +72,14 @@ if BUILD_EARTHQUAKE
sheep_LDADD += -leq_embed
endif
+# for LTTng ust tracepoints
+AM_CPPFLAGS = -I$(top_srcdir)/sheep/tracepoint
+noinst_HEADERS = tracepoint/request_tp.h
+
+if BUILD_LTTNG_UST
+sheep_SOURCES += tracepoint/request_tp.c
+endif
+
all-local:
@echo Built sheep
diff --git a/sheep/request.c b/sheep/request.c
index 8a2e7dc..af68fbf 100644
--- a/sheep/request.c
+++ b/sheep/request.c
@@ -13,6 +13,9 @@
#include "sheep_priv.h"
+#define TRACEPOINT_DEFINE
+#include "request_tp.h"
+
static void del_requeue_request(struct request *req)
{
list_del(&req->request_list);
@@ -797,6 +800,8 @@ static void rx_work(struct work *work)
conn->dead = true;
}
}
+
+ tracepoint(request, rx_work, conn->fd, work, req, hdr.opcode);
}
static void rx_main(struct work *work)
@@ -834,6 +839,8 @@ static void rx_main(struct work *work)
ci->conn.ipstr,
ci->conn.port);
}
+
+ tracepoint(request, rx_main, ci->conn.fd, work, req);
queue_request(req);
}
@@ -863,6 +870,8 @@ static void tx_work(struct work *work)
sd_err("failed to send a request");
conn->dead = true;
}
+
+ tracepoint(request, tx_work, conn->fd, work, req);
}
static void tx_main(struct work *work)
@@ -870,6 +879,8 @@ static void tx_main(struct work *work)
struct client_info *ci = container_of(work, struct client_info,
tx_work);
+ tracepoint(request, tx_main, ci->conn.fd, work, ci->tx_req);
+
refcount_dec(&ci->refcnt);
if (is_logging_op(ci->tx_req->op)) {
@@ -912,6 +923,8 @@ static void clear_client_info(struct client_info *ci)
{
struct request *req;
+ tracepoint(request, clear_client, ci->conn.fd);
+
sd_debug("connection seems to be dead");
list_for_each_entry(req, &ci->done_reqs, request_list) {
@@ -964,6 +977,8 @@ static struct client_info *create_client(int fd, struct cluster_info *cluster)
INIT_LIST_HEAD(&ci->done_reqs);
+ tracepoint(request, create_client, fd);
+
return ci;
}
@@ -997,6 +1012,7 @@ static void client_handler(int fd, int events, void *data)
refcount_inc(&ci->refcnt);
ci->rx_work.fn = rx_work;
ci->rx_work.done = rx_main;
+ tracepoint(request, queue_request, fd, &ci->rx_work, 1);
queue_work(sys->net_wqueue, &ci->rx_work);
}
@@ -1019,6 +1035,7 @@ static void client_handler(int fd, int events, void *data)
refcount_inc(&ci->refcnt);
ci->tx_work.fn = tx_work;
ci->tx_work.done = tx_main;
+ tracepoint(request, queue_request, fd, &ci->tx_work, 0);
queue_work(sys->net_wqueue, &ci->tx_work);
}
}
diff --git a/sheep/tracepoint/request_tp.c b/sheep/tracepoint/request_tp.c
new file mode 100644
index 0000000..fbc08f6
--- /dev/null
+++ b/sheep/tracepoint/request_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 "request_tp.h"
diff --git a/sheep/tracepoint/request_tp.h b/sheep/tracepoint/request_tp.h
new file mode 100644
index 0000000..66254bc
--- /dev/null
+++ b/sheep/tracepoint/request_tp.h
@@ -0,0 +1,107 @@
+/*
+ * 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 request
+
+#undef TRACEPOINT_INCLUDE
+#define TRACEPOINT_INCLUDE "./request_tp.h"
+
+#if !defined(EVENT_TRACEPOINT_H) || defined(TRACEPOINT_HEADER_MULTI_READ)
+#define EVENT_TRACEPOINT_H
+
+#include <lttng/tracepoint.h>
+
+TRACEPOINT_EVENT(
+ request,
+ create_client,
+ TP_ARGS(int, _fd),
+ TP_FIELDS(
+ ctf_integer(int, fd, _fd)
+ )
+ )
+
+TRACEPOINT_EVENT(
+ request,
+ clear_client,
+ TP_ARGS(int, _fd),
+ TP_FIELDS(
+ ctf_integer(int, fd, _fd)
+ )
+ )
+
+TRACEPOINT_EVENT(
+ request,
+ queue_request,
+ TP_ARGS(int, _fd, void *, _work, int, _is_read),
+ TP_FIELDS(
+ ctf_integer(int, fd, _fd)
+ ctf_integer_hex(void *, work, _work)
+ ctf_integer(int, is_read, _is_read)
+ )
+ )
+
+TRACEPOINT_EVENT(
+ request,
+ rx_work,
+ TP_ARGS(int, _fd, void *, _work, void *, _req, int, _op),
+ TP_FIELDS(
+ ctf_integer(int, fd, _fd)
+ ctf_integer_hex(void *, work, _work)
+ ctf_integer_hex(void *, request, _req)
+ ctf_integer_hex(int, opcode, _op)
+ )
+ )
+
+TRACEPOINT_EVENT(
+ request,
+ rx_main,
+ TP_ARGS(int, _fd, void *, _work, void *, _req),
+ TP_FIELDS(
+ ctf_integer(int, fd, _fd)
+ ctf_integer_hex(void *, work, _work)
+ ctf_integer_hex(void *, request, _req)
+ )
+ )
+
+TRACEPOINT_EVENT(
+ request,
+ tx_work,
+ TP_ARGS(int, _fd, void *, _work, void *, _req),
+ TP_FIELDS(
+ ctf_integer(int, fd, _fd)
+ ctf_integer_hex(void *, work, _work)
+ ctf_integer(void *, request, _req)
+ )
+ )
+
+TRACEPOINT_EVENT(
+ request,
+ tx_main,
+ TP_ARGS(int, _fd, void *, _work, void *, _req),
+ TP_FIELDS(
+ ctf_integer(int, fd, _fd)
+ ctf_integer_hex(void *, work, _work)
+ ctf_integer_hex(void *, request, _req)
+ )
+ )
+
+#endif /* EVENT_TRACEPOINT_H */
+
+#include <lttng/tracepoint-event.h>
+
+#else /* ENABLE_LTTNG_UST */
+
+#include "lttng_disable.h"
+
+#endif
--
1.9.1
More information about the sheepdog
mailing list