什么是争用?

什么是争用?

我被要求测量写入过程引起的锁争用。我正在查看该写入过程的锁定状态数据。

我的问题如下:

  1. 争用是否与线程等待特定锁的次数(因为该锁被另一个线程占用)或线程必须等待该锁被释放的时间有关?

  2. 计算争用作为两者的衡量标准是否正确:

    • 纳秒(线程必须等待事件发生/锁定释放的平均时间)和
    • cnt(事件发生的次数)

    从特定锁的 lockstat 收集的分析数据?即争用 ~ nsec * cnt

答案1

查看 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.

参考

相关内容