是否执行锁定配置文件用户空间互斥?
总结 :是否执行perf lock
配置文件pthread_mutex?
详情 :
工具perf
有一个选项perf lock
。 手册页说:
You can analyze various lock behaviours and statistics with this perf lock command.
'perf lock record <command>' records lock events
between start and end <command>. And this command
produces the file "perf.data" which contains tracing
results of lock events.
'perf lock trace' shows raw lock events.
'perf lock report' reports statistical data.
但是,当我尝试运行perf lock record
,出现错误: invalid or unsupported event: 'lock:lock_acquire'
。 我看了一下,似乎错误可能是因为我的内核没有使用CONFIG_LOCKDEP
或CONFIG_LOCK_STAT
编译。
我的问题是: perf lock
与用户空间锁(如pthread_mutex)或仅内核锁报告事件? 我对大多数在用户空间中运行的应用程序更感兴趣。 我认为perf中的这个选项看起来很有趣,但由于我无法编译(或获取)新内核而无法运行它,因此我有兴趣在尝试之前更好地了解它的功能。
总结:是否执行锁定配置文件pthread_mutex?
总结:不,因为在用户空间pthread_mutex中没有定义任何跟踪点。
根据源文件tools/perf/builtin-lock.c
(http://lxr.free-electrons.com/source/tools/perf/builtin-lock.c#L939) cmd_lock
调用__cmd_record
,它为perf record
定义了几个跟踪点perf record
(通过-e TRACEPOINT_NAME
)并传递选项-R -m 1024 -c 1
以执行perf report
。 定义的跟踪点列表: lock_tracepoints
:
842 static const struct perf_evsel_str_handler lock_tracepoints[] = {
843 { "lock:lock_acquire", perf_evsel__process_lock_acquire, }, /* CONFIG_LOCKDEP */
844 { "lock:lock_acquired", perf_evsel__process_lock_acquired, }, /* CONFIG_LOCKDEP, CONFIG_LOCK_STAT */
845 { "lock:lock_contended", perf_evsel__process_lock_contended, }, /* CONFIG_LOCKDEP, CONFIG_LOCK_STAT */
846 { "lock:lock_release", perf_evsel__process_lock_release, }, /* CONFIG_LOCKDEP */
847 };
TRACE_EVENT(lock_acquire,..
在trace/events/lock.h
定义,而trace_lock_acquire
仅在kernel / locking / lockdep.c中定义(在debian代码库中重新检查:http://codesearch.debian.net/search?q= trace_lock_acquire)根据kernel/locking/Makefile
,你的内核中只有CONFIG_LOCKDEP缺失: obj-$(CONFIG_LOCKDEP) += lockdep.o
(tracepoints无条件地在lockdep.c
中定义。
根据https://www.kernel.org/doc/Documentation/trace/tracepoints.txt,所有跟踪点都是仅限内核的,因此perf lock
不会分析用户空间锁。
您可以尝试LTTng中的跟踪点,LTTng是声明用户空间跟踪点的项目(http://lttng.org/ust)。 但是没有就绪锁定统计信息,只有跟踪点上的原始数据。 你也应该用tracef()
宏来定义跟踪点(重新编译pthreads / glibc,或者尝试围绕pthread创建你自己的包装器)。
上一篇: Does perf lock profile user space mutexes?
下一篇: In Extjs4.1, how to add additional params before one store sync?