运行OpenNetVM的NF Manager时报错如下:Ethdev port_id=0 requested Rx offloads 0xe doesn't match Rx offloads capabilities 0x800 in rte_eth_dev_configure()

看错误描述应该是DPDK在初始化配置网卡的时候出了问题,我的网卡是NetXtreme II BCM57810 10 Gigabit Ethernet 168e,DPDK版本20.05(OpenNetVM自带)

百度得到的结果:DPDK在虚拟机上运行时,报错: Ethdev port_id=0 requested Rx offloads 0xe doesn't match Rx offloads capabilities 0x82a1d in rte_eth_dev_configure() - 代码笔记~ - 博客园这个错误是因为RX_OFFLOAD与TX_OFFLOAD可能不支持IPV4_CKSUM的检验 解决办法: 1,在配置中注释掉 DEV_RX_OFFLOAD_CHECKSUM 2,在代码中关闭https://www.cnblogs.com/lyt-666/p/13410548.html

这个宏的位置在${RTE_SDK}/x86_64-native-linuxapp-gcc/include/rte_ethdev.h ,内容为:

#define DEV_RX_OFFLOAD_CHECKSUM (DEV_RX_OFFLOAD_IPV4_CKSUM | \DEV_RX_OFFLOAD_UDP_CKSUM | \DEV_RX_OFFLOAD_TCP_CKSUM)

其中

#define DEV_RX_OFFLOAD_IPV4_CKSUM  0x00000002
#define DEV_RX_OFFLOAD_UDP_CKSUM   0x00000004
#define DEV_RX_OFFLOAD_TCP_CKSUM   0x00000008

这个宏的主要作用就是使能网卡的硬件offload功能,具体说就是就是将报文的ip,tcp, udp的校验和计算交给网卡计算,节省cpu开销,从而提高吞吐量的手段

再进一步定位rte_eth_dev_configure里报错的这段代码,可以看到就是把dev_conf里的rx的offloads配置和dev_info里的网卡offloads能力做了一个比较,如果值不相等就报错

    /* Any requested offloading must be within its device capabilities */if ((dev_conf->rxmode.offloads & dev_info.rx_offload_capa) !=dev_conf->rxmode.offloads) {RTE_ETHDEV_LOG(ERR,"Ethdev port_id=%u requested Rx offloads 0x%"PRIx64" doesn't match Rx offloads ""capabilities 0x%"PRIx64" in %s()\n",port_id, dev_conf->rxmode.offloads,dev_info.rx_offload_capa,__func__);ret = -EINVAL;goto rollback;}

再看onvm_init.c里的实际配置

static const struct rte_eth_conf port_conf = {.rxmode = {.mq_mode = ETH_MQ_RX_RSS,.max_rx_pkt_len = RTE_ETHER_MAX_LEN,.split_hdr_size = 0,.offloads = DEV_RX_OFFLOAD_CHECKSUM,},.rx_adv_conf = {.rss_conf = {.rss_key = rss_symmetric_key, .rss_hf = ETH_RSS_IP | ETH_RSS_UDP | ETH_RSS_TCP | ETH_RSS_L2_PAYLOAD,},},.txmode = {.mq_mode = ETH_MQ_TX_NONE,.offloads = (DEV_TX_OFFLOAD_IPV4_CKSUM | DEV_TX_OFFLOAD_UDP_CKSUM | DEV_TX_OFFLOAD_TCP_CKSUM)},
};

onvm配置的rxmode.offloads就是宏定义的DEV_RX_OFFLOAD_CHECKSUM,值为0xe

而BCM57810网卡的参数为0x800,是一个关于支持巨型帧的宏

#define DEV_RX_OFFLOAD_JUMBO_FRAME      0x00000800

BCM57810网卡使用的驱动是bnx2x,在dpdk的bnx2x_ethdev.c文件里 可以找到dev_info实际的设置

static int
bnx2x_dev_infos_get(struct rte_eth_dev *dev, struct rte_eth_dev_info *dev_info)
{struct bnx2x_softc *sc = dev->data->dev_private;dev_info->max_rx_queues  = sc->max_rx_queues;dev_info->max_tx_queues  = sc->max_tx_queues;dev_info->min_rx_bufsize = BNX2X_MIN_RX_BUF_SIZE;dev_info->max_rx_pktlen  = BNX2X_MAX_RX_PKT_LEN;dev_info->max_mac_addrs  = BNX2X_MAX_MAC_ADDRS;dev_info->speed_capa = ETH_LINK_SPEED_10G | ETH_LINK_SPEED_20G;dev_info->rx_offload_capa = DEV_RX_OFFLOAD_JUMBO_FRAME;dev_info->rx_desc_lim.nb_max = MAX_RX_AVAIL;dev_info->rx_desc_lim.nb_min = MIN_RX_SIZE_NONTPA;dev_info->rx_desc_lim.nb_mtu_seg_max = 1;dev_info->tx_desc_lim.nb_max = MAX_TX_AVAIL;return 0;
}

确实是只有一个dev_info->rx_offload_capa = DEV_RX_OFFLOAD_JUMBO_FRAME;

所以看起来是dpdk写的驱动里不支持onvm写的关于checksum的offloads功能,查下官方文档3. BNX2X Poll Mode Driver — dpdk 0.11 documentationhttps://dpdk-docs.readthedocs.io/en/latest/nics/bnx2x.html

3.1. Supported Features

BNX2X PMD has support for:

  • Base L2 features
  • Unicast/multicast filtering
  • Promiscuous mode
  • Port hardware statistics
  • SR-IOV VF

3.2. Non-supported Features

The features not yet supported include:

  • TSS (Transmit Side Scaling)
  • RSS (Receive Side Scaling)
  • LRO/TSO offload
  • Checksum offload
  • SR-IOV PF
  • Rx TX scatter gather

RSS、 Checksum offload这些都没支持

于是修改onvm_init.c里的网卡配置,使其与BNX2X驱动支持的功能匹配,修改代码如下

static const struct rte_eth_conf port_conf = {.rxmode = {.mq_mode = ETH_MQ_RX_RSS,.max_rx_pkt_len = RTE_ETHER_MAX_LEN,.split_hdr_size = 0,//.offloads = DEV_RX_OFFLOAD_CHECKSUM,.offloads = 0x800,},.rx_adv_conf = {.rss_conf = {.rss_key = rss_symmetric_key, .rss_hf = ETH_RSS_IP | ETH_RSS_UDP | ETH_RSS_TCP | ETH_RSS_L2_PAYLOAD,},},.txmode = {.mq_mode = ETH_MQ_TX_NONE,//.offloads = (DEV_TX_OFFLOAD_IPV4_CKSUM | DEV_TX_OFFLOAD_UDP_CKSUM | DEV_TX_OFFLOAD_TCP_CKSUM)},.offloads = 0x0},
};

重新编译onvm,这次可以跑起来了,但是RSS,checksum offloads这些功能显然都用不了了,所以结论是条件允许的话最好还是使用像i40e这些驱动支持的网卡运行onvm。。。

DPDK报错:Ethdev port_id=0 requested Rx offloads 0xe doesn‘t match Rx offloads capabilities 0x800相关推荐

  1. Maven 新版本 3.8.1 打包报错 maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories

    Maven 新版本 3.8.1 打包报错 maven-default-http-blocker (http://0.0.0.0/): Blocked mirror for repositories [ ...

  2. easy-mock本地部署成功,访问报错:EADDRNOTAVAIL 0.0.0.0:7300 解决方案

    easy-mock本地部署成功,访问报错:EADDRNOTAVAIL 0.0.0.0:7300 解决方案 参考文章: (1)easy-mock本地部署成功,访问报错:EADDRNOTAVAIL 0.0 ...

  3. clion pycharm 报错 bash: line 0: cd: /xxx: No such file or directory

    现象 : clion 报错 bash: line 0: cd: /tmp/src/cmake-build-debug: No such file or directory pycharm 报错 bas ...

  4. nginx 报错 99: Cannot assign requested address

    为什么80%的码农都做不了架构师?>>>    nginx 报错 99: Cannot assign requested address net.ipv4.ip_local_port ...

  5. python测试代码报错:Ran 0 test in 0.00s

    最近在学习selenium时,使用unittest框架进行代码测试时,发现报以下错误: Ran 0 test in 0.00sOK 原因: unittest提供了全局的main()方法,使得一个单元测 ...

  6. 【Lumerical FDTD】关于报错DESKTOP-XXXXXXX(process 0): Not enough HPC Parallel licenses 6/4.的解决方案

    这个问题很多人都遇到过,但翻遍国内的网站发现似乎也没有很好的解决方案,故笔者在科学上网后找到了解决方法以及官方回答. 先简单说一下,这个问题可以通过在Resources中调整进程(process)和线 ...

  7. 报错expect ‘:‘ at 0, actual =

    jsonObject中获取的数组转化JSONArray 报错expect ':' at 0, actual = 问题代码 JSONArray dataArray = JSONArray.parseAr ...

  8. [Flink] Flink运行报错The number of requested virtual cores for application master

    文章目录 1.概述 2.环境如下 1.概述 运行一个flink任务,启动的时候报错 flink提交到yarn 环境报错 IllegalConfigurationException: The numbe ...

  9. 【错误记录】Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( pip 21.0 will drop support for Python 2.7 in January 20 )

    文章目录 一.报错信息 二.解决方案 一.报错信息 在 [错误记录]Mac 中 IntelliJ IDEA 运行 Python 程序报错 ( No module named 'threadpool' ...

最新文章

  1. Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)
  2. 把一个人的特点写具体作文_部编版五年级下册语文习作把一个人的特点写具体教案课件+范文...
  3. linux nc 详解
  4. php7.2 swoole_loader,用什么方法可以让swoolec-loader支持php7.3?
  5. boost::multi_array模块测试各种构造函数选项
  6. html美化计算机,职称计算机Dreamwaver教程:CSS样式表滤镜
  7. CSS基础(part8)--文本外观属性
  8. U盘的RUNAUTO..文件的删除
  9. linux部署node web,nodejs怎么部署到Linux上?
  10. PyTorch系列入门到精通——张量操作线性回归
  11. 虚拟机更新为阿里数据源
  12. WebRTC NAT穿透服务器 coturn服务搭建
  13. ResNet和BN层
  14. python图像边缘检测_Python进行图片水平边缘检测prewitt算子法
  15. excel表格快捷键
  16. 面经自己汇总(三维视觉算法机器学习深度学习)——持续更新
  17. ubuntu 更换系统源和pip源
  18. 点线特征融合求取相机位姿
  19. python 小括号 运算_浅析python 中大括号中括号小括号的区分
  20. 【论文极速看】ERNIE-VIL 一种基于场景图解析的多模态表征方法

热门文章

  1. BootStrap 导航栏实现下滑消失,上滑出现
  2. 选购移动硬盘注意事项
  3. 如何写一份详细的创业计划书?
  4. colorkey唇釉是否安全_colorkey唇釉安全吗-colorkey唇釉真假辨别
  5. 九轴传感器MPU9250数据读取磁力计
  6. 尖刀出鞘的display常用属性及css盒模型深入研究
  7. python函数高级话题
  8. Windows下Nexus 5的Android 5.0以上版本官方ROM的刷机教程
  9. 苹果7手机通讯录删除了还能够找回来么
  10. HTML首字下沉的编码,CSS_有关首行首字下沉的实现原理及代码,下面是两个个小技巧,一个是 - phpStudy...