about summary refs log tree commit homepage
path: root/tapset/all.stp
diff options
context:
space:
mode:
Diffstat (limited to 'tapset/all.stp')
-rw-r--r--tapset/all.stp129
1 files changed, 129 insertions, 0 deletions
diff --git a/tapset/all.stp b/tapset/all.stp
new file mode 100644
index 0000000..600c07a
--- /dev/null
+++ b/tapset/all.stp
@@ -0,0 +1,129 @@
+/*
+ * This is an extremely detailed tapset for capturing all supported probe
+ * points in the current version of cmogstored.  It likely contains too much
+ * information to be useful, extracting relevant probes is recommended.
+ */
+
+/* keyed by: [pid(),fd] */
+global cmogstored_http_req_begin;
+global cmogstored_http_pipelined;
+global cmogstored_http_addr;
+global cmogstored_fd_by_tid;
+
+probe process("cmogstored").mark("http_accepted") {
+        fd = $arg1;
+        host = user_string($arg2);
+        serv = user_string($arg3);
+        listen = user_string($arg4);
+        host_serv = sprintf("%s%s", host, serv);
+        printf("% 6d % 6d accepted %s on %s\n", pid(), fd, host_serv, listen);
+        cmogstored_http_addr[pid(),fd] = host_serv;
+}
+
+/*
+ * mog_ioq_ready..ioq_reschedule   = time waiting for others to finish IO
+ * ioq_reschedule..mog_ioq_unblock = time inside epoll ready list
+ */
+
+/* associate the fd with thread for the function return */
+probe process("cmogstored").function("mog_ioq_ready") {
+        cmogstored_fd_by_tid[tid()] = @cast($mfd, "struct mog_fd")->fd;
+}
+
+/*
+ * if mog_ioq_ready returns false, we are blocked waiting on I/O and
+ * will hit ioq_reschedule
+ */
+probe process("cmogstored").function("mog_ioq_ready").return {
+        if (!$return)
+                printf("% 6d % 6d ioq blocked\n",
+                        pid(), cmogstored_fd_by_tid[tid()]);
+}
+
+/*
+ * we hit ioq_reschedule when we are ready to enter the epoll ready-list
+ * we will hit mog_ioq_unblock eventually
+ */
+probe process("cmogstored").mark("ioq_reschedule") {
+        fd = @cast($mfd, "struct mog_fd")->fd;
+        printf("% 6d % 6d ioq reschedule_enter\n", pid(), fd);
+}
+
+/* associate the fd with thread for the function return */
+probe process("cmogstored").function("mog_ioq_unblock") {
+        cmogstored_fd_by_tid[tid()] = @cast($mfd, "struct mog_fd")->fd;
+}
+
+/*
+ * if mog_ioq_unblock returns true, it means the fd was previously
+ * in ioq_reschedule
+ */
+probe process("cmogstored").function("mog_ioq_unblock").return {
+        if ($return)
+                printf("% 6d % 6d ioq reschedule_done\n",
+                        pid(), cmogstored_fd_by_tid[tid()]);
+}
+
+/*
+ * HTTP client disconnected
+ */
+probe process("cmogstored").function("http_close") {
+        fd = @cast($mfd, "struct mog_fd")->fd;
+        printf("% 6d % 6d closing\n", pid(), fd);
+        delete cmogstored_http_addr[pid(),fd];
+}
+
+/*
+ * We start reading/buffering the HTTP request here
+ */
+probe process("cmogstored").mark("http_req_begin") {
+        fd = @cast($mfd, "struct mog_fd")->fd;
+        is_pipelined = $arg1;
+        cmogstored_http_req_begin[pid(),fd] = gettimeofday_us();
+        cmogstored_http_pipelined[pid(),fd] = is_pipelined;
+}
+
+/*
+ * we start processing the HTTP request (opening/stat-ing files)
+ */
+probe process("cmogstored").function("http_process_client") {
+        fd = @cast($mfd, "struct mog_fd")->fd;
+        starttime = cmogstored_http_req_begin[pid(),fd];
+        diff = gettimeofday_us() - starttime;
+
+        is_pipelined = cmogstored_http_pipelined[pid(),fd];
+        printf("% 6d % 6d http_process_client time %ldus (pipelined:%s)\n",
+                pid(), fd, diff, is_pipelined ? "true" : "false");
+}
+
+/*
+ * We blocked on writing (HTTP headers) to the client socket
+ */
+probe process("cmogstored").mark("write_buffered") {
+        printf("% 6d % 6d blocked with %lu bytes to write\n",
+                pid(), $fd, $len);
+}
+
+/* signals a client is making us reallocate on large requests */
+probe process("cmogstored").function("http_rbuf_grow") {
+        fd = @cast($mfd, "struct mog_fd")->fd;
+        printf("% 6d % 6d http_rbuf_grow %lu\n", pid(), fd, $buf_len);
+}
+
+/* signals a client is making us reallocate on large requests */
+probe process("cmogstored").function("mgmt_rbuf_grow") {
+        fd = @cast($mfd, "struct mog_fd")->fd;
+        printf("% 6d % 6d mgmt_rbuf_grow %lu\n", pid(), fd, $buf_len);
+}
+
+/* this signals a client is trickling requests to us */
+probe process("cmogstored").function("http_parse_continue") {
+        fd = @cast($mfd, "struct mog_fd")->fd;
+        printf("% 6d % 6d http_parse_continue %lu\n", pid(), fd, $buf_len);
+}
+
+/* this signals a client is trickling requests to us */
+probe process("cmogstored").function("mgmt_parse_continue") {
+        fd = @cast($mfd, "struct mog_fd")->fd;
+        printf("% 6d % 6d mgmt_parse_continue %lu\n", pid(), fd, $buf_len);
+}