O slideshow foi denunciado.
Seu SlideShare está sendo baixado. ×

eBPF Debugging Infrastructure - Current Techniques

Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Anúncio
Carregando em…3
×

Confira estes a seguir

1 de 13 Anúncio

eBPF Debugging Infrastructure - Current Techniques

Baixar para ler offline

eBPF (extended Berkeley Packet Filter), in particular with its driver-level hook XDP (eXpress Data Path), has increased in importance over the past few years. As a result, the ability to rapidly debug and diagnose problems is becoming more relevant. This talk will cover common issues faced and techniques to diagnose them, including the use of bpftool for map and program introspection, the use of disassembly to inspect generated assembly code and other methods such as using debug prints and how to apply these techniques when eBPF programs are offloaded to the hardware.

The talk will also explore where the current gaps in debugging infrastructure are and suggest some of the next steps to improve this, for example, integrations with tools such as strace, valgrind or even the LLDB debugger.

eBPF (extended Berkeley Packet Filter), in particular with its driver-level hook XDP (eXpress Data Path), has increased in importance over the past few years. As a result, the ability to rapidly debug and diagnose problems is becoming more relevant. This talk will cover common issues faced and techniques to diagnose them, including the use of bpftool for map and program introspection, the use of disassembly to inspect generated assembly code and other methods such as using debug prints and how to apply these techniques when eBPF programs are offloaded to the hardware.

The talk will also explore where the current gaps in debugging infrastructure are and suggest some of the next steps to improve this, for example, integrations with tools such as strace, valgrind or even the LLDB debugger.

Anúncio
Anúncio

Mais Conteúdo rRelacionado

Diapositivos para si (20)

Semelhante a eBPF Debugging Infrastructure - Current Techniques (20)

Anúncio

Mais de Netronome (20)

Mais recentes (20)

Anúncio

eBPF Debugging Infrastructure - Current Techniques

  1. 1. BPF Microconference • 2018-11-15 eBPF Debugging Infrastructure • Current Techniques and Additional Proposals Quentin Monnet <quentin.monnet@netronome.com>
  2. 2. Debugging Infrastructure What do we want to debug, troubleshoot? To achieve this: • What debugging tools and methods are available? • What is missing? Q. Monnet | eBPF Debugging Infrastructure 2/9
  3. 3. What to Debug: Many Levels User space Kernel Agilio SmartNIC Hardware Compile time Kernel development Load time Verifier JIT-compiling Runtime User space programming Q. Monnet | eBPF Debugging Infrastructure 3/9
  4. 4. Compile Time Objectives: Make sure the eBPF bytecode is generated as intended when compiling from C to eBPF We have: LLVM backend: compilation llvm-objdump: dump generated bytecode eBPF assembly (LLVM): hack a sequence of instructions Q. Monnet | eBPF Debugging Infrastructure 4/9
  5. 5. Load Time Objectives: Load the program and make it pass the verifier, or understand why it is rejected We have: libbpf / ip / tc: load or list programs libbpf / bpftool (and tc to some extent): eBPF object management Output from verifier logs, kernel logs, extack messages Documentation (filter.txt, Cilium guide) What about: Checking what loads: bpftool prog probe my_file.o (work in progress, idea from Daniel) man pages (bpf(2) or tc-bpf(8) are badly outdated) Troubleshooting F.A.Q.? (e.g. some items already in filter.txt) Q. Monnet | eBPF Debugging Infrastructure 5/9
  6. 6. Runtime Objectives: Understand why a program does not run as intended, for example when processing network packets We have: bpftool: introspection for maps / programs, object management Readability improved with BTF bpf_trace_printk(), perf events: print items, data (Limited user space eBPF virtual machines) Hooks in binutils-gdb, but no simulator support tools/bpf/bpf_dbg.c (cBPF) What about: Debugger: break points, possibility to dump registers / stack / context? • Complete support in GDB? • Anything doable with LLDB? But how to pass packet data? • Extend BPF_PROG_TEST_RUN infrastructure? (idea: Daniel) Q. Monnet | eBPF Debugging Infrastructure 6/9
  7. 7. Kernel Development Objectives: Improve the eBPF architecture in the kernel, without breaking existing features We have: Selftests: verifier, test programs Samples programs BPF_PROG_TEST_RUN infrastructure KASAN, syzkaller What about: Having all JITs built-in, dump (then test) images for all architectures (idea: Daniel) Q. Monnet | eBPF Debugging Infrastructure 7/9
  8. 8. User Space Programming Objectives: Debug or enhance a program managing eBPF objects Generally improve eBPF support in the toolchain We have: strace, valgrind support: tracing system calls, memory checks What about: Probing kernel for features (with bpftool)? (idea: Daniel) Bytecode generation: ethtool n-tuples (in progress), libpcap? Q. Monnet | eBPF Debugging Infrastructure 8/9
  9. 9. Thank you! Discussion What do you feel is missing for debugging eBPF? Q. Monnet | eBPF Debugging Infrastructure 9/9
  10. 10. Backup: Dump All JIT Images Kernel JITs: ARM64, ARM32, PowerPC64, s390, Sparc64, MIPS, x86_64, x86_32 Offload: NFP Objectives: Test images for all architectures Find bugs or low hanging perf improvements Idea (Daniel): All JIT built-in in the kernel Pass a flag to bpf(PROG_LOAD, ...) to JIT-compile for all arch Pass a flag to bpf(OBJ_GET_INFO_BY_ID, ...) to dump all images Simulate execution on several architectures Add tools/ to bootstrap VMs to test the images? Q. Monnet | eBPF Debugging Infrastructure 10/9
  11. 11. Backup: Extend BPF_PROG_TEST_RUN Member in union bpf_attr for bpf(BPF_PROG_TEST_RUN, attr, size): struct { /* anonymous struct used by BPF_PROG_TEST_RUN command */ __u32 prog_fd; __u32 retval; __u32 data_size_in; __u32 data_size_out; __aligned_u64 data_in; __aligned_u64 data_out; __u32 repeat; __u32 duration; } test; Fields data_out, data_out_size, retval, duration are filled by kernel Idea: Add a field to pass break points (insn number, program entry point?) Add fields or buffer to dump internal state: register values, stack, data? Maybe a front-end loader? bpftool? Q. Monnet | eBPF Debugging Infrastructure 11/9
  12. 12. Backup: Probe Kernel with Bpftool Example output: # bpftool kernel probe /* System configuration */ #define HAVE_BPF_SYSCALL #define UNPRIVILEGED_BPF_DISABLED 0 #define JIT_COMPILER_ENABLE 0 #define JIT_COMPILER_HARDEN 0 #define JIT_COMPILER_KALLSYMS 0 #define LINUX_VERSION_CODE 267008 /* eBPF program types */ #define HAVE_SOCKET_FILTER_PROG_TYPE #define HAVE_KPROBE_PROG_TYPE ... /* HAVE_STACK_MAP_TYPE is not set */ /* eBPF map types */ #define HAVE_HASH_MAP_TYPE #define HAVE_ARRAY_MAP_TYPE ... /* eBPF helper functions */ #define HAVE_BPF_MAP_LOOKUP_ELEM_HELPER #define HAVE_BPF_MAP_UPDATE_ELEM_HELPER ... /* HAVE_BPF_MSG_PUSH_DATA_HELPER is not set */ Q. Monnet | eBPF Debugging Infrastructure 12/9
  13. 13. Backup: Generate eBPF with Libpcap / Ethtool Syntax libpcap: patch the library or create an equivalent to use a similar syntax to produce eBPF programs # tcpdump -d ”port ssh” (000) ldh [12] (001) jeq #0x86dd jt 2 jf 8 (002) ldb [20] (003) jeq #0x6 jt 4 jf 19 (004) ldh [54] (005) jeq #0x16 jt 18 jf 6 ... (019) ret #0 ethtool: implement a library to turn such rules into eBPF programs # ethtool --config-ntuple eth0 flow-type tcp dst-port 22 action -1 <drop incoming SSH packets on a server> Q. Monnet | eBPF Debugging Infrastructure 13/9

×