perf lock 锁剖析深入
更新时间:2026-10-01。已有 perf lock,本文讲它能测什么、边界在哪。
一、原理
perf lock 利用内核锁 tracepoint(lock:contention、acquire、release)重建锁状态,统计每把锁:acquire 次数、等待时间(争用)、持有时间。先 perf lock record 再 perf lock report,按等待时间排序找热点锁。
二、边界
- 无争用的快速获取开销小且不构成问题;关注点应是等待总和。
- 用户态 pthread 互斥量在非竞争/快速路径可能不进内核、不触发相关事件,perf lock 主要覆盖内核锁和经 futex 的等待;纯用户自旋要用其它计数(如 sched 切换/自定义探针)。

三、常见坑
- 把获取次数多当争用严重(要看等待)。
- 以为用户态自旋都能被 perf lock 抓到。
- 优化后不对比等待时间。
小结
perf lock 用等待/持有时长定位热点锁,但对纯用户态快速路径覆盖有限;优化靠缩小临界区与分片。下一篇 perf kmem 与 slab。
总结
perf lock 利用 lock:contention/acquire/release tracepoint 重建锁状态,统计每把锁的获取次数、等待时间和持有时长,按等待排序即可揪出热点锁——获取次数多不等于争用严重,无争用的快速获取开销很小、关注点应是等待总和;它主要覆盖内核锁和经 futex 的等待,纯用户态自旋的快速路径不进内核、抓不到,修复靠缩小临界区、分片或换锁,改完务必对比等待时间复测。