 +
 diff --git a/src/dtrace/nginx_provider.d b/src/dtrace/nginx_provider.d
 new file mode 100644
-index 0000000..483ac69
+index 0000000..7f93101
 --- /dev/null
 +++ b/src/dtrace/nginx_provider.d
-@@ -0,0 +1,32 @@
+@@ -0,0 +1,36 @@
 +typedef struct { int dummy; } ngx_http_request_t;
 +typedef struct { int dummy; } ngx_str_t;
 +typedef int64_t ngx_int_t;
 +typedef struct { int dummy; } ngx_module_t;
 +typedef struct { int dummy; } ngx_http_module_t;
 +typedef struct { int dummy; } ngx_table_elt_t;
++typedef struct { int dummy; } ngx_event_t;
 +
 +
 +provider nginx {

+
+DTRACE_FROM_SYSTEMTAP=YES
diff --git a/auto/sources b/auto/sources
index 374ad66..72bb1b0 100644
--- a/auto/sources
+++ b/auto/sources
@@ -39,6 +39,11 @@ CORE_DEPS="src/core/nginx.h \

+
+PATH="NGX_SBIN_DIR:$PATH"
+export PATH
+exec stap -d "NGX_SBIN_PATH" -I "NGX_TAPSET_PREFIX" "$@"
+
diff --git a/src/event/ngx_event_probe.h b/src/event/ngx_event_probe.h
new file mode 100644
index 0000000..b7b2749
--- /dev/null
+++ b/src/event/ngx_event_probe.h
@@ -0,0 +1,32 @@
+#ifndef _NGX_EVENT_PROBE_H_INCLUDED_
+#define _NGX_EVENT_PROBE_H_INCLUDED_
+
+
+#include <ngx_config.h>
+#include <ngx_core.h>
+#include <ngx_event.h>
+
+
+#if (NGX_DTRACE)
+
+#include <ngx_dtrace_provider.h>
+
+#define ngx_event_probe_timer_add(ev, timer)                                 \
+    NGINX_TIMER_ADD(ev, timer)
+
+#define ngx_event_probe_timer_del(ev)                                        \
+    NGINX_TIMER_DEL(ev)
+
+#define ngx_event_probe_timer_expire(ev)                                     \
+    NGINX_TIMER_EXPIRE(ev)
+
+#else /* !(NGX_DTRACE) */
+
+#define ngx_event_probe_timer_add(ev, timer)
+#define ngx_event_probe_timer_del(ev)
+#define ngx_event_probe_timer_expire(ev)
+
+#endif
+
+
+#endif /* _NGX_EVENT_PROBE_H_INCLUDED_ */
diff --git a/src/event/ngx_event_timer.c b/src/event/ngx_event_timer.c
index 177ac1c..531cccc 100644
--- a/src/event/ngx_event_timer.c
+++ b/src/event/ngx_event_timer.c
@@ -144,6 +144,8 @@ ngx_event_expire_timers(void)
             }
 #endif
 
+            ngx_event_probe_timer_expire(ev);
+
             ev->timedout = 1;
 
             ev->handler(ev);
diff --git a/src/event/ngx_event_timer.h b/src/event/ngx_event_timer.h
index ec9b316..6095d8c 100644
--- a/src/event/ngx_event_timer.h
+++ b/src/event/ngx_event_timer.h
@@ -12,6 +12,7 @@
 #include <ngx_config.h>
 #include <ngx_core.h>
 #include <ngx_event.h>
+#include <ngx_event_probe.h>
 
 
 #define NGX_TIMER_INFINITE  (ngx_msec_t) -1
@@ -35,6 +36,8 @@ extern ngx_thread_volatile ngx_rbtree_t  ngx_event_timer_rbtree;
 static ngx_inline void
 ngx_event_del_timer(ngx_event_t *ev)
 {
+    ngx_event_probe_timer_del(ev);
+
     ngx_log_debug2(NGX_LOG_DEBUG_EVENT, ev->log, 0,
                    "event timer del: %d: %M",
                     ngx_event_ident(ev->data), ev->timer.key);
@@ -85,6 +88,8 @@ ngx_event_add_timer(ngx_event_t *ev, ngx_msec_t timer)
 
     ev->timer.key = key;
 
+    ngx_event_probe_timer_add(ev, timer);
+
     ngx_log_debug3(NGX_LOG_DEBUG_EVENT, ev->log, 0,
                    "event timer add: %d: %M:%M",
                     ngx_event_ident(ev->data), timer, ev->timer.key);
diff --git a/src/http/ngx_http.c b/src/http/ngx_http.c
index 3e077fb..b7edb7b 100644
--- a/src/http/ngx_http.c
