dpdk-19.11 i40e 驱动在 c236 机器上未使用 avx 收发包函数问题分析

i40e 驱动未使用 avx 收发包函数问题分析

问题描述

在 c236 机器下,dpdk-19.11 程序使用 x710 网卡时,默认配置下收包模式一直为 Vector SSE,不能使用 AVX2 收包函数。

复现示例

testpmd 命令行:

testpmd -c 0xf -- -i

testpmd 查看收包模式:

testpmd> show rxq info 0 0

********************* Infos for port 0 , RX queue 0  *********************
Mempool: mbuf_pool_socket_0
RX prefetch threshold: 0
RX host threshold: 0
RX writeback threshold: 0
RX free threshold: 32
RX drop packets: off
RX deferred start: off
RX scattered packets: off
Number of RXDs: 256
Burst mode: Vector SSE

信息收集

cpu 型号信息

processor       : 3
vendor_id       : GenuineIntel
cpu family      : 6
model           : 158
model name      : Intel(R) Core(TM) i5-7500 CPU @ 3.40GHz
stepping        : 9
microcode       : 0x5e
cpu MHz         : 3699.971
cache size      : 6144 KB
physical id     : 0
siblings        : 4
core id         : 3
cpu cores       : 4
apicid          : 6
initial apicid  : 6
fpu             : yes
fpu_exception   : yes
cpuid level     : 22
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe syscall nx pdpe1gb rdtscp lm constant_tsc art arch_perfmon pebs bts rep_good nopl xtopology nonstop_tsc cpuid aperfmperf pni pclmulqdq dtes64 monitor ds_cpl smx est tm2 ssse3 sdbg fma cx16 xtpr pdcm pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand lahf_lm abm 3dnowprefetch cpuid_fault epb invpcid_single pti fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm mpx rdseed adx smap clflushopt intel_pt xsaveopt xsavec xgetbv1 xsaves dtherm ida arat pln pts hwp hwp_notify hwp_act_window hwp_epp
bugs            : cpu_meltdown spectre_v1 spectre_v2 spec_store_bypass l1tf mds swapgs taa itlb_multihit srbds
bogomips        : 6799.81
clflush size    : 64
cache_alignment : 64
address sizes   : 39 bits physical, 48 bits virtual
power management:

网卡信息

01:00.0 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)
01:00.1 Ethernet controller: Intel Corporation Ethernet Controller X710 for 10GbE SFP+ (rev 02)

解决方案

testpmd 命令行:

testpmd -c 0xf -w 01:00.0,use-latest-supported-vec=1 -- -i

testpmd 查看收包模式:

testpmd> show rxq info 0 0

********************* Infos for port 0 , RX queue 0  *********************
Mempool: mbuf_pool_socket_0
RX prefetch threshold: 0
RX host threshold: 0
RX writeback threshold: 0
RX free threshold: 32
RX drop packets: off
RX deferred start: off
RX scattered packets: off
Number of RXDs: 256
Burst mode: Vector AVX2

源码分析

devargs 参数的解析过程

eal_parse_args 调用 eal_parse_common_option 函数解析 -w 参数,eal_parse_common_option 函数调用 eal_option_device_add 使用用户设置的参数创建一个 device_option 结构并拷贝参数字符串,然后将此结构链入到 devopt_list 中。

rte_eal_init 函数调用 eal_option_device_parse 函数解析 devopt 结构,此函数关键流程如下:

遍历 devopt_list 链表,解析 devopt 结构并调用 rte_devargs_add 生成一个 rte_devargs 结构并注册到 devargs_list 链表中。

devargs 参数在哪里被绑定到设备上?

rte_bus_scan 扫描并创建设备时,在每个 bus 实现的 scan 函数中遍历 devargs_list 匹配设备并解析、保存 devargs 到设备结构中。

pci 总线实现中,pci_scan 时调用 pci_name_set 函数完成上述工作,pci_name_set 调用 pci_devargs_lookup 遍历所有的 devargs 信息并使用 pci 设备号匹配,命中则将相关内容拷贝到 pci_device 设备的 devargs 字段中。

pci 设备驱动接口执行时通过访问 pci_device 设备的 devargs 字段就能够获取到某个接口上设置的 devargs 参数。

其它驱动是否有相同的行为?

ice 驱动:无

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值