December	4–9,	2016		|		Boston,	MA	
www.usenix.org/lisa16												#lisa16	
Linux	4.x	Tracing	Tools	
Using	BPF	Superpowers	
Brendan	Gregg,	NeElix	
bgregg@neElix.com
Linux 4.x Tracing Tools: Using BPF Superpowers
Linux 4.x Tracing Tools: Using BPF Superpowers
GIVE	ME	15	MINUTES	
AND	I'LL	CHANGE	YOUR	VIEW	
OF	LINUX	TRACING	
Demo	Gme	
inspired	by	Greg	Law's:	Give	me	fiOeen	minutes	and	I'll	change	your	view	of	GDB
Demo
LISA	2014	
	
perf-tools	
(Orace)
LISA	2016	
	
bcc	tools	
(BPF)
WHAT	DYNAMIC	TRACING	CAN	DO	
Wielding	Superpowers
Previously	
•  Metrics	were	vendor	chosen,	closed	source,	and	incomplete	
•  The	art	of	inference	&	making	do	
# ps alx
F S UID PID PPID CPU PRI NICE ADDR SZ WCHAN TTY TIME CMD
3 S 0 0 0 0 0 20 2253 2 4412 ? 186:14 swapper
1 S 0 1 0 0 30 20 2423 8 46520 ? 0:00 /etc/init
1 S 0 16 1 0 30 20 2273 11 46554 co 0:00 –sh
[…]
Crystal	Ball	Observability	
Dynamic	Tracing
Linux	Event	Sources
Event	Tracing	Efficiency	
send	
receive	
tcpdump	
Kernel	
buffer	
file	system	
1.	read	
2.	dump	
Analyzer	 1.	read	
2.	process	
3.	print	
disks	
Old way: packet capture
New way: dynamic tracing
Tracer	 1.	configure	
2.	read	
tcp_retransmit_skb()	
Eg, tracing TCP retransmits
New	CLI	Tools	
# biolatency
Tracing block device I/O... Hit Ctrl-C to end.
^C
usecs : count distribution
4 -> 7 : 0 | |
8 -> 15 : 0 | |
16 -> 31 : 0 | |
32 -> 63 : 0 | |
64 -> 127 : 1 | |
128 -> 255 : 12 |******** |
256 -> 511 : 15 |********** |
512 -> 1023 : 43 |******************************* |
1024 -> 2047 : 52 |**************************************|
2048 -> 4095 : 47 |********************************** |
4096 -> 8191 : 52 |**************************************|
8192 -> 16383 : 36 |************************** |
16384 -> 32767 : 15 |********** |
32768 -> 65535 : 2 |* |
65536 -> 131071 : 2 |* |
New	VisualizaGons	and	GUIs
NeElix	Intended	Usage	
Flame Graphs
Tracing Reports
…
Self-service	UI:	
should	be	open	sourced;	you	may	also	build/buy	your	own
Conquer	Performance	
Measure	anything
BPF	TRACING	
Introducing	BPF
A	Linux	Tracing	Timeline	
•  1990’s:	StaGc	tracers,	prototype	dynamic	tracers	
•  2000:	LTT	+	DProbes	(dynamic	tracing;	not	integrated)	
•  2004:	kprobes	(2.6.9)	
•  2005:	DTrace	(not	Linux),	SystemTap	(out-of-tree)	
•  2008:	Orace	(2.6.27)	
•  2009:	perf	(2.6.31)	
•  2009:	tracepoints	(2.6.32)	
•  2010-2016:	Orace	&	perf_events	enhancements	
•  2014-2016:	BPF	patches	
also:	LTTng,	ktap,	sysdig,	...
Ye	Olde	BPF	
# tcpdump host 127.0.0.1 and port 22 -d
(000) ldh [12]
(001) jeq #0x800 jt 2 jf 18
(002) ld [26]
(003) jeq #0x7f000001 jt 6 jf 4
(004) ld [30]
(005) jeq #0x7f000001 jt 6 jf 18
(006) ldb [23]
(007) jeq #0x84 jt 10 jf 8
(008) jeq #0x6 jt 10 jf 9
(009) jeq #0x11 jt 10 jf 18
(010) ldh [20]
(011) jset #0x1fff jt 18 jf 12
(012) ldxb 4*([14]&0xf)
(013) ldh [x + 14]
(014) jeq #0x16 jt 17 jf 15
(015) ldh [x + 16]
(016) jeq #0x16 jt 17 jf 18
(017) ret #65535
(018) ret #0
Berkeley	Packet	Filter
BPF	Enhancements	by	Linux	Version	
•  3.18:	bpf	syscall	
•  3.19:	sockets	
•  4.1:	kprobes	
•  4.4:	bpf_perf_event_output	
•  4.6:	stack	traces	
•  4.7:	tracepoints	
•  4.9:	profiling	
16.04	
16.10	
eg,	Ubuntu:
Enhanced
BPF
is in Linux
BPF	
•  aka	eBPF	==	enhanced	Berkeley	Packet	Filter	
–  Lead	developer:	Alexei	Starovoitov	(Facebook)		
•  Many	uses	
–  Virtual	networking	
–  Security	
–  ProgrammaGc	tracing	
•  Different	front-ends	
–  C,	perf,	bcc,	ply,	…	 BPF	mascot
BPF	for	Tracing	
BPF	bytecode	
User	Program	
1.	generate	
2.	load	
Kernel	
kprobes	
uprobes	
tracepoints	
BPF	
maps	
3.	perf_output	
per-
event	
data	
staGsGcs	
3.	async	
read	
verifier
Raw	BPF	
samples/bpf/sock_example.c	
87	lines	truncated
C/BPF	
samples/bpf/tracex1_kern.c	
58	lines	truncated
bcc	
•  BPF	Compiler	CollecGon	
–  hrps://github.com/iovisor/bcc		
–  Lead	developer:	Brenden	Blanco	
(PlumGRID)	
•  Includes	tracing	tools	
•  Front-ends	
–  Python	
–  Lua	
–  C	helper	libraries	
BPF	
Python	
Events	
Kernel	
lua	
bcc	
front-ends	
bcc	tool	 bcc	tool	 …	
…	
user	
kernel	
Tracing	layers:
bcc/BPF	
bcc	examples/tracing/bitehist.py	
enTre	program
ply/BPF	
hrps://github.com/wkz/ply/blob/master/README.md	
enTre	program
The	Tracing	Landscape,	Dec	2016	
Scope	&	Capability	
Ease	of	use	
sysdig	
perf	
Orace	
C/BPF	
ktap	
stap	
Stage	of	
Development	
(my	opinion)	
dtrace4L.	
(brutal)	(less	brutal)	
(alpha)	 (mature)	
bcc/BPF	
ply/BPF	
Raw	BPF
State	of	BPF,	Dec	2016	
1.  Dynamic	tracing,	kernel-level	(BPF	support	for	kprobes)	
2.  Dynamic	tracing,	user-level	(BPF	support	for	uprobes)	
3.  StaGc	tracing,	kernel-level	(BPF	support	for	tracepoints)	
4.  Timed	sampling	events	(BPF	with	perf_event_open)	
5.  PMC	events	(BPF	with	perf_event_open)	
6.  Filtering	(via	BPF	programs)	
7.  Debug	output	(bpf_trace_printk())	
8.  Per-event	output	(bpf_perf_event_output())	
9.  Basic	variables	(global	&	per-thread	variables,	via	BPF	maps)	
10.  AssociaGve	arrays	(via	BPF	maps)	
11.  Frequency	counGng	(via	BPF	maps)	
12.  Histograms	(power-of-2,	linear,	and	custom,	via	BPF	maps)	
13.  Timestamps	and	Gme	deltas	(bpf_kGme_get_()	and	BPF)	
14.  Stack	traces,	kernel	(BPF	stackmap)	
15.  Stack	traces,	user	(BPF	stackmap)	
16.  Overwrite	ring	buffers	
17.  String	factory	(stringmap)	
18.  OpGonal:	bounded	loops,	<	and	<=,	…	
1.  StaGc	tracing,	user-level	(USDT	probes	via	uprobes)	
2.  StaGc	tracing,	dynamic	USDT	(needs	library	support)	
3.  Debug	output	(Python	with	BPF.trace_pipe()	and	
BPF.trace_fields())	
4.  Per-event	output	(BPF_PERF_OUTPUT	macro	and	
BPF.open_perf_buffer())	
5.  Interval	output	(BPF.get_table()	and	table.clear())	
6.  Histogram	prinGng	(table.print_log2_hist())	
7.  C	struct	navigaGon,	kernel-level	(maps	to	bpf_probe_read())	
8.  Symbol	resoluGon,	kernel-level	(ksym(),	ksymaddr())	
9.  Symbol	resoluGon,	user-level	(usymaddr())	
10.  BPF	tracepoint	support	(via	TRACEPOINT_PROBE)	
11.  BPF	stack	trace	support	(incl.	walk	method	for	stack	frames)	
12.  Examples	(under	/examples)	
13.  Many	tools	(/tools)	
14.  Tutorials	(/docs/tutorial*.md)	
15.  Reference	guide	(/docs/reference_guide.md)	
16.  Open	issues:	(hrps://github.com/iovisor/bcc/issues)	
State	of	bcc,	Dec	2016	
done	
not	yet
HOW	TO	USE	BCC/BPF	
For	end-users
InstallaGon	
hrps://github.com/iovisor/bcc/blob/master/INSTALL.md	
•  eg,	Ubuntu	Xenial:		
–  puts	tools	in	/usr/share/bcc/tools,	and	tools/old	for	older	kernels	
–  16.04	is	good,	16.10	berer:	more	tools	work	
–  bcc	should	also	arrive	as	an	official	Ubuntu	snap	
# echo "deb [trusted=yes] https://repo.iovisor.org/apt/xenial xenial-nightly main" | 

sudo tee /etc/apt/sources.list.d/iovisor.list
# sudo apt-get update
# sudo apt-get install bcc-tools
Pre-bcc	Performance	Checklist	
1.  	uptime
2.  	dmesg | tail
3.  	vmstat 1
4.  	mpstat -P ALL 1
5.  	pidstat 1
6.  	iostat -xz 1
7.  	free -m
8.  	sar -n DEV 1
9.  	sar -n TCP,ETCP 1
10. 	top
hrp://techblog.neElix.com/2015/11/linux-performance-analysis-in-60s.html
bcc	General	Performance	Checklist	
1.  	execsnoop
2.  	opensnoop
3.  	ext4slower	(…)	
4.  	biolatency
5.  	biosnoop
6.  	cachestat
7.  	tcpconnect
8.  	tcpaccept
9.  	tcpretrans
10.  	gethostlatency
11.  	runqlat
12.  	profile
1.	execsnoop	
# execsnoop
PCOMM PID RET ARGS
bash 15887 0 /usr/bin/man ls
preconv 15894 0 /usr/bin/preconv -e UTF-8
man 15896 0 /usr/bin/tbl
man 15897 0 /usr/bin/nroff -mandoc -rLL=169n -rLT=169n -Tutf8
man 15898 0 /usr/bin/pager -s
nroff 15900 0 /usr/bin/locale charmap
nroff 15901 0 /usr/bin/groff -mtty-char -Tutf8 -mandoc -rLL=169n -rLT=169n
groff 15902 0 /usr/bin/troff -mtty-char -mandoc -rLL=169n -rLT=169n -Tutf8
groff 15903 0 /usr/bin/grotty
[…]
2.	opensnoop	
# opensnoop
PID COMM FD ERR PATH
27159 catalina.sh 3 0 /apps/tomcat8/bin/setclasspath.sh
4057 redis-server 5 0 /proc/4057/stat
2360 redis-server 5 0 /proc/2360/stat
30668 sshd 4 0 /proc/sys/kernel/ngroups_max
30668 sshd 4 0 /etc/group
30668 sshd 4 0 /root/.ssh/authorized_keys
30668 sshd 4 0 /root/.ssh/authorized_keys
30668 sshd -1 2 /var/run/nologin
30668 sshd -1 2 /etc/nologin
30668 sshd 4 0 /etc/login.defs
30668 sshd 4 0 /etc/passwd
30668 sshd 4 0 /etc/shadow
30668 sshd 4 0 /etc/localtime
4510 snmp-pass 4 0 /proc/cpuinfo
[…]
3.	ext4slower	
# ext4slower 1
Tracing ext4 operations slower than 1 ms
TIME COMM PID T BYTES OFF_KB LAT(ms) FILENAME
06:49:17 bash 3616 R 128 0 7.75 cksum
06:49:17 cksum 3616 R 39552 0 1.34 [
06:49:17 cksum 3616 R 96 0 5.36 2to3-2.7
06:49:17 cksum 3616 R 96 0 14.94 2to3-3.4
06:49:17 cksum 3616 R 10320 0 6.82 411toppm
06:49:17 cksum 3616 R 65536 0 4.01 a2p
06:49:17 cksum 3616 R 55400 0 8.77 ab
06:49:17 cksum 3616 R 36792 0 16.34 aclocal-1.14
06:49:17 cksum 3616 R 15008 0 19.31 acpi_listen
06:49:17 cksum 3616 R 6123 0 17.23 add-apt-repository
06:49:17 cksum 3616 R 6280 0 18.40 addpart
06:49:17 cksum 3616 R 27696 0 2.16 addr2line
06:49:17 cksum 3616 R 58080 0 10.11 ag
[…]
also:	btrfsslower,	xfsslower,	zfslower
4.	biolatency	
# biolatency -mT 1
Tracing block device I/O... Hit Ctrl-C to end.
06:20:16
msecs : count distribution
0 -> 1 : 36 |**************************************|
2 -> 3 : 1 |* |
4 -> 7 : 3 |*** |
8 -> 15 : 17 |***************** |
16 -> 31 : 33 |********************************** |
32 -> 63 : 7 |******* |
64 -> 127 : 6 |****** |
[…]
5.	biosnoop	
# biosnoop
TIME(s) COMM PID DISK T SECTOR BYTES LAT(ms)
0.000004001 supervise 1950 xvda1 W 13092560 4096 0.74
0.000178002 supervise 1950 xvda1 W 13092432 4096 0.61
0.001469001 supervise 1956 xvda1 W 13092440 4096 1.24
0.001588002 supervise 1956 xvda1 W 13115128 4096 1.09
1.022346001 supervise 1950 xvda1 W 13115272 4096 0.98
1.022568002 supervise 1950 xvda1 W 13188496 4096 0.93
1.023534000 supervise 1956 xvda1 W 13188520 4096 0.79
1.023585003 supervise 1956 xvda1 W 13189512 4096 0.60
2.003920000 xfsaild/md0 456 xvdc W 62901512 8192 0.23
2.003931001 xfsaild/md0 456 xvdb W 62901513 512 0.25
2.004034001 xfsaild/md0 456 xvdb W 62901520 8192 0.35
2.004042000 xfsaild/md0 456 xvdb W 63542016 4096 0.36
2.004204001 kworker/0:3 26040 xvdb W 41950344 65536 0.34
2.044352002 supervise 1950 xvda1 W 13192672 4096 0.65
[…]
6.	cachestat	
# cachestat
HITS MISSES DIRTIES READ_HIT% WRITE_HIT% BUFFERS_MB CACHED_MB
170610 41607 33 80.4% 19.6% 11 288
157693 6149 33 96.2% 3.7% 11 311
174483 20166 26 89.6% 10.4% 12 389
434778 35 40 100.0% 0.0% 12 389
435723 28 36 100.0% 0.0% 12 389
846183 83800 332534 55.2% 4.5% 13 553
96387 21 24 100.0% 0.0% 13 553
120258 29 44 99.9% 0.0% 13 553
255861 24 33 100.0% 0.0% 13 553
191388 22 32 100.0% 0.0% 13 553
[…]
7.	tcpconnect	
# tcpconnect
PID COMM IP SADDR DADDR DPORT
25333 recordProgra 4 127.0.0.1 127.0.0.1 28527
25338 curl 4 100.66.3.172 52.22.109.254 80
25340 curl 4 100.66.3.172 31.13.73.36 80
25342 curl 4 100.66.3.172 104.20.25.153 80
25344 curl 4 100.66.3.172 50.56.53.173 80
25365 recordProgra 4 127.0.0.1 127.0.0.1 28527
26119 ssh 6 ::1 ::1 22
25388 recordProgra 4 127.0.0.1 127.0.0.1 28527
25220 ssh 6 fe80::8a3:9dff:fed5:6b19 fe80::8a3:9dff:fed5:6b19 22
[…]
8.	tcpaccept	
# tcpaccept
PID COMM IP RADDR LADDR LPORT
2287 sshd 4 11.16.213.254 100.66.3.172 22
4057 redis-server 4 127.0.0.1 127.0.0.1 28527
4057 redis-server 4 127.0.0.1 127.0.0.1 28527
4057 redis-server 4 127.0.0.1 127.0.0.1 28527
4057 redis-server 4 127.0.0.1 127.0.0.1 28527
2287 sshd 6 ::1 ::1 22
4057 redis-server 4 127.0.0.1 127.0.0.1 28527
4057 redis-server 4 127.0.0.1 127.0.0.1 28527
2287 sshd 6 fe80::8a3:9dff:fed5:6b19 fe80::8a3:9dff:fed5:6b19 22
4057 redis-server 4 127.0.0.1 127.0.0.1 28527
[…]
9.	tcpretrans	
# tcpretrans
TIME PID IP LADDR:LPORT T> RADDR:RPORT STATE
01:55:05 0 4 10.153.223.157:22 R> 69.53.245.40:34619 ESTABLISHED
01:55:05 0 4 10.153.223.157:22 R> 69.53.245.40:34619 ESTABLISHED
01:55:17 0 4 10.153.223.157:22 R> 69.53.245.40:22957 ESTABLISHED
[…]
10.	gethostlatency	
# gethostlatency
TIME PID COMM LATms HOST
06:10:24 28011 wget 90.00 www.iovisor.org
06:10:28 28127 wget 0.00 www.iovisor.org
06:10:41 28404 wget 9.00 www.netflix.com
06:10:48 28544 curl 35.00 www.netflix.com.au
06:11:10 29054 curl 31.00 www.plumgrid.com
06:11:16 29195 curl 3.00 www.facebook.com
06:11:24 25313 wget 3.00 www.usenix.org
06:11:25 29404 curl 72.00 foo
06:11:28 29475 curl 1.00 foo
[…]
11.	runqlat	
# runqlat -m 5
Tracing run queue latency... Hit Ctrl-C to end.
msecs : count distribution
0 -> 1 : 3818 |****************************************|
2 -> 3 : 39 | |
4 -> 7 : 39 | |
8 -> 15 : 62 | |
16 -> 31 : 2214 |*********************** |
32 -> 63 : 226 |** |
[…]
12.	profile	
# profile
Sampling at 49 Hertz of all threads by user + kernel stack... Hit Ctrl-C to end.
^C
[…]
ffffffff813d0af8 __clear_user
ffffffff813d5277 iov_iter_zero
ffffffff814ec5f2 read_iter_zero
ffffffff8120be9d __vfs_read
ffffffff8120c385 vfs_read
ffffffff8120d786 sys_read
ffffffff817cc076 entry_SYSCALL_64_fastpath
00007fc5652ad9b0 read
- dd (25036)
7
[…]
Other	bcc	Tracing	Tools	
•  Single-purpose	
–  bitesize	
–  capabile	
–  memleak	
–  ext4dist	(btrfs,	…)	
•  MulG	tools	
–  funccount	
–  argdist	
–  trace	
–  stackcount	
hrps://github.com/iovisor/bcc#tools
trace	
•  Trace	custom	events.	Ad	hoc	analysis:	
# trace 'sys_read (arg3 > 20000) "read %d bytes", arg3'
TIME PID COMM FUNC -
05:18:23 4490 dd sys_read read 1048576 bytes
05:18:23 4490 dd sys_read read 1048576 bytes
05:18:23 4490 dd sys_read read 1048576 bytes
05:18:23 4490 dd sys_read read 1048576 bytes
^C
by	Sasha	Goldshtein
trace	One-Liners	
trace –K blk_account_io_start
Trace this kernel function, and print info with a kernel stack trace
trace 'do_sys_open "%s", arg2'
Trace the open syscall and print the filename being opened
trace 'sys_read (arg3 > 20000) "read %d bytes", arg3'
Trace the read syscall and print a message for reads >20000 bytes
trace r::do_sys_return
Trace the return from the open syscall
trace 'c:open (arg2 == 42) "%s %d", arg1, arg2'
Trace the open() call from libc only if the flags (arg2) argument is 42
trace 'p:c:write (arg1 == 1) "writing %d bytes to STDOUT", arg3'
Trace the write() call from libc to monitor writes to STDOUT
trace 'r:c:malloc (retval) "allocated = %p", retval
Trace returns from malloc and print non-NULL allocated buffers
trace 't:block:block_rq_complete "sectors=%d", args->nr_sector'
Trace the block_rq_complete kernel tracepoint and print # of tx sectors
trace 'u:pthread:pthread_create (arg4 != 0)'
Trace the USDT probe pthread_create when its 4th argument is non-zero
from:	trace	-h
argdist	
# argdist -H 'p::tcp_cleanup_rbuf(struct sock *sk, int copied):int:copied'
[15:34:45]
copied : count distribution
0 -> 1 : 15088 |********************************** |
2 -> 3 : 0 | |
4 -> 7 : 0 | |
8 -> 15 : 0 | |
16 -> 31 : 0 | |
32 -> 63 : 0 | |
64 -> 127 : 4786 |*********** |
128 -> 255 : 1 | |
256 -> 511 : 1 | |
512 -> 1023 : 4 | |
1024 -> 2047 : 11 | |
2048 -> 4095 : 5 | |
4096 -> 8191 : 27 | |
8192 -> 16383 : 105 | |
16384 -> 32767 : 0 | |
32768 -> 65535 : 10086 |*********************** |
65536 -> 131071 : 60 | |
131072 -> 262143 : 17285 |****************************************|
[...]
by	Sasha	Goldshtein
argdist	One-Liners	
argdist -H 'p::__kmalloc(u64 size):u64:size'
Print a histogram of allocation sizes passed to kmalloc
argdist -p 1005 -C 'p:c:malloc(size_t size):size_t:size:size==16'
Print a frequency count of how many times process 1005 called malloc for 16 bytes
argdist -C 'r:c:gets():char*:$retval#snooped strings'
Snoop on all strings returned by gets()
argdist -H 'r::__kmalloc(size_t size):u64:$latency/$entry(size)#ns per byte'
Print a histogram of nanoseconds per byte from kmalloc allocations
argdist -C 'p::__kmalloc(size_t size, gfp_t flags):size_t:size:flags&GFP_ATOMIC'
Print frequency count of kmalloc allocation sizes that have GFP_ATOMIC
argdist -p 1005 -C 'p:c:write(int fd):int:fd' -T 5
Print frequency counts of how many times writes were issued to a particular file descriptor
number, in process 1005, but only show the top 5 busiest fds
argdist -p 1005 -H 'r:c:read()'
Print a histogram of error codes returned by read() in process 1005
argdist -C 'r::__vfs_read():u32:$PID:$latency > 100000'
Print frequency of reads by process where the latency was >0.1ms
from:	argdist	-h
BCC/BPF	VISUALIZATIONS	
Coming	to	a	GUI	near	you
Latency	Heatmaps
CPU	+	Off-CPU	Flame	Graphs	
hrp://www.brendangregg.com/flamegraphs.html	
•  Can	now	be	
BPF	opGmized
Off-Wake	Flame	
Graphs	
•  Shows	blocking	stack	with	
waker	stack	
–  Berer	understand	why	blocked	
–  Merged	in-kernel	using	BPF	
–  Include	mulGple	waker	stacks	==	
chain	graphs	
•  We	couldn't	do	this	before
HOW	TO	PROGRAM	BCC/BPF	
Overview	for	tool	developers
Linux	Event	Sources	
Linux	4.3	
Linux	4.7	 Linux	4.9	
Linux	4.9	
Linux	4.1	
BPF	stacks	
Linux	4.6	
BPF	output	
Linux	4.4	
(version	
feature	
arrived)
Methodology	
•  Find/draw	a	funcGonal	diagram	
–  Eg,	storage	I/O	subsystem:	
•  Apply	performance	methods	
hrp://www.brendangregg.com/methodology.html	
1.  Workload	CharacterizaGon	
2.  Latency	Analysis	
3.  USE	Method	
•  Start	with	the	Q's,	
then	find	the	A's
bitehist.py	Output	
# ./bitehist.py
Tracing... Hit Ctrl-C to end.
^C
kbytes : count distribution
0 -> 1 : 3 | |
2 -> 3 : 0 | |
4 -> 7 : 211 |********** |
8 -> 15 : 0 | |
16 -> 31 : 0 | |
32 -> 63 : 0 | |
64 -> 127 : 1 | |
128 -> 255 : 800 |**************************************|
bitehist.py	Code	
bcc	examples/tracing/bitehist.py
bytehist.py	Internals	
C	BPF	Program	
User-Level	
BPF.arach_kprobe()	
Kernel	
Event	
Map	StaGsGcs	
async	read	
BPF	Bytecode	
compile	
Verifier	
error	
BPF	Bytecode	
Python	Program	
print
bytehist.py	Annotated	
bcc	examples/tracing/bitehist.py	
C	BPF	Program	 Python	Program	Map	
StaGsGcs	
"kprobe__"	is	a	shortcut	for	BPF.arach_kprobe()	
Event
Current	ComplicaGons	
•  IniGalize	all	variables	
•  Extra	bpf_probe_read()s	
•  BPF_PERF_OUTPUT()	
•  Verifier	errors
bcc	Tutorials	
1.  hrps://github.com/iovisor/bcc/blob/master/INSTALL.md	
2.  …/docs/tutorial.md	
3.  …/docs/tutorial_bcc_python_developer.md	
4.  …/docs/reference_guide.md	
5.  .../CONTRIBUTING-SCRIPTS.md
bcc	lua	
bcc	examples/lua/strlen_count.lua
Summary	
BPF	Tracing	in	Linux	
•  3.19:	sockets	
•  3.19:	maps	
•  4.1:	kprobes	
•  4.3:	uprobes	
•  4.4:	BPF	output	
•  4.6:	stacks	
•  4.7:	tracepoints	
•  4.9:	profiling	
•  4.9:	PMCs	
hrps://github.com/iovisor/bcc#tools	
Future	Work	
•  More	tooling	
•  Bug	fixes	
•  Berer	errors	
•  VisualizaGons	
•  GUIs	
•  High-level	
language
Links	&	References	
•  iovisor	bcc:	
•  hrps://github.com/iovisor/bcc			hrps://github.com/iovisor/bcc/tree/master/docs		
•  hrp://www.brendangregg.com/blog/	(search	for	"bcc")	
•  hrp://blogs.microsoO.co.il/sasha/2016/02/14/two-new-ebpf-tools-memleak-and-argdist/	
•  On	designing	tracing	tools:	hrps://www.youtube.com/watch?v=uibLwoVKjec		
•  BPF:	
•  hrps://www.kernel.org/doc/DocumentaGon/networking/filter.txt	
•  hrps://github.com/iovisor/bpf-docs		
•  hrps://suchakra.wordpress.com/tag/bpf/		
•  Flame	Graphs:	
•  hrp://www.brendangregg.com/flamegraphs.html	
•  hrp://www.brendangregg.com/blog/2016-01-20/ebpf-offcpu-flame-graph.html	
•  hrp://www.brendangregg.com/blog/2016-02-01/linux-wakeup-offwake-profiling.html	
•  Dynamic	InstrumentaGon:	
•  hrp://Op.cs.wisc.edu/par-distr-sys/papers/Hollingsworth94Dynamic.pdf	
•  hrps://en.wikipedia.org/wiki/DTrace		
•  DTrace:	Dynamic	Tracing	in	Oracle	Solaris,	Mac	OS	X	and	FreeBSD,	Brendan	Gregg,	Jim	Mauro;	PrenGce	Hall	2011	
•  NeElix	Tech	Blog	on	Vector:	
•  hrp://techblog.neElix.com/2015/04/introducing-vector-neElixs-on-host.html	
•  Greg	Law's	GDB	talk:	hrps://www.youtube.com/watch?v=PorfLSr3DDI		
•  Linux	Performance:	hrp://www.brendangregg.com/linuxperf.html
Thanks	
•  QuesGons?	
•  iovisor	bcc:	hrps://github.com/iovisor/bcc		
•  hrp://www.brendangregg.com	
•  hrp://slideshare.net/brendangregg		
•  bgregg@neElix.com	
•  @brendangregg	
	
Thanks	to	Alexei	Starovoitov	(Facebook),	Brenden	Blanco	
(PLUMgrid),	Sasha	Goldshtein	(Sela),	Daniel	Borkmann	(Cisco),	
Wang	Nan	(Huawei),	and	other	BPF	and	bcc	contributors!

More Related Content

PDF
BPF: Tracing and more
PPTX
Understanding DPDK
PDF
Linux kernel tracing
PDF
DPDK: Multi Architecture High Performance Packet Processing
PDF
eBPF - Rethinking the Linux Kernel
PDF
Security Monitoring with eBPF
PDF
Introduction to eBPF
PPTX
Understanding eBPF in a Hurry!
BPF: Tracing and more
Understanding DPDK
Linux kernel tracing
DPDK: Multi Architecture High Performance Packet Processing
eBPF - Rethinking the Linux Kernel
Security Monitoring with eBPF
Introduction to eBPF
Understanding eBPF in a Hurry!

What's hot (20)

PDF
Linux Performance Analysis and Tools
PDF
eBPF Trace from Kernel to Userspace
PDF
Linux Performance Analysis: New Tools and Old Secrets
PDF
Linux BPF Superpowers
PDF
Performance Wins with eBPF: Getting Started (2021)
PDF
Meet cute-between-ebpf-and-tracing
PDF
LinuxCon 2015 Linux Kernel Networking Walkthrough
PDF
Linux Profiling at Netflix
PPTX
Introduction to DPDK
PDF
High-Performance Networking Using eBPF, XDP, and io_uring
PDF
Intel dpdk Tutorial
PDF
LISA2019 Linux Systems Performance
PDF
Systems@Scale 2021 BPF Performance Getting Started
PPTX
Dpdk applications
PDF
The linux networking architecture
PDF
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
PPTX
An Introduction to RISC-V bootflow
PPTX
Linux Performance Analysis in 15 minutes
PDF
Java Performance Analysis on Linux with Flame Graphs
PDF
eBPF Perf Tools 2019
Linux Performance Analysis and Tools
eBPF Trace from Kernel to Userspace
Linux Performance Analysis: New Tools and Old Secrets
Linux BPF Superpowers
Performance Wins with eBPF: Getting Started (2021)
Meet cute-between-ebpf-and-tracing
LinuxCon 2015 Linux Kernel Networking Walkthrough
Linux Profiling at Netflix
Introduction to DPDK
High-Performance Networking Using eBPF, XDP, and io_uring
Intel dpdk Tutorial
LISA2019 Linux Systems Performance
Systems@Scale 2021 BPF Performance Getting Started
Dpdk applications
The linux networking architecture
Tracing MariaDB server with bpftrace - MariaDB Server Fest 2021
An Introduction to RISC-V bootflow
Linux Performance Analysis in 15 minutes
Java Performance Analysis on Linux with Flame Graphs
eBPF Perf Tools 2019
Ad

Viewers also liked (20)

PDF
Modern SQL in Open Source and Commercial Databases
PDF
Modern Data Center Network Architecture - The house that Clos built
PDF
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
PPTX
Tanel Poder Oracle Scripts and Tools (2010)
PDF
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
PDF
EuroBSDcon 2017 System Performance Analysis Methodologies
ODP
G1 Garbage Collector: Details and Tuning
PDF
Troubleshooting PostgreSQL Streaming Replication
PPTX
Am I reading GC logs Correctly?
PDF
RxNetty vs Tomcat Performance Results
PDF
Row Pattern Matching in SQL:2016
PDF
Designing Tracing Tools
PPTX
Shell,信号量以及java进程的退出
PDF
Netflix: From Clouds to Roots
PDF
H2O - the optimized HTTP server
PDF
Lambda Architecture with Spark Streaming, Kafka, Cassandra, Akka, Scala
PPTX
Spark Kernel Talk - Apache Spark Meetup San Francisco (July 2015)
PDF
Reactive dashboard’s using apache spark
PDF
Real-Time Anomaly Detection with Spark MLlib, Akka and Cassandra
PDF
Rethinking Streaming Analytics For Scale
Modern SQL in Open Source and Commercial Databases
Modern Data Center Network Architecture - The house that Clos built
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 2
Tanel Poder Oracle Scripts and Tools (2010)
Tanel Poder - Troubleshooting Complex Oracle Performance Issues - Part 1
EuroBSDcon 2017 System Performance Analysis Methodologies
G1 Garbage Collector: Details and Tuning
Troubleshooting PostgreSQL Streaming Replication
Am I reading GC logs Correctly?
RxNetty vs Tomcat Performance Results
Row Pattern Matching in SQL:2016
Designing Tracing Tools
Shell,信号量以及java进程的退出
Netflix: From Clouds to Roots
H2O - the optimized HTTP server
Lambda Architecture with Spark Streaming, Kafka, Cassandra, Akka, Scala
Spark Kernel Talk - Apache Spark Meetup San Francisco (July 2015)
Reactive dashboard’s using apache spark
Real-Time Anomaly Detection with Spark MLlib, Akka and Cassandra
Rethinking Streaming Analytics For Scale
Ad

Similar to Linux 4.x Tracing Tools: Using BPF Superpowers (20)

PDF
USENIX ATC 2017 Performance Superpowers with Enhanced BPF
PDF
Velocity 2017 Performance analysis superpowers with Linux eBPF
PDF
OSSNA 2017 Performance Analysis Superpowers with Linux BPF
PDF
bcc/BPF tools - Strategy, current tools, future challenges
PDF
BPF Tools 2017
PDF
UM2019 Extended BPF: A New Type of Software
PDF
Kernel Recipes 2017 - Performance analysis Superpowers with Linux BPF - Brend...
PDF
Kernel Recipes 2017: Performance Analysis with BPF
PDF
Linux 4.x Tracing: Performance Analysis with bcc/BPF
PDF
Linux Tracing Superpowers by Eugene Pirogov
PDF
re:Invent 2019 BPF Performance Analysis at Netflix
PDF
Efficient System Monitoring in Cloud Native Environments
PDF
Performance Wins with BPF: Getting Started
PDF
NetConf 2018 BPF Observability
PDF
Kernel bug hunting
PDF
ATO Linux Performance 2018
PDF
PDF
LSFMM 2019 BPF Observability
PDF
Linux kernel bug hunting
PDF
Kernel Recipes 2019 - BPF at Facebook
USENIX ATC 2017 Performance Superpowers with Enhanced BPF
Velocity 2017 Performance analysis superpowers with Linux eBPF
OSSNA 2017 Performance Analysis Superpowers with Linux BPF
bcc/BPF tools - Strategy, current tools, future challenges
BPF Tools 2017
UM2019 Extended BPF: A New Type of Software
Kernel Recipes 2017 - Performance analysis Superpowers with Linux BPF - Brend...
Kernel Recipes 2017: Performance Analysis with BPF
Linux 4.x Tracing: Performance Analysis with bcc/BPF
Linux Tracing Superpowers by Eugene Pirogov
re:Invent 2019 BPF Performance Analysis at Netflix
Efficient System Monitoring in Cloud Native Environments
Performance Wins with BPF: Getting Started
NetConf 2018 BPF Observability
Kernel bug hunting
ATO Linux Performance 2018
LSFMM 2019 BPF Observability
Linux kernel bug hunting
Kernel Recipes 2019 - BPF at Facebook

More from Brendan Gregg (14)

PDF
YOW2021 Computing Performance
PDF
IntelON 2021 Processor Benchmarking
PDF
Computing Performance: On the Horizon (2021)
PDF
BPF Internals (eBPF)
PDF
YOW2020 Linux Systems Performance
PDF
LPC2019 BPF Tracing Tools
PDF
YOW2018 CTO Summit: Working at netflix
PDF
YOW2018 Cloud Performance Root Cause Analysis at Netflix
PDF
FlameScope 2018
PDF
Linux Performance 2018 (PerconaLive keynote)
PDF
How Netflix Tunes EC2 Instances for Performance
PDF
LISA17 Container Performance Analysis
PDF
Kernel Recipes 2017: Using Linux perf at Netflix
PDF
USENIX ATC 2017: Visualizing Performance with Flame Graphs
YOW2021 Computing Performance
IntelON 2021 Processor Benchmarking
Computing Performance: On the Horizon (2021)
BPF Internals (eBPF)
YOW2020 Linux Systems Performance
LPC2019 BPF Tracing Tools
YOW2018 CTO Summit: Working at netflix
YOW2018 Cloud Performance Root Cause Analysis at Netflix
FlameScope 2018
Linux Performance 2018 (PerconaLive keynote)
How Netflix Tunes EC2 Instances for Performance
LISA17 Container Performance Analysis
Kernel Recipes 2017: Using Linux perf at Netflix
USENIX ATC 2017: Visualizing Performance with Flame Graphs

Recently uploaded (20)

PDF
EGCB_Solar_Project_Presentation_and Finalcial Analysis.pdf
PPTX
Strategic Picks — Prioritising the Right Agentic Use Cases [2/6]
PDF
Peak of Data & AI Encore: Scalable Design & Infrastructure
PPTX
From Curiosity to ROI — Cost-Benefit Analysis of Agentic Automation [3/6]
PDF
Child-friendly e-learning for artificial intelligence education in Indonesia:...
PDF
ELLIE29.pdfWETWETAWTAWETAETAETERTRTERTER
PDF
Ebook - The Future of AI A Comprehensive Guide.pdf
PDF
Decision Optimization - From Theory to Practice
PDF
Be ready for tomorrow’s needs with a longer-lasting, higher-performing PC
PDF
Human Computer Interaction Miterm Lesson
PDF
CCUS-as-the-Missing-Link-to-Net-Zero_AksCurious.pdf
PDF
Revolutionizing recommendations a survey: a comprehensive exploration of mode...
PDF
Rooftops detection with YOLOv8 from aerial imagery and a brief review on roof...
PDF
Altius execution marketplace concept.pdf
PDF
Optimizing bioinformatics applications: a novel approach with human protein d...
PPTX
maintenance powerrpoint for adaprive and preventive
PDF
eBook Outline_ AI in Cybersecurity – The Future of Digital Defense.pdf
PDF
Addressing the challenges of harmonizing law and artificial intelligence tech...
PPT
Overviiew on Intellectual property right
PPTX
Blending method and technology for hydrogen.pptx
EGCB_Solar_Project_Presentation_and Finalcial Analysis.pdf
Strategic Picks — Prioritising the Right Agentic Use Cases [2/6]
Peak of Data & AI Encore: Scalable Design & Infrastructure
From Curiosity to ROI — Cost-Benefit Analysis of Agentic Automation [3/6]
Child-friendly e-learning for artificial intelligence education in Indonesia:...
ELLIE29.pdfWETWETAWTAWETAETAETERTRTERTER
Ebook - The Future of AI A Comprehensive Guide.pdf
Decision Optimization - From Theory to Practice
Be ready for tomorrow’s needs with a longer-lasting, higher-performing PC
Human Computer Interaction Miterm Lesson
CCUS-as-the-Missing-Link-to-Net-Zero_AksCurious.pdf
Revolutionizing recommendations a survey: a comprehensive exploration of mode...
Rooftops detection with YOLOv8 from aerial imagery and a brief review on roof...
Altius execution marketplace concept.pdf
Optimizing bioinformatics applications: a novel approach with human protein d...
maintenance powerrpoint for adaprive and preventive
eBook Outline_ AI in Cybersecurity – The Future of Digital Defense.pdf
Addressing the challenges of harmonizing law and artificial intelligence tech...
Overviiew on Intellectual property right
Blending method and technology for hydrogen.pptx

Linux 4.x Tracing Tools: Using BPF Superpowers