Bra*_*ady 19 c c++ performance mutex pthreads
我想知道如何配置pthread互斥锁以查看我的代码中是否存在任何锁定争用点.(谁喜欢有争议的代码,对吧?:)我知道如何对代码进行更一般的分析,正如我在这里提到的那样.但我想知道是否有任何工具或选项可用于配置互斥锁定,这将提供有关互斥锁定争用的指标/统计数据,以查看我是否有任何问题区域.
这是一些背景和背景:
最近我使用Cavium Octeon CPU开发了一个嵌入式C++项目.Octeon SDK使用自旋锁实现互斥式样式同步.通过Octeon文档,我发现了一种分析自旋锁的方法,以便能够看到每个自旋锁在等待锁变为可用时必须旋转多少次.要使用它,我必须进行条件编译,然后每次自旋锁旋转时它会递增一个计数器,然后我可以查询微调器等待值.所以,我所做的是封装自旋锁并添加了为系统中使用的所有自旋锁转储自旋锁微调器等待值的功能.实际价值并没有多大意义,但有一些与其他人相比具有非常高的价值,我专注于减少对这些人的争论.
我知道这对于自旋锁来说可能相当容易,因为它只是每次旋转一个计数器,但通过相关的pthread手册页和头文件读取我没有找到类似的东西,是否有可用于pthread互斥锁?
我真的很想避免像每个锁之前和之后花时间做一些hacky.
PS:互斥体的复数是多少?互斥,muteces,mutexi,muti ??? 互斥量从来没有对我说话.
The*_*ice 13
该valgrind工具DRD允许您指定多长时间的锁定限制报告错误之前等待上的限制.
这个网站提到drd并提到了他们自己的工具mutrace,看起来就像你正在使用的那种工具.它告诉你:
例如
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.
Run Code Online (Sandbox Code Playgroud)