Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
torvalds
GitHub Repository: torvalds/linux
Path: blob/master/kernel/locking/lock_events_list.h
25923 views
1
/* SPDX-License-Identifier: GPL-2.0 */
2
/*
3
* This program is free software; you can redistribute it and/or modify
4
* it under the terms of the GNU General Public License as published by
5
* the Free Software Foundation; either version 2 of the License, or
6
* (at your option) any later version.
7
*
8
* This program is distributed in the hope that it will be useful,
9
* but WITHOUT ANY WARRANTY; without even the implied warranty of
10
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
* GNU General Public License for more details.
12
*
13
* Authors: Waiman Long <[email protected]>
14
*/
15
16
#ifndef LOCK_EVENT
17
#define LOCK_EVENT(name) LOCKEVENT_ ## name,
18
#endif
19
20
#ifdef CONFIG_QUEUED_SPINLOCKS
21
#ifdef CONFIG_PARAVIRT_SPINLOCKS
22
/*
23
* Locking events for PV qspinlock.
24
*/
25
LOCK_EVENT(pv_hash_hops) /* Average # of hops per hashing operation */
26
LOCK_EVENT(pv_kick_unlock) /* # of vCPU kicks issued at unlock time */
27
LOCK_EVENT(pv_kick_wake) /* # of vCPU kicks for pv_latency_wake */
28
LOCK_EVENT(pv_latency_kick) /* Average latency (ns) of vCPU kick */
29
LOCK_EVENT(pv_latency_wake) /* Average latency (ns) of kick-to-wakeup */
30
LOCK_EVENT(pv_lock_stealing) /* # of lock stealing operations */
31
LOCK_EVENT(pv_spurious_wakeup) /* # of spurious wakeups in non-head vCPUs */
32
LOCK_EVENT(pv_wait_again) /* # of wait's after queue head vCPU kick */
33
LOCK_EVENT(pv_wait_early) /* # of early vCPU wait's */
34
LOCK_EVENT(pv_wait_head) /* # of vCPU wait's at the queue head */
35
LOCK_EVENT(pv_wait_node) /* # of vCPU wait's at non-head queue node */
36
#endif /* CONFIG_PARAVIRT_SPINLOCKS */
37
38
/*
39
* Locking events for qspinlock
40
*
41
* Subtracting lock_use_node[234] from lock_slowpath will give you
42
* lock_use_node1.
43
*/
44
LOCK_EVENT(lock_pending) /* # of locking ops via pending code */
45
LOCK_EVENT(lock_slowpath) /* # of locking ops via MCS lock queue */
46
LOCK_EVENT(lock_use_node2) /* # of locking ops that use 2nd percpu node */
47
LOCK_EVENT(lock_use_node3) /* # of locking ops that use 3rd percpu node */
48
LOCK_EVENT(lock_use_node4) /* # of locking ops that use 4th percpu node */
49
LOCK_EVENT(lock_no_node) /* # of locking ops w/o using percpu node */
50
#endif /* CONFIG_QUEUED_SPINLOCKS */
51
52
/*
53
* Locking events for Resilient Queued Spin Lock
54
*/
55
LOCK_EVENT(rqspinlock_lock_timeout) /* # of locking ops that timeout */
56
57
/*
58
* Locking events for rwsem
59
*/
60
LOCK_EVENT(rwsem_sleep_reader) /* # of reader sleeps */
61
LOCK_EVENT(rwsem_sleep_writer) /* # of writer sleeps */
62
LOCK_EVENT(rwsem_wake_reader) /* # of reader wakeups */
63
LOCK_EVENT(rwsem_wake_writer) /* # of writer wakeups */
64
LOCK_EVENT(rwsem_opt_lock) /* # of opt-acquired write locks */
65
LOCK_EVENT(rwsem_opt_fail) /* # of failed optspins */
66
LOCK_EVENT(rwsem_opt_nospin) /* # of disabled optspins */
67
LOCK_EVENT(rwsem_rlock) /* # of read locks acquired */
68
LOCK_EVENT(rwsem_rlock_steal) /* # of read locks by lock stealing */
69
LOCK_EVENT(rwsem_rlock_fast) /* # of fast read locks acquired */
70
LOCK_EVENT(rwsem_rlock_fail) /* # of failed read lock acquisitions */
71
LOCK_EVENT(rwsem_rlock_handoff) /* # of read lock handoffs */
72
LOCK_EVENT(rwsem_wlock) /* # of write locks acquired */
73
LOCK_EVENT(rwsem_wlock_fail) /* # of failed write lock acquisitions */
74
LOCK_EVENT(rwsem_wlock_handoff) /* # of write lock handoffs */
75
76
/*
77
* Locking events for rtlock_slowlock()
78
*/
79
LOCK_EVENT(rtlock_slowlock) /* # of rtlock_slowlock() calls */
80
LOCK_EVENT(rtlock_slow_acq1) /* # of locks acquired after wait_lock */
81
LOCK_EVENT(rtlock_slow_acq2) /* # of locks acquired in for loop */
82
LOCK_EVENT(rtlock_slow_sleep) /* # of sleeps */
83
LOCK_EVENT(rtlock_slow_wake) /* # of wakeup's */
84
85
/*
86
* Locking events for rt_mutex_slowlock()
87
*/
88
LOCK_EVENT(rtmutex_slowlock) /* # of rt_mutex_slowlock() calls */
89
LOCK_EVENT(rtmutex_slow_block) /* # of rt_mutex_slowlock_block() calls */
90
LOCK_EVENT(rtmutex_slow_acq1) /* # of locks acquired after wait_lock */
91
LOCK_EVENT(rtmutex_slow_acq2) /* # of locks acquired at the end */
92
LOCK_EVENT(rtmutex_slow_acq3) /* # of locks acquired in *block() */
93
LOCK_EVENT(rtmutex_slow_sleep) /* # of sleeps */
94
LOCK_EVENT(rtmutex_slow_wake) /* # of wakeup's */
95
LOCK_EVENT(rtmutex_deadlock) /* # of rt_mutex_handle_deadlock()'s */
96
97
/*
98
* Locking events for lockdep
99
*/
100
LOCK_EVENT(lockdep_acquire)
101
LOCK_EVENT(lockdep_lock)
102
LOCK_EVENT(lockdep_nocheck)
103
104