背景
在上一篇博客中我们跟着官方的 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
大约 2 分钟