1、问题背景
测试在验证vpp多队列模式时,发现sctp报文的在X710网卡上不生效。
在vpp使用命令行 show hardware-interfaces 查询网卡相关功能(offload、rx tx队列等)使能情况,发现支持ipv4-sctp但是未开启。具体如下:
rss avail 表示当前网卡所支持的pctype类型。
rss active :表示当前已生效的pctype类型。
下图是X710网卡驱动pctype类型及hash输入设置
2、梳理了一下rss设置流程
1、vpp代码设置代码:
在代码1908/src/plugins/dpdk/device/init.c :394行。多队列模式下是默认开启rss功能的。但是rss_hf只使能了IP、UDP、TCP;未使能SCTP有没有设置sctp报文。
从代码流程分析是下面标红处未设置SCTP,但是未经过测试验证,待确认:
我们通过vpp配置文件/etc/vpp/startup.conf修改rss支持 sctp报文识别,并查询rss active情况:
下图是网卡初始化流程中设置rss函数调用流程。
dpdk_process()->dpdk_lib_init()->dpdk_device_setup()->dpdk_device_start()
在X710网卡会调用到函数i40e_dev_start接口。
2、dpdk 相关处理
#调用流程如下完成rss配置设置
i40e_dev_start()->i40e_dev_rxtx_init()->i40e_dev_rx_init()
->i40e_pf_config_mq_rx()->i40e_pf_config_rss()
#最终完成RSS的设置工作。rss_conf = pf->dev_data->dev_conf.rx_adv_conf.rss_conf;
return i40e_hw_rss_hash_set(pf, &rss_conf);
另外dpdk还提供了对外接口进行rss设置,如下:
rte_eth_dev_rss_hash_update() 通过调用响应网卡对应的PMD驱动提供的ops操作函数
dev->dev_ops->rss_hash_update来完成设置。i40e_dev_rss_hash_update() X710对应网卡RSS对外提供的接口函数
对应文件在drivers/net/i40e/i40e_ethdev.c :501 行查询 .rss_hash_update挂接的函数。
3、RSS 相关知识
rss hash
。填充到 struct rte_mbuf 的 hash.rss字段中。RSS output index
。rss hash
和 RSS output index
设置为 0。参考文章:https://blog.csdn.net/yk_wing4/article/details/101285890
本文分享自 DPDK VPP源码分析 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!