[DPDK] 多队列同时从网卡接收数据

[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;

即只开启你网卡支持的那些选项,这样就不会报错了。

posted @ 2022-12-02 16:38  CQzhangyu  阅读(827)  评论(0编辑  收藏  举报