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