XDP实践教程

2020-09-18 03:12:18

该存储库包含一个教程,旨在向您介绍在Linux内核中为快速数据路径(XDP)系统有效编写程序所需的基本步骤,该系统提供与内核集成的高性能可编程数据包处理。

本教程由许多课程组成,每个课程都有自己的存储库。从课程“basicXX”开始,阅读每个存储库中的Readme.org文件以获取该课程的说明。

请继续阅读下面的内容,了解XDP的介绍和在本教程中将学到的概述,或者直接跳到第一课。

XDP是上游Linux内核的一部分,使用户能够在内核对数据进行任何其他处理之前,将对每个到达的数据包执行的数据包处理程序安装到内核中。这些程序用受限的C编写,并编译成eBPF字节码格式,在经过安全性验证后在内核中执行和JIT编译。这种方法提供了极大的灵活性和高性能,并与系统的其余部分很好地集成在一起。有关XDP的一般介绍,请阅读学术论文(Pdf)或cilium BPF参考指南。

本教程旨在实际介绍使用XDP系统成功编写有用程序所需的不同步骤。我们假设您对Linux网络以及如何使用iproute2工具套件进行配置有基本的了解,但假定您以前没有使用eBPF或XDP的经验。

该教程正在进行中,将于2019年3月在布拉格举行的Netdev会议上试运行。然而,我们希望它(最终)是自给自足的,任何人都可以通过它来学习XDP基础知识。非常欢迎为实现这一目标提供意见和贡献;只需在Github存储库中公开问题或拉出请求即可。

在开始完成本教程中的步骤之前,您需要在系统上安装一些依赖项。Setup_Dependencies.org中对这些内容进行了说明。

我们还提供了一个帮助器脚本,它将设置一个带有虚拟接口的测试环境,以便您在其上测试代码。这是在基础课程中介绍的,也有它自己的自述文件。

本教程分为多个课程;每个课程都有自己的子目录,并且课程按类别分组:

我们建议您从“基本”课程开始,然后按数字顺序学习每个类别中的课程。有关如何完成课程的说明,请阅读每个课程目录中的Readme.org文件。

我们建议您从这些课程开始,因为它们将教您如何编译和检查将实现数据包处理代码的eBPF程序,如何将它们加载到内核中,以及如何在之后检查状态。作为基本课程的一部分,您还将编写一个eBPF程序加载器,您将在后续课程中使用该程序加载器。

一旦您弄清楚了基础知识并知道如何将程序加载到内核中,您就可以开始处理一些数据包了。数据包进度类别中的课程将教您处理数据包所需的不同步骤,包括解析、重写、指示内核在处理后如何处理数据包,以及如何使用帮助器访问现有的内核功能。

完成基本和数据包处理类别的课程后,您应该已经准备好编写第一个真正的XDP程序,该程序将对进入系统的数据包进行有用的处理。但是,还有一些稍微高级的主题,一旦您开始扩展程序以做更多事情,这些主题可能会很有用。

高级课程中涵盖的主题包括如何使内核其他部分中的eBPF程序与您的XDP程序交互、在程序之间传递元数据、与用户空间和内核功能交互的最佳实践,以及如何在单个界面上运行多个XDP程序。