[DPDK] 多队列同时从网卡接收数据
在DPDK中,如何让多个核/多个接收队列同时从一个网卡接收数据呢?
其实很简单,在port_conf里开启一个mq_mode
选项就行了。
struct rte_eth_conf port_conf_default = {
.rxmode = {
.mq_mode = ETH_MQ_RX_RSS,
},
.rx_adv_conf = {
.rss_conf = {
.rss_key = NULL,
.rss_hf = ETH_RSS_PROTO_MASK,
},
},
这里选择的RSS模式,是将收到的包根据hash结果分发到不同的队列上。
内层选项的rss_hf
的作用是选择对包的那些字段进行hash,比如可以对TCP包头进行hash。ETH_RSS_PROTO_MASK
的意思是对(几乎)所有字段进行hash。
但直接使用这个选项去配置网卡很大概率会报错:
Ethdev port_id=0 invalid rss_hf: 0x3ffffc, valid value: 0x38d34
意思是你当前的网卡不支持ETH_PROTO_MASK
的所有选项,所以你需要进行一点修改:
local_port_conf.rx_adv_conf.rss_conf.rss_hf &= dev_info.flow_type_rss_offloads;
即只开启你网卡支持的那些选项,这样就不会报错了。
标签:DPDK,网卡,conf,ETH,接收数据,port,rss From: https://www.cnblogs.com/CQzhangyu/p/16944884.html