lock_events_list.h 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  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 <longman@redhat.com>
  14. */
  15. #ifndef LOCK_EVENT
  16. #define LOCK_EVENT(name) LOCKEVENT_ ## name,
  17. #endif
  18. #ifdef CONFIG_QUEUED_SPINLOCKS
  19. #ifdef CONFIG_PARAVIRT_SPINLOCKS
  20. /*
  21. * Locking events for PV qspinlock.
  22. */
  23. LOCK_EVENT(pv_hash_hops) /* Average # of hops per hashing operation */
  24. LOCK_EVENT(pv_kick_unlock) /* # of vCPU kicks issued at unlock time */
  25. LOCK_EVENT(pv_kick_wake) /* # of vCPU kicks for pv_latency_wake */
  26. LOCK_EVENT(pv_latency_kick) /* Average latency (ns) of vCPU kick */
  27. LOCK_EVENT(pv_latency_wake) /* Average latency (ns) of kick-to-wakeup */
  28. LOCK_EVENT(pv_lock_stealing) /* # of lock stealing operations */
  29. LOCK_EVENT(pv_spurious_wakeup) /* # of spurious wakeups in non-head vCPUs */
  30. LOCK_EVENT(pv_wait_again) /* # of wait's after queue head vCPU kick */
  31. LOCK_EVENT(pv_wait_early) /* # of early vCPU wait's */
  32. LOCK_EVENT(pv_wait_head) /* # of vCPU wait's at the queue head */
  33. LOCK_EVENT(pv_wait_node) /* # of vCPU wait's at non-head queue node */
  34. #endif /* CONFIG_PARAVIRT_SPINLOCKS */
  35. /*
  36. * Locking events for qspinlock
  37. *
  38. * Subtracting lock_use_node[234] from lock_slowpath will give you
  39. * lock_use_node1.
  40. */
  41. LOCK_EVENT(lock_pending) /* # of locking ops via pending code */
  42. LOCK_EVENT(lock_slowpath) /* # of locking ops via MCS lock queue */
  43. LOCK_EVENT(lock_use_node2) /* # of locking ops that use 2nd percpu node */
  44. LOCK_EVENT(lock_use_node3) /* # of locking ops that use 3rd percpu node */
  45. LOCK_EVENT(lock_use_node4) /* # of locking ops that use 4th percpu node */
  46. LOCK_EVENT(lock_no_node) /* # of locking ops w/o using percpu node */
  47. #endif /* CONFIG_QUEUED_SPINLOCKS */
  48. /*
  49. * Locking events for rwsem
  50. */
  51. LOCK_EVENT(rwsem_sleep_reader) /* # of reader sleeps */
  52. LOCK_EVENT(rwsem_sleep_writer) /* # of writer sleeps */
  53. LOCK_EVENT(rwsem_wake_reader) /* # of reader wakeups */
  54. LOCK_EVENT(rwsem_wake_writer) /* # of writer wakeups */
  55. LOCK_EVENT(rwsem_opt_rlock) /* # of opt-acquired read locks */
  56. LOCK_EVENT(rwsem_opt_wlock) /* # of opt-acquired write locks */
  57. LOCK_EVENT(rwsem_opt_fail) /* # of failed optspins */
  58. LOCK_EVENT(rwsem_opt_nospin) /* # of disabled optspins */
  59. LOCK_EVENT(rwsem_opt_norspin) /* # of disabled reader-only optspins */
  60. LOCK_EVENT(rwsem_opt_rlock2) /* # of opt-acquired 2ndary read locks */
  61. LOCK_EVENT(rwsem_rlock) /* # of read locks acquired */
  62. LOCK_EVENT(rwsem_rlock_fast) /* # of fast read locks acquired */
  63. LOCK_EVENT(rwsem_rlock_fail) /* # of failed read lock acquisitions */
  64. LOCK_EVENT(rwsem_rlock_handoff) /* # of read lock handoffs */
  65. LOCK_EVENT(rwsem_wlock) /* # of write locks acquired */
  66. LOCK_EVENT(rwsem_wlock_fail) /* # of failed write lock acquisitions */
  67. LOCK_EVENT(rwsem_wlock_handoff) /* # of write lock handoffs */