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
- Ceph Mutex Lock monitor
- monitor mutex lock in .net
- monitor mutex lock in .net
- C#中的lock、Monitor、Mutex
- lock,Monitor,Mutex的区别
- Monitor类、Lock关键字和Mutex类
- 再看c#中的lock monitor 和mutex
- C#Monitor类 Lock Mutex类详解
- C#中的lock、Monitor、Mutex学习笔记
- lock vs Monitor vs Mutex之间的区别
- C#线程同步——lock,Monitor,Mutex
- C#中lock,Monitor和Mutex的测试代码
- C#多线程学习(九)lock,Monitor,Mutex的区别
- C# 多线程(lock,Monitor,Mutex,同步事件和等待句柄)
- mutex lock
- Lock Monitor
- C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
- C#中使用Monitor类、Lock和Mutex类来同步多线程的执行
- leetcode——17——Letter Combinations of a Phone Number
- 解决Cordova开发iOS的app界面被状态栏覆盖的问题
- c++学习之同名隐藏
- 找出二维数组中的最长路径(最长链表)
- 一、对象导论(三)
- Ceph Mutex Lock monitor
- hibernate单表之组件映射和继承映射
- 匈牙利命名法
- 在Android Studio中导入github上的项目
- 【ANDROID游戏开发二十四】360°平滑游戏摇杆(触屏方向导航)
- python3不再支持mysqldb 请用pymysql和mysql.connector
- 机器学习中的数学(5)-强大的矩阵奇异值分解(SVD)及其应用
- c++中的日期和时间
- 面试题之替换空格