解决dpdk抓包时出现imiss的问题

经现场运维反馈,公司的项目程序日志中存在imiss丢包的情况
一般来说imiss增加,是因为dpdk抓包cpu的抓包能力弱,导致丢包

server代码原来的处理流程是:
抓包->解析数据包的五元组->以一定规则进行hash->hash值投递到不同的slot中

server的抓包cpu有一部分性能消耗在了解析数据包的过程以及hash计算上,从而导致imiss的产生

解决办法是采用dpdk 的rss算法
在DPDK中通过设置rte_eth_conf中的mq_mode字段来开启RSS功能, rx_mode.mq_mode = ETH_MQ_RX_RSS。

当RSS功能开启后,报文对应的rte_pktmbuf中就会存有RSS计算的hash值,可以通过pktmbuf.hash.rss来访问。 这个值可以直接用在后续报文处理过程中而不需要重新计算hash值,如快速转发,标识报文流等。
RETA是运行时可配置的,这样应用程序就可以动态改变CPU对应的接收队列,从而动态调节报文分发。 具体通过PMD模块的驱动进行配置,例如ixgbe_dev_rss_reta_update和ixgbe_dev_rss_reta_query。

要有两个保证:
1.分流是否均匀?
2.对称rss设置后,同一个会话的数据计算的hash值是否相同?

目前测试对称rss是有问题的.

相关文章
相关标签/搜索