我想分析同步操作,比如Linux中互斥锁、信号量等的锁定和解锁。
我知道它们本质上是使用futexes实现的,所以也许分析futexes的锁定和解锁就足够了(如果我错了,请纠正我)。所以我的问题是如何分析它,因为futex操作通常发生在用户空间。他们有什么工具可以让我分析一下吗?
我基本上感兴趣的是了解锁定futexes和频率的函数。
发布于 2011-10-01 01:15:16
你可能对valgrind感兴趣,它是工具callgrind。
valgrind --trace-children=yes --tool=callgrind -v ./program它将生成一个详细的调用图到一个文件中,其中包括每个函数经过的时间量。
然后,您可以使用kcachegrind查看所有这些内容,kcachegrind是一个用于可视化数据的很好的UI。
kcachegrind它将允许您查看调用pthread_mutex_lock() (或其他)的所有函数,并按时间百分比查看其中最重要的函数。
callgrind最相关的部分是,你可以很容易地在单线程程序中找到瓶颈,因为你只需要查看占用cpu时间最多的函数。
在多线程程序中,函数长时间等待某个东西(互斥量)是一种正常情况,因此它更加困难。
您还可以使用valgrind中的工具Helgrind,该工具有助于查找使用互斥锁时的错误(潜在的死锁或潜在的数据竞争)。
我猜会分析你对同步函数的调用,以及你读/写的数据,通过分析你的同步和数据访问的Serializability一致性,来检测潜在的问题(1000000次以上可能发生的问题)。(我重复一遍:我想是的)。
valgrind --tool=helgrind --suppressions=$PWD/supp --gen-suppressions=yes --db-attach=yes --track-lockorders=no ./programvalgrind的核心特性:检查内存泄漏:
valgrind --leak-check=yes -v --db-attach=yes ./programhttps://stackoverflow.com/questions/7613304
复制相似问题