Hello, Following from a previous thread, I took up Bruce Richardson's advice to modify the RSS redirection table(RETA) to exclude entries pointing to a specific queue:
For e.g, this is the RETA table before any modifications are done: *Default *Reta table: 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 0 0 0 0 I have initialized 3 queues on this NIC(82599-Niantic) and as can be seen, NIC will forward traffic to queue's 1 & 2. Now the reta table is modified so that everything goes to queue 0 *Modified* Reta table: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 However despite this, RSS is loadbalancing packets on queues 1 & 2. The following is a snippet of my code: /* * Rewrite the RETA(Redirection Table) for RSS * We want all traffic to be RX'd on queue 0 * and only filtered traffic to be mapped to specific * queues, with one per filter for us to report * statistics */ struct rte_eth_rss_reta port_reta_conf; memset(&port_reta_conf,0,sizeof(struct rte_eth_rss_reta)); port_reta_conf.mask_lo = 0xffffffffffffffff; port_reta_conf.mask_hi = 0xfffffffffffffff; int reta_ret = 0; for (int rc = 0; rc < ETH_RSS_RETA_NUM_ENTRIES; rc++) { port_reta_conf.reta[rc] = 0x00; } reta_ret = rte_eth_dev_rss_reta_update(port, &port_reta_conf); printf("Reta return code: %d\n", reta_ret); I have tried to restart the port, start/stop, linkup/linkdown but the effect is the same: Reta table shows that it has all been zero'd out however packets are still send to all configured queues. I am using DPDK v1.7.0 Have others come across something similar? Any clues would be much appreciated :) --Kam