一度我曾经很困惑,不晓得使用lock_alloc能为我们的代码带来什么好处,在暂时没看到好处的情形下,坏处倒是很明显,既然lock_alloc了,那么必然需要在不用的时候再lock_free掉,这在代码层面使用无疑有点麻烦,你得老是要记住这件事,不如直接在Simple_lock变量的情形下直接使用simple_lock_init来得爽快,因为没有内存的分配,自然也不需要考虑释放的问题。后来我仔细看了sys/lock_def.h里的注释,大约依稀明白使用lock_alloc是为了一个lock instrumentation功能而设计的,换言之,当以lock_alloc来使用lock时候,内核会分配一段内存用于lock instrumentation,这段内存其实不是给lock的caller使用的,是内核里的lock部分代码在用。有了lock instumentation的好处是什么呢?IBM文档的说法是:”Also, analysis of the lock statistics provided by lock instrumentation can be used to identify contention bottlenecks that may point out the need for additional locking or the need for the read and write locking capability provided by complex locks. “此处的意思就很明显了,由此我又查到了splat和trace,可惜还没来得及学习如何用。使用lock instrumentation是有前提条件的,那就是你的aix系统要使能了lock instrumentation,这个可以通过bosboot的-L参数实现。我试验过了,但是我不晓得如何在系统起来之后去验证一下”-L Enable MP locks instrumentation.”的确被turn ON了。
知道了lock instrumentation之后,我终于明白lock_alloc里的第三个参数class的意义了,但是occurrence还是很困扰我。