1. 程式人生 > 其它 >[DPDK] 多佇列同時從網絡卡接收資料

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

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