首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在linux中分析pthread互斥?

如何在linux中分析pthread互斥?
EN

Stack Overflow用户
提问于 2012-06-01 22:56:31
回答 5查看 9.4K关注 0票数 21

我想知道如何分析pthread互斥,以查看我的代码中是否有任何锁定争用点。(谁喜欢有争议的代码,对吧?:)正如我提到的here,我知道如何对代码进行更一般的分析。但我想知道是否有任何可用的工具或选项来分析互斥锁,这些工具或选项可以提供有关互斥锁争用的度量/统计信息,以查看我是否有任何问题区域。

下面是一些背景和背景:

最近,我使用Cavium Octeon CPU参与了一个嵌入式C++项目。Octeon SDK使用自旋锁实现互斥锁风格的同步。浏览Octeon文档时,我遇到了一种分析自旋锁的方法,以便能够查看在等待锁可用时每个自旋锁必须旋转多少次。为了使用它,我必须做一个条件编译,然后它会在每次自旋锁旋转时增加一个计数器,然后我可以查询旋转等待值。因此,我所做的是封装自旋锁,并为系统中使用的所有自旋锁添加了转储自旋锁旋转等待值的功能。实际的值并不意味着什么,但有一些与其他值相比确实很高,我专注于减少对这些值的争用。

我知道这对于自旋锁来说可能很简单,因为它只是一个计数器,但通过阅读相关的pthread手册页和头文件,我没有发现任何类似的东西,pthread mutex有什么可用的吗?

我真的希望避免做一些麻烦的事情,比如在每个锁之前和之后花费时间。

PS:互斥的复数是什么?互斥,互斥?Mutexes对我来说从来都不合适。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-06-01 23:29:23

valgrind工具drd允许您指定在报告错误之前等待锁的时间限制。

这个site提到了drd,也提到了他们自己的工具,叫做mutrace,看起来就是你想要的那种工具。它告诉你:

  • 一个互斥锁被锁定的次数
  • 拥有互斥锁的线程更改了多少次互斥锁争用了多少次互斥锁(当锁定请求被锁定时已经锁定了

锁定互斥锁的持续时间的统计信息

例如:

代码语言:javascript
运行
复制
mutrace: 10 most contended mutexes:

 Mutex #   Locked  Changed    Cont. tot.Time[ms] avg.Time[ms] max.Time[ms]       Type
      35   368268      407      275      120,822        0,000        0,894     normal
       5   234645      100       21       86,855        0,000        0,494     normal
      26   177324       47        4       98,610        0,001        0,150     normal
      19    55758       53        2       23,931        0,000        0,092     normal
      53      106       73        1        0,769        0,007        0,160     normal
      25    15156       70        1        6,633        0,000        0,019     normal
       4      973       10        1        4,376        0,004        0,174     normal
      75       68       62        0        0,038        0,001        0,004     normal
       9     1663       52        0        1,068        0,001        0,412     normal
       3   136553       41        0       61,408        0,000        0,281     normal
     ...      ...      ...      ...          ...          ...          ...        ...

mutrace: Total runtime 9678,142 ms.
票数 15
EN

Stack Overflow用户

发布于 2012-06-01 23:21:13

你没有提到你的操作系统。如果是linux,我已经用过相当多的LTT来进行这种分析。它在两种模式下都很有用:

  1. 性能评测--例如,评测您的系统在N秒的标准使用时间内,然后分析data
  2. 异常评测--例如,以“飞行记录器”模式全天候运行它(记录最后N秒的活动),在某些异常情况下触发飞行记录仪停止。第二天早上来分析数据。

多年来,我一直在使用和看到“mutex”作为mutex的复数,没有任何抱怨。;>

票数 3
EN

Stack Overflow用户

发布于 2012-08-14 15:15:22

我在探索相同的用例时发现了'mutrace'。不过,我还没有使用它。它听起来不错,因为它不会像valgrind那样影响运行时。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10852637

复制
相关文章

相似问题

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