intel网卡rss实现逻辑








解释:用数据包 sip,dip 和 hash_key 做为hash因子, 通过hashcompute进行计算得到hashhash值写到mbufhash.rss字段,同时hash值的低7位作为索引指向reta表的某个entryreta表的entry中存放的就是数据包最终发送的队列


•由图可知,决定数据包分到哪个队列的因素有下面几个:

a. 数据包的sip, dip

b. hash_key

c. hash算法

d.  redirect table



•我们可以控制的是哪几个因素呢?

a. 数据包都是未知的,所以sip, dip是不可控制的;

b. hash_key目前已知的有两种:对称hash_key和非对称hash_key

c. hash算法是fm10k硬件实现的,固定的。算法伪代码如下:


Since the RSS algorithm is implemented inrecent NIC hardware for fast processing, modification of the RSS algorithm tosupport symmetric mapping is difficult

d. reta(redirect table)表是fm10k寄存器,可通过修改寄存器的值达到修改队列的目的。可调用下面api进行修改:

   fm10k_reta_update(struct rte_eth_dev *dev, struct rte_eth_rss_reta_entry64 *reta_conf, uint16_t reta_size)

•综上可知, 在对称hash情况下,想要控制数据包分到哪个队列,最好的办法是修改reta表内容。

•参考链接: http://www.ndsl.kaist.edu/~ kyoungsoo/papers/TR-symRSS.pdf
• http://galsagie.github.io/2015/02/26/dpdk-tips-1 /

你可能感兴趣的:(intel网卡rss实现逻辑)