我安装了 OpenOnload 来加速联网。我按照官方文档从源代码安装了 OpenOnload。
$ onload
Kernel module: 8.1.1.17
find /lib/modules/`uname -r` -type f -name '*.ko' -printf '%f\n' | grep -E 'sfc|onload'
sfc_driverlink.ko
sfc.ko
sfc_resource.ko
sfc_char.ko
onload.ko
正如您在顶部看到的,它是在系统范围内安装的,并且
onload
命令按预期工作。但是,当我使用 onload <app-exe>
运行我的应用程序时,会出现以下错误
Segmentation fault (core dumped)
我还应该检查哪些内容才能发现问题?我的服务器上还连接了 SF NIC。我想使用这些 NIC 和 OpenOnload 来实现内核绕过。
$ lsmod | grep onload
onload 835584 4
sfc_char 143360 1 onload
sfc_resource 249856 2 onload,sfc_char
$ lsmod | grep sfc
sfc_char 143360 1 onload
sfc_resource 249856 2 onload,sfc_char
sfc 864256 0
vdpa 32768 1 sfc
sfc_driverlink 16384 2 sfc,sfc_resource
mtd 90112 8 sfc
没有指定何时发生分段错误,也没有指定应用程序在没有
onload
前缀的情况下是否可以正常工作,但我假设它可以。
我建议第一步是使用 Onload 运行一个已知的应用程序,以确认安装是否按预期工作。一个简单的方法是使用以下命令加速
ncat
实例(提供合适的端口号):
onload ncat -l <portnum>
如果无法启动,则表明 Onload 安装存在问题,我建议卸载并重新安装 Onload。
如果它确实有效,则表明应用程序中的某些内容导致 Onload 出现问题。在这种情况下,我建议使用“安全”配置文件运行,以消除可能存在的任何并发问题。为此,请在“onload”和“app-exe”之间添加“--profile=safe”:
onload --profile=safe <app-exe>
它设置 Onload 选项,为调用添加额外的检查,如果同时使用,这些调用可能会损坏数据,例如修改文件描述符。如果这有效,我建议检查可能同时发生的修改套接字的调用,并查看它们是否可以被删除。或者设置
EF_FDS_MT_SAFE=0
可以防止这些冲突。 Onload 用户指南提供了有关此选项的更多信息:https://docs.xilinx.com/r/en-US/ug1586-onload-user/EF_FDS_MT_SAFE