SlideShare a Scribd company logo
1 of 35
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Staring into the eBPF Abyss
Sasha Goldshtein
CTO, Sela Group
@goldshtn
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Agenda
• Modern Linux tracing landscape
• BPF
• BCC – BPF Compiler Collection
• Using BCC tools
• Authoring BCC tools
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Prerequisites
• You should …
• Have experience developing on or administering a Linux deployment
• Be familiar with C/Python/Lua (a bonus)
• To use your own machines for this workshop …
• You will need Linux 4.6+
• Clone or install some open source tools (perf, bcc)
• You can also use the instructor-provided VirtualBox appliance or
Strigo workspace
• Instructions and labs:
https://github.com/goldshtn/linux-tracing-workshop
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Tracing on the Performance Spectrum
Invasiveness
Envelope
System completeness
Metrics &
simulations
Development Testing Production
Profilers
jprof, valgrind
Counters
top, vmstat
Debuggers
Function
tracers
Event tracers
Aggregators
SystemTap, BPF
Load
tools
ab
Light-weight profilers
perf
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Tracing Objectives
• Trace function execution, arguments, call graph
• Print lightweight log messages (kernel/user)
• Aggregate statistics (min/max/avg, histogram)
• Low overhead
• Continuous monitoring
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Linux Tracing Tools, Today
Ease of use
BPF/BCC
SysDig
ktap
SystemTap
LTTng
ftrace
perf
custom .ko
new stable dead
Level of detail, features
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Berkeley Packet Filters (BPF)
• Originally designed for, well, packet filtering:
dst port 80 and len >= 100
• Custom instruction set, interpreted/JIT compiled
0: (bf) r6 = r1
1: (85) call 14
2: (67) r0 <<= 32
3: (77) r0 >>= 32
4: (15) if r0 == 0x49f goto pc+40
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Extended BPF (3.18 and ongoing)
• Attach BPF programs to kprobes/uprobes (4.1) and tracepoints (4.7)
• Data structures: array, hash (expandable), stack map (4.6)
• Output to trace buffer (4.3) and perf cyclic buffer (4.4)
• Helper functions: get time, get current comm, get current CPU, etc.
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
BCC: BPF Compiler Collection
• Library and Python/Lua module for compiling, loading, and executing
BPF programs
• Compile BPF program from C source
• Attach BPF program to kprobe/uprobe/tracepoint/USDT/socket
• Poll data from BPF program using Python/Lua
• Can do in-kernel aggregation and filtering
• Growing collection of tracing, networking, and performance tools
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
BCC
• The BCC repository contains a variety of existing scripts and tools to
get you started
• The BPF module (Python/Lua) can be used to build new tools or one-
off scripts
$ ls *.py
argdist.py
bashreadline.py
biolatency.py
biosnoop.py
biotop.py
bitesize.py
btrfsdist.py
btrfsslower.py
cachestat.py
cpudist.py
dcsnoop.py
dcstat.py
execsnoop.py
ext4dist.py
ext4slower.py
filelife.py
fileslower.py
filetop.py
funccount.py
funclatency.py
gethostlatency.py
hardirqs.py
killsnoop.py
mdflush.py
memleak.py
offcputime.py
offwaketime.py
oomkill.py
opensnoop.py
pidpersec.py
runqlat.py
softirqs.py
solisten.py
stackcount.py
stacksnoop.py
statsnoop.py
syncsnoop.py
tcpaccept.py
tcpconnect.py
tcpconnlat.py
tcpretrans.py
tplist.py
trace.py
vfscount.py
vfsstat.py
wakeuptime.py
xfsdist.py
xfsslower.py
zfsdist.py
zfsslower.py
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Specialized Tools
# ./hardirqs.py
Tracing hard irq event time... Hit Ctrl-C to end.
^C
HARDIRQ TOTAL_usecs
virtio0-input.0 959
ahci[0000:00:1f.2] 1290
# ./biolatency.py
Tracing block device I/O... Hit Ctrl-C to end.
^C
usecs : count distribution
64 -> 127 : 7 |********* |
128 -> 255 : 14 |****************** |
256 -> 511 : 5 |****** |
512 -> 1023 : 30 |****************************************|
1024 -> 2047 : 1 |* |
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Specialized Tools
# ./filetop.py
01:35:51 loadavg: 0.01 0.04 0.03 2/139 3611
PID COMM READS WRITES R_Kb W_Kb T FILE
2496 sshd 3 1 48 0 O ptmx
2939 screen 4 1 16 0 O ptmx
2496 sshd 1 3 16 0 S TCP
3611 clear 2 0 8 0 R screen
2939 screen 1 3 4 0 O 0
3589 filetop.py 2 0 2 0 R loadavg
3611 clear 1 0 0 0 R libtinfo.so.5.9
3611 clear 1 0 0 0 R libc-2.21.so
3611 filetop.py 3 0 0 0 R clear
3611 filetop.py 2 0 0 0 R ld-2.21.so
3611 clear 0 1 0 0 O 2
3589 filetop.py 0 3 0 0 O 2
# ./cachestat.py
HITS MISSES DIRTIES READ_HIT% WRITE_HIT% BUFFERS_MB CACHED_MB
0 0 0 0.0% 0.0% 54 482
842 0 0 100.0% 0.0% 54 482
889 128 0 87.4% 12.6% 54 482
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Specialized Tools
# ./stackcount.py __kmalloc
Tracing 1 functions for "__kmalloc"... Hit Ctrl-C to end.
^C
__kmalloc
alloc_fdtable
dup_fd
copy_process.part.31
_do_fork
sys_clone
do_syscall_64
return_from_SYSCALL_64
4
__kmalloc
create_pipe_files
__do_pipe_flags
sys_pipe
entry_SYSCALL_64_fastpath
6
__kmalloc
htree_dirblock_to_tree
ext4_htree_fill_tree
ext4_readdir
iterate_dir
SyS_getdents
entry_SYSCALL_64_fastpath
14
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
BPF Tracing Targets (circa July 2016)
Target Support Overhead
kprobes Native Low
uprobes Native
Medium
handler runs in KM
Kernel tracepoints NativeNEW Low
USDT tracepoints
Temporary
through uprobes
Medium
handler runs in KM
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Multi-Tools: argdist
# ./argdist.py -C 'p:c:write(int fd, const void *buf,
size_t count):size_t:count:fd==1'
[01:49:00]
p:c:write(int fd, const void *buf, size_t count):size_t:count:fd==1
COUNT EVENT
1 count = 3134
1 count = 170
1 count = 181
2 count = 18
3 count = 30
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Multi-Tools: argdist
# ./argdist.py -i 5 -H 'r::__vfs_read(void *file, void *buf,
size_t count):size_t:$entry(count):$latency > 1000000'
[01:51:40]
count : count distribution
0 -> 1 : 20 |****************************************|
2 -> 3 : 0 | |
4 -> 7 : 0 | |
8 -> 15 : 0 | |
16 -> 31 : 0 | |
32 -> 63 : 0 | |
64 -> 127 : 0 | |
128 -> 255 : 6 |************ |
256 -> 511 : 0 | |
512 -> 1023 : 0 | |
1024 -> 2047 : 1 |** |
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Multi-Tools: trace
# ./trace.py 'r:/usr/bin/bash:readline "%s", retval'
TIME PID COMM FUNC -
02:02:26 3711 bash readline ls –la
02:02:36 3711 bash readline wc -l src.c
# ./tplist.py -v block:block_rq_complete
block:block_rq_complete
dev_t dev;
sector_t sector;
unsigned int nr_sector;
int errors;
char rwbs[8];
# ./trace.py 't:block:block_rq_complete "sectors=%d", tp.nr_sector'
TIME PID COMM FUNC -
02:03:56 0 swapper/0 block_rq_complete sectors=16
02:03:56 0 swapper/0 block_rq_complete sectors=8
02:03:58 0 swapper/0 block_rq_complete sectors=24
02:04:00 0 swapper/0 block_rq_complete sectors=0
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Multi-Tools: trace
# ./tplist.py -l pthread -v libpthread:pthread_create
/usr/lib64/libpthread-2.21.so libpthread:pthread_create
location 0x7c63
8 unsigned bytes @ register %rax
8 unsigned bytes @ -192(%rbp)
8 unsigned bytes @ -168(%rbp)
8 unsigned bytes @ -176(%rbp)
# ./trace.py 'u:pthread:pthread_create "%llx", arg3'
TIME PID COMM FUNC -
02:07:29 4051 contentions pthread_create 400e00
02:07:29 4051 contentions pthread_create 400e00
02:07:29 4051 contentions pthread_create 400e00
02:07:29 4051 contentions pthread_create 400e00
^C
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Multi-Tools: trace
# trace -p $(pidof node) 'u:node:http__server__request
"%s %s (from %s:%d)" arg5, arg6, arg3, arg4'
TIME PID COMM FUNC -
04:50:44 22185 node http__server__request GET /foofoo (from ::1:51056)
04:50:46 22185 node http__server__request GET / (from ::1:51056)
^C
# ./trace.py 'u:/tmp/libjvm.so:thread__start "%s [%d]", arg1, arg4' 
'u:/tmp/libjvm.so:thread__stop "%s [%d]", arg1, arg4'
TIME PID COMM FUNC -
06:55:24 32157 java thread__start Reference Handler [32157]
06:55:24 32158 java thread__start Finalizer [32158]
06:55:24 32159 java thread__start Signal Dispatcher [32159]
06:55:24 32160 java thread__start C2 CompilerThread0 [32160]
06:55:24 32161 java thread__start C2 CompilerThread1 [32161]
06:55:24 32162 java thread__start C1 CompilerThread2 [32162]
06:55:24 32163 java thread__start Service Thread [32163]
06:55:28 32159 java thread__stop Signal Dispatcher [32159]
^C
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Lab
#3 – Chasing a C++ Memory Leak
#4 – MySQL and Disk Stats and Stacks
#5 – Node and JVM USDT Probes
https://s.sashag.net/sreconlabs
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Kernel
Custom Tool Design
BPF program
Tracepoint kprobe
Python/Lua driver
App process
uprobeUSDT
Probe handler
Probe handler
Hash or
histogram
Cyclic buffer
U
K
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
BPF Program: Counting Allocations
#include <linux/ptrace.h>
struct alloc_info_t {
u64 count;
u64 size;
};
BPF_HASH(allocs, u32, struct alloc_info_t);
int handler(struct pt_regs *ctx, size_t size) {
u32 pid = bpf_get_current_pid_tgid();
struct alloc_info_t init = { 0 }, *info;
info = allocs.lookup_or_init(&pid, &init);
info->count += 1;
info->size += size;
return 0;
}
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
BPF Driver
#!/usr/bin/env python
from bcc import BPF
from time import sleep
program = BPF(src_file="allocs.c")
program.attach_kprobe(event="__kmalloc", fn_name="handler")
allocs = program["allocs"]
while True:
sleep(5)
print("n%-8s %-8s %-10s" % ("PID", "COUNT", "SIZE"))
for key, value in sorted(allocs.items(), key=lambda (k, v): k.value):
print("%-8d %-8d %-8d" % (key.value, value.count, value.size))
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
BPF Execution
# ./allocs.py
PID COUNT SIZE
28064 3 456
28157 10 76
28158 5 1116
PID COUNT SIZE
28001 113 1828
28064 8 1216
28110 38 683
28157 46 328
28158 5 1116
28159 41 12894
^C
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Inline BPF Program
#!/usr/bin/env python
from bcc import BPF
from time import sleep
program = BPF(text="""BPF_HASH(counts, u32, u32);
TRACEPOINT_PROBE(irq, irq_handler_entry) {
u32 zero = 0, *existing, irq = args->irq;
existing = counts.lookup_or_init(&irq, &zero);
++(*existing);
return 0;
}""")
counts = program["counts"]
sleep(9999999)
print("n%-8s %-8s" % ("IRQ", "COUNT"))
for key, value in counts.items():
print("%-8d %-8d" % (key.value, value.value))
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Data Types
• Array
• Hash
• Histogram
• Perf buffer (4.4+)NEW
• Stack map (4.6+)NEW
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Example: Histogram
struct dist_key_t {
char op[OP_NAME_LEN];
u64 slot;
};
BPF_HISTOGRAM(dist, struct dist_key_t);
...
struct dist_key_t key = { .slot=bpf_log2l(elapsed_time) };
__builtin_memcpy(&key.op, op, sizeof(key.op));
dist.increment(key);
...
bpf.get_table("dist").print_log2_hist("operation")
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Example: Perf Buffer
bpf = BPF(text="""#include <linux/ptrace.h>
struct data_t { u64 pid; char str[80]; };
BPF_PERF_OUTPUT(events);
int print(struct pt_regs *ctx) {
struct data_t data = {0};
...
events.perf_submit(ctx, &data, sizeof(data));
return 0;
}""")
class Data(ct.Structure):
_fields_ = [ ("pid", ct.c_ulonglong), ("str", ct.c_char*80) ]
bpf.attach_uretprobe(name="/bin/bash", sym="readline", fn_name="print")
b["events"].open_perf_buffer(lambda cpu, data, size:
event = ct.cast(data, ct.POINTER(Data)).contents
print(event)
)
while True: bpf.kprobe_poll()
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Example: Stack Map
BPF_HASH(counts, int);
BPF_STACK_TRACE(stacks, 1024);
...
int key = stacks.get_stackid(ctx, BPF_F_REUSE_STACKID);
u64 zero = 0;
u64 *val = counts.lookup_or_init(&key, &zero);
++(*val);
...
counts, stacks = bpf["counts"], bpf["stacks"]
for k, v in counts:
for addr in stacks.walk(k.value):
print(BPF.ksym(addr))
print(v.value)
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Custom Tool Design Tips
• Try to perform all aggregations in the BPF program and keep UM
copying to a minimum
• Limit hash/histogram/stackmap sizes, prune, keep only top entries
• Clear cyclic buffer often and quickly
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Deployment
• For Python tools, deploy Python + libbcc.so
• For Lua tools, deploy only bcc-lua
• Statically links libbcc.a but allows plugging libbcc.so
• Kernel build flags:
• CONFIG_BPF=y
• CONFIG_BPF_SYSCALL=y
• CONFIG_BPF_JIT=y
• CONFIG_HAVE_BPF_JIT=y
• CONFIG_BPF_EVENTS=y
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Lab
#6 – Contention Stats and Stacks
#7 – From BCC GitHub Issues
https://s.sashag.net/sreconlabs
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Summary
• Tracing can identify bugs and performance issues that no debugger or
profiler can catch
• Tools make low-overhead, dynamic, production tracing possible
• BPF is the next-generation backend for Linux tracing tools
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
Thank You!
Sasha Goldshtein
@goldshtn

More Related Content

What's hot

Understanding eBPF in a Hurry!
Understanding eBPF in a Hurry!Understanding eBPF in a Hurry!
Understanding eBPF in a Hurry!Ray Jenkins
 
Building Network Functions with eBPF & BCC
Building Network Functions with eBPF & BCCBuilding Network Functions with eBPF & BCC
Building Network Functions with eBPF & BCCKernel TLV
 
Linux kernel tracing
Linux kernel tracingLinux kernel tracing
Linux kernel tracingViller Hsiao
 
LinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughLinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughThomas Graf
 
Performance Wins with eBPF: Getting Started (2021)
Performance Wins with eBPF: Getting Started (2021)Performance Wins with eBPF: Getting Started (2021)
Performance Wins with eBPF: Getting Started (2021)Brendan Gregg
 
Cilium - Container Networking with BPF & XDP
Cilium - Container Networking with BPF & XDPCilium - Container Networking with BPF & XDP
Cilium - Container Networking with BPF & XDPThomas Graf
 
Xdp and ebpf_maps
Xdp and ebpf_mapsXdp and ebpf_maps
Xdp and ebpf_mapslcplcp1
 
Introduction to eBPF
Introduction to eBPFIntroduction to eBPF
Introduction to eBPFRogerColl2
 
Linux BPF Superpowers
Linux BPF SuperpowersLinux BPF Superpowers
Linux BPF SuperpowersBrendan Gregg
 
Security Monitoring with eBPF
Security Monitoring with eBPFSecurity Monitoring with eBPF
Security Monitoring with eBPFAlex Maestretti
 
BPF / XDP 8월 세미나 KossLab
BPF / XDP 8월 세미나 KossLabBPF / XDP 8월 세미나 KossLab
BPF / XDP 8월 세미나 KossLabTaeung Song
 
Introduction to eBPF and XDP
Introduction to eBPF and XDPIntroduction to eBPF and XDP
Introduction to eBPF and XDPlcplcp1
 
Linux 4.x Tracing Tools: Using BPF Superpowers
Linux 4.x Tracing Tools: Using BPF SuperpowersLinux 4.x Tracing Tools: Using BPF Superpowers
Linux 4.x Tracing Tools: Using BPF SuperpowersBrendan Gregg
 
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDPDockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDPThomas Graf
 
Intel DPDK Step by Step instructions
Intel DPDK Step by Step instructionsIntel DPDK Step by Step instructions
Intel DPDK Step by Step instructionsHisaki Ohara
 

What's hot (20)

Understanding eBPF in a Hurry!
Understanding eBPF in a Hurry!Understanding eBPF in a Hurry!
Understanding eBPF in a Hurry!
 
Building Network Functions with eBPF & BCC
Building Network Functions with eBPF & BCCBuilding Network Functions with eBPF & BCC
Building Network Functions with eBPF & BCC
 
Linux kernel tracing
Linux kernel tracingLinux kernel tracing
Linux kernel tracing
 
eBPF Basics
eBPF BasicseBPF Basics
eBPF Basics
 
LinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking WalkthroughLinuxCon 2015 Linux Kernel Networking Walkthrough
LinuxCon 2015 Linux Kernel Networking Walkthrough
 
Performance Wins with eBPF: Getting Started (2021)
Performance Wins with eBPF: Getting Started (2021)Performance Wins with eBPF: Getting Started (2021)
Performance Wins with eBPF: Getting Started (2021)
 
Cilium - Container Networking with BPF & XDP
Cilium - Container Networking with BPF & XDPCilium - Container Networking with BPF & XDP
Cilium - Container Networking with BPF & XDP
 
DPDK In Depth
DPDK In DepthDPDK In Depth
DPDK In Depth
 
eBPF/XDP
eBPF/XDP eBPF/XDP
eBPF/XDP
 
Xdp and ebpf_maps
Xdp and ebpf_mapsXdp and ebpf_maps
Xdp and ebpf_maps
 
Introduction to eBPF
Introduction to eBPFIntroduction to eBPF
Introduction to eBPF
 
Linux BPF Superpowers
Linux BPF SuperpowersLinux BPF Superpowers
Linux BPF Superpowers
 
Understanding DPDK
Understanding DPDKUnderstanding DPDK
Understanding DPDK
 
Security Monitoring with eBPF
Security Monitoring with eBPFSecurity Monitoring with eBPF
Security Monitoring with eBPF
 
BPF / XDP 8월 세미나 KossLab
BPF / XDP 8월 세미나 KossLabBPF / XDP 8월 세미나 KossLab
BPF / XDP 8월 세미나 KossLab
 
Introduction to eBPF and XDP
Introduction to eBPF and XDPIntroduction to eBPF and XDP
Introduction to eBPF and XDP
 
Linux 4.x Tracing Tools: Using BPF Superpowers
Linux 4.x Tracing Tools: Using BPF SuperpowersLinux 4.x Tracing Tools: Using BPF Superpowers
Linux 4.x Tracing Tools: Using BPF Superpowers
 
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDPDockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
DockerCon 2017 - Cilium - Network and Application Security with BPF and XDP
 
Intel DPDK Step by Step instructions
Intel DPDK Step by Step instructionsIntel DPDK Step by Step instructions
Intel DPDK Step by Step instructions
 
Dpdk performance
Dpdk performanceDpdk performance
Dpdk performance
 

Viewers also liked

The Next Linux Superpower: eBPF Primer
The Next Linux Superpower: eBPF PrimerThe Next Linux Superpower: eBPF Primer
The Next Linux Superpower: eBPF PrimerSasha Goldshtein
 
ebpf and IO Visor: The What, how, and what next!
ebpf and IO Visor: The What, how, and what next!ebpf and IO Visor: The What, how, and what next!
ebpf and IO Visor: The What, how, and what next!Affan Syed
 
Linux Profiling at Netflix
Linux Profiling at NetflixLinux Profiling at Netflix
Linux Profiling at NetflixBrendan Gregg
 
Linux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsLinux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsBrendan Gregg
 
EBPF and Linux Networking
EBPF and Linux NetworkingEBPF and Linux Networking
EBPF and Linux NetworkingPLUMgrid
 
Performance Tuning EC2 Instances
Performance Tuning EC2 InstancesPerformance Tuning EC2 Instances
Performance Tuning EC2 InstancesBrendan Gregg
 
Blazing Performance with Flame Graphs
Blazing Performance with Flame GraphsBlazing Performance with Flame Graphs
Blazing Performance with Flame GraphsBrendan Gregg
 
Linux Systems Performance 2016
Linux Systems Performance 2016Linux Systems Performance 2016
Linux Systems Performance 2016Brendan Gregg
 
Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016Brendan Gregg
 
Velocity 2015 linux perf tools
Velocity 2015 linux perf toolsVelocity 2015 linux perf tools
Velocity 2015 linux perf toolsBrendan Gregg
 
Linux 4.x Tracing: Performance Analysis with bcc/BPF
Linux 4.x Tracing: Performance Analysis with bcc/BPFLinux 4.x Tracing: Performance Analysis with bcc/BPF
Linux 4.x Tracing: Performance Analysis with bcc/BPFBrendan Gregg
 
Extending Sysdig with Chisel
Extending Sysdig with ChiselExtending Sysdig with Chisel
Extending Sysdig with ChiselSysdig
 
From DTrace to Linux
From DTrace to LinuxFrom DTrace to Linux
From DTrace to LinuxBrendan Gregg
 
(PFC403) Maximizing Amazon S3 Performance | AWS re:Invent 2014
(PFC403) Maximizing Amazon S3 Performance | AWS re:Invent 2014(PFC403) Maximizing Amazon S3 Performance | AWS re:Invent 2014
(PFC403) Maximizing Amazon S3 Performance | AWS re:Invent 2014Amazon Web Services
 
ACM Applicative System Methodology 2016
ACM Applicative System Methodology 2016ACM Applicative System Methodology 2016
ACM Applicative System Methodology 2016Brendan Gregg
 

Viewers also liked (15)

The Next Linux Superpower: eBPF Primer
The Next Linux Superpower: eBPF PrimerThe Next Linux Superpower: eBPF Primer
The Next Linux Superpower: eBPF Primer
 
ebpf and IO Visor: The What, how, and what next!
ebpf and IO Visor: The What, how, and what next!ebpf and IO Visor: The What, how, and what next!
ebpf and IO Visor: The What, how, and what next!
 
Linux Profiling at Netflix
Linux Profiling at NetflixLinux Profiling at Netflix
Linux Profiling at Netflix
 
Linux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old SecretsLinux Performance Analysis: New Tools and Old Secrets
Linux Performance Analysis: New Tools and Old Secrets
 
EBPF and Linux Networking
EBPF and Linux NetworkingEBPF and Linux Networking
EBPF and Linux Networking
 
Performance Tuning EC2 Instances
Performance Tuning EC2 InstancesPerformance Tuning EC2 Instances
Performance Tuning EC2 Instances
 
Blazing Performance with Flame Graphs
Blazing Performance with Flame GraphsBlazing Performance with Flame Graphs
Blazing Performance with Flame Graphs
 
Linux Systems Performance 2016
Linux Systems Performance 2016Linux Systems Performance 2016
Linux Systems Performance 2016
 
Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016Broken Linux Performance Tools 2016
Broken Linux Performance Tools 2016
 
Velocity 2015 linux perf tools
Velocity 2015 linux perf toolsVelocity 2015 linux perf tools
Velocity 2015 linux perf tools
 
Linux 4.x Tracing: Performance Analysis with bcc/BPF
Linux 4.x Tracing: Performance Analysis with bcc/BPFLinux 4.x Tracing: Performance Analysis with bcc/BPF
Linux 4.x Tracing: Performance Analysis with bcc/BPF
 
Extending Sysdig with Chisel
Extending Sysdig with ChiselExtending Sysdig with Chisel
Extending Sysdig with Chisel
 
From DTrace to Linux
From DTrace to LinuxFrom DTrace to Linux
From DTrace to Linux
 
(PFC403) Maximizing Amazon S3 Performance | AWS re:Invent 2014
(PFC403) Maximizing Amazon S3 Performance | AWS re:Invent 2014(PFC403) Maximizing Amazon S3 Performance | AWS re:Invent 2014
(PFC403) Maximizing Amazon S3 Performance | AWS re:Invent 2014
 
ACM Applicative System Methodology 2016
ACM Applicative System Methodology 2016ACM Applicative System Methodology 2016
ACM Applicative System Methodology 2016
 

Similar to Staring into the eBPF Abyss

Modern Linux Tracing Landscape
Modern Linux Tracing LandscapeModern Linux Tracing Landscape
Modern Linux Tracing LandscapeSasha Goldshtein
 
Systems@Scale 2021 BPF Performance Getting Started
Systems@Scale 2021 BPF Performance Getting StartedSystems@Scale 2021 BPF Performance Getting Started
Systems@Scale 2021 BPF Performance Getting StartedBrendan Gregg
 
Continuous SQL with Apache Streaming (FLaNK and FLiP)
Continuous SQL with Apache Streaming (FLaNK and FLiP)Continuous SQL with Apache Streaming (FLaNK and FLiP)
Continuous SQL with Apache Streaming (FLaNK and FLiP)Timothy Spann
 
Performance Wins with BPF: Getting Started
Performance Wins with BPF: Getting StartedPerformance Wins with BPF: Getting Started
Performance Wins with BPF: Getting StartedBrendan Gregg
 
OSSNA 2017 Performance Analysis Superpowers with Linux BPF
OSSNA 2017 Performance Analysis Superpowers with Linux BPFOSSNA 2017 Performance Analysis Superpowers with Linux BPF
OSSNA 2017 Performance Analysis Superpowers with Linux BPFBrendan Gregg
 
FØCAL Boston AiR - Computer Vision Tracing and Hardware Simulation
FØCAL Boston AiR - Computer Vision Tracing and Hardware SimulationFØCAL Boston AiR - Computer Vision Tracing and Hardware Simulation
FØCAL Boston AiR - Computer Vision Tracing and Hardware SimulationFØCAL
 
The true story_of_hello_world
The true story_of_hello_worldThe true story_of_hello_world
The true story_of_hello_worldfantasy zheng
 
BigDataFest Building Modern Data Streaming Apps
BigDataFest  Building Modern Data Streaming AppsBigDataFest  Building Modern Data Streaming Apps
BigDataFest Building Modern Data Streaming Appsssuser73434e
 
Native support of Prometheus monitoring in Apache Spark 3
Native support of Prometheus monitoring in Apache Spark 3Native support of Prometheus monitoring in Apache Spark 3
Native support of Prometheus monitoring in Apache Spark 3Dongjoon Hyun
 
Tiny ML for spark Fun Edge
Tiny ML for spark Fun EdgeTiny ML for spark Fun Edge
Tiny ML for spark Fun Edge艾鍗科技
 
Flink sql for continuous sql etl apps & Apache NiFi devops
Flink sql for continuous sql etl apps & Apache NiFi devopsFlink sql for continuous sql etl apps & Apache NiFi devops
Flink sql for continuous sql etl apps & Apache NiFi devopsTimothy Spann
 
Metasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCUMetasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCUKiwamu Okabe
 
Crash_Report_Mechanism_In_Tizen
Crash_Report_Mechanism_In_TizenCrash_Report_Mechanism_In_Tizen
Crash_Report_Mechanism_In_TizenLex Yu
 
Piwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 SpringPiwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 SpringTakashi Yamamoto
 
IAA Life in Lockdown series: Securing Internet Routing
IAA Life in Lockdown series: Securing Internet RoutingIAA Life in Lockdown series: Securing Internet Routing
IAA Life in Lockdown series: Securing Internet RoutingAPNIC
 
[1C2]webrtc 개발, 현재와 미래
[1C2]webrtc 개발, 현재와 미래[1C2]webrtc 개발, 현재와 미래
[1C2]webrtc 개발, 현재와 미래NAVER D2
 
Introduction to Extrae/Paraver, part I
Introduction to Extrae/Paraver, part IIntroduction to Extrae/Paraver, part I
Introduction to Extrae/Paraver, part IGeorge Markomanolis
 

Similar to Staring into the eBPF Abyss (20)

Modern Linux Tracing Landscape
Modern Linux Tracing LandscapeModern Linux Tracing Landscape
Modern Linux Tracing Landscape
 
Systems@Scale 2021 BPF Performance Getting Started
Systems@Scale 2021 BPF Performance Getting StartedSystems@Scale 2021 BPF Performance Getting Started
Systems@Scale 2021 BPF Performance Getting Started
 
Origins of Serverless
Origins of ServerlessOrigins of Serverless
Origins of Serverless
 
Continuous SQL with Apache Streaming (FLaNK and FLiP)
Continuous SQL with Apache Streaming (FLaNK and FLiP)Continuous SQL with Apache Streaming (FLaNK and FLiP)
Continuous SQL with Apache Streaming (FLaNK and FLiP)
 
Performance Wins with BPF: Getting Started
Performance Wins with BPF: Getting StartedPerformance Wins with BPF: Getting Started
Performance Wins with BPF: Getting Started
 
Debugging 2013- Jesper Brouer
Debugging 2013- Jesper BrouerDebugging 2013- Jesper Brouer
Debugging 2013- Jesper Brouer
 
MLflow with R
MLflow with RMLflow with R
MLflow with R
 
OSSNA 2017 Performance Analysis Superpowers with Linux BPF
OSSNA 2017 Performance Analysis Superpowers with Linux BPFOSSNA 2017 Performance Analysis Superpowers with Linux BPF
OSSNA 2017 Performance Analysis Superpowers with Linux BPF
 
FØCAL Boston AiR - Computer Vision Tracing and Hardware Simulation
FØCAL Boston AiR - Computer Vision Tracing and Hardware SimulationFØCAL Boston AiR - Computer Vision Tracing and Hardware Simulation
FØCAL Boston AiR - Computer Vision Tracing and Hardware Simulation
 
The true story_of_hello_world
The true story_of_hello_worldThe true story_of_hello_world
The true story_of_hello_world
 
BigDataFest Building Modern Data Streaming Apps
BigDataFest  Building Modern Data Streaming AppsBigDataFest  Building Modern Data Streaming Apps
BigDataFest Building Modern Data Streaming Apps
 
Native support of Prometheus monitoring in Apache Spark 3
Native support of Prometheus monitoring in Apache Spark 3Native support of Prometheus monitoring in Apache Spark 3
Native support of Prometheus monitoring in Apache Spark 3
 
Tiny ML for spark Fun Edge
Tiny ML for spark Fun EdgeTiny ML for spark Fun Edge
Tiny ML for spark Fun Edge
 
Flink sql for continuous sql etl apps & Apache NiFi devops
Flink sql for continuous sql etl apps & Apache NiFi devopsFlink sql for continuous sql etl apps & Apache NiFi devops
Flink sql for continuous sql etl apps & Apache NiFi devops
 
Metasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCUMetasepi team meeting #20: Start! ATS programming on MCU
Metasepi team meeting #20: Start! ATS programming on MCU
 
Crash_Report_Mechanism_In_Tizen
Crash_Report_Mechanism_In_TizenCrash_Report_Mechanism_In_Tizen
Crash_Report_Mechanism_In_Tizen
 
Piwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 SpringPiwik elasticsearch kibana at OSC Tokyo 2016 Spring
Piwik elasticsearch kibana at OSC Tokyo 2016 Spring
 
IAA Life in Lockdown series: Securing Internet Routing
IAA Life in Lockdown series: Securing Internet RoutingIAA Life in Lockdown series: Securing Internet Routing
IAA Life in Lockdown series: Securing Internet Routing
 
[1C2]webrtc 개발, 현재와 미래
[1C2]webrtc 개발, 현재와 미래[1C2]webrtc 개발, 현재와 미래
[1C2]webrtc 개발, 현재와 미래
 
Introduction to Extrae/Paraver, part I
Introduction to Extrae/Paraver, part IIntroduction to Extrae/Paraver, part I
Introduction to Extrae/Paraver, part I
 

More from Sasha Goldshtein

Visual Studio 2015 and the Next .NET Framework
Visual Studio 2015 and the Next .NET FrameworkVisual Studio 2015 and the Next .NET Framework
Visual Studio 2015 and the Next .NET FrameworkSasha Goldshtein
 
Swift: Apple's New Programming Language for iOS and OS X
Swift: Apple's New Programming Language for iOS and OS XSwift: Apple's New Programming Language for iOS and OS X
Swift: Apple's New Programming Language for iOS and OS XSasha Goldshtein
 
C# Everywhere: Cross-Platform Mobile Apps with Xamarin
C# Everywhere: Cross-Platform Mobile Apps with XamarinC# Everywhere: Cross-Platform Mobile Apps with Xamarin
C# Everywhere: Cross-Platform Mobile Apps with XamarinSasha Goldshtein
 
Modern Backends for Mobile Apps
Modern Backends for Mobile AppsModern Backends for Mobile Apps
Modern Backends for Mobile AppsSasha Goldshtein
 
Performance and Debugging with the Diagnostics Hub in Visual Studio 2013
Performance and Debugging with the Diagnostics Hub in Visual Studio 2013Performance and Debugging with the Diagnostics Hub in Visual Studio 2013
Performance and Debugging with the Diagnostics Hub in Visual Studio 2013Sasha Goldshtein
 
Mastering IntelliTrace in Development and Production
Mastering IntelliTrace in Development and ProductionMastering IntelliTrace in Development and Production
Mastering IntelliTrace in Development and ProductionSasha Goldshtein
 
Delivering Millions of Push Notifications in Minutes
Delivering Millions of Push Notifications in MinutesDelivering Millions of Push Notifications in Minutes
Delivering Millions of Push Notifications in MinutesSasha Goldshtein
 
Building Mobile Apps with a Mobile Services .NET Backend
Building Mobile Apps with a Mobile Services .NET BackendBuilding Mobile Apps with a Mobile Services .NET Backend
Building Mobile Apps with a Mobile Services .NET BackendSasha Goldshtein
 
Building iOS and Android Apps with Mobile Services
Building iOS and Android Apps with Mobile ServicesBuilding iOS and Android Apps with Mobile Services
Building iOS and Android Apps with Mobile ServicesSasha Goldshtein
 
Attacking Web Applications
Attacking Web ApplicationsAttacking Web Applications
Attacking Web ApplicationsSasha Goldshtein
 
Windows Azure Mobile Services
Windows Azure Mobile ServicesWindows Azure Mobile Services
Windows Azure Mobile ServicesSasha Goldshtein
 
First Steps in Android Development
First Steps in Android DevelopmentFirst Steps in Android Development
First Steps in Android DevelopmentSasha Goldshtein
 
First Steps in iOS Development
First Steps in iOS DevelopmentFirst Steps in iOS Development
First Steps in iOS DevelopmentSasha Goldshtein
 
JavaScript, Meet Cloud: Node.js on Windows Azure
JavaScript, Meet Cloud: Node.js on Windows AzureJavaScript, Meet Cloud: Node.js on Windows Azure
JavaScript, Meet Cloud: Node.js on Windows AzureSasha Goldshtein
 
First Steps in Android Development with Eclipse and Xamarin
First Steps in Android Development with Eclipse and XamarinFirst Steps in Android Development with Eclipse and Xamarin
First Steps in Android Development with Eclipse and XamarinSasha Goldshtein
 

More from Sasha Goldshtein (20)

Visual Studio 2015 and the Next .NET Framework
Visual Studio 2015 and the Next .NET FrameworkVisual Studio 2015 and the Next .NET Framework
Visual Studio 2015 and the Next .NET Framework
 
Swift: Apple's New Programming Language for iOS and OS X
Swift: Apple's New Programming Language for iOS and OS XSwift: Apple's New Programming Language for iOS and OS X
Swift: Apple's New Programming Language for iOS and OS X
 
C# Everywhere: Cross-Platform Mobile Apps with Xamarin
C# Everywhere: Cross-Platform Mobile Apps with XamarinC# Everywhere: Cross-Platform Mobile Apps with Xamarin
C# Everywhere: Cross-Platform Mobile Apps with Xamarin
 
Modern Backends for Mobile Apps
Modern Backends for Mobile AppsModern Backends for Mobile Apps
Modern Backends for Mobile Apps
 
.NET Debugging Workshop
.NET Debugging Workshop.NET Debugging Workshop
.NET Debugging Workshop
 
Performance and Debugging with the Diagnostics Hub in Visual Studio 2013
Performance and Debugging with the Diagnostics Hub in Visual Studio 2013Performance and Debugging with the Diagnostics Hub in Visual Studio 2013
Performance and Debugging with the Diagnostics Hub in Visual Studio 2013
 
Mastering IntelliTrace in Development and Production
Mastering IntelliTrace in Development and ProductionMastering IntelliTrace in Development and Production
Mastering IntelliTrace in Development and Production
 
Introduction to RavenDB
Introduction to RavenDBIntroduction to RavenDB
Introduction to RavenDB
 
State of the Platforms
State of the PlatformsState of the Platforms
State of the Platforms
 
Delivering Millions of Push Notifications in Minutes
Delivering Millions of Push Notifications in MinutesDelivering Millions of Push Notifications in Minutes
Delivering Millions of Push Notifications in Minutes
 
Building Mobile Apps with a Mobile Services .NET Backend
Building Mobile Apps with a Mobile Services .NET BackendBuilding Mobile Apps with a Mobile Services .NET Backend
Building Mobile Apps with a Mobile Services .NET Backend
 
Building iOS and Android Apps with Mobile Services
Building iOS and Android Apps with Mobile ServicesBuilding iOS and Android Apps with Mobile Services
Building iOS and Android Apps with Mobile Services
 
Task and Data Parallelism
Task and Data ParallelismTask and Data Parallelism
Task and Data Parallelism
 
What's New in C++ 11?
What's New in C++ 11?What's New in C++ 11?
What's New in C++ 11?
 
Attacking Web Applications
Attacking Web ApplicationsAttacking Web Applications
Attacking Web Applications
 
Windows Azure Mobile Services
Windows Azure Mobile ServicesWindows Azure Mobile Services
Windows Azure Mobile Services
 
First Steps in Android Development
First Steps in Android DevelopmentFirst Steps in Android Development
First Steps in Android Development
 
First Steps in iOS Development
First Steps in iOS DevelopmentFirst Steps in iOS Development
First Steps in iOS Development
 
JavaScript, Meet Cloud: Node.js on Windows Azure
JavaScript, Meet Cloud: Node.js on Windows AzureJavaScript, Meet Cloud: Node.js on Windows Azure
JavaScript, Meet Cloud: Node.js on Windows Azure
 
First Steps in Android Development with Eclipse and Xamarin
First Steps in Android Development with Eclipse and XamarinFirst Steps in Android Development with Eclipse and Xamarin
First Steps in Android Development with Eclipse and Xamarin
 

Recently uploaded

Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonApplitools
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorTier1 app
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLionel Briand
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?Alexandre Beguel
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxRTS corp
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingShane Coughlan
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...OnePlan Solutions
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Developmentvyaparkranti
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...Bert Jan Schrijver
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsChristian Birchler
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfRTS corp
 
SoftTeco - Software Development Company Profile
SoftTeco - Software Development Company ProfileSoftTeco - Software Development Company Profile
SoftTeco - Software Development Company Profileakrivarotava
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldRoberto Pérez Alcolea
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfDrew Moseley
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...confluent
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxAndreas Kunz
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfMarharyta Nedzelska
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesKrzysztofKkol1
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogueitservices996
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptxVinzoCenzo
 

Recently uploaded (20)

Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + KobitonLeveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
Leveraging AI for Mobile App Testing on Real Devices | Applitools + Kobiton
 
Effectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryErrorEffectively Troubleshoot 9 Types of OutOfMemoryError
Effectively Troubleshoot 9 Types of OutOfMemoryError
 
Large Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and RepairLarge Language Models for Test Case Evolution and Repair
Large Language Models for Test Case Evolution and Repair
 
SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?SAM Training Session - How to use EXCEL ?
SAM Training Session - How to use EXCEL ?
 
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptxReal-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
Real-time Tracking and Monitoring with Cargo Cloud Solutions.pptx
 
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full RecordingOpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
OpenChain AI Study Group - Europe and Asia Recap - 2024-04-11 - Full Recording
 
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
Revolutionizing the Digital Transformation Office - Leveraging OnePlan’s AI a...
 
VK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web DevelopmentVK Business Profile - provides IT solutions and Web Development
VK Business Profile - provides IT solutions and Web Development
 
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
JavaLand 2024 - Going serverless with Quarkus GraalVM native images and AWS L...
 
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving CarsSensoDat: Simulation-based Sensor Dataset of Self-driving Cars
SensoDat: Simulation-based Sensor Dataset of Self-driving Cars
 
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdfEnhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
Enhancing Supply Chain Visibility with Cargo Cloud Solutions.pdf
 
SoftTeco - Software Development Company Profile
SoftTeco - Software Development Company ProfileSoftTeco - Software Development Company Profile
SoftTeco - Software Development Company Profile
 
Keeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository worldKeeping your build tool updated in a multi repository world
Keeping your build tool updated in a multi repository world
 
Comparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdfComparing Linux OS Image Update Models - EOSS 2024.pdf
Comparing Linux OS Image Update Models - EOSS 2024.pdf
 
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
Catch the Wave: SAP Event-Driven and Data Streaming for the Intelligence Ente...
 
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptxUI5ers live - Custom Controls wrapping 3rd-party libs.pptx
UI5ers live - Custom Controls wrapping 3rd-party libs.pptx
 
A healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdfA healthy diet for your Java application Devoxx France.pdf
A healthy diet for your Java application Devoxx France.pdf
 
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilitiesAmazon Bedrock in Action - presentation of the Bedrock's capabilities
Amazon Bedrock in Action - presentation of the Bedrock's capabilities
 
Ronisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited CatalogueRonisha Informatics Private Limited Catalogue
Ronisha Informatics Private Limited Catalogue
 
Osi security architecture in network.pptx
Osi security architecture in network.pptxOsi security architecture in network.pptx
Osi security architecture in network.pptx
 

Staring into the eBPF Abyss

  • 1. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Staring into the eBPF Abyss Sasha Goldshtein CTO, Sela Group @goldshtn
  • 2. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Agenda • Modern Linux tracing landscape • BPF • BCC – BPF Compiler Collection • Using BCC tools • Authoring BCC tools
  • 3. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Prerequisites • You should … • Have experience developing on or administering a Linux deployment • Be familiar with C/Python/Lua (a bonus) • To use your own machines for this workshop … • You will need Linux 4.6+ • Clone or install some open source tools (perf, bcc) • You can also use the instructor-provided VirtualBox appliance or Strigo workspace • Instructions and labs: https://github.com/goldshtn/linux-tracing-workshop
  • 4. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Tracing on the Performance Spectrum Invasiveness Envelope System completeness Metrics & simulations Development Testing Production Profilers jprof, valgrind Counters top, vmstat Debuggers Function tracers Event tracers Aggregators SystemTap, BPF Load tools ab Light-weight profilers perf
  • 5. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Tracing Objectives • Trace function execution, arguments, call graph • Print lightweight log messages (kernel/user) • Aggregate statistics (min/max/avg, histogram) • Low overhead • Continuous monitoring
  • 6. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Linux Tracing Tools, Today Ease of use BPF/BCC SysDig ktap SystemTap LTTng ftrace perf custom .ko new stable dead Level of detail, features
  • 7. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Berkeley Packet Filters (BPF) • Originally designed for, well, packet filtering: dst port 80 and len >= 100 • Custom instruction set, interpreted/JIT compiled 0: (bf) r6 = r1 1: (85) call 14 2: (67) r0 <<= 32 3: (77) r0 >>= 32 4: (15) if r0 == 0x49f goto pc+40
  • 8. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Extended BPF (3.18 and ongoing) • Attach BPF programs to kprobes/uprobes (4.1) and tracepoints (4.7) • Data structures: array, hash (expandable), stack map (4.6) • Output to trace buffer (4.3) and perf cyclic buffer (4.4) • Helper functions: get time, get current comm, get current CPU, etc.
  • 9. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 BCC: BPF Compiler Collection • Library and Python/Lua module for compiling, loading, and executing BPF programs • Compile BPF program from C source • Attach BPF program to kprobe/uprobe/tracepoint/USDT/socket • Poll data from BPF program using Python/Lua • Can do in-kernel aggregation and filtering • Growing collection of tracing, networking, and performance tools
  • 10. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07
  • 11. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 BCC • The BCC repository contains a variety of existing scripts and tools to get you started • The BPF module (Python/Lua) can be used to build new tools or one- off scripts $ ls *.py argdist.py bashreadline.py biolatency.py biosnoop.py biotop.py bitesize.py btrfsdist.py btrfsslower.py cachestat.py cpudist.py dcsnoop.py dcstat.py execsnoop.py ext4dist.py ext4slower.py filelife.py fileslower.py filetop.py funccount.py funclatency.py gethostlatency.py hardirqs.py killsnoop.py mdflush.py memleak.py offcputime.py offwaketime.py oomkill.py opensnoop.py pidpersec.py runqlat.py softirqs.py solisten.py stackcount.py stacksnoop.py statsnoop.py syncsnoop.py tcpaccept.py tcpconnect.py tcpconnlat.py tcpretrans.py tplist.py trace.py vfscount.py vfsstat.py wakeuptime.py xfsdist.py xfsslower.py zfsdist.py zfsslower.py
  • 12. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Specialized Tools # ./hardirqs.py Tracing hard irq event time... Hit Ctrl-C to end. ^C HARDIRQ TOTAL_usecs virtio0-input.0 959 ahci[0000:00:1f.2] 1290 # ./biolatency.py Tracing block device I/O... Hit Ctrl-C to end. ^C usecs : count distribution 64 -> 127 : 7 |********* | 128 -> 255 : 14 |****************** | 256 -> 511 : 5 |****** | 512 -> 1023 : 30 |****************************************| 1024 -> 2047 : 1 |* |
  • 13. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Specialized Tools # ./filetop.py 01:35:51 loadavg: 0.01 0.04 0.03 2/139 3611 PID COMM READS WRITES R_Kb W_Kb T FILE 2496 sshd 3 1 48 0 O ptmx 2939 screen 4 1 16 0 O ptmx 2496 sshd 1 3 16 0 S TCP 3611 clear 2 0 8 0 R screen 2939 screen 1 3 4 0 O 0 3589 filetop.py 2 0 2 0 R loadavg 3611 clear 1 0 0 0 R libtinfo.so.5.9 3611 clear 1 0 0 0 R libc-2.21.so 3611 filetop.py 3 0 0 0 R clear 3611 filetop.py 2 0 0 0 R ld-2.21.so 3611 clear 0 1 0 0 O 2 3589 filetop.py 0 3 0 0 O 2 # ./cachestat.py HITS MISSES DIRTIES READ_HIT% WRITE_HIT% BUFFERS_MB CACHED_MB 0 0 0 0.0% 0.0% 54 482 842 0 0 100.0% 0.0% 54 482 889 128 0 87.4% 12.6% 54 482
  • 14. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Specialized Tools # ./stackcount.py __kmalloc Tracing 1 functions for "__kmalloc"... Hit Ctrl-C to end. ^C __kmalloc alloc_fdtable dup_fd copy_process.part.31 _do_fork sys_clone do_syscall_64 return_from_SYSCALL_64 4 __kmalloc create_pipe_files __do_pipe_flags sys_pipe entry_SYSCALL_64_fastpath 6 __kmalloc htree_dirblock_to_tree ext4_htree_fill_tree ext4_readdir iterate_dir SyS_getdents entry_SYSCALL_64_fastpath 14
  • 15. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 BPF Tracing Targets (circa July 2016) Target Support Overhead kprobes Native Low uprobes Native Medium handler runs in KM Kernel tracepoints NativeNEW Low USDT tracepoints Temporary through uprobes Medium handler runs in KM
  • 16. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Multi-Tools: argdist # ./argdist.py -C 'p:c:write(int fd, const void *buf, size_t count):size_t:count:fd==1' [01:49:00] p:c:write(int fd, const void *buf, size_t count):size_t:count:fd==1 COUNT EVENT 1 count = 3134 1 count = 170 1 count = 181 2 count = 18 3 count = 30
  • 17. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Multi-Tools: argdist # ./argdist.py -i 5 -H 'r::__vfs_read(void *file, void *buf, size_t count):size_t:$entry(count):$latency > 1000000' [01:51:40] count : count distribution 0 -> 1 : 20 |****************************************| 2 -> 3 : 0 | | 4 -> 7 : 0 | | 8 -> 15 : 0 | | 16 -> 31 : 0 | | 32 -> 63 : 0 | | 64 -> 127 : 0 | | 128 -> 255 : 6 |************ | 256 -> 511 : 0 | | 512 -> 1023 : 0 | | 1024 -> 2047 : 1 |** |
  • 18. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Multi-Tools: trace # ./trace.py 'r:/usr/bin/bash:readline "%s", retval' TIME PID COMM FUNC - 02:02:26 3711 bash readline ls –la 02:02:36 3711 bash readline wc -l src.c # ./tplist.py -v block:block_rq_complete block:block_rq_complete dev_t dev; sector_t sector; unsigned int nr_sector; int errors; char rwbs[8]; # ./trace.py 't:block:block_rq_complete "sectors=%d", tp.nr_sector' TIME PID COMM FUNC - 02:03:56 0 swapper/0 block_rq_complete sectors=16 02:03:56 0 swapper/0 block_rq_complete sectors=8 02:03:58 0 swapper/0 block_rq_complete sectors=24 02:04:00 0 swapper/0 block_rq_complete sectors=0
  • 19. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Multi-Tools: trace # ./tplist.py -l pthread -v libpthread:pthread_create /usr/lib64/libpthread-2.21.so libpthread:pthread_create location 0x7c63 8 unsigned bytes @ register %rax 8 unsigned bytes @ -192(%rbp) 8 unsigned bytes @ -168(%rbp) 8 unsigned bytes @ -176(%rbp) # ./trace.py 'u:pthread:pthread_create "%llx", arg3' TIME PID COMM FUNC - 02:07:29 4051 contentions pthread_create 400e00 02:07:29 4051 contentions pthread_create 400e00 02:07:29 4051 contentions pthread_create 400e00 02:07:29 4051 contentions pthread_create 400e00 ^C
  • 20. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Multi-Tools: trace # trace -p $(pidof node) 'u:node:http__server__request "%s %s (from %s:%d)" arg5, arg6, arg3, arg4' TIME PID COMM FUNC - 04:50:44 22185 node http__server__request GET /foofoo (from ::1:51056) 04:50:46 22185 node http__server__request GET / (from ::1:51056) ^C # ./trace.py 'u:/tmp/libjvm.so:thread__start "%s [%d]", arg1, arg4' 'u:/tmp/libjvm.so:thread__stop "%s [%d]", arg1, arg4' TIME PID COMM FUNC - 06:55:24 32157 java thread__start Reference Handler [32157] 06:55:24 32158 java thread__start Finalizer [32158] 06:55:24 32159 java thread__start Signal Dispatcher [32159] 06:55:24 32160 java thread__start C2 CompilerThread0 [32160] 06:55:24 32161 java thread__start C2 CompilerThread1 [32161] 06:55:24 32162 java thread__start C1 CompilerThread2 [32162] 06:55:24 32163 java thread__start Service Thread [32163] 06:55:28 32159 java thread__stop Signal Dispatcher [32159] ^C
  • 21. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Lab #3 – Chasing a C++ Memory Leak #4 – MySQL and Disk Stats and Stacks #5 – Node and JVM USDT Probes https://s.sashag.net/sreconlabs
  • 22. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Kernel Custom Tool Design BPF program Tracepoint kprobe Python/Lua driver App process uprobeUSDT Probe handler Probe handler Hash or histogram Cyclic buffer U K
  • 23. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 BPF Program: Counting Allocations #include <linux/ptrace.h> struct alloc_info_t { u64 count; u64 size; }; BPF_HASH(allocs, u32, struct alloc_info_t); int handler(struct pt_regs *ctx, size_t size) { u32 pid = bpf_get_current_pid_tgid(); struct alloc_info_t init = { 0 }, *info; info = allocs.lookup_or_init(&pid, &init); info->count += 1; info->size += size; return 0; }
  • 24. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 BPF Driver #!/usr/bin/env python from bcc import BPF from time import sleep program = BPF(src_file="allocs.c") program.attach_kprobe(event="__kmalloc", fn_name="handler") allocs = program["allocs"] while True: sleep(5) print("n%-8s %-8s %-10s" % ("PID", "COUNT", "SIZE")) for key, value in sorted(allocs.items(), key=lambda (k, v): k.value): print("%-8d %-8d %-8d" % (key.value, value.count, value.size))
  • 25. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 BPF Execution # ./allocs.py PID COUNT SIZE 28064 3 456 28157 10 76 28158 5 1116 PID COUNT SIZE 28001 113 1828 28064 8 1216 28110 38 683 28157 46 328 28158 5 1116 28159 41 12894 ^C
  • 26. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Inline BPF Program #!/usr/bin/env python from bcc import BPF from time import sleep program = BPF(text="""BPF_HASH(counts, u32, u32); TRACEPOINT_PROBE(irq, irq_handler_entry) { u32 zero = 0, *existing, irq = args->irq; existing = counts.lookup_or_init(&irq, &zero); ++(*existing); return 0; }""") counts = program["counts"] sleep(9999999) print("n%-8s %-8s" % ("IRQ", "COUNT")) for key, value in counts.items(): print("%-8d %-8d" % (key.value, value.value))
  • 27. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Data Types • Array • Hash • Histogram • Perf buffer (4.4+)NEW • Stack map (4.6+)NEW
  • 28. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Example: Histogram struct dist_key_t { char op[OP_NAME_LEN]; u64 slot; }; BPF_HISTOGRAM(dist, struct dist_key_t); ... struct dist_key_t key = { .slot=bpf_log2l(elapsed_time) }; __builtin_memcpy(&key.op, op, sizeof(key.op)); dist.increment(key); ... bpf.get_table("dist").print_log2_hist("operation")
  • 29. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Example: Perf Buffer bpf = BPF(text="""#include <linux/ptrace.h> struct data_t { u64 pid; char str[80]; }; BPF_PERF_OUTPUT(events); int print(struct pt_regs *ctx) { struct data_t data = {0}; ... events.perf_submit(ctx, &data, sizeof(data)); return 0; }""") class Data(ct.Structure): _fields_ = [ ("pid", ct.c_ulonglong), ("str", ct.c_char*80) ] bpf.attach_uretprobe(name="/bin/bash", sym="readline", fn_name="print") b["events"].open_perf_buffer(lambda cpu, data, size: event = ct.cast(data, ct.POINTER(Data)).contents print(event) ) while True: bpf.kprobe_poll()
  • 30. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Example: Stack Map BPF_HASH(counts, int); BPF_STACK_TRACE(stacks, 1024); ... int key = stacks.get_stackid(ctx, BPF_F_REUSE_STACKID); u64 zero = 0; u64 *val = counts.lookup_or_init(&key, &zero); ++(*val); ... counts, stacks = bpf["counts"], bpf["stacks"] for k, v in counts: for addr in stacks.walk(k.value): print(BPF.ksym(addr)) print(v.value)
  • 31. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Custom Tool Design Tips • Try to perform all aggregations in the BPF program and keep UM copying to a minimum • Limit hash/histogram/stackmap sizes, prune, keep only top entries • Clear cyclic buffer often and quickly
  • 32. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Deployment • For Python tools, deploy Python + libbcc.so • For Lua tools, deploy only bcc-lua • Statically links libbcc.a but allows plugging libbcc.so • Kernel build flags: • CONFIG_BPF=y • CONFIG_BPF_SYSCALL=y • CONFIG_BPF_JIT=y • CONFIG_HAVE_BPF_JIT=y • CONFIG_BPF_EVENTS=y
  • 33. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Lab #6 – Contention Stats and Stacks #7 – From BCC GitHub Issues https://s.sashag.net/sreconlabs
  • 34. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Summary • Tracing can identify bugs and performance issues that no debugger or profiler can catch • Tools make low-overhead, dynamic, production tracing possible • BPF is the next-generation backend for Linux tracing tools
  • 35. SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 SRECon Europe 2016 @goldshtn https://s.sashag.net/bpfws07 Thank You! Sasha Goldshtein @goldshtn

Editor's Notes

  1. Missing: cpudist
  2. This example requires kernel 4.7 for BPF_PROG_TYPE_TRACEPOINT and a version of bcc with PR #602 merged, which introduces TRACEPOINT_PROBE.
  3. Adapted from ext4dist.py
  4. Adapted from tools/bashreadline.py
  5. Adapted from stackcount.py