dpdk如何禁用“ CRC剥离”,“标题拆分”,“ IP校验和卸载”和“巨型帧支持”

如何解决dpdk如何禁用“ CRC剥离”,“标题拆分”,“ IP校验和卸载”和“巨型帧支持”

在旧版dpdk中,结构rte_eth_rxmode具有这些成员。

struct rte_eth_rxmode {
    header_split   = 0,/**< Header Split disabled */
    hw_ip_checksum = 0,/**< IP checksum offload disabled */
    hw_vlan_filter = 0,/**< VLAN filtering disabled */
    jumbo_frame    = 0,/**< Jumbo Frame Support disabled */
    hw_strip_crc   = 0,/**< CRC stripped by hardware */
    ...
}

但是在更新为dpdk-stable-19.11.3之后,这些成员将被删除。根据{{​​3}},testpmd应用支持命令行选项,例如--disable-crc-strip,但它们不是EAL命令行选项。如何禁用dpdk-stable-19.11.3中上面列出的这五个选项?还是默认情况下禁用这些选项?如果是这样,我如何检查这些状态?

此外,结构txq_flags的成员变量rte_eth_txconf也从dpdk-stable-19.11.3中删除。如何在dpdk-stable-19.11.3中进行设置?

我很久没有使用dpdk了。它已经发生了很大的变化,我正在努力应对这些变化。有什么建议来应对这些变化吗?

解决方法

使用DPDK 19.11.3,可以通过任意编辑以编程方式启用所需的功能(crc-keep,jumbo,ipv4-cksum和标头拆分)

default configuration as

static struct rte_eth_conf port_conf = {
        .rxmode = {
                .max_rx_pkt_len = JUMBO_FRAME_MAX_SIZE,.split_hdr_size = 0,.offloads = DEV_RX_OFFLOAD_JUMBO_FRAME | DEV_RX_OFFLOAD_KEEP_CRC | DEV_RX_OFFLOAD_IPV4_CKSUM | DEV_RX_OFFLOAD_HEADER_SPLIT,},.txmode = {
                .mq_mode = ETH_MQ_TX_NONE,}
};

或通过以下方式获取和比较功能来修改port_init中的卸载功能

port_conf.rxmode.offloads |= DEV_RX_OFFLOAD_JUMBO_FRAME | DEV_RX_OFFLOAD_HEADER_SPLIT | DEV_RX_OFFLOAD_KEEP_CRC | DEV_RX_OFFLOAD_IPV4_CKSUM;

注意:少数NIC支持DEV_RX_OFFLOAD_HEADER_SPLIT的功能,因此很有可能在port_init中失败。使用http://doc.dpdk.org/guides/nics/overview.html作为卸载功能的通用指南。

使用https://doc.dpdk.org/guides/testpmd_app_ug/run_app.html#eal-command-line-options启用testpmd中的功能

  • --max-pkt-len=[size]-启用巨型
  • --disable-crc-strip-防止crc剥离
  • --enable-rx-cksum-启用硬件校验和(即使是IPv4校验和)

注意:关于DEV_RX_OFFLOAD_HEADER_SPLIT似乎没有添加到testpmd中,因为没有多少NIC PMD支持它。

如果NIC PMD不支持某些功能,则可能会出现诸如以下的错误消息

Ethdev port_id=0 requested Rx offloads 0x2000e doesn't match Rx offloads capabilities 0x92e6f in rte_eth_dev_configure()

为了获得更多描述,请运行--log-level=pmd,8

,

是的,在DPDK版本19.11中,使用unit64_t offloads中的单个成员字段struct rte_eth_rxmode启用了硬件卸载,这与旧版DPDK版本中的各个卸载参数不同。

另一方面,根据配置,19.11中的hardware offloads分为每个端口和每个队列卸载。例如,用户可以设置每个端口和每个队列的分流,可以使用rte_eth_dev_info_get()来获取设备支持的卸载。

如下所示,offloadsstruct rte_eth_rxmode中的struct rte_eth_rxconf字段分别用于设置每个端口和每个队列的卸载量。

struct rte_eth_rxmode {
...
/**
 * Per-port Rx offloads to be set using DEV_RX_OFFLOAD_* flags.
 * Only offloads set on rx_offload_capa field on rte_eth_dev_info
 * structure are allowed to be set.
 */
uint64_t offloads;
...
};

struct rte_eth_rxconf {
...
/**
 * Per-queue Rx offloads to be set using DEV_RX_OFFLOAD_* flags.
 * Only offloads set on rx_queue_offload_capa or rx_offload_capa
 * fields on rte_eth_dev_info structure are allowed to be set.
 */
uint64_t offloads;
...
};

注意:可使用此处定义的宏的DEV_RX_OFFLOAD_*标志-Rx offload capabilities of a device

启用具有设备支持的卸载功能

对于testpmd,您可以通过DEV_RX_OFFLOAD_*标志将卸载设置为位掩码,如下所示,前提是设备支持该功能,

--rx-offloads=0xXXXXXXXX: hexadecimal bitmask of RX queue offloads
--tx-offloads=0xXXXXXXXX: hexadecimal bitmask of TX queue offloads

我很久没有使用dpdk了。它已经发生了很大的变化,我正在努力应对这些变化。有什么建议来应对这些变化吗?

我建议您应该通过邮件列表(dev@dpdk.org)注册dpdk开发,以了解上游补丁/更新。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


依赖报错 idea导入项目后依赖报错,解决方案:https://blog.csdn.net/weixin_42420249/article/details/81191861 依赖版本报错:更换其他版本 无法下载依赖可参考:https://blog.csdn.net/weixin_42628809/a
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下 2021-12-03 13:33:33.927 ERROR 7228 [ main] o.s.b.d.LoggingFailureAnalysisReporter : *************************** APPL
错误1:gradle项目控制台输出为乱码 # 解决方案:https://blog.csdn.net/weixin_43501566/article/details/112482302 # 在gradle-wrapper.properties 添加以下内容 org.gradle.jvmargs=-Df
错误还原:在查询的过程中,传入的workType为0时,该条件不起作用 &lt;select id=&quot;xxx&quot;&gt; SELECT di.id, di.name, di.work_type, di.updated... &lt;where&gt; &lt;if test=&qu
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct redisServer’没有名为‘server_cpulist’的成员 redisSetCpuAffinity(server.server_cpulist); ^ server.c: 在函数‘hasActiveC
解决方案1 1、改项目中.idea/workspace.xml配置文件,增加dynamic.classpath参数 2、搜索PropertiesComponent,添加如下 &lt;property name=&quot;dynamic.classpath&quot; value=&quot;tru
删除根组件app.vue中的默认代码后报错:Module Error (from ./node_modules/eslint-loader/index.js): 解决方案:关闭ESlint代码检测,在项目根目录创建vue.config.js,在文件中添加 module.exports = { lin
查看spark默认的python版本 [root@master day27]# pyspark /home/software/spark-2.3.4-bin-hadoop2.7/conf/spark-env.sh: line 2: /usr/local/hadoop/bin/hadoop: No s
使用本地python环境可以成功执行 import pandas as pd import matplotlib.pyplot as plt # 设置字体 plt.rcParams[&#39;font.sans-serif&#39;] = [&#39;SimHei&#39;] # 能正确显示负号 p
错误1:Request method ‘DELETE‘ not supported 错误还原:controller层有一个接口,访问该接口时报错:Request method ‘DELETE‘ not supported 错误原因:没有接收到前端传入的参数,修改为如下 参考 错误2:cannot r
错误1:启动docker镜像时报错:Error response from daemon: driver failed programming external connectivity on endpoint quirky_allen 解决方法:重启docker -&gt; systemctl r
错误1:private field ‘xxx‘ is never assigned 按Altʾnter快捷键,选择第2项 参考:https://blog.csdn.net/shi_hong_fei_hei/article/details/88814070 错误2:启动时报错,不能找到主启动类 #
报错如下,通过源不能下载,最后警告pip需升级版本 Requirement already satisfied: pip in c:\users\ychen\appdata\local\programs\python\python310\lib\site-packages (22.0.4) Coll
错误1:maven打包报错 错误还原:使用maven打包项目时报错如下 [ERROR] Failed to execute goal org.apache.maven.plugins:maven-resources-plugin:3.2.0:resources (default-resources)
错误1:服务调用时报错 服务消费者模块assess通过openFeign调用服务提供者模块hires 如下为服务提供者模块hires的控制层接口 @RestController @RequestMapping(&quot;/hires&quot;) public class FeignControl
错误1:运行项目后报如下错误 解决方案 报错2:Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.1:compile (default-compile) on project sb 解决方案:在pom.
参考 错误原因 过滤器或拦截器在生效时,redisTemplate还没有注入 解决方案:在注入容器时就生效 @Component //项目运行时就注入Spring容器 public class RedisBean { @Resource private RedisTemplate&lt;String
使用vite构建项目报错 C:\Users\ychen\work&gt;npm init @vitejs/app @vitejs/create-app is deprecated, use npm init vite instead C:\Users\ychen\AppData\Local\npm-