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