我试图在我的代码中找到锁争用,并在标准 systemtap 版本中找到了 futexes.stp。但是我对输出有几个问题:
stap -d /usr/local/bin/cruncher ~/futexes.stp
(and then I run cruncher application in another term)
auditd[1803] lock 0x564dd507f228 contended 2 times, 119 avg us
auditd[1803] lock 0x564dd507f254 contended 28 times, 458040 avg us
rs:main Q:Reg[1837] lock 0x5563b67c2044 contended 7 times, 2352067 avg us
...
cruncher[17021] lock 0x7f6c9c57914c contended 2 times, 46 avg us
cruncher[17021] lock 0x7eff50 contended 82 times, 16 avg us
cruncher[17021] lock 0x7f6c40901f24 contended 20 times, 109 avg us
cruncher[17021] lock 0x7f6f38e0633c contended 4471 times, 2106 avg us
cruncher[17021] lock 0x7dae7c0 contended 8861 times, 26 avg us
cruncher[17021] lock 0x7f6cc2f14560 contended 2 times, 9 avg us
cruncher[17021] lock 0x7f6c8685d024 contended 5 times, 95 avg us
cruncher[17021] lock 0x7f6cd9e2ded4 contended 6 times, 428 avg us
cruncher[17021] lock 0x7f6c5196937c contended 44 times, 484 avg us
cruncher[17021] lock 0x7f6ba20c0290 contended 4 times, 8 avg us
...
所以这里有问题:
0x7f........堆栈地址的所有这些构造是什么?我确定它不是来自我的应用程序。这些库或内核互斥体(或 condvars)是否代表我的应用程序?我该如何验证?
那些地址短的“锁”是我的。我可以使用 gdb 的“信息符号”命令验证它们,但是从 stap 自动将其解码为符号的好方法是什么?
我正在使用构建在同一个机器上的 Linux 4.6.2 主线内核,以及来自他们的 git 存储库的最新 systemtap。我的 cruncher 应用程序是使用 -g 构建的,并且没有删除符号。
提前非常感谢!