跳至主要內容
eBPF进阶

背景

在上一篇博客中我们跟着官方的 example 完成了一个 eBPF 应用的运行,接下来就要尝试为自己的需求编写一个 eBPF 应用了。我的需求是获取一个应用负载在内存地址空间上的访存频率。初步的想法是利用 Numa Balancing 中的 Page 标记,通过 Page-fault 计数来实现这个功能。

前期构建

首先,我们是需要知道哪个 tracepoint 可以提供给我们的 eBPF 程序来挂载。

通过命令来获取内核提供的 Tracepoint:

$ sudo  find /sys/kernel/debug/tracing/events -type d | grep page_fault
/sys/kernel/debug/tracing/events/kvmmmu/handle_mmio_page_fault
/sys/kernel/debug/tracing/events/kvmmmu/fast_page_fault
/sys/kernel/debug/tracing/events/kvm/kvm_page_fault
/sys/kernel/debug/tracing/events/iommu/io_page_fault
/sys/kernel/debug/tracing/events/exceptions/page_fault_user # 这是我们想要的
/sys/kernel/debug/tracing/events/exceptions/page_fault_kernel

Chiichen大约 2 分钟杂谈Linux内核Linux内核eBPF
eBPF开发入门

依赖安装

Rust 安装

需要安装 Nightly 版本,略

系统依赖安装

安装 bpf-linker 依赖和 bpftool 工具

sudo apt-get update
sudo apt-get install llvm clang -y
cargo install bpf-linker

Chiichen大约 6 分钟杂谈Linux内核Linux内核eBPF