DPDK系列第九篇 SRVIO VF网卡RESET 问题 彻底解决 及 DPDK中断流程整理

系列文章

文章有点多了,后期我们系列文章只贴最近三篇,有需要的可以往回找

DPDK系列第六篇:IOVA前期知识 DMA、IOMMU概念及关联-CSDN博客

DPDK系列第七篇:IOVA介绍及实际使用-CSDN博客

DPDK系列第八篇:深入剖析DPDK中 IGB_UIO的使用-CSDN博客

问题现象

        项目部署在kvm虚拟化环境中, 宿主机物理网卡为intel  X710,通过SRVIO 方式,创建多个 VF 网卡供 不同虚机接受同样的流量进行不同的业务处理。问题出现在其中的一个虚拟机中,该虚机使用DPDK 做流量处理,虚拟机中VF网卡 经常性的出现 链路启动失败或者 启动了但是不接受流量的问题,查看虚机及宿主机的系统日志,看到直接原因都是VF 接受到PF的RESET 了,但是DPDK 本身没有做RESET恢复机制,导致VF 和PF 断联了。本文将提供一种在 项目中使用的恢复机制,不管是什么原因造成的RESET,都可以自动进行接口恢复。

问题描述

        如下几个图是从 710网卡 datasheet 手册中截取的,从描述及列表中可以看到有很多种情况会造成PF触发VF 的RESET, 网络上能搜到的有错误包这种造成reset 的解决办法,解决办法就是丢弃错包,我们在实际项目中碰到的reset 原因就比较奇葩了, 不在这些列表里,目前出现过两种,一种是 宿主机 i40e (710网卡的驱动)版本 和 dpdk 版本不匹配,另一种是网卡固件版本比较高, 支持LLDP ,导致系统启动后再插网线会造成 PF 整个的reset,进而触发VF的reset。

        其中定位版本不匹配时造成VF reset 问题时,是在DPDK的手册找到的灵感,我们使用的DPDK19.11 版本,官方推荐内核i40e 驱动为2.9.21 ,升级完后确实就好了。

        LLDP造成的reset纯粹就是实验出来的,将LLDP特性关闭后就不会触发reset了。

        但是以上方案包括网络上针对错包的解决办法都是碰到一种解决一种,在项目长期运行中,让人很没有安全感,所以特别开发了一段代码,用于VF 被 reset 时,能够自动进行网卡恢复。

问题分析及解决

        如下使用流程图整理了中断的初始化、注册及 真正解决问题实际使用的 流程,大家从该流程中不仅可以看到解决该问题的方案,还可以 跟着梳理明白 DPDK 中断的 流程,每一个关键点都增加了注释 说明,就不在展开文字描述了。

        有两个特别需要关注的点提及下:

        1)不要在中断处理函数中直接执行reset

        2)dpdk 官方手册也有 reset 测试讲解 (stop、reset、start 流程 184. VF PF Reset Tests — DPDK Test Plans documentation),但是实际测试下来,并不能生效。本文提供了一种更彻底的解决方案,直接从总线上 remove 并重新probe,多种场景测试,使用无误。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值