2009-12-26 23 views
5

我讀http://lse.sourceforge.net/locking/dcache/dcache_lock.html,其中每個功能自旋鎖的時間進行測量:如何測量鎖爭用?

SPINLOCKS   HOLD   WAIT 
    UTIL CON MEAN( MAX) MEAN( MAX)(% CPU)  TOTAL NOWAIT SPIN RJECT NAME 
    5.3% 16.5% 0.6us(2787us) 5.0us(3094us)(0.89%) 15069563 83.5% 16.5% 0% dcache_lock 
0.01% 10.9% 0.2us(7.5us) 5.3us(116us)(0.00%) 119448 89.1% 10.9% 0% d_alloc+0x128 
0.04% 14.2% 0.3us( 42us) 6.3us(925us)(0.02%) 233290 85.8% 14.2% 0% d_delete+0x10 
0.00% 3.5% 0.2us(3.1us) 5.6us( 41us)(0.00%)  5050 96.5% 3.5% 0% d_delete+0x94 

我想知道這些統計數據是從哪裏來的。我嘗試了oprofile,但似乎oprofile無法測量鎖定持續時間和特定鎖定的等待時間。而valgrind的drd太慢了應用程序的運行速度,這會導致結果不準確,並且消耗太多時間。 mutrace看起來不錯,但正如名稱所指出的那樣,恐怕它只能追查互斥體排除。

那麼有沒有其他工具,或者如何使用我上面提到的工具來獲得鎖爭用統計?

感謝您的回覆。

回答

2

一種方法是讓它運行,暫停它,並採取所有線程的random stackshot。然後再做幾次。然後,以鎖定代碼終止的堆棧樣本的比例大致爲您所處的時間百分比。它還會告訴你在哪個位置執行鎖定。如果你準確的話,請多抽取一些樣本。這適用於任何語言或操作系統。