Linux
什麼是爭執?
我被要求測量寫入過程導致的鎖爭用。我正在查看該寫入過程的 lockstat 數據。
我的問題如下:
- 爭用是否與執行緒等待特定鎖的次數有關,因為它被另一個執行緒佔用,或者執行緒必須等待該鎖被釋放的時間?
- 將爭用計算為兩者的衡量標準是否正確:
- nsec(執行緒必須等待事件發生/鎖定才能釋放的平均時間)和
- cnt(事件發生的次數)
從 lockstat 收集的特定鎖的分析數據?即爭用 ~ nsec * cnt
查看 Linux 核心文件,看起來它正在等待釋放鎖。
- HOW Lockdep already has hooks in the lock functions and maps lock instances to lock classes. We build on that (see Documentation/locking/lockdep-design.txt). The graph below shows the relation between the lock functions and the various hooks therein. __acquire | lock _____ | \ | __contended | | | <wait> | _______/ |/ | __acquired | . <hold> . | __release | unlock lock, unlock - the regular lock functions __* - the hooks <> - states
**注意:**看看那個連結,它也顯示了用法。
測量爭用
順便說一句,您也可以/可以使用
mutrace
來計算給定執行檔的爭用。在這篇題為“測量鎖爭用”的文章中對此進行了討論。例如
$ LD_PRELOAD=/home/lennart/projects/mutrace/libmutrace.so gedit mutrace: 0.1 sucessfully initialized. mutrace: 10 most contended mutexes: Mutex # Locked Changed Cont. tot.Time[ms] avg.Time[ms] max.Time[ms] Type 35 368268 407 275 120,822 0,000 0,894 normal 5 234645 100 21 86,855 0,000 0,494 normal 26 177324 47 4 98,610 0,001 0,150 normal 19 55758 53 2 23,931 0,000 0,092 normal 53 106 73 1 0,769 0,007 0,160 normal 25 15156 70 1 6,633 0,000 0,019 normal 4 973 10 1 4,376 0,004 0,174 normal 75 68 62 0 0,038 0,001 0,004 normal 9 1663 52 0 1,068 0,001 0,412 normal 3 136553 41 0 61,408 0,000 0,281 normal ... ... ... ... ... ... ... ... mutrace: Total runtime 9678,142 ms.
參考