1*387f9dfdSAndroid Build Coastguard WorkerDemonstrations of funccount, the Linux eBPF/bcc version. 2*387f9dfdSAndroid Build Coastguard Worker 3*387f9dfdSAndroid Build Coastguard Worker 4*387f9dfdSAndroid Build Coastguard WorkerThis program traces functions, tracepoints, or USDT probes that match a 5*387f9dfdSAndroid Build Coastguard Workerspecified pattern, and when Ctrl-C is hit prints a summary of their count 6*387f9dfdSAndroid Build Coastguard Workerwhile tracing. Eg, tracing all kernel functions that begin with "vfs_": 7*387f9dfdSAndroid Build Coastguard Worker 8*387f9dfdSAndroid Build Coastguard Worker# ./funccount 'vfs_*' 9*387f9dfdSAndroid Build Coastguard WorkerTracing... Ctrl-C to end. 10*387f9dfdSAndroid Build Coastguard Worker^C 11*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 12*387f9dfdSAndroid Build Coastguard Workervfs_create 1 13*387f9dfdSAndroid Build Coastguard Workervfs_rename 1 14*387f9dfdSAndroid Build Coastguard Workervfs_fsync_range 2 15*387f9dfdSAndroid Build Coastguard Workervfs_lock_file 30 16*387f9dfdSAndroid Build Coastguard Workervfs_fstatat 152 17*387f9dfdSAndroid Build Coastguard Workervfs_fstat 154 18*387f9dfdSAndroid Build Coastguard Workervfs_write 166 19*387f9dfdSAndroid Build Coastguard Workervfs_getattr_nosec 262 20*387f9dfdSAndroid Build Coastguard Workervfs_getattr 262 21*387f9dfdSAndroid Build Coastguard Workervfs_open 264 22*387f9dfdSAndroid Build Coastguard Workervfs_read 470 23*387f9dfdSAndroid Build Coastguard WorkerDetaching... 24*387f9dfdSAndroid Build Coastguard Worker 25*387f9dfdSAndroid Build Coastguard WorkerThe above output shows that while tracing the vfs_read() function was called 470 26*387f9dfdSAndroid Build Coastguard Workertimes, and vfs_open() 264 times, etc. 27*387f9dfdSAndroid Build Coastguard Worker 28*387f9dfdSAndroid Build Coastguard WorkerThis is useful for exploring kernel code, to figure out which functions are in 29*387f9dfdSAndroid Build Coastguard Workeruse and which are not. This can narrow down an investigation to just a few 30*387f9dfdSAndroid Build Coastguard Workerfunctions, whose counts are similar to the workload investigated. 31*387f9dfdSAndroid Build Coastguard Worker 32*387f9dfdSAndroid Build Coastguard Worker 33*387f9dfdSAndroid Build Coastguard WorkerTracing all tcp functions: 34*387f9dfdSAndroid Build Coastguard Worker 35*387f9dfdSAndroid Build Coastguard Worker# ./funccount 'tcp_*' 36*387f9dfdSAndroid Build Coastguard WorkerTracing... Ctrl-C to end. 37*387f9dfdSAndroid Build Coastguard Worker^C 38*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 39*387f9dfdSAndroid Build Coastguard Workertcp_try_undo_recovery 1 40*387f9dfdSAndroid Build Coastguard Workertcp_twsk_destructor 1 41*387f9dfdSAndroid Build Coastguard Workertcp_enter_recovery 1 42*387f9dfdSAndroid Build Coastguard Workertcp_xmit_retransmit_queue 1 43*387f9dfdSAndroid Build Coastguard Workertcp_update_scoreboard 1 44*387f9dfdSAndroid Build Coastguard Workertcp_verify_retransmit_hint 1 45*387f9dfdSAndroid Build Coastguard Workertcp_tsq_handler.part.31 1 46*387f9dfdSAndroid Build Coastguard Workertcp_sacktag_write_queue 1 47*387f9dfdSAndroid Build Coastguard Workertcp_match_skb_to_sack 1 48*387f9dfdSAndroid Build Coastguard Workertcp_time_wait 1 49*387f9dfdSAndroid Build Coastguard Workertcp_mark_head_lost 1 50*387f9dfdSAndroid Build Coastguard Workertcp_init_cwnd_reduction 1 51*387f9dfdSAndroid Build Coastguard Workertcp_sacktag_one 1 52*387f9dfdSAndroid Build Coastguard Workertcp_sacktag_walk 1 53*387f9dfdSAndroid Build Coastguard Workertcp_retransmit_skb 1 54*387f9dfdSAndroid Build Coastguard Workertcp_tasklet_func 1 55*387f9dfdSAndroid Build Coastguard Workertcp_resume_early_retransmit 1 56*387f9dfdSAndroid Build Coastguard Workertcp_dsack_set 1 57*387f9dfdSAndroid Build Coastguard Workertcp_v4_syn_recv_sock 2 58*387f9dfdSAndroid Build Coastguard Workertcp_ca_openreq_child 2 59*387f9dfdSAndroid Build Coastguard Workertcp_try_fastopen 2 60*387f9dfdSAndroid Build Coastguard Workertcp_openreq_init_rwin 2 61*387f9dfdSAndroid Build Coastguard Workertcp_v4_init_req 2 62*387f9dfdSAndroid Build Coastguard Workertcp_create_openreq_child 2 63*387f9dfdSAndroid Build Coastguard Workertcp_v4_send_synack 2 64*387f9dfdSAndroid Build Coastguard Workertcp_v4_init_sequence 2 65*387f9dfdSAndroid Build Coastguard Workertcp_fragment 2 66*387f9dfdSAndroid Build Coastguard Workertcp_v4_conn_request 2 67*387f9dfdSAndroid Build Coastguard Workertcp_conn_request 2 68*387f9dfdSAndroid Build Coastguard Workertcp_v4_route_req 2 69*387f9dfdSAndroid Build Coastguard Workertcp_fragment_tstamp 2 70*387f9dfdSAndroid Build Coastguard Workertcp_try_keep_open 2 71*387f9dfdSAndroid Build Coastguard Workertcp_v4_reqsk_destructor 2 72*387f9dfdSAndroid Build Coastguard Workertcp_may_send_now 2 73*387f9dfdSAndroid Build Coastguard Workertcp_make_synack 2 74*387f9dfdSAndroid Build Coastguard Workertcp_child_process 2 75*387f9dfdSAndroid Build Coastguard Workertcp_check_req 2 76*387f9dfdSAndroid Build Coastguard Workertcp_fastretrans_alert 2 77*387f9dfdSAndroid Build Coastguard Workertcp_set_keepalive 2 78*387f9dfdSAndroid Build Coastguard Workertcp_finish_connect 3 79*387f9dfdSAndroid Build Coastguard Workertcp_connect_queue_skb 3 80*387f9dfdSAndroid Build Coastguard Workertcp_v4_connect 3 81*387f9dfdSAndroid Build Coastguard Workertcp_init_sock 3 82*387f9dfdSAndroid Build Coastguard Workertcp_v4_init_sock 3 83*387f9dfdSAndroid Build Coastguard Workertcp_connect 3 84*387f9dfdSAndroid Build Coastguard Workertcp_any_retrans_done.part.35 3 85*387f9dfdSAndroid Build Coastguard Workertcp_clear_retrans 3 86*387f9dfdSAndroid Build Coastguard Workertcp_setsockopt 4 87*387f9dfdSAndroid Build Coastguard Workertcp_update_metrics 5 88*387f9dfdSAndroid Build Coastguard Workertcp_done 5 89*387f9dfdSAndroid Build Coastguard Workertcp_initialize_rcv_mss 5 90*387f9dfdSAndroid Build Coastguard Workertcp_sndbuf_expand 5 91*387f9dfdSAndroid Build Coastguard Workertcp_fin 5 92*387f9dfdSAndroid Build Coastguard Workertcp_init_xmit_timers 5 93*387f9dfdSAndroid Build Coastguard Workertcp_close 5 94*387f9dfdSAndroid Build Coastguard Workertcp_init_congestion_control 5 95*387f9dfdSAndroid Build Coastguard Workertcp_init_metrics 5 96*387f9dfdSAndroid Build Coastguard Workertcp_gro_complete 5 97*387f9dfdSAndroid Build Coastguard Workertcp_free_fastopen_req 5 98*387f9dfdSAndroid Build Coastguard Workertcp_v4_destroy_sock 5 99*387f9dfdSAndroid Build Coastguard Workertcp_cleanup_congestion_control 5 100*387f9dfdSAndroid Build Coastguard Workertcp_send_fin 5 101*387f9dfdSAndroid Build Coastguard Workertcp_init_buffer_space 5 102*387f9dfdSAndroid Build Coastguard Workertcp_init_cwnd 5 103*387f9dfdSAndroid Build Coastguard Workertcp_select_initial_window 5 104*387f9dfdSAndroid Build Coastguard Workertcp_check_oom 5 105*387f9dfdSAndroid Build Coastguard Workertcp_default_init_rwnd 5 106*387f9dfdSAndroid Build Coastguard Workertcp_assign_congestion_control 5 107*387f9dfdSAndroid Build Coastguard Workertcp_getsockopt 6 108*387f9dfdSAndroid Build Coastguard Workertcp_ioctl 6 109*387f9dfdSAndroid Build Coastguard Workertcp_mtup_init 8 110*387f9dfdSAndroid Build Coastguard Workertcp_parse_options 8 111*387f9dfdSAndroid Build Coastguard Workertcp_mss_to_mtu 8 112*387f9dfdSAndroid Build Coastguard Workertcp_try_rmem_schedule 8 113*387f9dfdSAndroid Build Coastguard Workertcp_get_metrics 10 114*387f9dfdSAndroid Build Coastguard Workertcp_try_coalesce 10 115*387f9dfdSAndroid Build Coastguard Workertcp_rcv_state_process 14 116*387f9dfdSAndroid Build Coastguard Workertcp_sync_mss 14 117*387f9dfdSAndroid Build Coastguard Workertcp_write_timer_handler 15 118*387f9dfdSAndroid Build Coastguard Workertcp_write_timer 16 119*387f9dfdSAndroid Build Coastguard Workertcp_grow_window.isra.27 22 120*387f9dfdSAndroid Build Coastguard Workertcp_set_state 23 121*387f9dfdSAndroid Build Coastguard Workertcp_send_ack 37 122*387f9dfdSAndroid Build Coastguard Workertcp_delack_timer 42 123*387f9dfdSAndroid Build Coastguard Workertcp_delack_timer_handler 42 124*387f9dfdSAndroid Build Coastguard Workertcp_validate_incoming 91 125*387f9dfdSAndroid Build Coastguard Workertcp_prequeue_process 112 126*387f9dfdSAndroid Build Coastguard Workertcp_v4_early_demux 117 127*387f9dfdSAndroid Build Coastguard Workertcp_gro_receive 146 128*387f9dfdSAndroid Build Coastguard Workertcp_queue_rcv 167 129*387f9dfdSAndroid Build Coastguard Workertcp_data_queue 215 130*387f9dfdSAndroid Build Coastguard Workertcp_urg 219 131*387f9dfdSAndroid Build Coastguard Workertcp_send_delayed_ack 257 132*387f9dfdSAndroid Build Coastguard Workertcp_send_mss 275 133*387f9dfdSAndroid Build Coastguard Workertcp_push 275 134*387f9dfdSAndroid Build Coastguard Workertcp_sendmsg 275 135*387f9dfdSAndroid Build Coastguard Workertcp_event_data_recv 275 136*387f9dfdSAndroid Build Coastguard Workertcp_nagle_check 279 137*387f9dfdSAndroid Build Coastguard Workertcp_write_xmit 282 138*387f9dfdSAndroid Build Coastguard Workertcp_event_new_data_sent 282 139*387f9dfdSAndroid Build Coastguard Workertcp_current_mss 284 140*387f9dfdSAndroid Build Coastguard Workertcp_init_tso_segs 284 141*387f9dfdSAndroid Build Coastguard Workertcp_wfree 286 142*387f9dfdSAndroid Build Coastguard Workertcp_schedule_loss_probe 305 143*387f9dfdSAndroid Build Coastguard Workertcp_v4_send_check 323 144*387f9dfdSAndroid Build Coastguard Workertcp_transmit_skb 323 145*387f9dfdSAndroid Build Coastguard Workertcp_recvmsg 323 146*387f9dfdSAndroid Build Coastguard Workertcp_options_write 325 147*387f9dfdSAndroid Build Coastguard Workertcp_rcv_space_adjust 328 148*387f9dfdSAndroid Build Coastguard Workertcp_check_space 332 149*387f9dfdSAndroid Build Coastguard Workertcp_rcv_established 337 150*387f9dfdSAndroid Build Coastguard Workertcp_ack 337 151*387f9dfdSAndroid Build Coastguard Workertcp_parse_aligned_timestamp.part.43 345 152*387f9dfdSAndroid Build Coastguard Workertcp_prequeue 346 153*387f9dfdSAndroid Build Coastguard Workertcp_v4_do_rcv 351 154*387f9dfdSAndroid Build Coastguard Workertcp_v4_rcv 351 155*387f9dfdSAndroid Build Coastguard Workertcp_parse_md5sig_option 351 156*387f9dfdSAndroid Build Coastguard Workertcp_cleanup_rbuf 436 157*387f9dfdSAndroid Build Coastguard Workertcp_poll 468 158*387f9dfdSAndroid Build Coastguard Workertcp_established_options 604 159*387f9dfdSAndroid Build Coastguard Workertcp_v4_md5_lookup 615 160*387f9dfdSAndroid Build Coastguard Workertcp_release_cb 736 161*387f9dfdSAndroid Build Coastguard Workertcp_rearm_rto 843 162*387f9dfdSAndroid Build Coastguard Workertcp_md5_do_lookup 968 163*387f9dfdSAndroid Build Coastguard WorkerDetaching... 164*387f9dfdSAndroid Build Coastguard Worker 165*387f9dfdSAndroid Build Coastguard WorkerThe current implementation can take many seconds to detach from tracing, after 166*387f9dfdSAndroid Build Coastguard WorkerCtrl-C has been hit. 167*387f9dfdSAndroid Build Coastguard Worker 168*387f9dfdSAndroid Build Coastguard Worker 169*387f9dfdSAndroid Build Coastguard WorkerUser functions can be traced in executables or libraries, and per-process 170*387f9dfdSAndroid Build Coastguard Workerfiltering is allowed: 171*387f9dfdSAndroid Build Coastguard Worker 172*387f9dfdSAndroid Build Coastguard Worker# ./funccount -p 1442 /home/ubuntu/contentions:* 173*387f9dfdSAndroid Build Coastguard WorkerTracing 15 functions for "/home/ubuntu/contentions:*"... Hit Ctrl-C to end. 174*387f9dfdSAndroid Build Coastguard Worker^C 175*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 176*387f9dfdSAndroid Build Coastguard Workermain 1 177*387f9dfdSAndroid Build Coastguard Worker_start 1 178*387f9dfdSAndroid Build Coastguard Workerprimes_thread 2 179*387f9dfdSAndroid Build Coastguard Workerinsert_result 87186 180*387f9dfdSAndroid Build Coastguard Workeris_prime 1252772 181*387f9dfdSAndroid Build Coastguard WorkerDetaching... 182*387f9dfdSAndroid Build Coastguard Worker 183*387f9dfdSAndroid Build Coastguard WorkerIf /home/ubuntu is in the $PATH, then the following command will also work: 184*387f9dfdSAndroid Build Coastguard Worker 185*387f9dfdSAndroid Build Coastguard Worker# ./funccount -p 1442 contentions:* 186*387f9dfdSAndroid Build Coastguard Worker 187*387f9dfdSAndroid Build Coastguard Worker 188*387f9dfdSAndroid Build Coastguard WorkerCounting libc write and read calls using regular expression syntax (-r): 189*387f9dfdSAndroid Build Coastguard Worker 190*387f9dfdSAndroid Build Coastguard Worker# ./funccount -r 'c:(write|read)$' 191*387f9dfdSAndroid Build Coastguard WorkerTracing 2 functions for "c:(write|read)$"... Hit Ctrl-C to end. 192*387f9dfdSAndroid Build Coastguard Worker^C 193*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 194*387f9dfdSAndroid Build Coastguard Workerread 2 195*387f9dfdSAndroid Build Coastguard Workerwrite 4 196*387f9dfdSAndroid Build Coastguard WorkerDetaching... 197*387f9dfdSAndroid Build Coastguard Worker 198*387f9dfdSAndroid Build Coastguard Worker 199*387f9dfdSAndroid Build Coastguard WorkerKernel tracepoints are also available as targets. For example, trace common 200*387f9dfdSAndroid Build Coastguard Workerblock I/O tracepoints and see how often they are invoked: 201*387f9dfdSAndroid Build Coastguard Worker 202*387f9dfdSAndroid Build Coastguard Worker# ./funccount t:block:* 203*387f9dfdSAndroid Build Coastguard WorkerTracing 19 functions for "t:block:*"... Hit Ctrl-C to end. 204*387f9dfdSAndroid Build Coastguard Worker^C 205*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 206*387f9dfdSAndroid Build Coastguard Workerblock:block_rq_complete 7 207*387f9dfdSAndroid Build Coastguard Workerblock:block_rq_issue 7 208*387f9dfdSAndroid Build Coastguard Workerblock:block_getrq 7 209*387f9dfdSAndroid Build Coastguard Workerblock:block_rq_insert 7 210*387f9dfdSAndroid Build Coastguard WorkerDetaching... 211*387f9dfdSAndroid Build Coastguard Worker 212*387f9dfdSAndroid Build Coastguard Worker 213*387f9dfdSAndroid Build Coastguard WorkerLikewise, user-mode statically defined traces (USDT) can also be probed. For 214*387f9dfdSAndroid Build Coastguard Workerexample, count mutex-related events in pthreads: 215*387f9dfdSAndroid Build Coastguard Worker 216*387f9dfdSAndroid Build Coastguard Worker# ./funccount u:pthread:*mutex* -p 1442 217*387f9dfdSAndroid Build Coastguard WorkerTracing 7 functions for "u:pthread:*mutex*"... Hit Ctrl-C to end. 218*387f9dfdSAndroid Build Coastguard Worker^C 219*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 220*387f9dfdSAndroid Build Coastguard Workermutex_init 1 221*387f9dfdSAndroid Build Coastguard Workermutex_entry 547122 222*387f9dfdSAndroid Build Coastguard Workermutex_acquired 547175 223*387f9dfdSAndroid Build Coastguard Workermutex_release 547185 224*387f9dfdSAndroid Build Coastguard WorkerDetaching... 225*387f9dfdSAndroid Build Coastguard Worker 226*387f9dfdSAndroid Build Coastguard Worker 227*387f9dfdSAndroid Build Coastguard WorkerAn interval can be provided. Eg, printing output every 1 second for vfs calls: 228*387f9dfdSAndroid Build Coastguard Worker 229*387f9dfdSAndroid Build Coastguard Worker# ./funccount -i 1 'vfs_*' 230*387f9dfdSAndroid Build Coastguard WorkerTracing... Ctrl-C to end. 231*387f9dfdSAndroid Build Coastguard Worker 232*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 233*387f9dfdSAndroid Build Coastguard Workervfs_fstatat 1 234*387f9dfdSAndroid Build Coastguard Workervfs_fstat 16 235*387f9dfdSAndroid Build Coastguard Workervfs_getattr_nosec 17 236*387f9dfdSAndroid Build Coastguard Workervfs_getattr 17 237*387f9dfdSAndroid Build Coastguard Workervfs_write 52 238*387f9dfdSAndroid Build Coastguard Workervfs_read 79 239*387f9dfdSAndroid Build Coastguard Workervfs_open 98 240*387f9dfdSAndroid Build Coastguard Worker 241*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 242*387f9dfdSAndroid Build Coastguard Workervfs_fstatat 10 243*387f9dfdSAndroid Build Coastguard Workervfs_fstat 10 244*387f9dfdSAndroid Build Coastguard Workervfs_open 13 245*387f9dfdSAndroid Build Coastguard Workervfs_getattr_nosec 20 246*387f9dfdSAndroid Build Coastguard Workervfs_getattr 20 247*387f9dfdSAndroid Build Coastguard Workervfs_write 28 248*387f9dfdSAndroid Build Coastguard Workervfs_read 39 249*387f9dfdSAndroid Build Coastguard Worker 250*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 251*387f9dfdSAndroid Build Coastguard Workervfs_fsync_range 2 252*387f9dfdSAndroid Build Coastguard Workervfs_lock_file 30 253*387f9dfdSAndroid Build Coastguard Workervfs_write 107 254*387f9dfdSAndroid Build Coastguard Workervfs_fstatat 129 255*387f9dfdSAndroid Build Coastguard Workervfs_fstat 130 256*387f9dfdSAndroid Build Coastguard Workervfs_open 154 257*387f9dfdSAndroid Build Coastguard Workervfs_getattr_nosec 222 258*387f9dfdSAndroid Build Coastguard Workervfs_getattr 222 259*387f9dfdSAndroid Build Coastguard Workervfs_read 384 260*387f9dfdSAndroid Build Coastguard Worker^C 261*387f9dfdSAndroid Build Coastguard WorkerDetaching... 262*387f9dfdSAndroid Build Coastguard Worker 263*387f9dfdSAndroid Build Coastguard WorkerThis can be useful for making some ad hoc tools, exposing new counts of 264*387f9dfdSAndroid Build Coastguard Workerkernel activity that aren't visible in other metrics. 265*387f9dfdSAndroid Build Coastguard Worker 266*387f9dfdSAndroid Build Coastguard WorkerInclude -T to print timestamps on output. 267*387f9dfdSAndroid Build Coastguard Worker 268*387f9dfdSAndroid Build Coastguard Worker 269*387f9dfdSAndroid Build Coastguard WorkerA maximum duration can be set. For example, to print 5 x 1 second summaries 270*387f9dfdSAndroid Build Coastguard Workerof vfs_read() calls: 271*387f9dfdSAndroid Build Coastguard Worker 272*387f9dfdSAndroid Build Coastguard Worker# ./funccount -i 1 -d 5 vfs_read 273*387f9dfdSAndroid Build Coastguard WorkerTracing 1 functions for "vfs_read"... Hit Ctrl-C to end. 274*387f9dfdSAndroid Build Coastguard Worker 275*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 276*387f9dfdSAndroid Build Coastguard Workervfs_read 30 277*387f9dfdSAndroid Build Coastguard Worker 278*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 279*387f9dfdSAndroid Build Coastguard Workervfs_read 26 280*387f9dfdSAndroid Build Coastguard Worker 281*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 282*387f9dfdSAndroid Build Coastguard Workervfs_read 54 283*387f9dfdSAndroid Build Coastguard Worker 284*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 285*387f9dfdSAndroid Build Coastguard Workervfs_read 25 286*387f9dfdSAndroid Build Coastguard Worker 287*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 288*387f9dfdSAndroid Build Coastguard Workervfs_read 31 289*387f9dfdSAndroid Build Coastguard WorkerDetaching... 290*387f9dfdSAndroid Build Coastguard Worker 291*387f9dfdSAndroid Build Coastguard WorkerBy leaving off the "-i 1", this will print a single 5 second summary: 292*387f9dfdSAndroid Build Coastguard Worker 293*387f9dfdSAndroid Build Coastguard Worker# funccount.py -d 5 vfs_read 294*387f9dfdSAndroid Build Coastguard WorkerTracing 1 functions for "vfs_read"... Hit Ctrl-C to end. 295*387f9dfdSAndroid Build Coastguard Worker 296*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 297*387f9dfdSAndroid Build Coastguard Workervfs_read 167 298*387f9dfdSAndroid Build Coastguard WorkerDetaching... 299*387f9dfdSAndroid Build Coastguard Worker 300*387f9dfdSAndroid Build Coastguard WorkerThis can be useful for finding out rates: trace all functions for ten seconds 301*387f9dfdSAndroid Build Coastguard Workerand then divide by ten for the per-second rate. 302*387f9dfdSAndroid Build Coastguard Worker 303*387f9dfdSAndroid Build Coastguard Worker 304*387f9dfdSAndroid Build Coastguard WorkerThe "*" wildcard can be used multiple times. Eg, matching functions that contain 305*387f9dfdSAndroid Build Coastguard Workerthe word "readdir": 306*387f9dfdSAndroid Build Coastguard Worker 307*387f9dfdSAndroid Build Coastguard Worker# ./funccount '*readdir*' 308*387f9dfdSAndroid Build Coastguard WorkerTracing... Ctrl-C to end. 309*387f9dfdSAndroid Build Coastguard Worker^C 310*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 311*387f9dfdSAndroid Build Coastguard Workerext4_readdir 4 312*387f9dfdSAndroid Build Coastguard WorkerDetaching... 313*387f9dfdSAndroid Build Coastguard Worker 314*387f9dfdSAndroid Build Coastguard WorkerMatching "tcp" then "send": 315*387f9dfdSAndroid Build Coastguard Worker 316*387f9dfdSAndroid Build Coastguard Worker# ./funccount '*tcp*send*' 317*387f9dfdSAndroid Build Coastguard WorkerTracing... Ctrl-C to end. 318*387f9dfdSAndroid Build Coastguard Worker^C 319*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 320*387f9dfdSAndroid Build Coastguard Workertcp_send_ack 4 321*387f9dfdSAndroid Build Coastguard Workertcp_send_delayed_ack 19 322*387f9dfdSAndroid Build Coastguard Workertcp_send_mss 26 323*387f9dfdSAndroid Build Coastguard Workertcp_sendmsg 26 324*387f9dfdSAndroid Build Coastguard Workertcp_v4_send_check 30 325*387f9dfdSAndroid Build Coastguard Worker__tcp_v4_send_check 30 326*387f9dfdSAndroid Build Coastguard WorkerDetaching... 327*387f9dfdSAndroid Build Coastguard Worker 328*387f9dfdSAndroid Build Coastguard WorkerA cpu is specified by "-c CPU", this will only trace the specified CPU. Eg, 329*387f9dfdSAndroid Build Coastguard Workertrace how many timers setting per second of CPU 1 on a x86(Intel) server: 330*387f9dfdSAndroid Build Coastguard Worker 331*387f9dfdSAndroid Build Coastguard Worker# funccount.py -i 1 -c 1 lapic_next_deadline 332*387f9dfdSAndroid Build Coastguard WorkerTracing 1 functions for "lapic_next_deadline"... Hit Ctrl-C to end. 333*387f9dfdSAndroid Build Coastguard Worker 334*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 335*387f9dfdSAndroid Build Coastguard Workerlapic_next_deadline 3840 336*387f9dfdSAndroid Build Coastguard Worker 337*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 338*387f9dfdSAndroid Build Coastguard Workerlapic_next_deadline 3930 339*387f9dfdSAndroid Build Coastguard Worker 340*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 341*387f9dfdSAndroid Build Coastguard Workerlapic_next_deadline 4701 342*387f9dfdSAndroid Build Coastguard Worker 343*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 344*387f9dfdSAndroid Build Coastguard Workerlapic_next_deadline 5895 345*387f9dfdSAndroid Build Coastguard Worker 346*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 347*387f9dfdSAndroid Build Coastguard Workerlapic_next_deadline 5591 348*387f9dfdSAndroid Build Coastguard Worker 349*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 350*387f9dfdSAndroid Build Coastguard Workerlapic_next_deadline 4727 351*387f9dfdSAndroid Build Coastguard Worker 352*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 353*387f9dfdSAndroid Build Coastguard Workerlapic_next_deadline 5560 354*387f9dfdSAndroid Build Coastguard Worker 355*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 356*387f9dfdSAndroid Build Coastguard Workerlapic_next_deadline 5416 357*387f9dfdSAndroid Build Coastguard Worker^C 358*387f9dfdSAndroid Build Coastguard WorkerFUNC COUNT 359*387f9dfdSAndroid Build Coastguard Workerlapic_next_deadline 372 360*387f9dfdSAndroid Build Coastguard WorkerDetaching... 361*387f9dfdSAndroid Build Coastguard Worker 362*387f9dfdSAndroid Build Coastguard WorkerFull USAGE: 363*387f9dfdSAndroid Build Coastguard Worker 364*387f9dfdSAndroid Build Coastguard Worker# ./funccount -h 365*387f9dfdSAndroid Build Coastguard Workerusage: funccount.py [-h] [-p PID] [-i INTERVAL] [-d DURATION] [-T] [-r] [-D] 366*387f9dfdSAndroid Build Coastguard Worker [-c CPU] 367*387f9dfdSAndroid Build Coastguard Worker pattern 368*387f9dfdSAndroid Build Coastguard Worker 369*387f9dfdSAndroid Build Coastguard WorkerCount functions, tracepoints, and USDT probes 370*387f9dfdSAndroid Build Coastguard Worker 371*387f9dfdSAndroid Build Coastguard Workerpositional arguments: 372*387f9dfdSAndroid Build Coastguard Worker pattern search expression for events 373*387f9dfdSAndroid Build Coastguard Worker 374*387f9dfdSAndroid Build Coastguard Workeroptional arguments: 375*387f9dfdSAndroid Build Coastguard Worker -h, --help show this help message and exit 376*387f9dfdSAndroid Build Coastguard Worker -p PID, --pid PID trace this PID only 377*387f9dfdSAndroid Build Coastguard Worker -i INTERVAL, --interval INTERVAL 378*387f9dfdSAndroid Build Coastguard Worker summary interval, seconds 379*387f9dfdSAndroid Build Coastguard Worker -d DURATION, --duration DURATION 380*387f9dfdSAndroid Build Coastguard Worker total duration of trace, seconds 381*387f9dfdSAndroid Build Coastguard Worker -T, --timestamp include timestamp on output 382*387f9dfdSAndroid Build Coastguard Worker -r, --regexp use regular expressions. Default is "*" wildcards 383*387f9dfdSAndroid Build Coastguard Worker only. 384*387f9dfdSAndroid Build Coastguard Worker -D, --debug print BPF program before starting (for debugging 385*387f9dfdSAndroid Build Coastguard Worker purposes) 386*387f9dfdSAndroid Build Coastguard Worker -c CPU, --cpu CPU trace this CPU only 387*387f9dfdSAndroid Build Coastguard Worker 388*387f9dfdSAndroid Build Coastguard Workerexamples: 389*387f9dfdSAndroid Build Coastguard Worker ./funccount 'vfs_*' # count kernel fns starting with "vfs" 390*387f9dfdSAndroid Build Coastguard Worker ./funccount -r '^vfs.*' # same as above, using regular expressions 391*387f9dfdSAndroid Build Coastguard Worker ./funccount -Ti 5 'vfs_*' # output every 5 seconds, with timestamps 392*387f9dfdSAndroid Build Coastguard Worker ./funccount -d 10 'vfs_*' # trace for 10 seconds only 393*387f9dfdSAndroid Build Coastguard Worker ./funccount -p 185 'vfs_*' # count vfs calls for PID 181 only 394*387f9dfdSAndroid Build Coastguard Worker ./funccount t:sched:sched_fork # count calls to the sched_fork tracepoint 395*387f9dfdSAndroid Build Coastguard Worker ./funccount -p 185 u:node:gc* # count all GC USDT probes in node, PID 185 396*387f9dfdSAndroid Build Coastguard Worker ./funccount c:malloc # count all malloc() calls in libc 397*387f9dfdSAndroid Build Coastguard Worker ./funccount go:os.* # count all "os.*" calls in libgo 398*387f9dfdSAndroid Build Coastguard Worker ./funccount -p 185 go:os.* # count all "os.*" calls in libgo, PID 185 399*387f9dfdSAndroid Build Coastguard Worker ./funccount ./test:read* # count "read*" calls in the ./test binary 400*387f9dfdSAndroid Build Coastguard Worker ./funccount -c 1 'vfs_*' # count vfs calls on CPU 1 only 401