Onload®️ 是一个高性能用户级网络堆栈,它可以为 Linux 上使用 BSD 套接字的应用程序加速 TCP 和 UDP 网络 I/O。
OpenOnload 包括一个用户级共享库,用于拦截网络相关的系统调用并实现协议栈,并支持内核模块。它与完整的系统调用 API 兼容,包括用户级网络通常会出现问题的那些方面,例如 fork()、exec()、通过 Unix 域套接字传递套接字以及在应用程序未调度时推进协议。
OpenOnload 作为源代码分发。构建、打包和安装的说明可以在 DEVELOPING.md 中找到
如果 Onload 需要加速的接口不是 AMD Solarflare 接口,请执行以下命令,使用 AF_XDP 注册这些需要加速的接口:
echo ens2f0 > /sys/module/sfc_resource/afxdp/register
要 Onloaded 的应用程序应通过在命令行中添加onload
前缀来启动。
公共托管的存储库是一个社区支持的项目。当在此存储库上提出问题时,预计用户将从 git 树的头部运行以获取最近的更改,而不是使用通常在最近的重大内核更改出现之前发布的 Onload 官方版本,因为这可能会导致提出了许多重复的问题。最新内核版本引入的不兼容性可能会在此存储库中快速修复。
OpenOnload 支持的版本可从 https://www.xilinx.com/support/download/nic-software-and-drivers.html#open 获取。请通过 [email protected] 提出有关受支持的 Onload 版本的问题。
此源代码树与以下 Linux 内核和发行版兼容:
与使用 Linux 的 AF_XDP 机制相比,Onload 使用 AMD Solarflare 网络适配器提供的本机 ef_vi 硬件接口提供最佳网络加速和附加功能。在此模式下,不需要内核和驱动程序支持 AF_XDP。
包含适用于 AMD Solarflare 网络适配器的“sfc”网络驱动程序版本。
以下适配器能够在没有 AF_XDP 的情况下支持 OpenOnload:
OpenOnload 可以通过对 AF_XDP 的支持来加速非 Solarflare 网络适配器上的应用程序。
为了支持零复制,Onload 需要 AF_XDP 网络适配器驱动程序来实现必要的 AF_XDP 原语。通常,网络适配器供应商提供的最新驱动程序将支持这些原语。
AF_XDP 支持是一项社区支持的正在进行中的工作,目前尚未达到发布质量。
如果网络驱动程序在本机模式下不支持 AF_XDP,Onload 将在注册接口时尝试使用通用 XDP 模式。为了使其工作,必须在注册接口之前设置用户态助手:
$ make -C ./src/tools/bpf_link_helper/
$ echo $( realpath ./src/tools/bpf_link_helper/bpf-link-helper ) | sudo tee /sys/module/sfc_resource/parameters/bpf_link_helper
OpenOnload 可以在没有 SFC 驱动程序的情况下构建:
make
: 使用HAVE_SFC=0
变量;onload_build
和onload_install
:使用--no-sfc
参数;onload_tool reload
:使用--onload-only
参数。此外,它可以在没有 EFCT 和 AUX 支持的情况下构建:
make
: 使用HAVE_EFCT=0
变量;onload_build
:使用--no-efct
参数。 请参阅 CONTRIBUTING.md
此文件:(c) 版权所有 2020-2024 Advanced Micro Devices, Inc.