rcu-updaters.sh 1.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
  1. #!/bin/sh
  2. # SPDX-License-Identifier: GPL-2.0+
  3. #
  4. # Run bpftrace to obtain a histogram of the types of primitives used to
  5. # initiate RCU grace periods. The count associated with rcu_gp_init()
  6. # is the number of normal (non-expedited) grace periods.
  7. #
  8. # Usage: rcu-updaters.sh [ duration-in-seconds ]
  9. #
  10. # Note that not all kernel builds have all of these functions. In those
  11. # that do not, this script will issue a diagnostic for each that is not
  12. # found, but continue normally for the rest of the functions.
  13. duration=${1}
  14. if test -n "${duration}"
  15. then
  16. exitclause='interval:s:'"${duration}"' { exit(); }'
  17. else
  18. echo 'Hit control-C to end sample and print results.'
  19. fi
  20. bpftrace -e 'kprobe:kvfree_call_rcu,
  21. kprobe:call_rcu,
  22. kprobe:call_rcu_tasks,
  23. kprobe:call_rcu_tasks_trace,
  24. kprobe:call_srcu,
  25. kprobe:rcu_barrier,
  26. kprobe:rcu_barrier_tasks,
  27. kprobe:rcu_barrier_tasks_trace,
  28. kprobe:srcu_barrier,
  29. kprobe:synchronize_rcu,
  30. kprobe:synchronize_rcu_expedited,
  31. kprobe:synchronize_rcu_tasks,
  32. kprobe:synchronize_rcu_tasks_rude,
  33. kprobe:synchronize_rcu_tasks_trace,
  34. kprobe:synchronize_srcu,
  35. kprobe:synchronize_srcu_expedited,
  36. kprobe:get_state_synchronize_rcu,
  37. kprobe:get_state_synchronize_rcu_full,
  38. kprobe:start_poll_synchronize_rcu,
  39. kprobe:start_poll_synchronize_rcu_expedited,
  40. kprobe:start_poll_synchronize_rcu_full,
  41. kprobe:start_poll_synchronize_rcu_expedited_full,
  42. kprobe:poll_state_synchronize_rcu,
  43. kprobe:poll_state_synchronize_rcu_full,
  44. kprobe:cond_synchronize_rcu,
  45. kprobe:cond_synchronize_rcu_full,
  46. kprobe:start_poll_synchronize_srcu,
  47. kprobe:poll_state_synchronize_srcu,
  48. kprobe:rcu_gp_init
  49. { @counts[func] = count(); } '"${exitclause}"