DPDK报错:Ethdev port_id=0 requested Rx offloads 0xe doesn‘t match Rx offloads capabilities 0x800
运行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相关推荐
- 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 [ ...
- easy-mock本地部署成功,访问报错:EADDRNOTAVAIL 0.0.0.0:7300 解决方案
easy-mock本地部署成功,访问报错:EADDRNOTAVAIL 0.0.0.0:7300 解决方案 参考文章: (1)easy-mock本地部署成功,访问报错:EADDRNOTAVAIL 0.0 ...
- 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 ...
- nginx 报错 99: Cannot assign requested address
为什么80%的码农都做不了架构师?>>> nginx 报错 99: Cannot assign requested address net.ipv4.ip_local_port ...
- python测试代码报错:Ran 0 test in 0.00s
最近在学习selenium时,使用unittest框架进行代码测试时,发现报以下错误: Ran 0 test in 0.00sOK 原因: unittest提供了全局的main()方法,使得一个单元测 ...
- 【Lumerical FDTD】关于报错DESKTOP-XXXXXXX(process 0): Not enough HPC Parallel licenses 6/4.的解决方案
这个问题很多人都遇到过,但翻遍国内的网站发现似乎也没有很好的解决方案,故笔者在科学上网后找到了解决方法以及官方回答. 先简单说一下,这个问题可以通过在Resources中调整进程(process)和线 ...
- 报错expect ‘:‘ at 0, actual =
jsonObject中获取的数组转化JSONArray 报错expect ':' at 0, actual = 问题代码 JSONArray dataArray = JSONArray.parseAr ...
- [Flink] Flink运行报错The number of requested virtual cores for application master
文章目录 1.概述 2.环境如下 1.概述 运行一个flink任务,启动的时候报错 flink提交到yarn 环境报错 IllegalConfigurationException: The numbe ...
- 【错误记录】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' ...
最新文章
- Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)
- 把一个人的特点写具体作文_部编版五年级下册语文习作把一个人的特点写具体教案课件+范文...
- linux nc 详解
- php7.2 swoole_loader,用什么方法可以让swoolec-loader支持php7.3?
- boost::multi_array模块测试各种构造函数选项
- html美化计算机,职称计算机Dreamwaver教程:CSS样式表滤镜
- CSS基础(part8)--文本外观属性
- U盘的RUNAUTO..文件的删除
- linux部署node web,nodejs怎么部署到Linux上?
- PyTorch系列入门到精通——张量操作线性回归
- 虚拟机更新为阿里数据源
- WebRTC NAT穿透服务器 coturn服务搭建
- ResNet和BN层
- python图像边缘检测_Python进行图片水平边缘检测prewitt算子法
- excel表格快捷键
- 面经自己汇总(三维视觉算法机器学习深度学习)——持续更新
- ubuntu 更换系统源和pip源
- 点线特征融合求取相机位姿
- python 小括号 运算_浅析python 中大括号中括号小括号的区分
- 【论文极速看】ERNIE-VIL 一种基于场景图解析的多模态表征方法
热门文章
- BootStrap 导航栏实现下滑消失,上滑出现
- 选购移动硬盘注意事项
- 如何写一份详细的创业计划书?
- colorkey唇釉是否安全_colorkey唇釉安全吗-colorkey唇釉真假辨别
- 九轴传感器MPU9250数据读取磁力计
- 尖刀出鞘的display常用属性及css盒模型深入研究
- python函数高级话题
- Windows下Nexus 5的Android 5.0以上版本官方ROM的刷机教程
- 苹果7手机通讯录删除了还能够找回来么
- HTML首字下沉的编码,CSS_有关首行首字下沉的实现原理及代码,下面是两个个小技巧,一个是 - phpStudy...