我想在Linux中configuration同步操作,例如locking和解锁互斥锁,信号量等。
我深知他们是使用futexes来实现的,所以也许这足以描述futexes的locking和解锁(请纠正我,如果我在这里错了)。 所以我的问题是如何configuration它,因为futex操作通常发生在用户空间。 他们有什么工具可以让我分析这个?
我基本上有兴趣知道lockingfutexes和频率的function。
你可能会感兴趣的Valgrind和它的工具callgrind。
valgrind --trace-children=yes --tool=callgrind -v ./program
它会在文件中生成一个详细的调用图,其中包括每个函数中传递的时间量。
然后你可以用kcachegrind看到所有这些,这是一个很好的UI来显示数据。
kcachegrind
它将允许你看到所有的函数调用pthread_mutex_lock()(或其他),其中,最高的,按时间百分比…
callgrind最相关的部分是,你可以很容易地找到单线程的瓶颈,因为你只需要看看花费最多的CPU时间的功能。
在多线程程序中,一个等待很长时间的东西(一个互斥锁)是一个正常的条件,所以它比较困难。
您也可以使用valgrind中的Helgrind工具,它可以帮助您在使用互斥锁(潜在的死锁或潜在的数据竞争)时发现错误。
我想通过分析您的同步和数据访问的可串行化一致性来分析您对同步函数的调用以及您读/写的数据,以检测潜在问题(可能发生超过1000000次的问题)。 (我重复一遍:我猜)。
valgrind --tool=helgrind --suppressions=$PWD/supp --gen-suppressions=yes --db-attach=yes --track-lockorders=no ./program
而valgrind的核心功能:检查内存泄漏:
valgrind --leak-check=yes -v --db-attach=yes ./program