51 lines · bash
1#!/bin/sh2# SPDX-License-Identifier: GPL-2.0+3#4# Run bpftrace to obtain a histogram of the types of primitives used to5# 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 those11# that do not, this script will issue a diagnostic for each that is not12# found, but continue normally for the rest of the functions.13 14duration=${1}15if test -n "${duration}"16then17 exitclause='interval:s:'"${duration}"' { exit(); }'18else19 echo 'Hit control-C to end sample and print results.'20fi21bpftrace -e 'kprobe:kvfree_call_rcu,22 kprobe:call_rcu,23 kprobe:call_rcu_tasks,24 kprobe:call_rcu_tasks_trace,25 kprobe:call_srcu,26 kprobe:rcu_barrier,27 kprobe:rcu_barrier_tasks,28 kprobe:rcu_barrier_tasks_trace,29 kprobe:srcu_barrier,30 kprobe:synchronize_rcu,31 kprobe:synchronize_rcu_expedited,32 kprobe:synchronize_rcu_tasks,33 kprobe:synchronize_rcu_tasks_rude,34 kprobe:synchronize_rcu_tasks_trace,35 kprobe:synchronize_srcu,36 kprobe:synchronize_srcu_expedited,37 kprobe:get_state_synchronize_rcu,38 kprobe:get_state_synchronize_rcu_full,39 kprobe:start_poll_synchronize_rcu,40 kprobe:start_poll_synchronize_rcu_expedited,41 kprobe:start_poll_synchronize_rcu_full,42 kprobe:start_poll_synchronize_rcu_expedited_full,43 kprobe:poll_state_synchronize_rcu,44 kprobe:poll_state_synchronize_rcu_full,45 kprobe:cond_synchronize_rcu,46 kprobe:cond_synchronize_rcu_full,47 kprobe:start_poll_synchronize_srcu,48 kprobe:poll_state_synchronize_srcu,49 kprobe:rcu_gp_init50 { @counts[func] = count(); } '"${exitclause}"51