OpenOnload启动应用触发Segmentation fault,寻求排查思路
OpenOnload启动应用触发Segmentation Fault排查建议
问题背景
已按官方文档从源码完成OpenOnload全局安装,版本为8.1.1.17,相关内核模块均已加载:
$ 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
$ 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 <app-exe>启动应用时,出现错误:
Segmentation fault (core dumped)
服务器已挂载SF网卡,需定位内核旁路功能的故障点。
排查步骤
分析Core Dump文件定位崩溃点
先开启core dump功能:ulimit -c unlimited重新运行
onload <app-exe>生成core dump文件,用gdb <app-exe> core加载文件后执行bt命令,查看崩溃栈信息,确认崩溃发生在OpenOnload库还是应用自身代码中。验证SF网卡与OpenOnload的绑定状态
检查网卡是否被正确识别并绑定:onload_tool status查看输出中SF网卡的状态是否为
active或已分配给Onload。若未绑定,手动执行绑定操作(替换<interface>为实际网卡名):onload_tool unbind --all onload_tool bind --interface <interface>检查应用与OpenOnload的兼容性
- 确认应用是否为静态编译:静态编译的应用可能无法正确加载Onload动态库,尝试使用动态编译版本测试。
- 排查应用是否依赖冲突的网络库:如其他DPDK库、自定义网络栈,临时禁用这些依赖后重新测试。
验证OpenOnload安装完整性与权限
- 检查Onload库文件的权限与完整性:
确保应用运行用户拥有读取权限,且库文件无损坏。ls -l /usr/lib/libonload.so - 重新执行安装后配置脚本:
确认脚本无报错,/usr/local/onload/sbin/onload_configLD_PRELOAD等环境变量已正确设置。
- 检查Onload库文件的权限与完整性:
核对内核版本与模块兼容性
查看当前内核版本:uname -r对比OpenOnload 8.1.1.17官方文档的支持内核列表,若版本不匹配,需调整内核版本或更换对应版本的OpenOnload。
查看系统与Onload日志
检查内核日志中的相关报错:dmesg | grep -E 'onload|sfc'查看Onload用户态日志(通常位于
/var/log/onload/目录),寻找崩溃前后的异常信息。
内容的提问来源于stack exchange,提问作者berkeyvx
相关产品推荐
相关产品推荐

