2016-06-21 67 views
0

我想在我的代碼中找到鎖爭用,並在標準systemtap版本中找到了futexes.stp。但我有與輸出幾個問題:如何解釋來自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的「info symbol」命令驗證它們,但是從stap自動將它解碼爲符號的方法是什麼?

我使用的Linux 4.6.2 mainline內核構建在同一個盒子上,最新的systemtap來自他們的git倉庫。我的cruncher應用程序是使用-g構建的,符號未被剝離。

非常感謝!

回答

0

lock 0x7f...地址是傳遞給futex(2)系統調用的用戶空間指針。該腳本只是逐字地存儲它們。它們可能會指向glibc pthreads-mutex類型對象的內部。

至於哪個對象...地址到符號查找階段將不得不被添加。它可能可以通過用另一個探測器攔截pthread互斥體初始化來組裝一個pthread鎖表。或者通過將usymdata(...)查找添加到傳入的futex地址。使用這兩種技術請參見mutex-contention.stp示例腳本。