diff --git a/src/core/profiling/basic_timers.c b/src/core/profiling/basic_timers.c
index 124a8d6621af87dd46e1d12b30328d55c14d29c6..ae37f584ebba9c24a9b229aa91b1171ad424247c 100644
--- a/src/core/profiling/basic_timers.c
+++ b/src/core/profiling/basic_timers.c
@@ -55,6 +55,7 @@ typedef enum {
 typedef struct grpc_timer_entry {
   grpc_precise_clock tm;
   int tag;
+  const char* tagstr;
   marker_type type;
   void* id;
   const char* file;
@@ -70,18 +71,19 @@ static void log_report() {
   int i;
   for (i = 0; i < count; i++) {
     grpc_timer_entry* entry = &(log[i]);
-    printf("GRPC_LAT_PROF " GRPC_PRECISE_CLOCK_FORMAT " %p %c %d %p %s %d\n",
+    printf("GRPC_LAT_PROF " GRPC_PRECISE_CLOCK_FORMAT
+           " %p %c %d(%s) %p %s %d\n",
            GRPC_PRECISE_CLOCK_PRINTF_ARGS(&entry->tm),
            (void*)(gpr_intptr)gpr_thd_currentid(), entry->type, entry->tag,
-           entry->id, entry->file, entry->line);
+           entry->tagstr, entry->id, entry->file, entry->line);
   }
 
   /* Now clear out the log */
   count = 0;
 }
 
-static void grpc_timers_log_add(int tag, marker_type type, void* id,
-                                const char* file, int line) {
+static void grpc_timers_log_add(int tag, const char* tagstr, marker_type type,
+                                void* id, const char* file, int line) {
   grpc_timer_entry* entry;
 
   /* TODO (vpai) : Improve concurrency */
@@ -93,6 +95,7 @@ static void grpc_timers_log_add(int tag, marker_type type, void* id,
 
   grpc_precise_clock_now(&entry->tm);
   entry->tag = tag;
+  entry->tagstr = tagstr;
   entry->type = type;
   entry->id = id;
   entry->file = file;
@@ -100,28 +103,31 @@ static void grpc_timers_log_add(int tag, marker_type type, void* id,
 }
 
 /* Latency profiler API implementation. */
-void grpc_timer_add_mark(int tag, void* id, const char* file, int line) {
+void grpc_timer_add_mark(int tag, const char* tagstr, void* id,
+                         const char* file, int line) {
   if (tag < GRPC_PTAG_IGNORE_THRESHOLD) {
-    grpc_timers_log_add(tag, MARK, id, file, line);
+    grpc_timers_log_add(tag, tagstr, MARK, id, file, line);
   }
 }
 
-void grpc_timer_add_important_mark(int tag, void* id, const char* file,
-                                   int line) {
+void grpc_timer_add_important_mark(int tag, const char* tagstr, void* id,
+                                   const char* file, int line) {
   if (tag < GRPC_PTAG_IGNORE_THRESHOLD) {
-    grpc_timers_log_add(tag, IMPORTANT, id, file, line);
+    grpc_timers_log_add(tag, tagstr, IMPORTANT, id, file, line);
   }
 }
 
-void grpc_timer_begin(int tag, void* id, const char* file, int line) {
+void grpc_timer_begin(int tag, const char* tagstr, void* id, const char* file,
+                      int line) {
   if (tag < GRPC_PTAG_IGNORE_THRESHOLD) {
-    grpc_timers_log_add(tag, BEGIN, id, file, line);
+    grpc_timers_log_add(tag, tagstr, BEGIN, id, file, line);
   }
 }
 
-void grpc_timer_end(int tag, void* id, const char* file, int line) {
+void grpc_timer_end(int tag, const char* tagstr, void* id, const char* file,
+                    int line) {
   if (tag < GRPC_PTAG_IGNORE_THRESHOLD) {
-    grpc_timers_log_add(tag, END, id, file, line);
+    grpc_timers_log_add(tag, tagstr, END, id, file, line);
   }
 }
 
diff --git a/src/core/profiling/stap_timers.c b/src/core/profiling/stap_timers.c
index 064c86e794e1e203c26032d247a5ac28fe4f00e9..99975163f9340f96a96f8fcbcb0114059977d336 100644
--- a/src/core/profiling/stap_timers.c
+++ b/src/core/profiling/stap_timers.c
@@ -42,20 +42,23 @@
 #include "src/core/profiling/stap_probes.h"
 
 /* Latency profiler API implementation. */
-void grpc_timer_add_mark(int tag, void* id, const char* file, int line) {
+void grpc_timer_add_mark(int tag, const char* tagstr, void* id,
+                         const char* file, int line) {
   _STAP_ADD_MARK(tag);
 }
 
-void grpc_timer_add_important_mark(int tag, void* id, const char* file,
-                                   int line) {
+void grpc_timer_add_important_mark(int tag, const char* tagstr, void* id,
+                                   const char* file, int line) {
   _STAP_ADD_IMPORTANT_MARK(tag);
 }
 
-void grpc_timer_begin(int tag, void* id, const char* file, int line) {
+void grpc_timer_begin(int tag, const char* tagstr, void* id, const char* file,
+                      int line) {
   _STAP_TIMING_NS_BEGIN(tag);
 }
 
-void grpc_timer_end(int tag, void* id, const char* file, int line) {
+void grpc_timer_end(int tag, const char* tagstr, void* id, const char* file,
+                    int line) {
   _STAP_TIMING_NS_END(tag);
 }
 
diff --git a/src/core/profiling/timers.h b/src/core/profiling/timers.h
index 4fb465c23718495f8fe2ba2f611787124c9e4da0..036d02f187d47a18096cf20886dffdd8eb3b1372 100644
--- a/src/core/profiling/timers.h
+++ b/src/core/profiling/timers.h
@@ -41,11 +41,14 @@ extern "C" {
 void grpc_timers_global_init(void);
 void grpc_timers_global_destroy(void);
 
-void grpc_timer_add_mark(int tag, void *id, const char *file, int line);
-void grpc_timer_add_important_mark(int tag, void *id, const char *file,
-                                   int line);
-void grpc_timer_begin(int tag, void *id, const char *file, int line);
-void grpc_timer_end(int tag, void *id, const char *file, int line);
+void grpc_timer_add_mark(int tag, const char *tagstr, void *id,
+                         const char *file, int line);
+void grpc_timer_add_important_mark(int tag, const char *tagstr, void *id,
+                                   const char *file, int line);
+void grpc_timer_begin(int tag, const char *tagstr, void *id, const char *file,
+                      int line);
+void grpc_timer_end(int tag, const char *tagstr, void *id, const char *file,
+                    int line);
 
 enum grpc_profiling_tags {
   /* Any GRPC_PTAG_* >= than the threshold won't generate any profiling mark. */
@@ -103,25 +106,27 @@ enum grpc_profiling_tags {
 #endif
 
 /* Generic profiling interface. */
-#define GRPC_TIMER_MARK(tag, id)                                              \
-  if (tag < GRPC_PTAG_IGNORE_THRESHOLD) {                                     \
-    grpc_timer_add_mark(tag, ((void *)(gpr_intptr)(id)), __FILE__, __LINE__); \
+#define GRPC_TIMER_MARK(tag, id)                                         \
+  if (tag < GRPC_PTAG_IGNORE_THRESHOLD) {                                \
+    grpc_timer_add_mark(tag, #tag, ((void *)(gpr_intptr)(id)), __FILE__, \
+                        __LINE__);                                       \
   }
 
-#define GRPC_TIMER_IMPORTANT_MARK(tag, id)                                   \
-  if (tag < GRPC_PTAG_IGNORE_THRESHOLD) {                                    \
-    grpc_timer_add_important_mark(tag, ((void *)(gpr_intptr)(id)), __FILE__, \
-                                  __LINE__);                                 \
+#define GRPC_TIMER_IMPORTANT_MARK(tag, id)                               \
+  if (tag < GRPC_PTAG_IGNORE_THRESHOLD) {                                \
+    grpc_timer_add_important_mark(tag, #tag, ((void *)(gpr_intptr)(id)), \
+                                  __FILE__, __LINE__);                   \
   }
 
-#define GRPC_TIMER_BEGIN(tag, id)                                          \
-  if (tag < GRPC_PTAG_IGNORE_THRESHOLD) {                                  \
-    grpc_timer_begin(tag, ((void *)(gpr_intptr)(id)), __FILE__, __LINE__); \
+#define GRPC_TIMER_BEGIN(tag, id)                                     \
+  if (tag < GRPC_PTAG_IGNORE_THRESHOLD) {                             \
+    grpc_timer_begin(tag, #tag, ((void *)(gpr_intptr)(id)), __FILE__, \
+                     __LINE__);                                       \
   }
 
-#define GRPC_TIMER_END(tag, id)                                          \
-  if (tag < GRPC_PTAG_IGNORE_THRESHOLD) {                                \
-    grpc_timer_end(tag, ((void *)(gpr_intptr)(id)), __FILE__, __LINE__); \
+#define GRPC_TIMER_END(tag, id)                                                \
+  if (tag < GRPC_PTAG_IGNORE_THRESHOLD) {                                      \
+    grpc_timer_end(tag, #tag, ((void *)(gpr_intptr)(id)), __FILE__, __LINE__); \
   }
 
 #ifdef GRPC_STAP_PROFILER