gpt4 book ai didi

linux - perf lock profile 用户空间是否互斥?

转载 作者:IT王子 更新时间:2023-10-29 00:21:51 25 4
gpt4 key购买 nike

总结: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 中的这个选项看起来很有趣,但由于我无法在不编译(或获取)新内核的情况下运行它,所以我有兴趣在尝试之前更好地了解它的作用。

最佳答案

Summary: Does perf lock profile 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(通过 -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(跟踪点在 中无条件定义lockdep.c.

根据 https://www.kernel.org/doc/Documentation/trace/tracepoints.txt所有跟踪点都是内核专用的,因此 perf lock 不会分析用户空间锁。

您可以尝试 LTTng 中的跟踪点,该项目声明用户空间跟踪点 (http://lttng.org/ust)。但是不会有就绪锁统计信息,只有跟踪点上的原始数据。您还应该使用 tracef() 宏定义跟踪点(重新编译 pthreads/glibc,或尝试围绕 pthread 创建您自己的包装器)。

关于linux - perf lock profile 用户空间是否互斥?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16992545/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com