[论文解读] hXDP: Efficient Software Packet Processing on FPGA NICs
hXDP 通过将未经修改的 eBPF/XDP 程序编译为一种自定义的、经过优化的指令集架构(ISA),在 FPGA 网卡上实现了高性能、低延迟的数据包处理。该 ISA 充分利用了并行性并减少了资源占用。hXDP 在 156MHz 下实现了 CPU 核心级别的吞吐量,FPGA 资源利用率低于 15%,在延迟方面优于高端 CPU,同时支持动态程序加载。
FPGA accelerators on the NIC enable the offloading of expensive packet processing tasks from the CPU. However, FPGAs have limited resources that may need to be shared among diverse applications, and programming them is difficult. We present a solution to run Linux's eXpress Data Path programs written in eBPF on FPGAs, using only a fraction of the available hardware resources while matching the performance of high-end CPUs. The iterative execution model of eBPF is not a good fit for FPGA accelerators. Nonetheless, we show that many of the instructions of an eBPF program can be compressed, parallelized or completely removed, when targeting a purpose-built FPGA executor, thereby significantly improving performance. We leverage that to design hXDP, which includes (i) an optimizing-compiler that parallelizes and translates eBPF bytecode to an extended eBPF Instruction-set Architecture defined by us; a (ii) soft-CPU to execute such instructions on FPGA; and (iii) an FPGA-based infrastructure to provide XDP's maps and helper functions as defined within the Linux kernel. We implement hXDP on an FPGA NIC and evaluate it running real-world unmodified eBPF programs. Our implementation is clocked at 156.25MHz, uses about 15% of the FPGA resources, and can run dynamically loaded programs. Despite these modest requirements, it achieves the packet processing throughput of a high-end CPU core and provides a 10x lower packet forwarding latency.
研究动机与目标
- 解决在资源受限的 FPGA 网卡上高效卸载 XDP 数据包处理的挑战,同时保持与现有 Linux eBPF/XDP 程序的兼容性。
- 克服 eBPF 的顺序执行模型与 FPGA 原生并行性之间的不匹配问题,该问题在直接将 eBPF 映射到 FPGA 上时限制了性能。
- 通过最小化资源消耗,实现多个加速器之间的 FPGA 共享,确保为其他网络功能保留足够的容量。
- 通过支持未经修改的 XDP 程序动态加载并模拟 XDP 映射和辅助函数,提供与 Linux 内核的无缝集成路径。
提出的方法
- 设计扩展的 eBPF ISA,包含三操作数指令、6 字节的加载/存储操作,以及参数化退出指令,以提高 FPGA 上的代码密度和执行效率。
- 在 FPGA 硬件中实现一个原生执行扩展 ISA 的自定义软 CPU,支持高效且并行的指令处理。
- 开发一个静态编译器,执行指令级并行性分析,并在 FPGA 环境下安全的前提下,通过移除冗余指令(如边界检查、清零操作)来优化 eBPF 字节码。
- 构建一个完整的基于 FPGA 的基础设施,模拟 Linux 内核中定义的 XDP 映射和辅助函数,实现与现有 XDP 程序的完全兼容。
- 将系统与 NetFPGA 平台集成,支持在真实硬件上进行 hXDP 的开源部署和评估。
- 通过优化数据移动并利用网卡上的本地执行,最大限度减少 PCIe 传输,降低 CPU 和系统开销。
实验结果
研究问题
- RQ1尽管 eBPF 的顺序模型与 FPGA 的原生并行性存在不匹配,是否仍能高效地将 eBPF 程序编译并执行在 FPGA 上?
- RQ2为实现高性能的同时最小化 FPGA 资源使用,需要哪些硬件和软件优化来实现 XDP 卸载?
- RQ3在面向专用 FPGA 执行器的目标下,有多少冗余或上下文相关的 eBPF 指令可以被移除或替换?
- RQ4自定义 ISA 扩展和编译器流水线是否能够实现高吞吐量、低延迟的数据包处理,同时保持极低的资源开销?
- RQ5在保持与 Linux 内核 XDP 接口兼容的前提下,是否可行支持在 FPGA 网卡上动态加载未经修改的 XDP 程序?
主要发现
- 尽管时钟频率仅为 156.25MHz,hXDP 实现了与高端 x86 CPU 核心相当的数据包处理吞吐量。
- 该系统使用的 FPGA 资源少于 15%,支持与其他加速器高效共享。
- 与高端 CPU 核心相比,hXDP 将数据包转发延迟降低了 10 倍。
- 编译器和硬件栈成功在不损害正确性的前提下,移除或优化了冗余的 eBPF 指令(如边界检查、清零操作),适用于 FPGA 环境。
- 系统支持未经修改的 XDP 程序动态加载,实现了运行时重新配置,并与 Linux 内核实现了无缝集成。
- 在 NetFPGA 上的实现表明,即使时钟频率适中,通过有效的指令级并行性和 ISA 级优化,仍可实现高性能。
更好的研究,从现在开始
从论文设计到论文写作,大幅缩短您的研究时间。
无需绑定信用卡
本解读由 AI 生成,并经人工编辑审核。