/usr/share/doc/bpfcc-tools/examples/doc
NameSizeModeActions
lib/-0755rm
argdist_example.txt230290644editdlrm
bashreadline_example.txt8820644editdlrm
bindsnoop_example.txt45300644editdlrm
biolatency_example.txt240210644editdlrm
biolatpcts_example.txt30400644editdlrm
biopattern_example.txt14060644editdlrm
biosnoop_example.txt35490644editdlrm
biotop_example.txt93260644editdlrm
bitesize_example.txt51000644editdlrm
bpflist_example.txt21790644editdlrm
btrfsdist_example.txt95450644editdlrm
btrfsslower_example.txt68120644editdlrm
cachestat_example.txt40120644editdlrm
cachetop_example.txt39180644editdlrm
capable_example.txt66550644editdlrm
cobjnew_example.txt30440644editdlrm
compactsnoop_example.txt101600644editdlrm
cpudist_example.txt168760644editdlrm
cpuunclaimed_example.txt155680644editdlrm
criticalstat_example.txt49260644editdlrm
cthreads_example.txt21320644editdlrm
dbslower_example.txt39810644editdlrm
dbstat_example.txt66560644editdlrm
dcsnoop_example.txt43710644editdlrm
dcstat_example.txt33430644editdlrm
deadlock_example.txt166430644editdlrm
dirtop_example.txt50970644editdlrm
drsnoop_example.txt51200644editdlrm
execsnoop_example.txt67950644editdlrm
exitsnoop_example.txt63730644editdlrm
ext4dist_example.txt89910644editdlrm
ext4slower_example.txt113350644editdlrm
filegone_example.txt7430644editdlrm
filelife_example.txt20920644editdlrm
fileslower_example.txt57110644editdlrm
filetop_example.txt69680644editdlrm
funccount_example.txt136050644editdlrm
funcinterval_example.txt156460644editdlrm
funclatency_example.txt214850644editdlrm
funcslower_example.txt67860644editdlrm
gethostlatency_example.txt13170644editdlrm
hardirqs_example.txt379360644editdlrm
inject_example.txt68320644editdlrm
javacalls_example.txt40000644editdlrm
javaflow_example.txt60170644editdlrm
javagc_example.txt38670644editdlrm
javaobjnew_example.txt30440644editdlrm
javastat_example.txt30520644editdlrm
javathreads_example.txt21320644editdlrm
killsnoop_example.txt13390644editdlrm
klockstat_example.txt85360644editdlrm
kvmexit_example.txt119090644editdlrm
llcstat_example.txt33150644editdlrm
mdflush_example.txt17800644editdlrm
memleak_example.txt102630644editdlrm
mountsnoop_example.txt14810644editdlrm
mysqld_qslower_example.txt23510644editdlrm
netqtop_example.txt124970644editdlrm
nfsdist_example.txt85080644editdlrm
nfsslower_example.txt78670644editdlrm
nodegc_example.txt38670644editdlrm
nodestat_example.txt30520644editdlrm
offcputime_example.txt196620644editdlrm
offwaketime_example.txt382580644editdlrm
oomkill_example.txt19250644editdlrm
opensnoop_example.txt105730644editdlrm
perlcalls_example.txt40000644editdlrm
perlflow_example.txt60170644editdlrm
perlstat_example.txt30520644editdlrm
phpcalls_example.txt40000644editdlrm
phpflow_example.txt60170644editdlrm
phpstat_example.txt30520644editdlrm
pidpersec_example.txt6770644editdlrm
ppchcalls_example.txt70970644editdlrm
profile_example.txt318260644editdlrm
pythoncalls_example.txt40000644editdlrm
pythonflow_example.txt60170644editdlrm
pythongc_example.txt38670644editdlrm
pythonstat_example.txt30520644editdlrm
rdmaucma_example.txt19830644editdlrm
readahead_example.txt32480644editdlrm
reset-trace_example.txt93650644editdlrm
rubycalls_example.txt40000644editdlrm
rubyflow_example.txt60170644editdlrm
rubygc_example.txt38670644editdlrm
rubyobjnew_example.txt30440644editdlrm
rubystat_example.txt30520644editdlrm
runqlat_example.txt320510644editdlrm
runqlen_example.txt121360644editdlrm
runqslower_example.txt21840644editdlrm
shmsnoop_example.txt27980644editdlrm
slabratetop_example.txt53470644editdlrm
sofdsnoop_example.txt32110644editdlrm
softirqs_example.txt112860644editdlrm
solisten_example.txt23550644editdlrm
sslsniff_example.txt69020644editdlrm
stackcount_example.txt219650644editdlrm
statsnoop_example.txt30910644editdlrm
swapin.txt26320644editdlrm
swapin_example.txt14210644editdlrm
syncsnoop_example.txt3870644editdlrm
syscount_example.txt64190644editdlrm
tclcalls_example.txt40000644editdlrm
tclflow_example.txt60170644editdlrm
tclobjnew_example.txt30440644editdlrm
tclstat_example.txt30520644editdlrm
tcpaccept_example.txt28220644editdlrm
tcpcong_example.txt341060644editdlrm
tcpconnect_example.txt64200644editdlrm
tcpconnlat_example.txt26160644editdlrm
tcpdrop_example.txt20010644editdlrm
tcplife_example.txt69950644editdlrm
tcpretrans_example.txt39380644editdlrm
tcprtt_example.txt100700644editdlrm
tcpstates_example.txt29080644editdlrm
tcpsubnet_example.txt55030644editdlrm
tcpsynbl_example.txt11790644editdlrm
tcptop_example.txt58900644editdlrm
tcptracer_example.txt20290644editdlrm
threadsnoop_example.txt10940644editdlrm
tplist_example.txt45070644editdlrm
trace_example.txt221360644editdlrm
ttysnoop_example.txt33150644editdlrm
vfscount_example.txt22210644editdlrm
vfsstat_example.txt16960644editdlrm
virtiostat_example.txt26780644editdlrm
wakeuptime_example.txt340480644editdlrm
xfsdist_example.txt69280644editdlrm
xfsslower_example.txt70800644editdlrm
zfsdist_example.txt97530644editdlrm
zfsslower_example.txt75510644editdlrm
Edit: /usr/share/doc/bpfcc-tools/examples/doc/syscount_example.txt (6419B)
Demonstrations of syscount, the Linux/eBPF version. syscount summarizes syscall counts across the system or a specific process, with optional latency information. It is very useful for general workload characterization, for example: # syscount Tracing syscalls, printing top 10... Ctrl+C to quit. [09:39:04] SYSCALL COUNT write 10739 read 10584 wait4 1460 nanosleep 1457 select 795 rt_sigprocmask 689 clock_gettime 653 rt_sigaction 128 futex 86 ioctl 83 ^C These are the top 10 entries; you can get more by using the -T switch. Here, the output indicates that the write and read syscalls were very common, followed immediately by wait4, nanosleep, and so on. By default, syscount counts across the entire system, but we can point it to a specific process of interest: # syscount -p $(pidof dd) Tracing syscalls, printing top 10... Ctrl+C to quit. [09:40:21] SYSCALL COUNT read 7878397 write 7878397 ^C Indeed, dd's workload is a bit easier to characterize. Occasionally, the count of syscalls is not enough, and you'd also want an aggregate latency: # syscount -L Tracing syscalls, printing top 10... Ctrl+C to quit. [09:41:32] SYSCALL COUNT TIME (us) select 16 3415860.022 nanosleep 291 12038.707 ftruncate 1 122.939 write 4 63.389 stat 1 23.431 fstat 1 5.088 [unknown: 321] 32 4.965 timerfd_settime 1 4.830 ioctl 3 4.802 kill 1 4.342 ^C The select and nanosleep calls are responsible for a lot of time, but remember these are blocking calls. This output was taken from a mostly idle system. Note the "unknown" entry -- syscall 321 is the bpf() syscall, which is not in the table used by this tool (borrowed from strace sources). Another direction would be to understand which processes are making a lot of syscalls, thus responsible for a lot of activity. This is what the -P switch does: # syscount -P Tracing syscalls, printing top 10... Ctrl+C to quit. [09:58:13] PID COMM COUNT 13820 vim 548 30216 sshd 149 29633 bash 72 25188 screen 70 25776 mysqld 30 31285 python 10 529 systemd-udevd 9 1 systemd 8 494 systemd-journal 5 ^C This is again from a mostly idle system over an interval of a few seconds. Sometimes, you'd only care about failed syscalls -- these are the ones that might be worth investigating with follow-up tools like opensnoop, execsnoop, or trace. Use the -x switch for this; the following example also demonstrates the -i switch, for printing at predefined intervals: # syscount -x -i 5 Tracing failed syscalls, printing top 10... Ctrl+C to quit. [09:44:16] SYSCALL COUNT futex 13 getxattr 10 stat 8 open 6 wait4 3 access 2 [unknown: 321] 1 [09:44:21] SYSCALL COUNT futex 12 getxattr 10 [unknown: 321] 2 wait4 1 access 1 pause 1 ^C Similar to -x/--failures, sometimes you only care about certain syscall errors like EPERM or ENONET -- these are the ones that might be worth investigating with follow-up tools like opensnoop, execsnoop, or trace. Use the -e/--errno switch for this; the following example also demonstrates the -e switch, for printing ENOENT failures at predefined intervals: # syscount -e ENOENT -i 5 Tracing syscalls, printing top 10... Ctrl+C to quit. [13:15:57] SYSCALL COUNT stat 4669 open 1951 access 561 lstat 62 openat 42 readlink 8 execve 4 newfstatat 1 [13:16:02] SYSCALL COUNT lstat 18506 stat 13087 open 2907 access 412 openat 19 readlink 12 execve 7 connect 6 unlink 1 rmdir 1 ^C Sometimes, you'd only care about a single syscall rather than all syscalls. Use the --syscall option for this; the following example also demonstrates the --syscall option, for printing at predefined intervals: # syscount --syscall stat -i 1 Tracing syscall 'stat'... Ctrl+C to quit. [12:51:06] SYSCALL COUNT stat 310 [12:51:07] SYSCALL COUNT stat 316 ^C USAGE: # syscount -h usage: syscount.py [-h] [-p PID] [-t TID] [-i INTERVAL] [-d DURATION] [-T TOP] [-x] [-e ERRNO] [-L] [-m] [-P] [-l] [--syscall SYSCALL] Summarize syscall counts and latencies. optional arguments: -h, --help show this help message and exit -p PID, --pid PID trace only this pid -t TID, --tid TID trace only this tid -c PPID, --ppid PPID trace only child of this pid -i INTERVAL, --interval INTERVAL print summary at this interval (seconds) -d DURATION, --duration DURATION total duration of trace, in seconds -T TOP, --top TOP print only the top syscalls by count or latency -x, --failures trace only failed syscalls (return < 0) -e ERRNO, --errno ERRNO trace only syscalls that return this error (numeric or EPERM, etc.) -L, --latency collect syscall latency -m, --milliseconds display latency in milliseconds (default: microseconds) -P, --process count by process and not by syscall -l, --list print list of recognized syscalls and exit --syscall SYSCALL trace this syscall only (use option -l to get all recognized syscalls)