Linux

什麼是爭執?

  • July 7, 2018

我被要求測量寫入過程導致的鎖爭用。我正在查看該寫入過程的 lockstat 數據。

我的問題如下:

  1. 爭用是否與執行緒等待特定鎖的次數有關,因為它被另一個執行緒佔用,或者執行緒必須等待該鎖被釋放的時間?
  2. 將爭用計算為兩者的衡量標準是否正確:
  • 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.

參考

引用自:https://unix.stackexchange.com/questions/453857