eBPF

kprobes/kretprobes 在bcc程序中的使用

由 梁金荣 | 1300字 | 阅读大约需要3分钟 | 归档于eBPF

2020年6月21日

本文简单介绍了kprobes和kretprobes机制,以获取系统中的 TCP IPv4 连接信息的bcc代码为例,介绍了kprobes/kretprobes 在 bcc 程序中的使用,并给出了运行结果和分析。

继续阅读

eBPF内核探测中将任意系统调用转换成事件

由 梁金荣 | 1900字 | 阅读大约需要4分钟 | 归档于eBPF

2020年6月7日

Linux 4.4 以上内核基于 eBPF 可以将任何内核函数调用转换成可带任何数据的用户空间事件。程序采集系统相关参数时,通常有两种方式。一种是程序主动去轮询,检查系统变化,即 poll 模型;另一种是系统主动通知程序,即 push 模型。使用 poll 模型还是 push 模型取决于具体的问题。通常情况下,如果事件频率相对于事件处理时间来说比较低,那 push 模型比较合适;如果事件频率很高,就采用 pull 模型。例如,通常的网络驱动会等待网卡事件,而 dpdk 这样的框架会主动 poll 网卡, 以获得最高的吞吐性能和最低的延迟。理想情况下,我们需要一个通用的方式处理事件,具体做法请看此篇。

继续阅读

eBPF学习——获取内核网络中的socket信息

由 梁金荣 | 1400字 | 阅读大约需要3分钟 | 归档于eBPF

2020年5月31日

本文将使用 bcc工具抓取内核网络中的数据,包括抓取 backlog 信息、port 和 IP 信息、网络命名空间信息等。bcc 是基于 LLVM 的工具集,用 Python 封装了底层机器相关的细节,bcc工具使得 eBPF 的使用更加方便,使用时内核探测代码用 C 写, 数据处理用 Python 。

继续阅读

eBPF学习——eBPF简介、安装和简单示例

由 梁金荣 | 2300字 | 阅读大约需要5分钟 | 归档于eBPF

2020年5月30日

本文将简单介绍eBPF,并分享安装过程和bcc程序实例。eBPF是将原先的BPF发展成一个指令集更复杂、应用范围更广的“内核虚拟机”。eBPF支持在用户态将C语言编写的一小段“内核代码”注入到内核中运行,注入时要先用llvm编译得到使用BPF指令集的elf文件,然后从elf文件中解析出可以注入内核的部分,最后用 bpf_load_program 方法完成注入。

继续阅读