是否执行锁定配置文件用户空间互斥?

总结 :是否执行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_LOCKDEPCONFIG_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创建你自己的包装器)。

链接地址: http://www.djcxy.com/p/14049.html

上一篇: Does perf lock profile user space mutexes?

下一篇: In Extjs4.1, how to add additional params before one store sync?