测来测去19:Enable DPDK i40e vector rx function

Vector Rx Function

在DPDK i40e网卡的驱动中提供有利用向量指令收包的方法,在一般场景下可以大幅提升性能。当针对基于DPDK的应用做性能诊断时可以用perf top命令直观观察有没有i40e_recv_pkts_vec这个方法出现,如果没有则可以判定当前的应用没有使用向量指令集优化过的收/发包方法。

i40e_set_rx_function

一般来说,DPDK和编译器会根据当前编译机器(或者指定的交叉编译CPU型号)对向量指令的支持情况来决定是否使用向量化指令。当支持向量指令时优先采用向量指令。不过在一些客户那边也遇到过编译环境支持向量化指令,但应用实际跑起来时却没有采用的情况。对于这种问题的根因需要看一下i40e驱动中决定采用哪种收发方法的逻辑究竟是怎样的。

i40e_set_rx_function方法在./drivers/net/i40e/i40e_rxtx.c文件中,其中会调用i40e_rx_vec_dev_conf_condition_check()子方法来检查是否采用vector方法。

i40e_rx_vec_dev_conf_condition_check()方法中又包了一层i40e_rx_vec_dev_conf_condition_check_default()在这个方法里有详细的配置检查逻辑,截取一部分:

1
2
3
4
5
6
7
8
9
10
11
/* no fdir support */
if (fconf->mode != RTE_FDIR_MODE_NONE)
return -1;

/* no header split support */
if (rxmode->offloads & DEV_RX_OFFLOAD_HEADER_SPLIT)
return -1;

/* no QinQ support */
if (rxmode->offloads & DEV_RX_OFFLOAD_VLAN_EXTEND)
return -1;

我当时遇到的情况是i40e网卡打开了fdir的支持,这样在第一个if判断时方法返回-1,会导致外层逻辑放弃使用向量化收包方法。其他原因都可以使用-O0 -g的方式用gdb调试出来。

这也可以看出当需要使用网卡的fdir功能和另外两个hardware offloading功能时,是不能使用向量化收包方法的。

当然,除此之外还有另外一些因素会影响DPDK最终的选择,例如config文件夹下面那个common_base中的一些配置,但这些配置一般采用默认即可。

© 2020 DecodeZ All Rights Reserved. 本站访客数人次 本站总访问量
Theme by hiero