Ceph Mutex Lock monitor

来源:互联网 发布:sqlplus执行sql文件 编辑:程序博客网 时间:2024/05/16 01:07
1. 现在ceph系统支持perf counter统计mutex花费的时间
   OPTION(mutex_perf_counter, OPT_BOOL, false)
   ceph daemon /var/run/ceph/ceph-osd.0.asok config set mutex_perf_counter 1
   ceph daemon /var/run/ceph/ceph-osd.0.asok config set mutex_perf_counter 0

  # ceph daemon /var/run/ceph/ceph-osd.0.asok perf dump | grep mutex
    "mutex-FileJournal::completions_lock": {
    "mutex-FileJournal::finisher_lock": {
    "mutex-FileJournal::write_lock": {
    "mutex-FileJournal::writeq_lock": {
    "mutex-JOS::ApplyManager::apply_lock": {
    "mutex-JOS::ApplyManager::com_lock": {
    "mutex-JOS::SubmitManager::lock": {
    "mutex-WBThrottle::lock": {
        "wait": {
            "avgcount": 0,
            "sum": 0.000000000
        }
    }, 

   这个能统计出一段时间内所有mutex lock花费的时间,但是不能显示具体某一个mutex lock的花费时间。


2. 添加tracepoint到mutex实现中,通过tracepoint log来分析具体某一个mutex lock的花费时间。

   1> src/tracing目录添加对应的mutex.tp文件

#include "include/int_types.h"

TRACEPOINT_EVENT(mutex, lock_enter,
    TP_ARGS(
        const void *, addr,
        const char *, name),
    TP_FIELDS(
        ctf_integer_hex(unsigned long, addr, addr)
        ctf_string(name, name)
    )
)

TRACEPOINT_EVENT(mutex, lock_exit,
    TP_ARGS(
        const void *, addr,
        const char *, name),
    TP_FIELDS(
        ctf_integer_hex(unsigned long, addr, addr)
        ctf_string(name, name)
    )
)
   2> 修改src/common/Mutex.cc文件
   添加:   
   #ifdef WITH_LTTNG
   #include “tracing/mutex.h"
   #else
   #define tracepoint(...)
   #endif

   3> 修改src/tracing/Makefile.am文件
14d13
<       mutex.tp \
23,24d21
<       mutex.c \
<       mutex.h \
63,73d59
< nodist_libmutex_tp_la_SOURCES = \
<       mutex.c \
<       mutex.h
< endif
< libmutex_tp_la_LIBADD = -llttng-ust -ldl
< libmutex_tp_la_CPPFLAGS = -DTRACEPOINT_PROBE_DYNAMIC_LINKAGE
< libmutex_tp_la_CFLAGS = -I$(top_srcdir)/src $(AM_CFLAGS)
< libmutex_tp_la_LDFLAGS =
<
<
< if WITH_LTTNG
78d63
<       libmutex_tp.la \
87d71
<       mutex.h \
95d78
<       $(nodist_libmutex_tp_la_SOURCES) \ 

   4> 修改src/Makefile-env.am文件
添加:
LIBMUTEX_TP = tracing/libmutex_tp.la

   5> 修改src/common/Makefile.am文件
添加:
if WITH_LTTNG
libcommon_la_LIBADD += $(LIBMUTEX_TP)
endif

   6> 修改src/test/Makefile.am文件
添加:
if WITH_LTTNG
UNITTEST_LDADD += $(LIBMUTEX_TP)
endif


3. 添加PG lock的perf counter统计。
修改:
PG::PG(OSDService *o, OSDMapRef curmap,
       const PGPool &_pool, spg_t p) :
  osd(o),
  cct(o->cct),
...
  map_lock("PG::map_lock"),
  osdmap_ref(curmap), last_persisted_osdmap_ref(curmap), pool(_pool),
  _lock((std::string("PG::_lock") + _pool.name.c_str()).c_str(), false, true, false, o->cct), 




最终编译出来的安装包中,rbd命令不能执行,报以下错误:
# rbd
LTTng-UST: Error (-17) while registering tracepoint probe. Duplicate registration of tracepoint probes having the same name is not allowed.
Aborted (core dumped) 

相关链接:
https://www.mail-archive.com/ceph-users@lists.ceph.com/msg23627.html
http://comments.gmane.org/gmane.comp.file-systems.ceph.devel/20353
但ceph还是能正常工作的,也能通过lttng搜集出来mutex log的trace,但是因为mutex太多地方用到,这个log太多了,不是很适合分析。



1 0
原创粉丝点击