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