[sheepdog] [PATCH v2 0/7] rework trace to work with current code

Liu Yuan namei.unix at gmail.com
Thu Aug 30 11:38:57 CEST 2012


From: Liu Yuan <tailai.ly at taobao.com>

v2:
 - fix ret_stack_index type
 - mark two too high volume of functions as notrace
 - change TRACE_CAT opcode to TRACE_READ_BUF

==================================
There are mainly two changes:
 1 remove dumb ring_buffer and use strbuf to store trace items
 2 use another mechanism to suspend/resume worker threads for dynamic patching.

As before, if users don't configure with --enable-trace, there is actually zero
impact on the code base. All the tracer funtions will be complied out completely
from binary.

With reworks, add a new field to trace output: thread name (worker_name + worker_idx).

For e.x, we can only filter the trace output and get the gateway thread trace:

$ collie/collie debug trace start
... cluster is operating
$ collie/collie debug trace stop
$ collie/collie debug trace cat > t
$ grep 'gway 27' t | > t1
$ cat t1
   Thread Name      |  Time(us)  |  Function Graph
--------------------------------------------------
gway 27             |            |   do_process_work() {
gway 27             |            |      gateway_write_obj() {
gway 27             |            |         gateway_forward_request() {
gway 27             |            |            gateway_to_peer_opcode() {
gway 27             |       0.793|            }
gway 27             |            |            get_sd_op() {
gway 27             |       0.598|            }
gway 27             |            |            get_req_copy_number() {
gway 27             |       0.547|            }
gway 27             |            |            sheep_get_sockfd() {
gway 27             |            |               addr_to_str() {
gway 27             |       1.904|               }
gway 27             |            |               sockfd_cache_search() {
gway 27             |       0.675|               }
gway 27             |            |               xmalloc() {
gway 27             |       1.36 |               }
gway 27             |      19.773|            }
gway 27             |            |            send_req() {
gway 27             |      29.548|            }
gway 27             |            |            sheep_get_sockfd() {
gway 27             |            |               addr_to_str() {
gway 27             |       2.499|               }
gway 27             |            |               sockfd_cache_search() {
gway 27             |       5.33 |               }
gway 27             |            |               xmalloc() {
gway 27             |       1.859|               }
gway 27             |      35.478|            }
gway 27             |            |            send_req() {
gway 27             |      27.173|            }
gway 27             |            |            sheep_do_op_work() {
gway 27             |            |               peer_write_obj() {
gway 27             |            |                  do_write_obj() {
gway 27             |            |                     strbuf_addf() {
gway 27             |       5.809|                     }
gway 27             |            |                     jrnl_begin() {
gway 27             |            |                        xzalloc() {
gway 27             |            |                           xmalloc() {
gway 27             |       1.143|                           }
gway 27             |       3.141|                        }
gway 27             |            |                        xpwrite() {
gway 27             |   41206.762|                        }
gway 27             |            |                        xpwrite() {
gway 27             |   27106.822|                        }
gway 27             |            |                        xpwrite() {
gway 27             |   16433.765|                        }
gway 27             |   84822.558|                     }
gway 27             |            |                     default_write() {
gway 27             |            |                        get_obj_path() {
gway 27             |       1.873|                        }
gway 27             |            |                        xpwrite() {
gway 27             |   37716.486|                        }
gway 27             |   37739.304|                     }
...

Liu Yuan (7):
  lib: add a helper to strip out strbuf
  logger: add a helper to get the thread name
  trace: rework the trace mechnasim to work with current code
  sheep: rename worker threads for gateway and revoery
  collie: rework debug trace funtions to use subcommand mechanism
  trace: change the opcode name
  trace: fix ret_stack_index type

 collie/debug.c           |  195 +++++++++++++++++++++++++++++++++++-----------
 configure.ac             |    9 +--
 doc/api-strbuf.txt       |    6 ++
 include/internal_proto.h |    2 +-
 include/logger.h         |    1 +
 include/sheep.h          |    3 +-
 include/strbuf.h         |    3 +-
 include/util.h           |   23 ------
 lib/Makefile.am          |    3 +-
 lib/logger.c             |   10 +++
 lib/net.c                |    4 +-
 lib/ring_buffer.c        |   54 -------------
 lib/strbuf.c             |   16 +++-
 lib/util.c               |    2 +-
 sheep/ops.c              |   11 ++-
 sheep/sheep.c            |    4 +-
 sheep/trace/graph.c      |   22 +++---
 sheep/trace/trace.c      |  163 ++++++++++++++++++++++++--------------
 sheep/trace/trace.h      |   18 +++--
 sheep/work.c             |    4 +
 sheep/work.h             |    2 +
 21 files changed, 331 insertions(+), 224 deletions(-)
 delete mode 100644 lib/ring_buffer.c

-- 
1.7.10.2




More information about the sheepdog mailing list