LXR | KVM | PM | Time | Interrupt | Systems Performance | Bootup Optimization

笔记:BPF Performance Tools Chapter 1. Introduction

关键词:bpf、ebpf、bcc、bpftrace、kprobe、uprobe、tracepoint、usdt等等。

 

本章主要介绍基本概念以及相关资源之间关系

  • BPF和eBPF的演变以及用途
  • 基本概念Tracing/Snooping/Samping/Profiling/Observability以及之间区别
  • 一张图表示bcc/bpftrace/libbcc/libbpf/bpf之间关系
  • 一张图介绍bpf能做哪些性能优化
  • 静态跟踪和动态跟踪
  • 简单示例bcc和bpftrace用途

1. Tracing/Snooping、Sampling/Profiling区别

Tracing/Snooping是基于事件的跟踪,Samping/Profiling是基于时间的采样。

Tracing/Snooping可能导致跟踪引入负荷剧增;Samping/Profiling引入的测试负荷相对稳定,但是有可能丢失部分信息。

2. bcc、bpftrace、libbcc、libbpf、bpf之间的关系

可以将整个架构分成三层:前端bcc和bpftrace、中间层libbcc和libbpf、内核BPF。

其他类似bcc/bpftrace的工具还有:适合嵌入式设备的ply、基于Python的工具。

相关资源列表:

bcc:https://github.com/iovisor/bcc

bpftrace:https://github.com/iovisor/bpftrace

ply:https://github.com/iovisor/ply

3. Linux系统和应用bpf性能工具集

对照本图,针对不同模块可以使用相应的工具进行观察、跟踪,协助定位解决性能问题。

4. 静态跟踪和动态跟踪

动态:kprobes和uprobes

动态跟踪可以在程序运行时插入跟踪,在不使用的时候开销极低。

静态:tracepoints和usdt

相对于动态跟踪,静态跟踪更加稳定。但是不够灵活,数量也受限。

BPF跟踪支持内核静态的tracepoints和用户空间的USDT(User-level Statically Defined Tracing)。

5. 初识bcc和bpftrace

bpftrace -e 'tracepoint:syscalls:sys_enter_open { printf("%s %s\n", comm,  str(args->filename)); }'
bpftrace -l 'tracepoint:syscalls:sys_enter_open*'
bpftrace -e 'tracepoint:syscalls:sys_enter_open* { @[probe] = count(); }'
opensnoop.bt
opensnoop
opensnoop -x

 

posted on 2020-06-13 00:00  ArnoldLu  阅读(1493)  评论(0编辑  收藏  举报

导航