首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分析Linux中的同步操作

问分析Linux中的同步操作
EN

Stack Overflow用户
提问于 2011-10-01 00:24:47
回答 1查看 421关注 0票数 4

我想分析同步操作,比如Linux中互斥锁、信号量等的锁定和解锁。

我知道它们本质上是使用futexes实现的,所以也许分析futexes的锁定和解锁就足够了(如果我错了,请纠正我)。所以我的问题是如何分析它,因为futex操作通常发生在用户空间。他们有什么工具可以让我分析一下吗?

我基本上感兴趣的是了解锁定futexes和频率的函数。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-10-01 01:15:16

你可能对valgrind感兴趣,它是工具callgrind。

代码语言:javascript
复制
valgrind --trace-children=yes --tool=callgrind -v ./program

它将生成一个详细的调用图到一个文件中,其中包括每个函数经过的时间量。

然后,您可以使用kcachegrind查看所有这些内容,kcachegrind是一个用于可视化数据的很好的UI。

代码语言:javascript
复制
kcachegrind

它将允许您查看调用pthread_mutex_lock() (或其他)的所有函数,并按时间百分比查看其中最重要的函数。

callgrind最相关的部分是,你可以很容易地在单线程程序中找到瓶颈,因为你只需要查看占用cpu时间最多的函数。

在多线程程序中,函数长时间等待某个东西(互斥量)是一种正常情况,因此它更加困难。

您还可以使用valgrind中的工具Helgrind,该工具有助于查找使用互斥锁时的错误(潜在的死锁或潜在的数据竞争)。

我猜会分析你对同步函数的调用,以及你读/写的数据,通过分析你的同步和数据访问的Serializability一致性,来检测潜在的问题(1000000次以上可能发生的问题)。(我重复一遍:我想是的)。

代码语言:javascript
复制
valgrind --tool=helgrind --suppressions=$PWD/supp --gen-suppressions=yes --db-attach=yes --track-lockorders=no ./program

valgrind的核心特性:检查内存泄漏:

代码语言:javascript
复制
valgrind --leak-check=yes -v --db-attach=yes ./program
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7613304

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档