如何衡量锁争用?

Zel*_*luX 6 statistics profiling locking

我正在阅读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
Run Code Online (Sandbox Code Playgroud)

我想知道这些统计数据来自哪里.我试过oprofile,但似乎oprofile无法测量特定锁的锁定和等待时间.而valgrind的drd会使应用程序放慢太多,这会使结果不准确并且消耗太多时间.mutrace似乎很好,但正如名称所指出的,我担心它只能追踪互斥排除.

那么有没有其他工具,或者如何使用我上面提到的工具来获取锁争用统计信息?

感谢您的回复.

Zel*_*luX 4

最后找到了文中使用的性能测量工具,需要给内核打补丁。

介绍页面可以在http://oss.sgi.com/projects/lockmeter/找到,最新的内核补丁对应内核版本2.6.16,可以在这里下载。