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

即只開啓你網卡支持的那些選項,這樣就不會報錯了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章