随笔-性能分析-lock overhead
IBM Locking overhead
https://www.ibm.com/docs/pt/aix/7.2?topic=locks-locking-overhead
Requesting locks, waiting for locks, and releasing locks add processing overhead.
-
A program that supports multiprocessing always does the same lock and unlock processing, even though it is running in a uniprocessor or is the only user in a multiprocessor system of the locks in question.
-
When one thread requests a lock held by another thread, the requesting thread may spin for a while or be put to sleep and, if possible, another thread dispatched. This consumes processor time.
-
The existence of widely used locks places an upper bound on the throughput of the system.
For example, if a given program spends 20 percent of its execution time holding a mutual-exclusion lock, at most five instances of that program can run simultaneously, regardless of the number of processors in the system.
In fact, even five instances would probably never be so nicely synchronized as to avoid waiting for one another (see Multiprocessor throughput scalability).
IBM - Waiting for locks
When a thread wants a lock already owned by another thread, the thread is blocked and must wait until the lock becomes free.
There are two different ways of waiting:
-
Spin locks are suitable for locks that are held only for very short times. It allows the waiting thread to keep its processor, repeatedly checking the lock bit in a tight loop (spin) until the lock becomes free. Spinning results in increased CPU time (system time for kernel or kernel extension locks).
-
Sleeping locks are suitable for locks that may be held for longer periods. The thread sleeps until the lock is free and is put back in the run queue when the lock becomes free. Sleeping results in more idle time.
Waiting always decreases system performance. If a spin lock is used, the processor is busy, but it is not doing useful work (not contributing to throughput). If a sleeping lock is used, the overhead of context switching and dispatching as well as the consequent increase in cache misses is incurred.
Operating system developers can choose between two types of locks: mutually exclusive simple locks that allow the process to spin and sleep while waiting for the lock to become available, and complex read-write locks that can spin and block the process while waiting for the lock to become available.
Conventions govern the rules about using locks. Neither hardware nor software has an enforcement or checking mechanism. Although using locks has made the AIX® Version 4 "MP Safe," developers are responsible to define and implement an appropriate locking strategy to protect their own global data.
kernel doc - lock stat
https://docs.kernel.org/locking/lockstat.html
__acquire
|
lock _____
| \
| __contended
| |
| <wait>
| _______/
|/
|
__acquired
|
.
<hold>
.
|
__release
|
unlock
lock, unlock - the regular lock functions
__* - the hooks
<> - states
Q: lock wait time and cpu wait time
/proc/stat 并没有wait time: https://www.man7.org/linux/man-pages/man5/proc_stat.5.html
top 中的wa就是/proc/stat的iowait: https://www.man7.org/linux/man-pages/man1/top.1.html
wa : time waiting for I/O completion
本文来自博客园,作者:LiYanbin,转载请注明原文链接:https://www.cnblogs.com/stellar-liyanbin/p/18384027
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
· 如何调用 DeepSeek 的自然语言处理 API 接口并集成到在线客服系统